リアル取引口座を開設する

[広告] 当サイトはアフィリエイト広告を利用しています

fx インジ 作り方

FXインジの作り方|MQL4のSMA例とMT5との違い

  • コピーしました

自作インジは「どのデータを、どの条件で、どこに表示するか」をコードにする作業です。まずMT4用のMQL4とMT5用のMQL5を分けて考え、単純な移動平均線から構造を確かめましょう。自作できることと、売買で利益が出ることは別です。

最初に用意するもの

  • 使う端末のMetaEditorと、表示を確認するデモ環境
  • 仕様メモ:銘柄、時間足、期間、適用価格、未確定足の扱い
  • 同じ設定の標準インジ:表示値を比較するために使います。

MT4とMT5はファイルも指標関数も違う

MT4は.mq4を.ex4へ、MT5は.mq5を.ex5へコンパイルします。拡張子の変更だけで移植はできません。MQL4のiMAは値を返しますが、MQL5のiMAはハンドルを返し、CopyBufferで値を取得します。

MQL4のSMAを描く学習用の例

次の例は、終値20本の単純平均をメインチャートに描く構造です。MT4用でありMT5へそのまま貼り付ける例ではありません。計算を理解しやすくするため毎回全範囲を計算します。大量の履歴を扱う実用版ではprev_calculatedを使った再計算範囲の最適化が必要です。

#property strict
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_color1 Blue
input int Period = 20;
double Buffer[];
int OnInit() {
  if (Period < 1) return(INIT_PARAMETERS_INCORRECT);
  SetIndexBuffer(0, Buffer);
  ArraySetAsSeries(Buffer, true);
  SetIndexStyle(0, DRAW_LINE);
  SetIndexEmptyValue(0, EMPTY_VALUE);
  SetIndexDrawBegin(0, Period - 1);
  return(INIT_SUCCEEDED);
}
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 &tick_volume[],
 const long &volume[], const int &spread[]) {
  ArraySetAsSeries(close, true);
  ArrayInitialize(Buffer, EMPTY_VALUE);
  if (rates_total < Period) return(0);
  for (int i = rates_total - Period; i >= 0; i--) {
    double sum = 0;
    for (int j = 0; j < Period; j++) sum += close[i + j];
    Buffer[i] = sum / Period;
  }
  return(rates_total);
}

コードの読み方

  • OnInit:描画バッファと線の形式を設定します。SetIndexBufferの後で配列の向きを指定します。
  • OnCalculate:time・open・high・low・close等の引数を公式仕様に揃えます。旧版の記事で欠けていたtime配列も含めています。
  • close[0]:現在形成中の足の終値です。価格の更新でこの足のSMAも変わります。
  • 計算できない古い範囲:EMPTY_VALUEにして、必要本数のない平均を描画しません。

MetaEditorから表示確認まで

  1. カスタムインジケーターの新規ファイルを作り、コードを保存します。
  2. コンパイルし、エラー・警告を確認します。コンパイル成功だけで計算が正しいとは判断しません。
  3. デモのチャートへ追加し、標準Moving Averageを期間20・Simple・Close・シフト0で重ねます。
  4. データウィンドウで複数の確定足を比較します。再起動・時間足変更・履歴再取得後も確認します。
  5. Periodを1や履歴本数より大きい値に変え、境界条件を確認します。

サインや通知を追加する前に

条件を確定足で評価するか、未確定足で評価するかを明示します。過去データの未来を参照しないこと、同じ足で通知が連続しないこと、上位足の確定時刻を混同しないことも確認します。コードを変更した日・端末ビルド・設定と検証結果を残してください。

次に確認する記事

公式仕様

MetaQuotes:MQL4イベント関数、MQL5 iMA

  • コピーしました

 この記事に関連する記事一覧

まさと

まさと

カテゴリー

[広告]

XMTrading 公式口座開設バナー
HFM 公式ゴールド・シルバー取引バナー
FXGT 公式口座開設バナー
最近の投稿
アーカイブ
リンク