2017年10月21日土曜日

[MT4インジケータ]高値安値にも着目しよう。

まぁ統計的になんたらといいつつ、最近では、いかにして波形を予測するかに四苦八苦しています。

いままで個人的には終値をベースに色々考えて来ました。
しかし波形という形で捉えると、次の考え方ができます。

上昇トレンド時
 前回高値<今回高値

下降トレンド時
 前回安値>今回安値

そこで、久しぶりのMQLということもあり、かんたんに高値安値の平均を表示するインジを作っていました。
(この後フラクタルのフィルタリングに使えないかなぁとかおもって)

ついでにもう一つ、陽線時と陰線時で、高値安値に価値が違う可能性があるのではないか?という事も検討しています。

そこで、陽線と陰線でEMAのパラメータを変更出来る移動平均を作成してみました。


青線が高値移動平均、赤線が安値移動平均です。

超大雑把にいくと、高値を青のラインを超えた時に上昇トレンド、安値が赤のラインを下回った時に下降トレンドです。

画像では赤丸で示しています。
なかなかいいタイミングを示しているように見えますが、レンジ時や暴れた時はコテンパにされるのでご注意ください。
AI系EAの影響なのか、ここ最近のEURUSDは直線的に動くことが多いですね。

今回はソースも短めです。でも結構いけるような?
今回もTwitterで反響があれば、FX-ONにアップしたいと思います。

ソースコードはこちらから



//------------------------------------------------------------------
// 高値安値移動平均 バー判定版

#property copyright "Copyright 2017,  Daisuke"
#property link      "http://mt4program.blogspot.jp/"
#property version   "1.00"
#property strict
#property indicator_chart_window

#property indicator_buffers 2

#property indicator_label1  "LOW"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrIndianRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

#property indicator_label2  "HIGH"
#property indicator_type2   DRAW_LINE
#property indicator_color2  clrAqua
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1


input int MaFirstPeriod = 14;   // EMA移動平均期間
input int MaSlowPeriod = 28;   // EMA遅延移動平均期間


//バッファ
double m_low[];
double m_high[];

double slowAlfa = 0;
double firstAlfa = 0;

//------------------------------------------------------------------
//初期化
int OnInit()
{
   //インジケーターバッファを初期化する。
   SetIndexBuffer(0, m_low);
   SetIndexBuffer(1, m_high);
   
   SetIndexEmptyValue(0, 0);
   SetIndexEmptyValue(1, 0);
   
   firstAlfa = 2.0 / (MaFirstPeriod + 1);
   slowAlfa = 2.0 / (MaSlowPeriod + 1);
   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 = rates_total - prev_calculated - 1; i >= 0; i--)
   {
      if( i == rates_total - 1)
      {
         m_low[i] = low[i];
         m_high[i] = high[i];
         continue;
      }
      
      if(open[i] < close[i])
      {
         m_low[i] = m_low[i + 1] * ( 1 - slowAlfa ) + slowAlfa * low[i];
         m_high[i] = m_high[i + 1] * ( 1 - firstAlfa ) + firstAlfa * high[i];
      }
      else
      {
         m_low[i] = m_low[i + 1] * ( 1 - firstAlfa ) + firstAlfa * low[i];
         m_high[i] = m_high[i + 1] * ( 1 - slowAlfa ) + slowAlfa * high[i];
      }
   }

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

Twitterもよろしくお願いします。
https://twitter.com/mt4program
Trading View プロフィール

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ FX テクニカルトレード派へ
にほんブログ村

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