ボリンジャーバンドの値を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 | ||
| PERIOD_M5 | ||
| PERIOD_M15 | ||
| PERIOD_M30 | ||
| PERIOD_H1 | ||
| PERIOD_H4 | ||
| PERIOD_D1 | ||
| PERIOD_W1 | ||
| PERIOD_MN1 |
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);
}
このインジケーターをチャートにセットすると、左上にボリンジャーバンドの3本の値がリアルタイムで表示されます。数値の意味を目で確認しながら、EAやカスタムインジケーターの条件式にiBands関数を組み込んでいくと理解が進みます。
まとめ
iBands関数はボリンジャーバンドを使う上で必須な関数になりますので、
ぜひしっかりと理解して使えるようにしておきましょう。
コメント