2016年9月6日火曜日

[MT4インジケータ]遅れている分は足せばいい。単純移動平均に遅れ分の差分を足しこむ。

お久しぶりです。
たまには、記事をと、小ネタ投入です。私のブログで、などか、単純移動平均は遅れているという話をしています。(気になる方は、ブログ右の「移動平均考察シリーズ」のリンクをクリックしてみてください。

特に検証もしていませんが、遅れているなら足せばいいのでは?ということで、単純移動平均の遅れ分の差分を足しこんだ移動平均を書いてみました。

■通常の移動平均(黄色)と差分を足しこんだ移動平均(青)



・・・・むむむ?案外面白いかも?
#2016/9/7 プログラムミスってたので、修正しました。

//------------------------------------------------------------------
// モメンタムMA
#property copyright "Copyright 2016,  Daisuke"
#property link      "http://mt4program.blogspot.jp/"
#property version   "1.00"
#property strict
#property indicator_chart_window

//バッファーを指定する。
#property indicator_buffers 1

//プロット数を指定する。
#property indicator_plots   1

#property indicator_label1  "MoMa"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrAqua
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

input int MaPeriod = 21;  // 期間

double ma1[];

//------------------------------------------------------------------
//初期化
int OnInit()
{
   //インジケーターバッファを初期化する。
   int count = 0 ;
   SetIndexBuffer(count++, ma1);

   string short_name = "MOMA";
   IndicatorShortName(short_name);

   return INIT_SUCCEEDED;
}

//------------------------------------------------------------------
//計算イベント
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[])            //スプレット
{
   for( int i = 0; i < rates_total - prev_calculated && !IsStopped(); i++ )
   {
      double manow = iMA(Symbol(), PERIOD_CURRENT, MaPeriod, 0, MODE_SMA, PRICE_CLOSE, i);
      double mabefore = iMA(Symbol(), PERIOD_CURRENT, MaPeriod, 0, MODE_SMA, PRICE_CLOSE, i + (MaPeriod - 1) / 2);
   
      ma1[i] = manow + (manow - mabefore);
   }
   return(rates_total - 1);
}

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ MetaTraderへ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。