2016年5月26日木曜日

【EAを作ろう】第四回 流れをつかもう

EAの流れを見てみましょう
MetaEditorで新規作成したものからページの都合上注釈を消しています。
そしてTACA的説明を書き込みました。



#property copyright "TACA 2016/05/26 Kyoto" //コピーライト EAを選ぶときに見づらくなります。
#property link      "http://mt4kyoto.blogspot.jp/"//バージョン情報のコピーライトをクリックするとこのサイトに飛びます。
#property version   "1.00"              //バージョンあまり管理していません
//#property strict strictモード いつも消します。  

//このへんに定数の宣言int~ double~が並びます。

int OnInit()                      //EA起動時に一回動作します。
  {
   EventSetTimer(60);                 //OnTimerの間隔です。一秒単位です。今回は60秒
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)         //EA終了時に一回動作します。
  {
   EventKillTimer();                 //終了時にOnTimerを止めます。なにも殺さなくても・・・
  }

void OnTick()                    //ティックに変動があるたびに動きます。
  {
  }

void OnTimer()                   //EventSetTimerでセットした秒ごとに動作
  {
  }


はじめは#propatyです。iconなんかも設定できるのですが、最初の頃は面倒なので無しでいいかと思います。
strictモードは説明は長くなるので省きますがこいつも必要ありません。

今回は書いていませんが、このあとに定数の宣言を行います。

int OnInitは 前処理です。OnTimerを使う時はここでTimerの感覚をEventSetTimerで宣言します。昔はint Initでした。

void OnDeinitは終了処理です。今回ではOnTimerの設定をEventKillTimerで消しています。
こちらも古いソースコードではint deinitです。

void OnTickはティックが変動するたびに動作します。
この中にエントリーやモディファイ、クローズ処理を書きます。
昔はint startでした。

void OnTimerは設定秒ごとに動きます。ティックは数秒動かないことがありますが、
OnTimerは時間ごとに確実に動きます。OnTimerはバックテストでは無視されます。
ある程度OnTickで作成しバックテストしてからのOnTimerに変更、追加するのが良いと思います。

OnTickとOnTimerの両方に同じ処理を記述することで、1ティック早く動く可能性があります。

ごちゃごちゃと書きましたが前半の関数の宣言とOnTickだけである程度は作れます。
流れだけおぼえて下さい。











0 件のコメント:

コメントを投稿