Backtesting/Optimierung - Seite 47

 
#property copyright "HS"

#property link ""

//---- input parameters

extern bool AccountIsIBFXmini=false;

extern double Lots=0.1;

extern double MaximumRisk=0.03;

extern double DecreaseFactor=300;

extern double MinLot=0.01;

extern int Slippage=3;

extern double TrailingStop=30;

double StartBalance,StartEquity;

extern bool UseHourTrade = false;

extern int FromHourTrade = 6;

extern int ToHourTrade = 18;

//---- global variables

int dir=0;

int openorders=0;

int cnt;

string pair;

int MagicNumber;

int bsflag=0;

int bstarget=0;

//+------------------------------------------------------------------+

//| expert initialization function |

//+------------------------------------------------------------------+

int init()

{

if (Symbol() == "AUDCADm" || Symbol() == "AUDCAD") { MagicNumber = 427101; }

if (Symbol() == "AUDJPYm" || Symbol() == "AUDJPY") { MagicNumber = 427102; }

if (Symbol() == "AUDNZDm" || Symbol() == "AUDNZD") { MagicNumber = 427103; }

if (Symbol() == "AUDUSDm" || Symbol() == "AUDUSD") { MagicNumber = 427104; }

if (Symbol() == "CHFJPYm" || Symbol() == "CHFJPY") { MagicNumber = 427105; }

if (Symbol() == "EURAUDm" || Symbol() == "EURAUD") { MagicNumber = 427106; }

if (Symbol() == "EURCADm" || Symbol() == "EURCAD") { MagicNumber = 427107; }

if (Symbol() == "EURCHFm" || Symbol() == "EURCHF") { MagicNumber = 427108; }

if (Symbol() == "EURGBPm" || Symbol() == "EURGBP") { MagicNumber = 427109; }

if (Symbol() == "EURJPYm" || Symbol() == "EURJPY") { MagicNumber = 427110; }

if (Symbol() == "EURUSDm" || Symbol() == "EURUSD") { MagicNumber = 427111; }

if (Symbol() == "GBPCHFm" || Symbol() == "GBPCHF") { MagicNumber = 427112; }

if (Symbol() == "GBPJPYm" || Symbol() == "GBPJPY") { MagicNumber = 427113; }

if (Symbol() == "GBPUSDm" || Symbol() == "GBPUSD") { MagicNumber = 427114; }

if (Symbol() == "NZDJPYm" || Symbol() == "NZDJPY") { MagicNumber = 427115; }

if (Symbol() == "NZDUSDm" || Symbol() == "NZDUSD") { MagicNumber = 427116; }

if (Symbol() == "USDCHFm" || Symbol() == "USDCHF") { MagicNumber = 427117; }

if (Symbol() == "USDJPYm" || Symbol() == "USDJPY") { MagicNumber = 427118; }

if (Symbol() == "USDCADm" || Symbol() == "USDCAD") { MagicNumber = 427119; }

if (MagicNumber == 0) { MagicNumber = 427199; }

pair = Symbol();

return(0);

}

//+------------------------------------------------------------------+

//| expert deinitialization function |

//+------------------------------------------------------------------+

int deinit()

{

return(0);

}

//+------------------------------------------------------------------+

//+------------------------------------------------------------------+

//| Calculate open positions |

//+------------------------------------------------------------------+

int GetCurrentOrders()

{

//---- calc open OrderSelect

openorders=0;

dir=0;

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)

{

openorders+=1;

if(OrderType()==OP_BUY) dir=1;

if(OrderType()==OP_SELL) dir=-1;

}

}

}

//+-------------------End Calculate open positions-------------------+

//+------------------------------------------------------------------+

//| Calculate optimal lot size |

//+------------------------------------------------------------------+

double LotsOptimized()

{

double lot=Lots;

int orders=HistoryTotal(); // history orders total

int losses=0; // number of losses orders without a break

//---- select lot size

lot=NormalizeDouble(AccountFreeMargin()*MaximumRisk/500.0,1);

//---- calculate number of losses orders without a break

if(DecreaseFactor>0)

{

for(int i=orders-1;i>=0;i--)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)==false) { Print("Error in history!"); break; }

if(OrderSymbol()!=Symbol() || OrderMagicNumber()!=MagicNumber || OrderType()>OP_SELL) continue;

//----

if(OrderProfit()>0) break;

if(OrderProfit()<0) losses++;

}

if(losses>1) lot=NormalizeDouble(lot-lot*losses/DecreaseFactor,1);

}

//---- return lot size

if(lot>999) lot=999;

if(lot<MinLot) lot=MinLot;

return(lot);

}

