1,000人限定!!企画に参加してEAをGetする公式ラインに登録して
プレゼントをもらう

【MQL】RSIとボリンジャーバンドを組み合わせたインジケーター【上級編】

MQL MT4 インジケーター RSI ボリンジャーバンドMT4インジケーター作成

RSIとボリンジャーバンドを組み合わせたインジケーター

RSIとボリンジャーバンドを組み合わせたインジケーターを作成したいと思います。

今までの応用ですね。

  • ボリンジャーバンド2σにタッチでRSIが80以上で上矢印表示
  • ボリンジャーバンド-2σにタッチでRSIが20以下で下矢印表示

少し実践的なロジックを作っていきたいと思います。

メタエディタ(MetaEditor)を立ち上げる

メタエディタ(MetaEditor)を立ち上げましょう。操作は以下に記載しています。

【MQL】カスタムインジケーターを作成の流れについてわかりやすく説明してみた

今回は名前を「RSI-BB」で作成します。

プロパティを記述する

プロパティを記述しましょう。バッファは2つです。

#property indicator_buffers 2//バッファ2つ

これでプロパティを記述は完了です。

#property indicator_buffers 2//バッファ2つ
Copy

バッファを定義する

バッファを定義しましょう。

今回は、

  • 上矢印
  • 下矢印

の2つ用意します。

double UP_Arrow[];//上矢印
double DOWN_Arrow[];//下矢印

これでバッファを定義は完了です。

double UP_Arrow[];//上矢印
double DOWN_Arrow[];//下矢印
Copy

パラメーターを記述する

パラメーターを記述しましょう。

RSIの期間を14に指定します。

input int RSIPeriod = 14;//RSI期間

ボリンジャーバンドの期間を20に指定します。

input int BBPeriod = 20;//BB期間

ボリンジャーバンドのシグマを2に指定します。

input double BBDeviation = 2;//標準偏差σ

これでパラメーターの記述は完了です。

input int RSIPeriod = 14;//RSI期間
input int BBPeriod = 20;//BB期間
input double BBDeviation = 2;//標準偏差σ
Copy

OnInit()関数を記述する

OnInit()関数を記述しましょう。インデックスに紐付けします。

SetIndexBuffer(0, UP_Arrow);//インデックス0にUP_Arrowを紐付け
SetIndexBuffer(1, DOWN_Arrow);//インデックス1にDOWN_Arrowを紐付け

インデックスを矢印を設定します。

SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,2,Blue);//インデックス0に矢印の設定
SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,2,Red);//インデックス1に矢印の設定

インデックスの矢印の種類を設定します。

SetIndexArrow(0,233);//インデックス0の矢印の種類
SetIndexArrow(1,234);//インデックス1の矢印の種類

これでOnInit()関数の記述は完了です。

SetIndexBuffer(0, UP_Arrow);//インデックス0にUP_Arrowを紐付け
SetIndexBuffer(1, DOWN_Arrow);//インデックス1にDOWN_Arrowを紐付け
SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,2,Blue);//インデックス0に矢印の設定
SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,2,Red);//インデックス1に矢印の設定
SetIndexArrow(0,233);//インデックス0の矢印の種類
SetIndexArrow(1,234);//インデックス1の矢印の種類
Copy

OnCalculate()関数を記述する

OnCalculate()関数を記述しましょう。まず変数を用意します。

double RSI;//RSI用変数
double BB_UP,BB_Center,BB_DOWN;//ボリンジャーバンド用変数

未だ計算されていないバー数(チャート上のバー数 – 計算済みバー数)を取得します。

int limit = Bars-IndicatorCounted();//未だ計算されていないバー数(チャート上のバー数 - 計算済みバー数)

その値でfor文でループさせます。

for(int i = limit-1; i >= 0; i--)

それぞれの変数に格納します。

RSI = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i);//RSI
BB_UP = iBands(NULL,0,BBPeriod,BBDeviation,0,PRICE_CLOSE,1,i);//ボリンジャーバンド上バンド
BB_Center = iBands(NULL,0,BBPeriod,BBDeviation,0,PRICE_CLOSE,0,i);//ボリンジャーバンド中央ライン
BB_DOWN = iBands(NULL,0,BBPeriod,BBDeviation,0,PRICE_CLOSE,2,i);//ボリンジャーバンド下バンド

配列を空にしましょう。

UP_Arrow[i] = EMPTY_VALUE;//配列の中を空にする
DOWN_Arrow[i] = EMPTY_VALUE;//配列の中を空にする

上バンドよりも高値が高くRSIが80より大きい場合は

if(BB_UP < High[i] && RSI > 80)//上バンドよりも高値が高くRSIが80より大きい場合

安値に上矢印表示させます。

UP_Arrow[i] = Low[i] - 20 * Point;//安値に上矢印表示

下バンドよりも安値が低くRSIが20より低い場合は

if(BB_DOWN > Low[i] && RSI < 20)//下バンドよりも安値が低くRSIが20より低い場合

高値に下矢印表示させます。

DOWN_Arrow[i] = High[i] + 20 * Point;//高値に下矢印表示

