2015年10月14日水曜日

MT4って素晴らしい。過去データを使ってTEMA平均足の曜日性を検証する。

まぁ普段から数学数学っていってますが、結局のところ、どのような考え方するにしろ統計が基本となります。 統計っていうと観察と検証なので、まず観察する必要があります。

最新の相場だけを観察してもデータ数が少なすぎてよくわかりません。 そこで、MT4のスクリプトやバックテストがとても役に立ちます。 EAにするかどうかは、さておき、考え方を取りまとめて検証できるというのは本当に素晴らしいです。MT4さまさまです。

 たとえばですが、先日検証したTEMA平均足日足ベースの取引で+になることがわかりました。さらになにかしら特性を見つけることができれば、もっとよいのではないでしょうか? ということで、TEMA平均足の転換と勝率に曜日特性があるのかないのかをスクリプトを使ってCSVファイルに吐き出してExcelでグラフにしてみました。 

2005/1/1~2015/10/9までを対象に日足ベースでTEMA平均足が転換した回数と、転換の次の日に転換結果通りに価格が動いた割合を示しています。

棒グラフは回数、線グラフが勝率となります。
日足はGMT+2です。


■曜日ごとのTEMA平均足転換回数と翌日の値動き


転換回数を見ると、火曜日、木曜日に多い傾向があります。
また勝率は、水曜日、木曜日が高く、それ以外の日は50%を割り込んでいます。

転換の2日後までポジションを保持したと仮定した場合はどうでしょうか?こちらも検証してみました。

■曜日ごとのTEMA平均足転換回数と翌日~明後日の値動き

火曜日の勝率が大きく上がっています。ただし、月曜日と金曜日は50%を割り込んだままです。

このことから、TEMA平均足の日足ベースでは、月曜日と金曜日は転換をしても取引しないほうが良いことがわかります。
また、火曜日に転換が発生した場合、水曜日の押しを狙ってポジションを構築するとよいことが1日間と2日間の勝率の差から想像できます。

このように、特性を明確にすることで戦略の構築が可能です。

ちなみに、金曜日は直観的にですが、利確の動きでシグナルが発生することがあるんだなーってかんじで、月曜日は日本時間で金曜日の動きを引き継いだ後にEU時間で逆転って感じでしょうか?

裁量取引においても、このように自分の考えが正しいかを検証したり、過去データを見てより確率の高い戦略を構築できます。裁量取引の方もMT4プログラミングできると楽しいですよ?


TEMA平均足のご購入はこちらから。
10/15まで割引価格で販売しております。

平均足のOPEN値にTEMAを適用したカスタム平均足
TEMA平均足



FX-ONブログランキングにご協力よろしくお願いいたしますm(_ _ )m


今回のプログラムはこちらです。
スクリプトを使って実装しています。



//------------------------------------------------------------------
// TEMA 転換曜日分析
#property copyright "Copyright 2015,  Daisuke"
#property link      "http://mt4program.blogspot.jp/"
#property version   "1.00"
#property strict

// 適用パラメータ 列挙値
enum ENUM_TEMA_PRICE
{
   //終値
   TEMA_PRICE_CLOSE,
   //始値
   TEMA_PRICE_OPEN,
   //高値
   TEMA_PRICE_HIGH,
   //安値
   TEMA_PRICE_LOW,
   //(高値+安値)/2
   TEMA_PRICE_MEDIAN,
   //(高値+安値+終値)/3
   TEMA_PRICE_TYPICAL,
   //(高値+安値+終値+終値)/4
   TEMA_PRICE_WEIGHTED,
   //(高値+安値+終値+始値)/4
   TEMA_PRICE_OHLC,
};

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
{
   string symbol = "EURUSD";
   ENUM_TIMEFRAMES period = PERIOD_D1;

   int handle = FileOpen("TEMA.csv", FILE_CSV|FILE_WRITE, ',', CP_ACP);

   int i = 2 ;
   while( true )
   {
      datetime time = iTime( symbol, period, i );
      if( time == 0 ) break ;
   
      int dow = TimeDayOfWeek( time );
      if( dow == 0 || dow == 6 )
      {
         i++;
         continue;
      }
   
      double open0 = iCustom(symbol, period, "Blogネタ/TEMAHeikinAshi", 0.1, TEMA_PRICE_WEIGHTED, TEMA_PRICE_WEIGHTED, true, 21, 0.5, 6, i);
      double close0 = iCustom(symbol, period, "Blogネタ/TEMAHeikinAshi", 0.1, TEMA_PRICE_WEIGHTED, TEMA_PRICE_WEIGHTED, true, 21, 0.5, 7, i);
 
      double open1 = iCustom(symbol, period, "Blogネタ/TEMAHeikinAshi", 0.1, TEMA_PRICE_WEIGHTED, TEMA_PRICE_WEIGHTED, true, 21, 0.5, 6, i + 1);
      double close1 = iCustom(symbol, period, "Blogネタ/TEMAHeikinAshi", 0.1,TEMA_PRICE_WEIGHTED, TEMA_PRICE_WEIGHTED, true, 21, 0.5, 7, i + 1);
   
      // 変換点が発生した場合、 ファイルに書き込む
      if( open0 < close0 && open1 > close1)
      {
         int j = i - 1;
         dow = TimeDayOfWeek( iTime( symbol, period, j ) ) ;
         if( dow == 0 || dow == 6) j--;
         int k = j;
/*      
         int k = j - 1;
         dow = TimeDayOfWeek( iTime( symbol, period, k ) ) ;
         if( dow == 0 || dow == 6) k--;
*/      
         string potision = iOpen( symbol, period, j ) < iClose( symbol, period, k ) ? "WIN" : "LOSE";
         FileWrite(handle, "UP", TimeToStr(time), TimeDayOfWeek(time), potision, open0, close0, open1, close1 );
      }

      if( open0 > close0 && open1 < close1)
      {
         int j = i - 1;
         dow = TimeDayOfWeek( iTime( symbol, period, j ) ) ;
         if( dow == 0 || dow == 6) j--;
         int k = j;
/*         int k = j - 1;
         dow = TimeDayOfWeek( iTime( symbol, period, k ) ) ;
         if( dow == 0 || dow == 6) k--;
*/
         string potision = iOpen( symbol, period, j ) > iClose( symbol, period, k ) ? "WIN" : "LOSE";
         FileWrite(handle, "DOWN", TimeToStr(time), TimeDayOfWeek(time), potision, open0, close0, open1, close1 );
      }

      i++;
   }
   FileClose(handle);
}
//+------------------------------------------------------------------+