3.EAがどのように動くか理解する
実際にEAがどのように動くか、全体像を理解しておきましょう。
EAがチャートに適用され、動き、チャートから削除されるまでのライフサイクルをまとめると以下のようになっています。
- チャートに適用され、初期化処理が実行される
- チャートに適用されている間、MT4/5がティック(値動き)を受信する度に処理が実行される
- チャートから削除され、終了処理が実行される
前回の記事で作成したhello.mq4のソースコードを確認してみます。
//+------------------------------------------------------------------+ //| hello.mq4 | //| | //| | //+------------------------------------------------------------------+ #property copyright "" #property link "" #property version "1.00" #property strict //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- Print("Hello, world!"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+
初期化処理 OnInit
EAがチャートに適用された際に行われる初期化処理は、13~19行目の”OnInit”という括りで記述されています。
ここに書かれている処理は、EAがチャートに適用された時に1度だけ実行されます。
EAを適用した状態で時間足を変更したり、EAを適用した状態でMT4/5を終了させ、再度立ち上げ直した時にも1度だけ実行されます。
初期化処理に記述されるべき内容としては、そのEAが稼働して良いかの確認処理などが挙げられます。
例えば、作成したEAがドル円専用で稼働させる想定だったなら、ドル円以外のチャートに適用された場合には、そのまま売買を行わせるわけにはいかないので、EAの適用をキャンセルさせて処理を中止します。
そういった処理は、EAが適用された瞬間の初期化処理で行うべきと考えられます。
ティックを受信する度の処理 OnTick
MT4/5で口座にログインしている状態では、接続先のサーバーから継続的にティック(値動き)を受信します。
EAが行う売買処理は、全てこのティック受信時に実行されます。
この処理は、31~35行目の”OnTick”という括りで記述されています。
hello.mq4は、OnTickの中身が空っぽなので、ティックを受信しても何の処理もしません。
終了処理 OnDeinit
23~27行目の”OnDeinit”という括りで記述されているのが終了処理です。
終了処理は、EAがチャートから削除された時に1度だけ実行されます。
OnInitの丁度逆の役割を担っています。
上記3つの”On***”という処理の括りは、専門用語でイベントハンドラと呼ばれます。
イベントハンドラとは、特定の出来事(イベント)が起きた時に実行されるように定められた処理のことです。
EAで使用されるイベントハンドラは他にも存在しますが、まずは上記3つの実行タイミングを押さえておきましょう。
OnInitとOnDeinitは、開始と終了の際に1度だけ実行される処理なので、基本的にEAのほとんどの処理はOnTickに記述されることになります。
OnTickは、MT4/5がティックを受信する度に何度でも繰り返し実行されます。
MT4/5のティックボリュームを見ると、1分間にどれだけのティックがあるか分かります。
1分足で100ティックだとしたら、OnTickも1分間に100回繰り返し実行されているということになります。
以上がEAのライフサイクルです。
コメントについて補足
ソースコード内で”//”から始まる行が沢山あります。
これはコメントといって、”//”より右側に書かれているものは、プログラム的には何の意味も持ちません(無視される)。
コメントは、そこに何を書いたのか、をメモ書きするために使用すると良いです。
次回からは、MQLの書き方を解説します。