インジケーターの作成

MQL4を使用して独自のカスタムインジケータを作成することは、トレーダーとプログラマーにとって大きな利点です。これにより、市場の動向を解析するための特定の方法や独自の取引戦略を反映したツールを開発できます。

インジケータは、過去の価格データに基づいて計算され、通常はチャート上に描画される視覚的な出力を提供します。これらの視覚的な表現は、市場の状況を理解し、将来の価格変動を予測するのに役立ちます。

インジケータを作成する際の主な要素は以下の通りです:

  • OnInit:インジケータが初めてチャートにロードされるとき、またはパラメータが変更されるときに呼び出されます。ここでは、インジケータの初期設定を行います。
  • OnDeinit:インジケータがチャートから削除されるとき、またはMetaTraderが閉じられるときに呼び出されます。ここでは、リソースのクリーンアップなどの後処理を行います。
  • OnCalculate:新しい価格データが追加されるたび、またはチャートが再描画されるたびに呼び出されます。ここでは、インジケータの計算と描画を行います。

以下に、シンプルな移動平均線インジケータの例を示します。

int period = 14; // Moving Average period
int buffer[];

int OnInit() {
    // Set indicator properties
    IndicatorShortName("Custom Moving Average (" + IntegerToString(period) + ")");
    SetIndexLabel(0, "MA");
    SetIndexBuffer(0, buffer);
    IndicatorDigits(MarketInfo(Symbol(), MODE_DIGITS));
    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[]) {
    int i, limit;
    if(prev_calculated > rates_total || prev_calculated <= 0) { // check for the first start of the indicator calculation
        limit = rates_total - period;
    } else {
        limit = rates_total - prev_calculated; // start calculation from the previous bar
    }
    
    for(i = 0; i < limit; i++) {
        buffer[i] = iMA(NULL, 0, period, 0, MODE_SMA, PRICE_CLOSE, i); // Moving Average calculation
    }
    
    return(rates_total);
}

このインジケータは、過去14期間の平均を計算し、その結果をチャート上に描画します。自分のインジケータを作成することは、独自の分析ツールを持つことの重要性を理解する良い方法です。