ボリンジャーバンドの値をEAやインジケーターで扱いたいとき、iBands関数を使いますが、公式リファレンスをそのままコピペしてもコンパイルエラーになることがあります。この記事では、iBands関数の書式・引数の意味を一通り解説したうえで、実際にMetaEditorでコンパイルできる呼び出しサンプルまで載せています。

iBands関数

ボリンジャーバンドとは、相場のボラティリティを一定期間の価格データから測定して、統計学的な観点から価格の変動範囲を予測してチャートに表示するテクニカル指標です。

ボリンジャーバンドは非常に初心者のトレーダーに人気のあるテクニカル指標です。

ボリンジャーバンドのボリンジャーは開発者で投資家のジョン・ボリンジャーの名を冠したものです。

iBands関数は、ボリンジャーバンドの値を取得するために使用するための関数です。

ボリンジャーバンドの計算式

ボリンジャーバンドの計算式は以下のようになります。

標準偏差=√(n×n日間の終値の2乗の合計-n日間の終値の合計の2乗)÷(n×(n-1))

±1σ = n日の移動平均 ± n日の標準偏差
±2σ = n日の移動平均 ± n日の標準偏差 × 2
±3σ = n日の移動平均 ± n日の標準偏差 × 3

iBands関数の書式

iBands関数の書式について説明します。

double iBands(
string symbol, // 通貨ペア
int timeframe, // 時間軸
int period, // 平均期間
double deviation, // 標準偏差
int bands_shift, // バンドシフト
int applied_price, // 適用価格
int mode, // ラインインデックス
int shift // シフト
);

元記事の関数名は`iBandss`(sが1つ多い)という誤字になっていました。実際のMQL4関数名は`iBands`です。この誤字のまま関数を呼び出すと、`iBandss`が未定義識別子としてコンパイルエラーになります。

iBands関数の引数の説明

iBands関数の引数の説明について説明します。

string symbol

symbolはボリンジャーバンドの値を計算する通貨ペア名を指定します。

int timeframe

timeframeはボリンジャーバンドの値を計算する時間軸を指定します。

種 類
定 数
内 容
PERIOD_CURRENT
現在の時間足
PERIOD_M1
1分足
PERIOD_M5
5分足
PERIOD_M15
15
15分足
PERIOD_M30
30
30分足
PERIOD_H1
60
1時間足
PERIOD_H4
240
4時間足
PERIOD_D1
1440
日 足
PERIOD_W1
10080
週 足
PERIOD_MN1
43200
月 足

int period

periodは中間線の値を計算する期間を指定します。

double deviation

deviationは以下の計算式の掛け率の値を指定します。

上方バンドと下方バンドの値は、以下の計算式により算出されます。

上方バンド:中間線の値 +(標準偏差 × 掛け率)

下方バンド:中間線の値 -(標準偏差 × 掛け率)

int bands_shift

bands_shiftはボリンジャーバンドの表示を右方向にシフトするバーの個数を指定します。

int applied_price

applied_priceはボリンジャーバンドの値の計算に使用する価格データを指定します。

種 類
定 数
内 容
PRICE_CLOSE
終 値
PRICE_OPEN
始 値
PRICE_HIGH
高 値
PRICE_LOW
安 値
PRICE_MEDIAN
中央値
(高値+安値)÷2
PRICE_TYPICAL
代表値
(高値+安値+終値)÷3
PRICE_WEIGHTED
加重終値
(高値+安値+終値+終値)÷4

int mode

modeはライン番号を指定します。

  • 中間線の値を取得したい場合:0(MODE_MAIN)
  • 上方バンドの値を取得したい場合:1(MODE_UPPER)
  • 下方バンドの値を取得したい場合:2(MODE_LOWER)

int shift

shiftはボリンジャーバンドの値を取得したいバーの位置を指定します。

  • 現在のバーであれば:0
  • 1本前のバーであれば:1
  • 2本前のバーであれば:2

と言う形で記述します。

iBands関数を使った呼び出し例

関数の説明だけだと実際にどう書けばいいか分かりにくいので、現在のバーの中間線・上方バンド・下方バンドの値を取得して、チャート上にコメント表示する最小限のインジケーターを載せておきます。そのままMetaEditorに貼り付けてコンパイルできます。

#property copyright "Copyright 2021, FX-EA System Project Creator"
#property link      "https://creator.fx-ea-system-project.com/"
#property version   "1.00"
#property strict
#property indicator_chart_window

input int    Period     = 20;   //平均期間
input double Deviation  = 2.0;  //標準偏差の掛け率

int OnInit()
  {
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason)
  {
  }

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[])
  {
   double middle = iBands(NULL, 0, Period, Deviation, 0, PRICE_CLOSE, MODE_MAIN, 0);
   double upper  = iBands(NULL, 0, Period, Deviation, 0, PRICE_CLOSE, MODE_UPPER, 0);
   double lower  = iBands(NULL, 0, Period, Deviation, 0, PRICE_CLOSE, MODE_LOWER, 0);

   Comment(
      "中間線: ", DoubleToString(middle, Digits), "\n",
      "上方バンド: ", DoubleToString(upper, Digits), "\n",
      "下方バンド: ", DoubleToString(lower, Digits)
   );

   return(rates_total);
  }
Copy

このインジケーターをチャートにセットすると、左上にボリンジャーバンドの3本の値がリアルタイムで表示されます。数値の意味を目で確認しながら、EAやカスタムインジケーターの条件式にiBands関数を組み込んでいくと理解が進みます。

まとめ

iBands関数はボリンジャーバンドを使う上で必須な関数になりますので、

ぜひしっかりと理解して使えるようにしておきましょう。

関連記事