これでOnCalculate()関数は完了です。

   double RSI;//RSI用変数
   double BB_UP,BB_Center,BB_DOWN;//ボリンジャーバンド用変数
   int limit = Bars-IndicatorCounted();//未だ計算されていないバー数(チャート上のバー数 - 計算済みバー数)
   for(int i = limit-1; i >= 0; i--) 
   {
   RSI = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i);//RSI
   BB_UP = iBands(NULL,0,BBPeriod,BBDeviation,0,PRICE_CLOSE,1,i);//ボリンジャーバンド上バンド
   BB_Center = iBands(NULL,0,BBPeriod,BBDeviation,0,PRICE_CLOSE,0,i);//ボリンジャーバンド中央ライン
   BB_DOWN = iBands(NULL,0,BBPeriod,BBDeviation,0,PRICE_CLOSE,2,i);//ボリンジャーバンド下バンド
   
   UP_Arrow[i] = EMPTY_VALUE;//配列の中を空にする
   DOWN_Arrow[i] = EMPTY_VALUE;//配列の中を空にする
     if(BB_UP < High[i] && RSI > 80)//上バンドよりも高値が高くRSIが80より大きい場合
    {
       UP_Arrow[i] = Low[i] - 20 * Point;//安値に上矢印表示
     }
     if(BB_DOWN > Low[i] && RSI < 20) //下バンドよりも安値が低くRSIが20より低い場合
     {
       DOWN_Arrow[i] = High[i] + 20 * Point;//高値に下矢印表示
     }
   }
Copy

コンパイルする

コンパイルしましょう。しっかりとロジック通りに動いていれば完成です。

MQL MT4 RSI ボリンジャーバンド インジケーター

ソースコード全体

RSI-BBのソースコード全体は以下に記載しています。

//+------------------------------------------------------------------+
//|                                                       RSI-BB.mq4 |
//|                     Copyright 2020, FX-EA System Project Creator |
//|                        https://creator.fx-ea-system-project.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, FX-EA System Project Creator"
#property link      "https://creator.fx-ea-system-project.com/"
#property version   "1.00"
#property strict

/*プロパティ*/
#property indicator_chart_window
#property indicator_buffers 2//バッファ2つ

/*バッファ*/
double UP_Arrow[];//上矢印
double DOWN_Arrow[];//下矢印

/*パラメーター*/
input int RSIPeriod = 14;//RSI期間
input int BBPeriod = 20;//BB期間
input double BBDeviation = 2;//標準偏差2σ

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0, UP_Arrow);//インデックス0にUP_Arrowを紐付け
   SetIndexBuffer(1, BufDOWN_Arrow);//インデックス1にDOWN_Arrowを紐付け
   SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,2,Blue);//インデックス0に矢印の設定
   SetIndexArrow(0,233);//インデックス0の矢印の種類
   SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,2,Red);//インデックス1に矢印の設定
   SetIndexArrow(1,234);//インデックス1の矢印の種類
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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 RSI;//RSI用変数
   double BB_UP,BB_Center,BB_DOWN;//ボリンジャーバンド用変数
   int counted_bar = IndicatorCounted();
   int limit = Bars-counted_bar;
   for(int i = limit-1; i >= 0; i--) 
   {
   RSI = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i);//RSI
   BB_UP = iBands(NULL,0,BBPeriod,BBDeviation,0,PRICE_CLOSE,1,i);//ボリンジャーバンド上バンド
   BB_Center = iBands(NULL,0,BBPeriod,BBDeviation,0,PRICE_CLOSE,0,i);//ボリンジャーバンド中央ライン
   BB_DOWN = iBands(NULL,0,BBPeriod,BBDeviation,0,PRICE_CLOSE,2,i);//ボリンジャーバンド下バンド
   UP_Arrow[i] = EMPTY_VALUE;//配列の中を空にする
   DOWN_Arrow[i] = EMPTY_VALUE;//配列の中を空にする
     if(BB_UP < High[i] && RSI > 80)//上バンドよりも高値が高くRSIが80より大きい場合
    {
       UP_Arrow[i] = Low[i] - 20 * Point;//安値に上矢印表示
     }
     if(BB_DOWN > Low[i] && RSI < 20) //下バンドよりも安値が低くRSIが20より低い場合
     {
       DOWN_Arrow[i] = High[i] + 20 * Point;//高値に下矢印表示
     }
   }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Copy

まとめ

RSIとボリンジャーバンドという2つのインジケーターを組み合わせて表示させることができましたね。

基本的に条件を増やすだけで様々なインジケーターに応用が可能になります。

1,000人限定でFXの自動売買のEAを無料で配布中!!

FX-EA System Projectでは、

【1,000人限定で無料でFXの自動売買のEAを配布中】

です!!

・毎日チャートを見てるのに全く稼げなかった

・コンサルや塾に入ったけど全く稼げなかった

・裁量トレードは難しくて挫折した

・ツールやシステムを購入したが全く稼げなかった

・時間がなくて裁量トレードを行える時間がない

・自動で楽に稼ぎたい

という風に思っている方はこの企画はおすすめです。

フォワードテスト・バックテストを

しっかり行ったパフォーマンスの良いEAを提供中です!!

また、どんどん新しいEAも随時無料配布します!!

人数限定なので早いものがちです!!

もしFX-EA System Projectに興味があれば

是非参加してください。

MT4インジケーター作成 上級編
\記事が役に立ったらシェアしてね/
FX-EA System Projectをフォローする
FX-EA System Project Creator

コメント

タイトルとURLをコピーしました