さっくりとだけ解説。
詳しい話はこのサイトを見てください。
最初についてくるvoidとかintとかdoubleって何?
戻り値の型です。代入するときに使います。
intは整数(integer)、doubleは小数(倍精度浮動小数点数)、void(何もなし)
例えば
a = TimeCurrent();
みたいなことをすると、aにはその時のサーバー時間が「整数」で入ります。
「int TimeCurrent(){}」みたいに定義されてるので、整数が入るわけです。
このintがdoubleであったならば小数だし、voidであれば入れる値がないのでエラーとなるはずです。
他にもいろいろありますが、bool(真偽値)とstring(文字列)、datetime(日付時刻)だけでもいろんなことができます
EA,インジケータ、スクリプト共通
宣言部
下に羅列されている関数(On~~~)共通で使う変数、定数を定義する。
ここで宣言せず、以下の関数内で宣言した場合は、その関数のみで使われることになる。
例えば、EAが稼働した期間を測定したいとする。その場合、最初と最後のサーバー時間の差を求めればいい。
OnInit()EAを開始したときのサーバー時間を記録しておいて、OnTester()でその時のサーバー時間との差を求める。
複数の関数で同じ変数を扱う必要があるため、ここに定義する必要がある。
int OnInit(){}
Initialize(初期化する)。voidもOK
EAが稼働し始めて最初に通る場所。
最初に初期化したいものを入れておく。
例)EAが開始したときのサーバー時間
void OnDeinit(){}
Deinitialize(初期化をもとに戻す)。
EAを終了するときに呼び出される関数。
何に使うんだろ?ファイル書き込みを終了するとか?
EA, インジケータ共通
void OnTimer(){}
指定の時間が経過したら通る。
時間指定をするには、OnInit()内でEventSetTimer(int)を利用する。intには指定した秒数を入れる。
タイマーを解除するには、EventKillTimer()を利用する。
OnTickで良くない?って思う
void OnChartEvent(){}
チャートに何かあったときに通る。
「何が」あったときに通すのかは設定できる。
例)クリックされた、更新された、カーソルが入った・出た
EAのみ
void OnTick(){}
Tickごとに処理される。めっちゃ使う。
double OnTester(){}
バックテスト・最適化のときのみ。
OnDeinit()の手前で呼び出される
MT5ではカスタム最大を返すことができる。便利。
インジケーターのみ
int OnCalculate(){}
OnTickとほぼ同じ。インジケーターを表示するのに必要な値を計算する場所。
スクリプトのみ
void OnStart(){}
スクリプトを開始したときに通るはず。