FX-EA System Projectはこちら公式ラインに登録して
プレゼントをもらう

【MQL】RSIの決められた条件でアラートを鳴らすインジケーター【中級編】

MQL RSI アラートを鳴らす インジケーターMT4インジケーター作成

RSIの決められた条件でアラートを鳴らすインジケーター

今回はRSIの決められた条件でアラートを鳴らすインジケーターを作成していきます。

よくインジケーターでアラートを鳴らしたいというトレーダーが結構多くいますが、

アラートを鳴らすだけなら誰でも簡単にできます。

今回はRSIを活用してアラートを鳴らすインジケーターを作成していきます。

  • RSIの70以上か30未満でアラートを鳴らす

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

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

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

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

グローバル変数を記述する

グローバル変数を記述します。フラッグを用意したのは一度だけアラートを鳴らしたいからです。

OnCalculate()関数はティックが動く(ローソク足が動く)毎に呼ばれる関数ですので、

アラートの鳴る条件が満たされている限りなり続けるので、

今回は簡易的にアラートの鳴るタイミングをフラッグで制御しています。

int up_flag = 0;//上矢印フラッグ
int down_flag = 0;//下矢印フラッグ
Copy

パラメータを記述する

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

input int RSI_Period = 14;//RSIの期間
Copy

OnCalculateを記述する

OnCalculateを記述します。double型のRSI変数を作成します。

double RSI;

iRSIというのはRSIのインジケーター関数になります。iRSI関数については以下の記事を参照してください。

【MQL】RSIの値を取得する『iRSI関数』についてわかりやすく説明してみた
iRSI関数 iRSI関数とはRSIの値を取得するために使用します。 iRSI関数の書式 double iRSI( string symbol, // 通貨ペア int timeframe, // 時間軸 int period,...

このiRSIデータをRSIに代入します。

RSI = iRSI(NULL,0,14,PRICE_CLOSE,0);

RSIが30以下だった時に

if(RSI <= 30)

up_flagが立っていなければアラートを鳴らします。

アラートを鳴らし終わった後にup_flagを1にしてdown_flagを0にしています。

flagを制御することで一度RSIが超えればアラートを連続で鳴らなくなります。

if(up_flag == 0)
         {
             Alert(" ロングトエントリー RSI = ",RSI);
             up_flag = 1;
             down_flag = 0;
         }

今度は、逆に70以上だった時に

else if(RSI >= 70)

down_flagが立っていなければアラートを鳴らします。

そしてアラートを鳴らし終わった後にdown_flagを1にしてup_flagを0にします。

         if(down_flag == 0)
         {
             Alert("  ショートエントリー  RSI = ",RSI);
             down_flag = 1;
             up_flag = 0;
         }

最後にどちらもでもない場合はどちらのフラッグも0にしましょう。

else
    {
        up_flag = 0;
        down_flag = 0;
    }

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

     double RSI;//変数
     RSI = iRSI(NULL,0,RSI_Period,PRICE_CLOSE,0);//RSIのインジケーター関数
     if(RSI <= 30)//RSIが30以下の場合
     {
         if(up_flag == 0)//up_flagが0の場合
         {
             Alert(" ロングトエントリー RSI = ",RSI);//アラートを鳴らす
             up_flag = 1;//up_flagを1にする
             down_flag = 0;//down_flagを0にする
         }
    }
    else if(RSI >= 70)//RSIが70以上の場合
    {
         if(down_flag == 0)//down_flagが0の場合
        {
             Alert("  ショートエントリー  RSI = ",RSI);//アラートを鳴らす
             down_flag = 1;//down_flagを1にする
             up_flag = 0;//up_flagを0にする
         }
    }
    else //RSIが70以上でも30以下でもない場合
    {
        up_flag = 0;//up_flagを0にする
        down_flag = 0;//down_flagを0にする
    }
Copy

コンパイルする

コンパイルしましょう。条件に合うとアラートが表示されていれば完了です。

MQL インジケーター アラート 

ソースコード全体

//+------------------------------------------------------------------+
//|                                                    RSI-Alert.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

/*フラッグ*/
int up_flag = 0;//上矢印フラッグ
int down_flag = 0;//下矢印フラッグ

/*パラメータ*/
input int RSI_Period = 14;//RSIの期間
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   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 = iRSI(NULL,0,RSI_Period,PRICE_CLOSE,0);//RSIのインジケーター関数
     if(RSI <= 30)//RSIが30以下の場合
     {
         if(up_flag == 0)//up_flagが0の場合
         {
             Alert(" ロングトエントリー RSI = ",RSI);//アラートを鳴らす
             up_flag = 1;//up_flagを1にする
             down_flag = 0;//down_flagを0にする
         }
    }
    else if(RSI >= 70)//RSIが70以上の場合
    {
         if(down_flag == 0)//down_flagが0の場合
         {
             Alert("  ショートエントリー  RSI = ",RSI);//アラートを鳴らす
             down_flag = 1;//down_flagを1にする
             up_flag = 0;//up_flagを0にする
         }
    }
    else //RSIが70以上でも30以下でもない場合
    {
        up_flag = 0;//up_flagを0にする
        down_flag = 0;//down_flagを0にする
    }
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Copy

まとめ

今までの知識があればすぐにできるレベルのプログラムとなっております。

応用もできるのでぜひアラートを鳴らすインジケーターの作り方をマスターしてください。

コメント

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