移動平均線を見るにあたって乖離率をチェックするのに、面倒だったので表示するインジケーターを作ってみました。超簡単なつくりなので、ソースコードも公開してみました。
インジケーターダウンロード
ダウンロード後、MT4のデータフォルダ内のIndicatorsフォルダ内に移動してください。
動作イメージ
チャートの左上に毎ティック更新。一応、20SMAだけでなく、よく使うであろう75SMAなども表記。作ってみてわかったけど、こういう現状把握系のインジケーターは便利ですね。


チャートは移動平均線に収束するという原理原則から、乖離率が大きいと反発して戻ってくる目安がわかります。20SMAは特に使える。
移動平均線との乖離率の計算式
計算式は以下のとおり。たぶん、合ってるはず。
((Bid – SMAの値) / SMAの値) * 100
ソースコード
自作関数display_MA_deviation_rate内で計算。戻り値は、String型の文字列が返ってきます。
OnCalculateで、関数display_MA_deviation_rateをコールすればOK。それを、Comment関数を使って表示。
//+------------------------------------------------------------------+
//| 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形式で圧縮しています。解凍してご利用ください。










ご質問はコメント欄からお願いします