//+-------------------End Calculate optimal lot size-----------------+

//+------------------------------------------------------------------+

//| Close Open Position |

//+------------------------------------------------------------------+

int CloseTrade()

{

for(int i=0;i<OrdersTotal();i++)

{

if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break;

if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber)

{

if(OrderType()==OP_BUY) OrderClose(OrderTicket(),OrderLots(),Bid,3,Yellow);

if(OrderType()==OP_SELL) OrderClose(OrderTicket(),OrderLots(),Ask,3,Yellow);

}

}

}

//+----------------------End Close Open Position---------------------+

//+------------------------------------------------------------------+

//| Open Trade Position |

//+------------------------------------------------------------------+

int OpenTrade()

{

int vLots=LotsOptimized();

if (bsflag==1) OrderSend(Symbol(),OP_BUY,LotsOptimized(),Ask,Slippage,0,Ask+bstarget*Point,"NoLoss",MagicNumber,0,Green);

if (bsflag==2) OrderSend(Symbol(),OP_SELL,LotsOptimized(),Bid,Slippage,0,Ask-bstarget*Point,"NoLoss",MagicNumber,0,Red);

}

//+----------------------End Open Trade Position---------------------+

//+------------------------------------------------------------------+

//| Buy/Sell Indicator |

//+------------------------------------------------------------------+

int CalcBSI()

{

//---- calc current indicators

//double val1=iCustom("GBPJPY",0,"NoLoss",0,0,0);

//double val2=iCustom("GBPJPY",0,"NoLoss",0,1,0);

//double val3=iCustom("USDJPY",0,"NoLoss",0,0,0);

//double val4=iCustom("USDJPY",0,"NoLoss",0,1,0);

double val1=iOpen("GBPJPY",0,0);

double val2=iClose("GBPJPY",0,0);

double val3=iOpen("USDJPY",0,0);

double val4=iClose("USDJPY",0,0);

double nval1=xDiv(val1,val2);

double nval2=xDiv(val3,val4);

if(nval1>nval2)

{

bsflag=2;

bstarget=(nval1-nval2)*10000;

} else

if(nval1<nval2)

{

bsflag=1;

bstarget=(nval2-nval1)*10000;

}

else

{

bsflag=0;

bstarget=0;

}

if(bstarget<10)

{

bsflag=0;

bstarget=0;

}

}

//+-----------------------End Buy/Sell Indicator---------------------+

//+------------------------------------------------------------------+

//| expert start function |

//+------------------------------------------------------------------+

int start()

{

if (Period()<PERIOD_H1) { Alert("Only on H1 or larger!"); return(0); } // For use only on H4 --- NO ERROR if activated

for(cnt=0;cnt<OrdersTotal();cnt++)

{

OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);

if(OrderType()<=OP_SELL && // check for opened position

OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber) // check for symbol and magic number

{

if(OrderType()==OP_BUY) // long position is opened

{

// check for trailing stop

if(TrailingStop>0)

{

if(Bid-OrderOpenPrice()>Point*TrailingStop)

{

if(OrderStopLoss()<Bid-Point*TrailingStop)

{

OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green);

return(0);

}

}

}

}

else // go to short position

{

// check for trailing stop

if(TrailingStop>0)

{

if((OrderOpenPrice()-Ask)>(Point*TrailingStop))

{

if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))

{

OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red);

return(0);

}

}

}

}

}

}

//+--------------------End TrailingStop & BreakEven------------------+

if (UseHourTrade)

{

if (!((Hour() >= FromHourTrade) && (Hour() <= ToHourTrade)))

{

Comment("Non-Trading Hours!");

return(0);

}

}

GetCurrentOrders();

CalcBSI();

Comment("\nStart Balance= ",StartBalance,",","Start Equity= ",StartEquity,

"\nBalance: ",AccountBalance(),","," Equity: ",AccountEquity(),","," TotalProfit: ",AccountProfit(),

"\nBSFlag: ",bsflag,"\nbstarget: ",bstarget);

//---- exit trades

if (openorders!=0) {

if ((bsflag==1) && (dir<0)) CloseTrade();

if ((bsflag==2) && (dir>0)) CloseTrade();

}

//---- open trades

else

{

if (bsflag != 0 && bstarget>20) OpenTrade();

}

}

//+---------------------End Expert Start Function--------------------+

double xDiv(double a, double b)

{

if(b==0) return(b); else return(a/b);

}
 

Bitte um Hilfe!

Gibt es eine Möglichkeit, die Berichte des Strategietesters nach den Kriterien "Gewonnene Short-Positionen in %" und "Gewonnene Long-Positionen in %" im Optimierungsbericht zu filtern? Derzeit kann man nur nach Gewinn, Gesamtzahl der Trades, Gewinnfaktor, erwarteter Auszahlung usw. filtern.

