スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
スポンサー広告 | CM(-) | --/--/--(--) --:--

MQL5におけるイベントハンドラ関数

MQL5におけるイベントハンドラ関数

MQL5ではイベントハンドラ関数が既に定義されており、EAやIndicatorを実装していくために必ず使用しなければなりません。

当然のことながら定義済みのイベントハンドラ関数に従わざるを得ないため、前提知識として理解しておく必要があります。

そのため、当記事では、MQL5で提供しているイベントハンドラ関数の機能概要をご説明いたします。


スクリプトハンドラ関数

void OnStart();
int  OnStart();

Scriptを起動するためのイベントハンドラ関数です。

EAとIndicatorでは使用することができません。

戻り値としてint型の数値を返却することもできます。


初期化ハンドラ関数

void OnInit();
int OnInit();

EAとIndicatorのイベントハンドラ関数で初期化のために使用します。

また、Scriptでは使用することができません。

戻り値としてint型を指定した場合、0以外を返却することで、初期化に失敗したことを知らせることができます。

その場合、OnDeinitイベントハンドラ関数の第一引数にREASON_INITFAILED(値:8)が設定されて呼び出されます。


後始末ハンドラ関数

void OnDeinit(
    const int reason //後始末関数が呼ばれた理由を示すコード
);

EAとIndicatorで使用することができます。

また、Scriptでは使用することができません。

通貨ペアの変更・時間枠の変更・パラメータの変更などをした際に、第一引数にそれぞれのコードが設定されて呼び出されます。

そのため、コードによって処理を変える必要がある場合は、switch文などを使用して処理の遷移を工夫する必要があります。


ティックハンドラ関数

void OnTick();

EAのみで使用することができます。

この関数は、ティックが発生する度に処理されます。

また、この関数にEAによる売買の処理を実装していくことになります。


タイマーハンドラ関数

void OnTimer();

EAでのみ使用することができます。

EventSetTimer()で指定された間隔で処理が実行されます。

また、実装方法としては、OnInit()でEventSetTimer()を呼び出し、OnDeinit()でEventKillTimer()を呼ぶ出すことが推奨されます。


トレードハンドラ関数

void OnTrade();

トレードをした際に呼び出されます。

トレード後に、証拠金のチェックや特定のポジションをクローズするなどといった処理をする場合に有効利用できます。


チャートイベントハンドラ関数

void OnChartEvent(const int id,         // イベントID
                  const long& lparam,   // long型イベントパラメータ
                  const double& dparam, // double型イベントパラメータ
                  const string& sparam  // string型イベントパラメータ
  );

チャートがクリックされた場合やオブジェクトが生成された場合に処理が呼び出されます。

これは、ユーザの操作によってオブジェクトに変更を加える必要がある場合などに有効利用できます。


計算ハンドラ関数

// 単独のデータ配列のみをハンドルしたい場合
int OnCalculate (const int rates_total,      // price[]の要素数
                 const int prev_calculated,  // 前回の呼び出しでハンドルされたバーの数
                 const int begin,            // 有効なデータの開始位置
                 const double& price[]       // 計算のための配列
   );

// 全てのレートをハンドルしたい場合
int OnCalculate (const int rates_total,      // レート配列の要素数
                 const int prev_calculated,  // 前回の呼び出しでハンドルされたバーの数
                 const datetime &Time[],     // 時間配列
                 const double &Open[],       // 始値配列
                 const double &High[],       // 高値配列
                 const double &Low[],        // 安値配列
                 const double &Close[],      // 終値配列
                 const long &TickVolume[],   // ティック取引量配列
                 const long &Volume[],       // 取引量配列
                 const int &Spread[]         // スプレッド配列
   );

Indicatorのみで使用することができます。

引数で受け取るデータ配列を利用して実装していくことになります。


MQL4からMQL5に変換

MQL4を使用されている方ならお気づきかもしれませんが、MQL5ではポインタやクラスの概念が追加となり、MQL4との互換性は全くありません。

そのため、元のソースを流用して再コーディングする必要が出てきますが、一番初めに躓くのがこのイベントハンドラ関数だと思われます。

まずは、MQL5の仕様を理解して一つずつ問題を潰していきましょう。


MQL5入門 | CM(0) | 2010/03/21(日) 03:02
コメントの投稿
題名
名前
メールアドレス
URL
コメント
PASS
SECRET管理者にだけ表示を許可する


上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。