Nicht jeder EA und nicht jede Strategie ist profitabel
Verwenden Sie den Strategietester auch im visuellen Modus und platzieren Sie die Indikatoren mit den gleichen Einstellungen, die Sie im EA eingestellt haben, auf dem Chart.
MA200 = iMA(NULL, 0, 200, 8,MODE_SMA,PRICE_CLOSE, 0); MA5 = iMA(NULL, 0, 5, 8,MODE_SMA,PRICE_CLOSE, 0); CurrentRSI = iRSI (NULL, 0, VarPeriod,PRICE_CLOSE ,0);
Bei jedem Tick werden die obigen Werte berechnet und sie können sich mit jedem Tick ändern, da Sie "....,PRICE_CLOSE, 0);" gewählt haben.
Die Werte, die Sie auf dem Chart sehen, wenn der Test abgeschlossen ist, sind nicht die Werte, die Sie haben, wenn ein Handel eröffnet wird...
if(AccountFreeMargin()<(1000*BuyVolume)) { Print("We have no money. Free Margin = ", AccountFreeMargin()); return(0); } if (CurrentRSI < LowerBound && MarketInfo(Symbol(), MODE_ASK) > MA200 ) { //Condition to execute buy entry Ticket = OrderSend(Symbol(), OP_BUY, BuyVolume, Ask, 3, Bid - ( StopLoss * Point ), Ask + ( TakeProfit * Point ), "Buy.", 111,0,Yellow) ; //execute buy order if(Ticket>0) { if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)) Print("BUY order opened : ",OrderOpenPrice()); } if (Ticket < 0) { Print("Error opening BUY order : ",GetLastError()); return(0); } return(0); }
Wenn die Bedingungen für die Eröffnung eines Kaufs erfüllt sind und der Tester einen Kauf eröffnet, wird nicht geprüft, ob Sie bereits einen Kauf mit derselben Bedingung eröffnet haben.
Nachdem ein Kauf eröffnet wurde, können Sie beim nächsten Tick wieder die Bedingung für die Eröffnung eines Handels haben.
Dieses Eröffnen von Trades kann in StrategyTester funktionieren, aber in Echtzeit in der Demo auf dem echten Konto,
Zum Beispiel ist die Auswahl von "3" Slippage zu niedrig für den Handel auf einem "5-stelligen" Konto.
Das Senden der OrderSend mit einem Wert für OrderStopLoss() und OrdertakeProfit() > 0 wird für ECN-Konten fehlschlagen
Total=OrdersTotal(); for(cnt=0;cnt<Total;cnt++) { OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES); if(OrderType()<=OP_SELL && OrderSymbol()==Symbol()) // check for symbol and check for opened position {In der OrderSend und in dieser Schleife zur Überprüfung der Trades vermisse ich die Verwendung Ihrer OrderMagicNumber()
und ich sehe, dass die Schleife aufwärts statt abwärts zählt, während Sie auch Positionen schließen wollen, wenn es nötig ist - also ein weiterer Fehler
Die OrderModify kann mit jedem Punkt passieren, was zu Fehlern von Brokern wie Tradecontext führen kann, die zu beschäftigt sind.
Auf einer Nebenbemerkung, kann ich wissen, was ist Shift und ma_shift und wie sollte ich es in zu füllen? seine ein Parameter für iRSI() Indikator erforderlich ich wusste nicht, was zu schreiben, so dass ich nur 0 zuweisen.
Ich weiß nicht, woher Sie diese Information haben, aber sie ist falsch...
iRSI() double iRSI(string symbol,int timeframe,int period,int applied_price,int shift)
vielleicht meinten Sie iMA()? shift ist die Taktnummer des Zeitraums, für den Sie den MA haben wollen, ma_shift ermöglicht es Ihnen, den MA-Wert relativ zur Taktnummer zu verschieben, wenn Sie also einen Shift von 5 und einen ma_shift von -2 zuweisen, erhalten Sie den MA für Takt 7, Sie müssten ein wenig damit experimentieren, um zu prüfen, ob ich richtig liege, im Prinzip schon.
Mit der Verwendung der strategytester tun es auch mit visuellen Modus auf und legen Sie auf dem Diagramm die Indikatoren, die Sie mit den gleichen Einstellungen, die Sie in der EA gesetzt haben, sind
Jeden Tick berechnen Sie die Werte oben und sie können sich mit jedem Tick ändern, weil Sie " ....,PRICE_CLOSE, 0);" gewählt haben.
was soll ich dann für den Shift-Wert" ....,PRICE_CLOSE, 0);" wählen?
Was soll ich dannfür den Shift-Wert" ....,PRICE_CLOSE,0);"wählen?
Verwenden Sie das. Verwenden Sie Bar 0, wenn Sie wollen, aber es wird "neu malen", auch wenn Sie PRICE_CLOSE, Close[0](Schlusskurs von Bar 0) == Bid verwenden. Wenn Bar 0 schließlich schließt, ist es nicht mehr Bar 0, sondern wird Bar 1.
Nicht jeder EA und nicht jede Strategie ist profitabel
Wenn Sie den Strategietester verwenden, tun Sie es auch mit dem visuellen Modus und platzieren Sie die Indikatoren mit den gleichen Einstellungen, die Sie im EA eingestellt haben, auf dem Chart.
Bei jedem Tick werden die oben genannten Werte berechnet und sie können sich bei jedem Tick ändern, da Sie "....,PRICE_CLOSE, 0);" gewählt haben.
Die Werte, die Sie im Chart sehen, wenn der Test abgeschlossen ist, sind nicht die Werte, die Sie hatten, als ein Handel eröffnet wurde...
Wenn die Bedingungen für die Eröffnung eines Kaufs erfüllt sind und der Tester einen Kauf eröffnet, wird nicht geprüft, ob Sie bereits einen Kauf mit derselben Bedingung eröffnet haben.
Nachdem ein Kauf eröffnet wurde, können Sie beim nächsten Tick wieder die Bedingung für die Eröffnung eines Handels haben.
Dieses Eröffnen von Trades kann in StrategyTester funktionieren, aber in Echtzeit in der Demo auf dem echten Konto,
Zum Beispiel ist die Auswahl von "3" Slippage zu niedrig für den Handel auf einem "5-stelligen" Konto.
Das Senden der OrderSend mit einem Wert für OrderStopLoss() und OrdertakeProfit() > 0 wird für ECN-Konten fehlschlagen
In der OrderSend und in dieser Schleife zur Überprüfung der Trades vermisse ich die Verwendung Ihrer OrderMagicNumber()und ich sehe, dass die Schleife aufwärts statt abwärts zählt, während Sie auch Positionen schließen wollen, falls erforderlich.
Die OrderModify kann mit jedem Point passieren, was zu Fehlern vom Broker führen kann, z.B. dass der Tradecontext zu beschäftigt ist.
Ich habe alles neu gemacht und fixiert die Schleife, Schlupf, fixiert den gleitenden Durchschnitt und RSI-Werte, stellte sicher, dass jede geöffnete Positionen geschlossen werden, bevor Sie neue Position. aber wenn ich backtest es, nichts passiert, keine kaufen/verkaufen wurden ausgeführt... was das Problem mit ihm wieder?
//+------------------------------------------------------------------+ //| My Strategy 4.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" extern double StopLoss = 40; extern double TakeProfit = 40; extern double Lots = 0.1; extern double Slippage = 10; extern double RSINow; extern double MA200; extern double MA5; extern bool A1 = false; extern bool A2 = false; extern int Ticket; extern int Ticket2; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- Alert("Minimum Stop Level is " + MarketInfo(Symbol(), MODE_STOPLEVEL)); //find out minimum stop loss RSINow = iRSI(NULL, 1440, 2, PRICE_CLOSE, 0); //calculates the RSI value for 2 days MA200 = iMA(NULL, 1440, 200, 0, MODE_SMA, PRICE_CLOSE,0); //calculates the moving average for 200 days MA5 = iMA(NULL, 1440, 5, 0, MODE_SMA, PRICE_CLOSE,0); //calculates the moving average for 5 days Alert(RSINow); Alert(MA200); Alert(MA5); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- //check if a long position is possible, A is false means no buy trade is open , execute buy when RSI drops below 5 and when Ask price rises above 200 day moving average if (A1 == false && RSINow < 5 && Ask > MA200) { Ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, Bid - ( StopLoss * Point ), Ask + ( TakeProfit * Point )); if(Ticket>0) { if(OrderSelect(Ticket,SELECT_BY_TICKET,MODE_TRADES)) { Print("BUY order opened : ",OrderOpenPrice()); A1 = true; } if (Ticket < 0) { Print("Error opening BUY order : ",GetLastError()); return(0); } } } //check if a short position is possible, A2 is false means no sell trade is open , execute sell when RSI rises above 95 and when Bid price drops below 200 day moving average if (A2 == false && RSINow > 95 && Bid < MA200) { Ticket2 = OrderSend(Symbol(), OP_BUY, Lots, Bid, Slippage, Ask + ( StopLoss * Point ), Bid - ( TakeProfit * Point )); if(Ticket2>0) { if(OrderSelect(Ticket2,SELECT_BY_TICKET,MODE_TRADES)) { Print("SELL order opened : ",OrderOpenPrice()); A2 = true; } if (Ticket2 < 0) { Print("Error opening SELL order : ",GetLastError()); return(0); } } } //check if buy position can be closed, once Ask price rises above 5 day moving average, its time to close the position. if ((A1 == true) && (Ask > MA5)) { OrderClose(Ticket, Lots, Bid, Slippage, Violet); A1 = false; return(0); } //check if sell position can be closed, if Bid price drops below 5 day moving average, close sell position. if ((A2 == true) && (Bid < MA5)) { OrderClose(Ticket2, Lots, Bid, Slippage, Violet); A2 = false; return(0); } //---- return(0); } //+------------------------------------------------------------------+
Ich habe alles neu gemacht und fixiert die Schleife, Schlupf, fixiert den gleitenden Durchschnitt und RSI-Werte, stellte sicher, dass jede geöffnete Positionen geschlossen werden, bevor Sie neue Position. aber wenn ich backtest es, nichts passiert, keine kaufen/verkaufen wurden ausgeführt... was das Problem mit ihm wieder?
Nein, die Schleife ist nicht fixiert, sie wurde entfernt und damit ist das Problem größer.
Sie verwenden A1 und A2, die den Wert true erhalten, sobald der Handel eröffnet wird.
aber was passiert, wenn die Stromversorgung Ihres PCs ausfällt und Sie Ihren PC und Metatrader neu starten müssen.
Sie haben zu diesem Zeitpunkt zu überprüfen, ob es Trades offen von Ihrem EA sind
Wie wollen Sie das machen ????
Um es einfacher zu machen, verwenden Sie eine spezielle OrderMagicNumber, die Ihre Trades öffnet und überprüft
.
der gleitende Durchschnitt wird nun nicht um einige Balken in der Zukunft verschoben ok
aber du berechnest ihn nur in der Sektion init() dies wird nur beim Starten deines Expert Advisors ausgeführt
Ich vermisse es in Start() .... Warum haben Sie es dort entfernt???
.
Habe Ihren Code umgeschrieben und einen Test versucht siehe auch die Einstellungen
Nicht mit den besten Backtestdaten, aber wenn man es richtig macht, kann es profitabel sein
Symbol | EURUSD (Euro gegen US Dollar) | ||||
Zeitraum | Täglich (D1) 2010.10.01 00:00 - 2013.01.29 00:00 (2010.10.01 - 2013.01.30) | ||||
Modell | Jeder Tick (die präziseste Methode auf der Grundlage aller verfügbaren Mindestzeitrahmen) | ||||
Parameter | RSIPeriod=3; UpperBound=90; LowerBound=5; MASlowPeriod=200; MAFastPeriod=5; Lots=0.1; StopLoss=60; TakeProfit=120; TrailingStop=40; MagicNumber=54333; CommentEA="RSI strategy"; Slippage.Pips=3; | ||||
Bars im Test | 1603 | Ticks modelliert | 40187739 | Qualität der Modellierung | k.A. |
Fehler bei nicht übereinstimmenden Diagrammen | 2062601 | ||||
Ursprüngliche Kaution | 3000.00 | ||||
Gesamtnettogewinn | 967.18 | Bruttogewinn | 2226.34 | Bruttoverlust | -1259.16 |
Gewinnfaktor | 1.77 | Erwartete Auszahlung | 13.62 | ||
Absoluter Drawdown | 107.10 | Maximale Auszahlung | 327.47 (7.99%) | Relative Absenkung | 7.99% (327.47) |
Gesamte Abschlüsse | 71 | Short-Positionen (gewonnene %) | 66 (69.70%) | Long-Positionen (Won %) | 5 (80.00%) |
Gewinnbringende Geschäfte (% der Gesamtsumme) | 50 (70.42%) | Verlustgeschäfte (% der Gesamtzahl) | 21 (29.58%) | ||
Größte | Gewinngeschäft | 120.07 | Verlusthandel | -60.00 | |
Durchschnittliche | Gewinn-Handel | 44.53 | Verlusthandel | -59.96 | |
Maximal | aufeinanderfolgende Gewinne (Gewinn in Geld) | 8 (424.26) | Verluste in Folge (Verlust in Geld) | 3 (-179.93) | |
Maximal | Gewinn in Folge (Anzahl der Gewinne) | 424.26 (8) | Konsekutiver Verlust (Anzahl der Verluste) | -179.93 (3) | |
Durchschnitt | Konsekutive Gewinne | 4 | aufeinanderfolgende Verluste | 2 |
Habe Ihren Code umgeschrieben und einen Test versucht siehe auch die Einstellungen
Nicht mit den besten Backtestdaten, aber wenn man es richtig macht, kann es profitabel sein
Trades insgesamt | 71 | Short-Positionen (gewonnene %) | 66 (69.70%) | Long-Positionen (gewonnene %) | 5 (80.00%) |
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Ich imitiere und schrieb eine gleiche EA mit dem Beispiel in hier https://www.mql5.com/en/articles/1510 außer die Bedingungen für Kauf/Verkauf
Bedingung für die Eröffnung einer Kaufposition : RSI unter 5 UND Briefkurs über 200 Tage gleitender Durchschnitt, Ausstieg, wenn der Briefkurs über dem 5 Tage gleitenden Durchschnitt liegt.
Bedingung für die Eröffnung einer Verkaufsposition: Der RSI liegt über 95 UND der Geldkurs liegt unter dem gleitenden 200-Tage-Durchschnitt, Ausstieg, wenn der Geldkurs unter dem gleitenden 5-Tage-Durchschnitt liegt.g
Wenn ich Backtests mache, erhalte ich jedes Mal einen negativen Gewinn, was ich nicht weiß, warum. Der beste Teil ist manchmal gibt es mir Fehler 134, die nicht genug Geld bedeutet.
Auf eine Randbemerkung, kann ich wissen, was ist shift und ma_shift und wie sollte ich es in zu füllen? seine ein Parameter für iRSI() Indikator erforderlich, ich wusste nicht, was zu schreiben, so dass ich nur 0 zuweisen.
Hier ist der Code