【MQL5】 MT5のEA作成の勉強 その21 ボリンジャーバンドの使い方

【MQL5】 MT5のEA作成の勉強 その21 ボリンジャーバンドの使い方

まえがき

 ボリンジャーバンド®(Bollinger Bands®)とは移動平均線(BASE_LINE)を中心に、それに同じ区間の価格の標準偏差を足したUPPER_BAND、逆に標準偏差を引いたLOWER_BAND からなる指標です。標準偏差はそのまま足し引きするだけでなく、2、3倍して使うこともあります。統計学の世界で、標準偏差はσであらわされることから、 UPPER_BAND を「+σ」、 LOWER_BAND を「-σ」とあらわすことが多いです。2倍した場合は「+2σ」「-2σ」、3倍した場合は 「+3σ」「-3σ」というように係数を付けて表現します。
詳しくはFXブロードネットさんの以下の記事が分かりやすかったのでリンクさせて頂きます。
https://www.fxbroadnet.com/tech/technicalchart/tech04.jsp

 さて、左記にお話ししたように、ボリンジャーバンドは「 BASE_LINE 」「 UPPER_BAND 」「 LOWER_BAND  」の3本の線で構成されます。以下の投稿で、EA/インジケータに テクニカル指標を導入する方法を学びましたが、ボリンジャーバンドの様に一つの指標が複数の値を持っている場合、この方法では対応できませんでしたので、やり方をメモしておきます。
【MQL5】 MT5のEA作成の勉強 その16 EA / インジケータにテクニカル指標導入

ボリンジャーバンド今まで通り取得してみる(失敗)

 まず、上記の投稿と同じ方法で、以下のように変数を定義して実行してみました。

  • グローバル変数
    • m_handle_band【int】
    • m_buff_band【double[]】
  • Oninit()
    • iBandsを使って、m_handle_bandにハンドルを取得
  • Ontick()
    • CopyBuffer関数を使って 、m_buff_bandに現在のバーと一つ前のバーのボリンジャーバンドの値を取得

以下がその結果です。「band_current」が現在のバーのボリンジャーバンドの値、「band_previous」が一つ前のバーの値です。値の確認方法は以下の記事をご覧ください。
【MQL5】 MT5のEA作成の勉強 その18 デバッグモードで変数の値を確認する方法

EA実行中のボリンジャーバンドの値
EA実行中のボリンジャーバンドの値(失敗例)
ボリンジャーバンドの画面表示
ボリンジャーバンドの画面表示(緑の線。表示されている値は中央の緑線)

画面には現在のボリンジャーバンドの BASE_LINE の値が表示されています。これは、 band_current に格納された値と同じです。band_previous には 一つ前のバーの BASE_LINE の値が格納されていました。 上の図を見ても、また、 UPPER_BAND は少なくとも1.14565以上、 LOWER_BAND  は1.14454以下ですので、消去法で BASE_LINE の値ということが分かります。

CopyBuffer関数の第3引数「指標バッファ番号」を変更

 では、どうやって UPPER_BAND や LOWER_BAND の値を取得するのか?調べてみたところ、前回の投稿では言及しなかった、CopyBuffer 関数の第3引数の「指標バッファ番号」を変えることで、その指標が複数の値を持つ場合、℃の値を取得するのかを選べることが分かりました。iBands の公式リファレンスをよく見ると、注意事項に、バッファ番号と BASE_LINE 、 UPPER_BAND 、 LOWER_BAND の対応関係が書かれています。例えば、 指標バッファ番号 を0どすれば BASE_LINE の値が取得できるということです。 これを踏まえて、以下のような記述を行いました。

  • グローバル変数
    • m_handle_band【int】
    • m_buff_band_b【double[]】
    • m_buff_band_u【double[]】
    • m_buff_band_l【double[]】
  • Oninit()
    • iBands を使って、m_handle_band にハンドルを取得
  • Ontick()
    • CopyBuffer 関数の第3引数を0にして 、m_buff_band_b に現在のバーと一つ前のバーのボリンジャーバンド( BASE_LINE )の値を取得
    • CopyBuffer 関数の第3引数を1にして 、m_buff_band_u に現在のバーと一つ前のバーのボリンジャーバンド( UPPER_BAND )の値を取得
    • CopyBuffer 関数の第3引数を2にして 、m_buff_band_l に現在のバーと一つ前のバーのボリンジャーバンド( LOWER_BAND )の値を取得

実行中の値を確認すると以下のようになりました。無事にボリンジャーバンドの全ての値を取得することができました。

EA実行中のボリンジャーバンドの値 (成功例)

まとめ

  ボリンジャーバンド をEAに導入する方法を学びました。値を一つしか持たない指標では、指標バッファ番号は特段意識していませんでしたが、これからはしっかり使いこなしてゆきたいです。ボリンジャーバンドに限らず、ADXやMACDなども複数の値を持っています。これらも同じほうほうでEAに導入できますので、今後より検討の幅が広がりそうで楽しみです。