移動平均線を見るにあたって乖離率をチェックするのに、面倒だったので表示するインジケーターを作ってみました。超簡単なつくりなので、ソースコードも公開してみました。
インジケーターダウンロード
ダウンロード後、MT4のデータフォルダ内のIndicatorsフォルダ内に移動してください。
MT4移動平均線乖離率を表示するインジケーター
動作イメージ
チャートの左上に毎ティック更新。一応、20SMAだけでなく、よく使うであろう75SMAなども表記。作ってみてわかったけど、こういう現状把握系のインジケーターは便利ですね。
チャートは移動平均線に収束するという原理原則から、乖離率が大きいと反発して戻ってくる目安がわかります。20SMAは特に使える。
移動平均線との乖離率の計算式
計算式は以下のとおり。たぶん、合ってるはず。
((Bid – SMAの値) / SMAの値) * 100
ソースコード
自作関数display_MA_deviation_rate内で計算。戻り値は、String型の文字列が返ってきます。
OnCalculateで、関数display_MA_deviation_rateをコールすればOK。それを、Comment関数を使って表示。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
//+------------------------------------------------------------------+ //| 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[]) { //--- //乖離率計算 string output_str = display_MA_deviation_rate(); //表示 Comment(output_str); //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+ //| 移動平均線との乖離率計算 //+------------------------------------------------------------------+ string display_MA_deviation_rate(){ string my_ret=""; //SMA double now_sma = iMA(NULL,PERIOD_CURRENT,20,0,MODE_SMA,PRICE_CLOSE,0); double now_sma_75 = iMA(NULL,PERIOD_CURRENT,75,0,MODE_SMA,PRICE_CLOSE,0); double now_sma_200 = iMA(NULL,PERIOD_CURRENT,200,0,MODE_SMA,PRICE_CLOSE,0); //乖離率の計算 double deviation_rate = ((Bid - now_sma) / now_sma) * 100; double deviation_rate_75 = ((Bid - now_sma_75) / now_sma_75) * 100; double deviation_rate_200 = ((Bid - now_sma_200) / now_sma_200) * 100; //小数点の桁合わせ deviation_rate = NormalizeDouble(deviation_rate,int(MarketInfo(Symbol(),MODE_DIGITS))); deviation_rate_75 = NormalizeDouble(deviation_rate_75,int(MarketInfo(Symbol(),MODE_DIGITS))); deviation_rate_200 = NormalizeDouble(deviation_rate_200,int(MarketInfo(Symbol(),MODE_DIGITS))); //戻り値 my_ret= "\n\n【移動平均線との乖離率】\n\n" + "20SMA " + string(deviation_rate) + "%\n\n"+ "75SMA " + string(deviation_rate_75) + "%\n\n"+ "200SMA " + string(deviation_rate_200) + "%\n\n\n\n"; return my_ret; } |
インジケーターダウンロード
ご要望があったので、EX4ファイル(実行ファイル)をダンロードできるようにしました。ZIP形式で圧縮しています。解凍してご利用ください。
ご質問はコメント欄からお願いします