チャート変数とは
チャート変数とは、システムが自動的に取り扱う変数のことで、チャートの情報などが格納されます。
そのため、特に宣言しなくても使える変数が、チャート変数と呼ばれます。
逆に言えば、チャート変数に何かを代入することはできませんので、ご注意ください。
チャート変数と似た変数で、システム変数という変数があります。
こちらの記事が参考になりますので、ご一読ください。
チャート変数
変数 | 説明 |
Digits | 現在のチャートの価格の小数点以下の桁数 |
Point | 現在のチャートの価格の小数点値 |
Ask | 現在のチャートの買値 |
Bid | 現在のチャートの売値 |
Bars | 現在のチャートのロウソク足の数 |
Close[] | 各ロウソク足の終値の配列 |
High[] | 各ロウソク足の高値の配列 |
Low[] | 各ロウソク足の底値の配列 |
Open[] | 各ロウソク足の始値の配列 |
Time[] | 各ロウソク足の時間の配列 |
Volume[] | 各ロウソク足の出来高の配列 |
チャート変数の使い方
チャート変数を使うときは、他の変数や配列と同じように使います。
例えば、以下のようなプログラムです。
void OnInit(){
//配列の0番目(現在のロウソク足)を指定
Print("買値 = ",DoubleToStr( Ask , Digits ));
Print("売値 = ",DoubleToStr( Bid , Digits ));
Print("価格の小数点以下桁数 = ",Digits);
Print("価格の小数点値 = ",DoubleToStr(Point , Digits ));
Print("チャートのバー数 = ",Bars);
Print("始値 = ",DoubleToStr( Open[0] , Digits ));
Print("終値 = ",DoubleToStr( Close[0] , Digits ));
Print("高値 = ",DoubleToStr( High[0] , Digits ));
Print("安値 = ",DoubleToStr( Low[0] , Digits ));
Print("バーの時間 = ",TimeToStr(Time[0]));
Print("出来高 = ",Volume[0]);
}
上記のように記述することで、以下のような出力を得ることができます。
買値 = 1.38473
売値 = 1.38455
価格の小数点以下桁数= 5
価格の小数点値 = 0.00001
チャートのバー数 = 1492
始値 = 1.38450
終値 = 1.38444
高値 = 1.38463
安値 = 1.38434
バーの時間 = 2015.04.17 07:25
出来高 = 179
チャート変数(配列)の考え方
チャート変数には、配列を取り扱っているものがあります。
Close[] や High[] などです。
これらの配列の考え方ですが、少しクセがあり、難しいので補足します。
ここでは、Close[] を例にとって考えていきます。
いきなりですが、以下のプログラムを見てください。
double close0 = Close[0]; //現在のロウソク足の終値
double close1 = Close[1]; //1本前のロウソク足の終値
double close2 = Close[2]; //2本前のロウソク足の終値
上記のようになっております。
Close[0]には現在のロウソク足の終値が格納されており、Close[1],Close[2]と数値が上がるごとに、過去のロウソク足の終値になります。
なので、Close[10]と書けば10本前のロウソク足の終値を取得することができるのです。
それでは、ロウソク足が更新された「瞬間」を考えてみましょう。
double close0 = Close[0]; //現在の価格
double close1 = Close[1]; //Close[0]だった価格
double close2 = Close[2]; //Close[1]だった価格
このように、全ての配列が更新され、1段階過去の終値になります。
そのため、Close[0]だった価格はClose[1]に格納され、Close[1]だった価格はClose[2]に格納されます。
ロウソク足が更新される毎に、1段階過去にズレるので、プログラミングをするときは注意しましょう。
ただ、このようになっているのにはメリットがあります。
それは、0番目は必ず最新のロウソク足の価格になり、1番目は必ず1本前のロウソク足の価格になるということです。
そのため、自動売買やインジケータを作成するとき、for文などのプログラミングをしやすくなっています。
まとめ
チャート変数は、チャートの情報を変数・配列に格納したもので、システムが自動的に更新します。
配列は少し癖がありますが、慣れれば使い勝手がよくなりますので、少しずつ消化していきましょう。
チャート変数は、自動売買やインジケータを作成するために、必要不可欠な変数・配列なので、しっかりと理解するようにしてください。