2016年3月8日火曜日

四連倍倍プッシュのトレイディングストップ化RSI4rIII

四連倍倍システムはRSIシグナルでエントリーし平均化するRSIAveragingシステムのエントリー数を限定するために開発したのですが、エントリー数の限定ゆえに利益が増えません。
四連倍倍プッシュ(4R、四連続ナンピン)はエントリー後10Pipsの利益が出れば利益確定、逆に進めば追加エントリー平均化で10Pipsの上昇でクローズ。
四回エントリーチャンスがありますが、どこのエントリー後も10Pips上がれば同じだけ利益が得られるシステムです。(IIは10Pipsの幅を調整できるようにしました)
しかし初めのエントリー後、追加エントリーしないときにはトレイディングストップすることで利益を増やす、もしくは追加エントリー回数を増やすことができるのではとのコンセプトで開発しました。
ソースがだいぶごちゃごちゃになってきたので怒られそうですが、ご容赦ください。
最適化にまる二日かかってしまいました。リスクベネフィットの面で納得できる値が出ていませんが、4Rより利益は出せますでお試しください。
最適化でいい値が出た時は教えてください^^






#property copyright "Copyright 2016/3/6,TACA"
#property link      "http://mt4kyoto.blogspot.jp/"
#define MAG 7777777
datetime TimeOld;
extern int RSIPeriod=20;
extern int RSIBL=30;
extern int RSIUL=70;
extern double Profit=2110;
extern double TSP=460;
extern double Lots=0.05;
double TSSL;
double TProfit;
double StopLoss;
double Entry;
double Type[4]={0,0,0,0};
double Mode;
double ModeOld;
int Ticket;
int Slip=3;
int d;
int i;
int init(){Profit*=Point;TSP*=Point;return(0);}
void start(){
if(Time[0]!=TimeOld){TimeOld=Time[0];
if(OrdersTotal()==0){ModeOld=0;
if(iRSI(NULL,0,RSIPeriod,0,1)<=RSIBL)
{LongEntry();}
if(iRSI(NULL,0,RSIPeriod,0,1)>=RSIUL)
{ShortEntry();}
}//Orderstotal
}//Time
Modify();
if (OrdersTotal()!=4){Delete();}
}//start
void TSU()
{if(Entry+TSP<Close[0]&&TSSL+TSP<Close[0])
  {TSSL=Close[0]-TSP;
  d=OrderSelect(Ticket,SELECT_BY_TICKET);
  d=OrderModify(OrderTicket(),OrderOpenPrice(),TSSL,0,0,clrNONE);
 
}
}
void TSD()
{if(Entry-TSP>Close[0]&&TSSL-TSP>Close[0])
  {TSSL=Close[0]+TSP;
  d=OrderSelect(Ticket,SELECT_BY_TICKET);
  d=OrderModify(OrderTicket(),OrderOpenPrice(),TSSL,0,0,clrNONE);
 
}
}
void NTS()
{
if (Mode<4){TProfit=Entry+(Mode-2)*Profit;}else{TProfit=Entry+(6-Mode)*Profit;}
if(Mode==3||Mode==7){TProfit=0;}
for(i=0;i<4;i++)
  {d=OrderSelect(i,SELECT_BY_POS);
   d=OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,TProfit,0,clrNONE);
   
}
}


void Modify(){Comment("");
for(i=0;i<4;i++){d=OrderSelect(i,SELECT_BY_POS);Type[i]=OrderType();}
if (Type[0]==0){Mode=(Type[1]+Type[2]+Type[3])/2;}
else{Mode=(1+Type[1]+Type[2]+Type[3])/2+2;}
if(ModeOld!=Mode)
{ModeOld=Mode;
NTS();}
if (Mode==3){TSU();}
else
if (Mode==7){TSD();}
}

void Delete()
{for (i=OrdersTotal()-1; i>=0; i--)
  {d=OrderSelect(i,SELECT_BY_POS);
   d=OrderDelete(OrderTicket(),clrNONE);
} } 


void LongEntry(){TSSL=Ask;
Entry=Ask;StopLoss=Ask-Profit*4;
 Ticket=OrderSend(NULL,OP_BUY    ,Lots,  Ask,    Slip,StopLoss,0,"Long1",MAG,0,Red);
 d=OrderSend(NULL,OP_BUYLIMIT,Lots,  Ask-Profit*1,Slip,StopLoss,0,"Long2",MAG,0,Red);
 d=OrderSend(NULL,OP_BUYLIMIT,Lots*2,Ask-Profit*2,Slip,StopLoss,0,"Long3",MAG,0,Red);
 d=OrderSend(NULL,OP_BUYLIMIT,Lots*4,Ask-Profit*3,Slip,StopLoss,0,"Long4",MAG,0,Red);
}
void ShortEntry(){TSSL=Bid;
Entry=Bid;StopLoss=Bid+Profit*4;
 Ticket=OrderSend(NULL,OP_SELL,    Lots,   Bid,    Slip,StopLoss,0,"Short1",MAG,0,Blue);
 d=OrderSend(NULL,OP_SELLLIMIT,Lots,   Bid+Profit*1,Slip,StopLoss,0,"Short2",MAG,0,Blue);
 d=OrderSend(NULL,OP_SELLLIMIT,Lots*2, Bid+Profit*2,Slip,StopLoss,0,"Short3",MAG,0,Blue);
 d=OrderSend(NULL,OP_SELLLIMIT,Lots*4, Bid+Profit*3,Slip,StopLoss,0,"Short4",MAG,0,Blue);
}

0 件のコメント:

コメントを投稿