[FX] 勝率を上げる zero trailing

勝率を上げる一つの方法を思いついたので、EA に組み込んでみました。

いえ、裁量ではしょっちゅう使っている手なんですが、EA ではいままで組み込んでいませんでした。

エントリ後ある程度思惑通りに進んで、エントリポイントを十分超えたなと思ったら、ロスカットを初期ロスカットからエントリポイント(+スプレッド上乗せ)のところに置き直すものです。

こうするとこの後は”負け”はなくなります。

どのくらい超えたらいいのかはいずれ調べることにして、とりあえず yasciiVQ04e.ex4 を使って、エントリポイントを 初期ロスカットと同じ分だけ超えたらエントリポイント+スプレッドのところにロスカットを移動するように改良してみます。

改良前 EURGBP 1時間足 2015/3/12-4/8

改良後 EURGBP 1時間足 2015/3/12-4/8

7勝8敗が 8勝7敗になっただけのようですが、最大負けトレード額も減少したのはうれしいですね。

だのに総損益が下がっているので、勝ちの額にもやはり悪影響があるようです。

要するに早すぎる利益確定になってしまう分が結構あるようですね。

プログラムソース yasciiVQ04f.mq4

//
// yasciiVQ04f.mq4
//           VQ_bars 使用
//           HLBand(LHH)& Cloud & Time filter
//           zero trailing

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

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

extern int       HL_Period=14;
extern int Fast_period = 14 ;
double margin = 0.0 ;

extern double ILC = 10.0 ;

// VQ_bars 用
extern   int      Length=6;
extern   int      Method=3;
extern   int      Smoothing=1;
extern   int      Filter=1;
extern   bool     Steady =false;

extern int in_time = 10; // 取引開始時間
extern int out_time = 20; // 取引停止時間

int       Tenkan_sen=9;
int       Kijun_sen=26;
double    Senkou_span_b=52;

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

double TS1 = 0.0 ;
double TS2 = 1000.0 ;

int start(){

   double lc = ILC;
   if(( Digits ==3 ) ||(Digits ==5)) lc = lc*10.0 ;

    //暴落対策(始め)

   double FastHH1 = Close[iHighest(NULL, 0, MODE_CLOSE, Fast_period, 1)];
   double FastLL1 = Close[iLowest(NULL, 0, MODE_CLOSE, Fast_period, 1)];

   //買いポジションのエグジット
   OS1 = OrderSelect(Ticket_L, SELECT_BY_TICKET); 
   OOPL = OrderOpenPrice();
   if (Bid > OOPL + lc*Point) TS1 = OOPL + Ask - Bid ;
   if( (Bid < FastLL1 || Bid <= TS1 || Bid <= OOPL - lc*Point )
       && ( Ticket_L != 0 && Ticket_L != -1 ))
    {    
      Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red);
      if( Exit_L ==1 ) {Ticket_L = 0;}
    }   

   //売りポジションのエグジット
   OS2 = OrderSelect(Ticket_S, SELECT_BY_TICKET);
   OOPS = OrderOpenPrice();
   if (Ask < OOPS - lc*Point) TS2 = OOPS - Ask + Bid ; if( (Ask > FastHH1 || Ask >= TS2 || Ask >= OOPS + lc*Point)
       && ( Ticket_S != 0 && Ticket_S != -1 ))
    {    
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue);
      if( Exit_S ==1 ) {Ticket_S = 0;}
    }  

   //暴落対策(終わり)
    if (Volume[0]>1 || IsTradeAllowed() == false) return(0) ;

   double dir1 = iCustom(NULL, 0, "Downloads\\VQ_bars",Length,Method,Smoothing,Filter,Steady,4,1);
   double dir2 = iCustom(NULL, 0, "Downloads\\VQ_bars",Length,Method,Smoothing,Filter,Steady,4,2);

     double cla1 = iIchimoku( NULL, 0, Tenkan_sen, Kijun_sen, Senkou_span_b, 3, Kijun_sen);
     double clb1 = iIchimoku( NULL, 0, Tenkan_sen, Kijun_sen, Senkou_span_b, 4, Kijun_sen);

    double HH2 = Low[iHighest(NULL, 0, MODE_HIGH, HL_Period, 2)];
    double LL2 = High[iLowest(NULL, 0, MODE_LOW, HL_Period, 2)];

   //買いポジションのエグジット
    OS1 = OrderSelect(Ticket_L, SELECT_BY_TICKET); 
    OOPL = OrderOpenPrice();
    if(    ((dir1==-1 && dir2 ==1) || ( OOPL - lc*Point >= Close[1] ) || Close[1] < HH2) 
            && ( Ticket_L != 0 && Ticket_L != -1 ))
    {    
      Exit_L = OrderClose(Ticket_L,Lots,Bid,Slip,Red);
      if( Exit_L ==1 ) {Ticket_L = 0;}
    }   

   //売りポジションのエグジット
     OS2 = OrderSelect(Ticket_S, SELECT_BY_TICKET);
     OOPS = OrderOpenPrice();
   if(    ((dir1==1 && dir2 ==-1)||( OOPS + lc*Point <= Close[1] ) || Close[1] > LL2) 
          && ( Ticket_S != 0 && Ticket_S != -1 ))
    {    
      Exit_S = OrderClose(Ticket_S,Lots,Ask,Slip,Blue);
      if( Exit_S ==1 ) {Ticket_S = 0;}
    }  

   //買いエントリー
   if( (dir1==1 && dir2 ==-1) 
       && (Close[1] > cla1 && Close[1] > clb1)
       && (Hour() >= in_time && Hour() <= out_time)
       && ( 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( (dir1==-1 && dir2 ==1)   
       && (Close[1] < cla1 && Close[1] < clb1) && (Hour() >= in_time && Hour() <= out_time)
       && ( 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);


  }

###

[FX] 勝率を上げる zero trailing」への1件のフィードバック

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です