2016年3月3日木曜日

[MT4インジケータ]GMMA その1 まずGMMAを表示してみた

■EURUSD1H GMMA


2本とか3本とかの移動平均じゃ、いまどの期間に一致しているのかわからーーーん。ということで、なんと12本も同時に表示して考えようっていうのがGMMAです。

CNBCアジアのアナリストさんであるダリル・ギャッピー(Daryl Guppy)さんが開発したものです。

短期6本、長期6本、短期長期間の空白のサイズでトレンドをはかるといものらしいです。

ただ、私の経験則上、移動平均をベースにした取引は成功しないことが多いです。遅延量が大きいためです。

ですので、いままで考慮していませんでしたが、開発していたGewinn7や変化率分散バンドがひと段落したのと、GMMAで専業トレーダーさんになった!という方が多いため、ちょっと研究したいと思います。

まず、チャートにGMMAを出してみました。
さて、この段階だと、視覚的経験則に頼る形となます。
私の目標はEA化することですので現時点で向いていません。GMMA直接の波形解析などは気が狂いそうなコードになりそうです。

そこで、次回は、GMMAをベースとしたサブウインドウ型インジケータを検討したいと思います。

■GMMAシリーズ
・GMMA その1 まずGMMAを表示してみた
http://mt4program.blogspot.jp/2016/03/mt4gmma-gmma.html

・GMMA その2 短期・長期・バンド幅を表示して取引タイミングを計る
http://mt4program.blogspot.jp/2016/03/mt4gmma.html

・GMMA その3 EMAの順番をインデックス化して押し目タイミングを計る
http://mt4program.blogspot.jp/2016/03/mt4gmma-ema.html

・GMMA その4 移動平均位置を利用した押し目戦略をバックテストで検証する
http://mt4program.blogspot.com/2016/03/mt4gmma_8.html

・GMMA その5 インデックスと幅とチャートの関係をもう少し詳しく考察する
http://mt4program.blogspot.com/2016/03/mt4gmma_9.html


MT4開発日記で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

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

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

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

GMMAのソースコードはこちらから。



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

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

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

input color ShortLineColor = clrIndianRed;// 短期色
input color LongLineColor = clrAqua;// 長期色
input ENUM_APPLIED_PRICE MaPrice = PRICE_CLOSE; // 対象価格

input int Period1 = 3;  // EMA1期間
input int Period2 = 5;  // EMA2期間
input int Period3 = 8;  // EMA3期間
input int Period4 = 10;  // EMA4期間
input int Period5 = 12;  // EMA5期間
input int Period6 = 15;  // EMA6期間
input int Period7 = 30;  // EMA7期間
input int Period8 = 35;  // EMA8期間
input int Period9 = 40;  // EMA9期間
input int Period10 = 45;  // EMA10期間
input int Period11 = 50;  // EMA11期間
input int Period12 = 60;  // EMA12期間

double ema1[];
double ema2[];
double ema3[];
double ema4[];
double ema5[];
double ema6[];
double ema7[];
double ema8[];
double ema9[];
double ema10[];
double ema11[];
double ema12[];

//------------------------------------------------------------------
//初期化
int OnInit()
{
   //インジケーターバッファを初期化する。
   int count = 0 ;
   SetIndexBuffer(count++, ema1);
   SetIndexBuffer(count++, ema2);
   SetIndexBuffer(count++, ema3);
   SetIndexBuffer(count++, ema4);
   SetIndexBuffer(count++, ema5);
   SetIndexBuffer(count++, ema6);
   SetIndexBuffer(count++, ema7);
   SetIndexBuffer(count++, ema8);
   SetIndexBuffer(count++, ema9);
   SetIndexBuffer(count++, ema10);
   SetIndexBuffer(count++, ema11);
   SetIndexBuffer(count++, ema12);

   for(int i = 0; i < 6; i++ )
   {
      SetIndexStyle(i, DRAW_LINE, STYLE_SOLID, 1, ShortLineColor);
      SetIndexStyle(i + 6, DRAW_LINE, STYLE_SOLID, 1, LongLineColor);
   }

   string short_name = "GMMA";
   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++ )
   {
      ema1[i] = iMA(Symbol(), PERIOD_CURRENT, Period1, 0, MODE_EMA, MaPrice, i);
      ema2[i] = iMA(Symbol(), PERIOD_CURRENT, Period2, 0, MODE_EMA, MaPrice, i);
      ema3[i] = iMA(Symbol(), PERIOD_CURRENT, Period3, 0, MODE_EMA, MaPrice, i);
      ema4[i] = iMA(Symbol(), PERIOD_CURRENT, Period4, 0, MODE_EMA, MaPrice, i);
      ema5[i] = iMA(Symbol(), PERIOD_CURRENT, Period5, 0, MODE_EMA, MaPrice, i);
      ema6[i] = iMA(Symbol(), PERIOD_CURRENT, Period6, 0, MODE_EMA, MaPrice, i);
      ema7[i] = iMA(Symbol(), PERIOD_CURRENT, Period7, 0, MODE_EMA, MaPrice, i);
      ema8[i] = iMA(Symbol(), PERIOD_CURRENT, Period8, 0, MODE_EMA, MaPrice, i);
      ema9[i] = iMA(Symbol(), PERIOD_CURRENT, Period9, 0, MODE_EMA, MaPrice, i);
      ema10[i] = iMA(Symbol(), PERIOD_CURRENT, Period10, 0, MODE_EMA, MaPrice, i);
      ema11[i] = iMA(Symbol(), PERIOD_CURRENT, Period11, 0, MODE_EMA, MaPrice, i);
      ema12[i] = iMA(Symbol(), PERIOD_CURRENT, Period12, 0, MODE_EMA, MaPrice, i);
   }
   
   //元となる値を計算する。unFix期間は計算し続ける。
   return(rates_total - 1);
}