2015年4月16日木曜日

EAを作ってみよう2 テンプレートを確認する。

ウィザードから作成されたテンプレートコードを確認したいと思います。

//+------------------------------------------------------------------+
//|                                                      Sample1.mq4 |
//|                                         Copyright 2015,  Daisuke |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015,  Daisuke"
#property link      "http://mt4program.blogspot.jp/"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
//--- create timer
EventSetTimer(60);

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//--- destroy timer
EventKillTimer();

}
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
//---

}
//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
{
//---

}
//+------------------------------------------------------------------+
//| Tester function                                                  |
//+------------------------------------------------------------------+
double OnTester()
{
//---
double ret=0.0;
//---

//---
return(ret);
}
//+------------------------------------------------------------------+
//| ChartEvent function                                              |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
{
//---

}
//+------------------------------------------------------------------+


int OnInit()
初期化関数です。EA初期化処理を記述します。ウィザードではEventSetTimer(60);とOnTimerを60秒に一回起動する設定が記述されています。
戻り値などは、インジケータと同じようです。
インジケータウィザード 生成コードを見てみよう

void OnDeinit(const int reason)
インジケータのウィザードでは自動生成されなかった、終了処理が自動生成されています。
reason引数には終了理由が入ってきます。
Uninitialization Reason Codes
タイマーの停止やバッファの解放、ポジションの解放などEA終了時処理を記述します。ウィザードでは、EventKillTimer()というタイマーを停止する関数が記述されています。

void OnTick()
EAではOnTickに売買シグナルによる注文判断処理を記述するのが一般的なようです。
OnTickは気配値の変更があった場合に呼び出される関数です。

void OnTimer()
一定時間ごとに呼び出される関数です。呼び出し間隔はEventSetTimer(秒)で指定します。

double OnTester()
バックテスト時に呼び出される関数です。
OnDeinitの直前に1回呼び出されます。ここでテスト結果の独自評価式を記述することができます。パラメータ最適化を行う際、ここでの戻り値が最大になるように最適化できるそうです。たとえば利益の出た取引回数を戻すようにすると、利益が出る取引回数が最大になるような最適化が実行可能ということになります。詳しくはEAをバックテストする記事を書く際に調査したいと思います。

void OnChartEvent(const int id,
const long &lparam,
const double &dparam,
const string &sparam)
EAが登録されているチャート上のイベントを取得する関数です。マウスクリックやオブジェクトの登録・削除などUIに関するイベントが取得可能です。EAを作成する分にはあまり関係なさそうです。

テンプレートで出来上がったコードはなんとなくわかりましたので、次回まずはEAを作ってみたいと思います。