まくまく投資ノート
更新: / 作成:

EA(エキスパートアドバイザー)のプログラム内で、決まったシグネチャ(関数名やパラメーター構成)で関数を定義しておくと、特定のイベント発生時に自動的にその関数を呼び出してくれるようになります。

EA では次のようなイベントハンドラーを定義することができます。

OnInit 関数

int OnInit(void);

EA の OnInit() 関数は、Init イベントが発生したときに呼び出されます。 戻り値が void のバージョンもありますが、互換性のために残されているだけなので、int を返すバージョンを使ってください。

OnDeinit 関数

void OnDeinit(const int reason);

EA の OnDeinit() 関数は、Deinit イベントが発生したときに呼び出されます。

OnCalculate 関数

int  OnCalculate(
   const int rates_total,      // price[] array size
   const int prev_calculated,  // number of handled bars at the previous call
   const int begin,            // index number in the price[] array meaningful data starts from
   const double& price[]       // array of values for calculation
);

int OnCalculate(
    const int rates_total,      // size of input time series
    const int prev_calculated,  // bars handled in previous call
    const datetime& time[],     // Time
    const double& open[],       // Open
    const double& high[],       // High
    const double& low[],        // Low
    const double& close[],      // Close
    const long& tick_volume[],  // Tick Volume
    const long& volume[],       // Real Volume
    const int& spread[]         // Spread
);

EA の OnCalculate() 関数は、Calculate イベントが発生したとき(最新の価格が変化したとき)に呼び出されます。 EA を最初にチャートにアタッチしたときにも呼び出されます。

OnTimer 関数

void OnTimer(void);

EA の OnTimer() 関数は、Timer イベントが発生したときに呼び出されます。 EventSetTimer() 関数でセットした秒数ごとに Timer イベントが発生します。タイマーのセットは、通常 OnInit() 関数で行います。

OnChartEvent 関数

void OnChartEvent()
    const int id,          // event ID
    const long& lparam,    // long type event parameter
    const double& dparam,  // double type event parameter
    const string& sparam   // string type event parameter
);

EA の OnChartEvent() 関数は、ChartEvent イベントが発生したときに呼び出されます。 EventChartCustom() 関数を使うと、独自の ChartEvent イベントを発生させることができます。

OnBookEvent 関数

void OnBookEvent(const string& symbol);

EA の OnBookEvent() 関数は、BookEvent イベントが発生したときに呼び出されます。

OnTick 関数

void OnTick(void);

EA の OnTick() 関数は、NewTick イベントが発生したときに呼び出されます。 OnTick() は EA 専用のイベントハンドラです(インジケーターやスクリプトでは使用できません)。

NewTick イベントを OnTick() 関数で処理している最中に次の NewTick イベントが発生した場合、そのイベントはイベントキューに積まれないことに注意してください。 OnTick() 内の処理は短時間で終える必要があるため、Sleep() 関数や MessageBox() 関数の呼び出しは禁止されています。

EA による自動売買が許可されていない場合でも、OnTick() 関数は呼び出されます。

OnTrade 関数

void OnTrade(void);

EA の OnTrade() 関数は、Trade イベントが発生したときに呼び出されます。 OnTrade() は EA 専用のイベントハンドラです(インジケーターやスクリプトでは使用できません)。

OnTester 関数

double OnTester(void);

EA の OnTester() 関数は、Tester イベントが発生したときに呼び出されます。 OnTester() は EA 専用のイベントハンドラです(インジケーターやスクリプトでは使用できません)。

関連記事

まくまく投資ノート
サイトマップまくへのメッセージ