investment

[第2回]エンベロープとSMAを用いたトレード手法

前回検証したエンベロープにフィルタをかけて勝率を上げたいと思います。

フィルタとは、よりエントリーする条件を限定しトレードの精度を上げることである。

今回、用いるフィルタはSMA(単純移動平均線)でエンベロープのトレード精度を上げたいと思います。
ゴールデンクロスとデッドクロスをベースにフィルタをかけたいと思います。

パラメーター設定

エンベロープの値

  • 期間は14本を使用
  • シグマの値は0.1を使用

単純移動平均線の値

  • 短期:24本(24時間)
  • 長期:72本(72時間)

エントリー・エグジットの条件

  • 買いエントリー
    • 1本前のローソク足の始値が下のエンベロープよりも下
    • 1本前のローソク足の終値が下のエンベロープよりも上
    • 短期単純移動平均線>長期単純移動平均線
  • 売りエントリー
    • 1本前のローソク足の始値が上のエンベロープよりも上
    • 1本前のローソク足の終値が上のエンベロープよりも下
    • 短期単純移動平均線<長期単純移動平均線
  • 買いエントリーのエグジット
    • 1本前のローソク足の終値が上のエンベロープよりも上
    • 短期単純移動平均線<長期単純移動平均線
  • 売りエントリーのエグジット
    • 1本前のローソク足の終値が下のエンベロープよりも下
    • 短期単純移動平均線>長期単純移動平均線

使用したソースコード

//product omurin

//マジックナンバーの定義
#define MAGIC  1113


//Moving Averages//
extern int Fast_MA_Period=24;
extern int Slow_MA_Period=72;
extern int MA_Method=0;
extern int MA_Shift=0;
//Envelope
extern int Envelope_Period=14;

extern double Lots = 0.1;     //取引ロット数
extern int Slip = 10;         //許容スリッページ数
extern string Comments =  ""; //コメント

//変数の設定//
int Ticket_L = 0; //買い注文の結果をキャッチする変数
int Ticket_S = 0; //売り注文の結果をキャッチする変数
int Exit_L = 0;   //買いポジションの決済注文の結果をキャッチする変数
int Exit_S = 0;   //売りポジションの決済注文の結果をキャッチする変数

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
//初期化//
//移動平均線//
double Fast_SMA=0;
double Slow_SMA=0;

//エンベロープ
double High_Envelopes=0;
double Low_Envelopes=0;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int start()
  {
  //移動平均線
   Fast_SMA=iCustom(NULL,0,"Moving Averages",Fast_MA_Period,MA_Shift,MA_Method,0,1);
   Slow_SMA=iCustom(NULL,0,"Moving Averages",Slow_MA_Period,MA_Shift,MA_Method,0,1);
  
   //エンベロープ
   High_Envelopes=iCustom(NULL,0,"Envelopes",Envelope_Period,0,"Exponential","Close",0.1,0,1);
   Low_Envelopes=iCustom(NULL,0,"Envelopes",Envelope_Period,0,"Exponential","Close",0.1,1,1);

//買いポジションのエグジット
   if((High_Envelopes<Close[1])
      ||(Fast_SMA<Slow_SMA)
      && (Ticket_L != 0 && Ticket_L != -1))
     {
      Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red);
      if(Exit_L ==1)
        {
         Ticket_L = 0;
        }
     }

//売りポジションのエグジット
   if((Low_Envelopes>Close[1])
      ||(Fast_SMA>Slow_SMA)
      && (Ticket_S != 0 && Ticket_S != -1))
     {
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue);
      if(Exit_S ==1)
        {
         Ticket_S = 0;
        }
     }

//買いエントリー
   if(((Low_Envelopes>Open[1])&&(Low_Envelopes<Close[1]))
      &&(Fast_SMA>Close[1])
      &&(Fast_SMA>Slow_SMA)
      && (Ticket_L == 0 || Ticket_L == -1)
      && (Ticket_S == 0 || Ticket_S == -1))
     {
      Ticket_L = OrderSend(Symbol(),OP_BUY,Lots,Ask,Slip,0,0,Comments,MAGIC,0,Red);
     }

//売りエントリー
  if(((High_Envelopes<Open[1])&&(High_Envelopes>Close[1]))
      &&(Fast_SMA<Close[1])
      &&(Fast_SMA<Slow_SMA)
      && (Ticket_S == 0 || Ticket_S == -1)
      && (Ticket_L == 0 || Ticket_L == -1))
     {
      Ticket_S = OrderSend(Symbol(),OP_SELL,Lots,Bid,Slip,0,0,Comments,MAGIC,0,Blue);
     }

   return(0);
  }

 

結果は以下のようになりました

通貨ペア GBP/JPY 1時間足
期間 2017.01.01~2019.12.31
ロット数 0.1(1万通貨)
初期証拠金 10000.00
純益 -1125.49
プロフィットファクタ 0.75
総取引数 227
期待利得 -4.96
勝率 58.59%
勝ちトレード(平均) 25.51
負けトレード(平均) -48.06

フィルタをかけたつもりでしたがプロフィットファクタが0.75と死んでいます(笑)
みなさんは間違ってもこのEAを使わないでください。破産します(笑)

勝てない理由としてはエンベロープはもともとSMAの偏差をとったオシレーターということが挙げられます。簡単にいうと、今回のトレード手法では種類は違えどSMAを4本使っただけなのです。結果としては、失敗に終わりましたがエンベロープとSMAを同時に用いただけでは意味がないということは分かりました。

最近、バックテストにすごい時間がかかってしまっているので、苦痛でしかありません。MT5を導入するとバックテストの時間が早くなるみたいなので、これからはMT5で紹介することになるかもです。

自作EAを作るならMT5がおすすめな理由こんにちは、omurinです しばらく、ブログの更新をお休みしていました。 その理由としてはMT5を導入してみようと思ったからです。現在、MT4が主流になっている中、omurinはMT5の魅力を伝えていきたいと思います。...