💨

MQL5でボリンジャーバンドを使う方法

2023/10/07に公開

https://www.mql5.com/ja/docs/indicators/ibands

int  iBands(
  string              symbol,            // 銘柄名
  ENUM_TIMEFRAMES    period,            // 期間
  int                bands_period,     // 平均線の計算の期間
  int                bands_shift,      // 指標の水平シフト
  double              deviation,        // 標準偏差の数
  ENUM_APPLIED_PRICE  applied_price      // 価格の種類かハンドル
  );

パラメータ

symbol

[in] データが指標計算に使用される有価証券の銘柄名(NULL は現在のシンボル)

period

[in] 期間の値は ENUM_TIMEFRAMES 列挙の値の 1 つで、0 は現在の時間軸の意味です。

bands_period

[in] 指標の正中線の平均期間

bands_shift

[in] 価格チャートに相対した指標のシフト

偏差

[in] 正中線からの逸脱

applied_price

[in] 使用される価格。ENUM_APPLIED_PRICE 価格定数のいずれか、または別の指標ハンドル。

戻り値

指定されたテクニカル指標ハンドル。失敗の場合 INVALID_HANDLE。IndicatorRelease() 関数に指標ハンドルを渡すことによって 、コンピュータメモリを利用されていない指標から解放することが出来ます。

注意事項

バッファ番号は 0 - BASE_LINE、1 - UPPER_BAND、2 - LOWER_BAND です。

1.ハンドルを取得する

ボリンジャーバンド指標のハンドルを取得するためには、iBands関数を使います。この関数は指標のハンドルを返すので、このハンドルを使用して指標の値を取得することができます。

以下は、ボリンジャーバンド指標のハンドルを取得する方法の例です。

int handle;

// ボリンジャーバンド指標のハンドルを取得
handle = iBands(_Symbol, PERIOD_H1, 20, 0, 2.0, PRICE_CLOSE);

2.指標の値を取得する
ハンドルを使用して、CopyBuffer関数を使ってボリンジャーバンドの各ラインの値を取得できます。

以下は、ボリンジャーバンドの各ラインの最新の値を取得する例です。

double upperBand[];
double lowerBand[];
double baseLine[];

// バッファをコピーして各ラインの値を取得
CopyBuffer(handle, 0, 0, 1, baseLine);   // 基本線
CopyBuffer(handle, 1, 0, 1, upperBand);  // 上バンド
CopyBuffer(handle, 2, 0, 1, lowerBand);  // 下バンド

Print("Base Line: ", baseLine[0]);
Print("Upper Band: ", upperBand[0]);
Print("Lower Band: ", lowerBand[0]);

これにより、ボリンジャーバンド指標の各ラインの最新の値が得られます。

ボリンジャーバンドの価格を取得する関数

// ボリンジャーバンドの値を取得する関数
double getBollingerBand(int mode, int shift)
{
    static int handle = -1; // ボリンジャーバンドのハンドル(静的ローカル変数)
    static ENUM_TIMEFRAMES last_timeframe = PERIOD_CURRENT; // 前回の時間軸(静的ローカル変数)

    // 現在のチャートの時間軸が前回の時間軸と異なる場合、ハンドルをリセット
    if(last_timeframe != _Period)
    {
        last_timeframe = _Period; // 現在の時間軸を記録
        handle = -1; // ハンドルをリセット
    }

    // ボリンジャーバンド指標のハンドルを取得
    if(handle == -1)
    {
        handle = iBands(_Symbol, last_timeframe, 20, 0, 2.0, PRICE_CLOSE);
    }

    double bandValue[1]; // バンドの値を格納する配列

    // バッファをコピーしてラインの値を取得
    CopyBuffer(handle, mode, shift, 1, bandValue);

    return bandValue[0]; // 指定されたバンドの値を返す
}

使い方

void OnTick()
{
    double base = getBollingerBand(0,0);    // 基本線の最新の値を取得
    double upper = getBollingerBand(1,0);   // 上バンドの最新の値を取得
    double lower = getBollingerBand(2,0);   // 下バンドの最新の値を取得

    Print("Base Line: ", base);
    Print("Upper Band: ", upper);
    Print("Lower Band: ", lower);
}

Discussion