MQL4 iBands ボリンジャーバンドのインジケータを作成

トレンド系のインジケータとして人気のボリンジャーバンドを、MQL4 の iBands() 関数を使って自作してみましょう。ミドルバンド・アッパーバンド・ロワーバンドの3本を表示するシンプルなインジケータです。

[PR]


ボリンジャーバンドとは

MT4のチャートに表示したボリンジャーバンド

ボリンジャーバンドは、移動平均線(ミドルバンド)の上下に、価格のばらつきを表す標準偏差(σ)の何倍かの幅でバンドを引いたインジケータです。価格の変動が大きくなるとバンドの幅が広がり、小さくなると狭まります。

価格が正規分布に従うと仮定すると、±1σの範囲に約68%、±2σの範囲に約95%が収まる計算になります。実際の相場は正規分布どおりには動かないので、あくまで目安として使います。MT4 標準のボリンジャーバンドは、期間20・偏差2(±2σ)が既定値です。

iBands() 関数の引数

MQL4 では、ボリンジャーバンドの値を iBands() 関数で取得します。

各引数の意味は次のとおりです。

引数 型 意味
symbol string 通貨ペア名。NULL で現在のチャートの通貨ペア
timeframe int 時間足。ENUM_TIMEFRAMES の値で、0 で現在のチャートの時間足
period int ミドルバンド(移動平均)を計算する期間
deviation double ミドルバンドから標準偏差(σ)の何倍離すか。2 なら ±2σ
bands_shift int バンドを右へずらす本数。通常は 0
applied_price int 計算に使う価格。ENUM_APPLIED_PRICE の値(PRICE_CLOSE など)
mode int 取得するライン。MODE_MAIN(0)=ミドル、MODE_UPPER(1)=アッパー、MODE_LOWER(2)=ロワー
shift int 何本前のバーの値を取るか。0 が現在足

Ref: iBands – MQL4 Documentation

サンプルコード

ミドル・アッパー・ロワーの3本を描画するサンプルです。既定値は期間20・±2σで、MT4 標準のボリンジャーバンドと同じ設定にしています。MetaEditor で新規のカスタムインジケータを作成し、次のコードを貼り付けてコンパイルしてください。

コードのポイント

計算するバーを絞り、現在足は毎回計算し直す

OnCalculate() はティックが来るたびに呼ばれます。初回(prev_calculated が0)は全バーを計算し、2回目以降は新しくできたバーと現在足だけを計算します。

2回目以降は rates_total – prev_calculated が0(新しい足ができていない)または1(新しい足ができた)になります。そのままでは足が確定するまで現在足が計算されないので、1を足して現在足を毎回計算し直しています。

※以前のサンプルは Bars – prev_calculated のままループしていたため、2回目以降に現在足のバンドが更新されませんでした。この点を修正しています。

標準偏差は double 型で受け取る

iBands() の deviation 引数は double 型です。input も double にしておくと、1.5σ のような小数の設定もパラメータ画面から入力できます。

3本のラインは mode だけを変えて呼び出す

ミドル・アッパー・ロワーは、同じ引数のまま mode を MODE_MAIN、MODE_UPPER、MODE_LOWER と変えて iBands() を3回呼び出して取得します。

計算に足りない部分は描画しない

チャートの左端(古いバー)には、平均期間ぶんのデータがそろっていない部分があります。SetIndexDrawBegin() で描画開始位置を平均期間ぶんずらし、不正確な線が出ないようにしています。

パラメータの表示名

#property strict を宣言するとコンパイラのチェックが厳しくなりますが、input 変数の右側に書いたコメントが、パラメータ画面の表示名として使われるようになります。

この例では、変数名の Deviation ではなく「標準偏差(σ)」と表示されます。

パラメータ画面に表示されたコメントの表示名

※画像は以前のサンプル(標準偏差の既定値1)での表示です。

標準偏差を1にすれば±1σ、3にすれば±3σのバンドになります。±1σと±2σを同時に表示したいときは、このインジケータを2つ挿入して標準偏差を変えてください。

参考資料

シェアする

  • このエントリーをはてなブックマークに追加

フォローする