2016年3月28日月曜日

EA ADX 47 四連続ベットの回数を変更すると

4Rシステムはエントリー後の損益を利益に変えるためのシステムです。
4回連続でナンピン平均化売買プッシュでエントリー方向を間違えても3回まではフォローできるようにしていました。
なぜはじめと合わせて4回かというところですが、4回目で1+1+2+4で8本エントリーします。
利益から検討すると10本以内が理想的と考えたからです。

しかし、考えただけで検証はしていませんでした。
もしかすると5回がいいかも6回はもっといいかも、7回はもっといいかもしれません。
しかし回数を増やすと完敗した時のドローダウンは大きくなります。
そのさじ加減はどんなものでしょうか。

連続回数を4-7まで設定で選択できるようにしました。
結構大変でしたw
47というと元東京大学の某氏を思い出すのはわたしだけでしょうか

こまかい条件設定を説明します。

バックテストの設定のテスト設定です。
初期証拠金は最低4連続の時は80,000JPy5連続は15万円、6連続は30万円、7連続は60万円は必要になります。

数字の後ろはプルダウンですが「JPY」と手入力してください。
Roundは4-7の数字を入れて下さい。連続フォロー回数です。
上のメモに書いておきました。

Lotsもうえのメモに書いておきました、
上限10万単位の場合 4連は0.12以下 5連は0.06以下 6連は0.03以下 7連は0.01
でお願いします。

Profitはエントリーの幅
VolはADXのエントリーボリュームです。

今回は最終行でADXの30分足で見ていますが、どの足がいいか最適化してみてください。

7連続で2015は負け知らずの結果が出ましたが60万円で六万弱の利益では悲しいですね。
6連続で初期証拠金30万円利益6万円まで確認できました・・・

エントリーシステムとその時間足を最適化すれば無敗のEAができそうです。
難解だったModify()もかなりシンプルに再構築できました。

#property copyright "Copyright 2016/3/28,TACA"
#property link      "http://mt4kyoto.blogspot.jp/"
extern int MAGIC=777;
extern string RoundMemo="Round 4-7";
extern int Round=4;int SubRound;
extern string LotsMemo="Round/MaxLots 4:0.12 5:0.06 6:0.03 7:0.01";
extern double Lots=0.01;
extern double Profit=460;
extern int Vol=20;
double TProfit;double StopLoss;double Entry;double Mode;double ModeOld;
int d;int i;int LB;double LS;double L;datetime TimeOld;double Limit;
void init(){Profit*=Point;Limit=Close[0]*400*MathPow(2,Round-1);
if (Round<6){SubRound=Round;}else{SubRound=Round+1;}}
//---Main Routine---
void OnTick(){if(Time[0]!=TimeOld){TimeOld=Time[0];if(AccountEquity()<Limit){return;}
if(OrdersTotal()==0){
 if(TACAADX(0,1)>Vol){
  if(TACAADX(1,2)<TACAADX(2,2)){if(TACAADX(1,1)>TACAADX(2,1)){EL();}}
  if(TACAADX(1,2)>TACAADX(2,2)){if(TACAADX(1,1)<TACAADX(2,1)){ES();}}
  }}}
  Del();Modify();}
//---Long Entry Routine---
void EL(){Entry=Ask;StopLoss=Ask-Profit*Round;d=OrderSend(NULL,OP_BUY,Lots,Ask,3,StopLoss,Ask+Profit,"Long1",MAGIC,0,clrNONE);
 for(i=0;i<Round-1;i++) {d=OrderSend(NULL,OP_BUYLIMIT,Lots*MathPow(2,i),Ask-Profit*(i+1),3,StopLoss,Ask+Profit,NULL,MAGIC,0,clrNONE);}}
//---Short Entry Routine--- 
void ES(){Entry=Bid;StopLoss=Bid+Profit*Round;d=OrderSend(NULL,OP_SELL,Lots,Bid,3,StopLoss,Bid-Profit,"Short1",MAGIC,0,clrNONE);
 for(i=0;i<Round-1;i++){ d=OrderSend(NULL,OP_SELLLIMIT,Lots*MathPow(2,i),Bid+Profit*(i+1),3,StopLoss,Bid-Profit,NULL,MAGIC,0,clrNONE);}}
//---Modify Routine--- 
void Modify(){Mode=0;for(i=0;i<Round;i++){d=OrderSelect(i,SELECT_BY_POS);Mode+=OrderType();}
if(ModeOld!=Mode){ModeOld=Mode;
d=OrderSelect(0,SELECT_BY_POS);
if(OrderType()==0){TProfit=Entry+(Mode/2-Round+2)*Profit;}else{TProfit=Entry+(SubRound-+MathFloor(Mode/2))*Profit;}
for(i=0;i<Round;i++){d=OrderSelect(i,SELECT_BY_POS);d=OrderModify(OrderTicket(),OrderOpenPrice(),StopLoss,TProfit,0,clrNONE);}}}
//---Del Routine---
void Del(){if (OrdersTotal()!=Round){for(i=OrdersTotal()-1;i>=0;i--){d=OrderSelect(i,SELECT_BY_POS);d=OrderDelete(OrderTicket(),clrNONE);}}}
//---TACA ADX Routine---
double TACAADX(int Modes,int Shift){return(iADX(NULL,30,14,0,Modes,Shift));}

0 件のコメント:

コメントを投稿