RSIの決められた条件でアラートを鳴らすインジケーター
今回はRSIの決められた条件でアラートを鳴らすインジケーターを作成していきます。
よくインジケーターでアラートを鳴らしたいというトレーダーが結構多くいますが、
アラートを鳴らすだけなら誰でも簡単にできます。
今回はRSIを活用してアラートを鳴らすインジケーターを作成していきます。
- RSIの70以上か30未満でアラートを鳴らす
メタエディタ(MetaEditor)を立ち上げる
メタエディタ(MetaEditor)を立ち上げましょう。操作は以下に記載しています。
今回は名前を「RSI-Alert」で作成します。
グローバル変数を記述する
グローバル変数を記述します。フラッグを用意したのは一度だけアラートを鳴らしたいからです。
OnCalculate()関数はティックが動く(ローソク足が動く)毎に呼ばれる関数ですので、
アラートの鳴る条件が満たされている限りなり続けるので、
今回は簡易的にアラートの鳴るタイミングをフラッグで制御しています。
int up_flag = 0;//上矢印フラッグ int down_flag = 0;//下矢印フラッグ
これでグローバル変数を記述は完了です。
int up_flag = 0;//上矢印フラッグ int down_flag = 0;//下矢印フラッグ
パラメータを記述する
パラメータを記述しましょう。RSIの期間を決められるようにします。
input int RSI_Period = 14;//RSIの期間
これでパラメータの記述は完了です。
input int RSI_Period = 14;//RSIの期間
OnCalculateを記述する
OnCalculateを記述します。double型のRSI変数を作成します。
double RSI;//RSIの変数
iRSIというのはRSIのインジケーター関数になります。iRSI関数については以下の記事を参照してください。
このiRSIデータをRSIに代入します。
RSI = iRSI(NULL,0,14,PRICE_CLOSE,0);//RSIのインジケーター関数
RSIが30以下だった時に
if(RSI <= 30)//RSIが30以下の場合
up_flagが立っていなければアラートを鳴らします。
アラートを鳴らし終わった後にup_flagを1にしてdown_flagを0にしています。
flagを制御することで一度RSIが超えればアラートを連続で鳴らなくなります。
if(up_flag == 0)//up_flagが0の場合 { Alert(" ロングトエントリー RSI = ",RSI);//アラートを鳴らす up_flag = 1;//up_flagを1にする down_flag = 0;//down_flagを0にする }
今度は、逆に70以上だった時に
else if(RSI >= 70)//RSIが70以上の場合
down_flagが立っていなければアラートを鳴らします。
そしてアラートを鳴らし終わった後にdown_flagを1にしてup_flagを0にします。
if(down_flag == 0)//down_flagが0の場合 { Alert(" ショートエントリー RSI = ",RSI);//アラートを鳴らす down_flag = 1;//down_flagを1にする up_flag = 0;//up_flagを0にする }
最後にどちらもでもない場合はどちらのフラッグも0にしましょう。
else //RSIが70以上でも30以下でもない場合 { up_flag = 0;//up_flagを0にする down_flag = 0;//down_flagを0にする }
これでOnCalculate関数は完了です。
double RSI;//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にする }
コンパイルする
コンパイルしましょう。条件に合うとアラートが表示されていれば完了です。
ソースコード全体
RSI-Alertのソースコード全体は以下に記載しています。
//+------------------------------------------------------------------+ //| 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の変数 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); } //+------------------------------------------------------------------+
まとめ
今までの知識があればすぐにできるレベルのプログラムとなっております。
応用もできるのでぜひアラートを鳴らすインジケーターの作り方をマスターしてください。
コメント