Vielen Dank im Voraus!

 

MT4 vs. Trade Station

Grüße alle,

Ich habe mich gefragt, ob ich einige Rückmeldungen/Meinungen/Ideen von den vielen Leuten, die schlauer sind als ich, in diesem Forum bekommen könnte.

Wenn ich eine Strategie auf MT4 backteste, erhalte ich andere Ergebnisse als beim Backtest mit der Trade Station....die Codierung ist die gleiche... wenn ich Live-Trades beobachte, werden sie zur gleichen Zeit ausgelöst und beendet etc....aber der Backtest liefert sehr unterschiedliche Ergebnisse... wem sollte ich glauben?

Ich habe gehört, dass die TS-Daten besser sind als die von MT4, aber ich wollte herausfinden, was einige von Ihnen denken...

Vielen Dank an alle

 
amyfor:
Grüße an alle,

Ich habe mich gefragt, ob ich ein paar Rückmeldungen/Meinungen/Ideen von den vielen Leuten, die schlauer sind als ich, auf diesem Board bekommen könnte.

Wenn ich eine Strategie auf MT4 backteste, erhalte ich andere Ergebnisse als beim Backtest mit der Trade Station..... Die Codierung ist die gleiche... wenn ich Live-Trades beobachte, werden sie zur gleichen Zeit ausgelöst und beendet etc...., aber das Backtesting liefert sehr unterschiedliche Ergebnisse... wem sollte ich glauben?

Ich habe gehört, dass die Daten von TS besser sind als die von MT4, aber ich wollte herausfinden, was einige von Ihnen denken...

Vielen Dank an alle

Es sind völlig unterschiedliche Programme, Unterschiede werden sein.

 
Linuxser:
Es sind völlig unterschiedliche Programme, Unterschiede werden sein.

Hallo Linuxser....wiederum danke für die Antwort und danke für das Verschieben dieses Themas in den richtigen Thread.

Absolut, ich erwarte, dass es einige Unterschiede gibt, da es verschiedene Programme sind...Ich schätze, was ich mich frage, ist, ob ich den Backtest-Ergebnissen des einen mehr trauen sollte als denen des anderen...die Live-Forward-Trades stimmen zu 95% der Zeit überein...Als Beispiel...was würden Sie (oder jedes andere Mitglied hier) tun, wenn Sie mit zwei Ergebnissätzen für den Handel mit der gleichen Strategie konfrontiert würden...beide ablehnen...demjenigen mit den besten Ergebnissen vertrauen...

Nochmals vielen Dank für all die Mühe und Zeit, die Sie in diesen Ort stecken, der so hilfreich ist.

 
amyfor:
Beispiel ... was würden Sie (oder ein anderes Mitglied hier) tun, wenn Sie mit zwei Sätzen von Ergebnissen Handel die gleiche Strategie angesprochen wurden ... entlassen beide ... Vertrauen Sie die eine mit den besten Ergebnissen ... Nochmals vielen Dank für all die Mühe und Zeit, die Sie in diesen Ort so hilfreich zu machen.

Das Gleiche, was ich immer mache. Papier + Stift + Excel + System in der Tabelle + mein eigenes Urteil.

 

Wie kann man optimieren?

Wie kann man einen EA am besten optimieren? Ich habe einen sehr guten EA gefunden, der optimiert werden muss, und ich habe keine Ahnung, wie man das macht.

Jemand hat es für Alpari getan und ich muss es für IBFX tun? Kann mir jemand helfen?

Vielen Dank im Voraus für jede Hilfe.

Herr Chips

 
Linuxser:
Das Gleiche mache ich immer. Papier + Stift + Excel + System auf der Karte + mein eigenes Urteil.

Gute Antwort...danke nochmals.

 

Ist es möglich, unterschiedliche Testergebnisse zu erhalten?

Ich erhalte unterschiedliche Ergebnisse, wenn ich denselben EA mit demselben Symbol und demselben Datumsbereich teste.

Wenn ich mehrmals auf Start klicke, erhalte ich unterschiedliche Ergebnisse. Meine erste Reaktion war, dass es irgendeine Zufallsfunktion im EA gibt, aber ich kann nichts dergleichen im Code sehen. Wenn ich mir den detaillierten Bericht für jede Auftragszeile ansehe, weichen die Zeilen um ein oder zwei Cent in Preis, S/L und T/P ab.

Was habe ich übersehen? Dies ist MT4, Build 218.

 

???

------------------------------------