Problem: Crossing Bedingung funktioniert beim Livetrading nicht - obwohl in der Simulation alles sauber läuft
Hallo,
ich hoffe Ihr könnt mir weiterhelfen, denn ich habe ein seltsames Problem.Meine Idee ist, immer dann eine Buy Order zu eröffnen, wenn der
ADX Wert größer als ein voreingestellter ADX Wert ist und weiterhin beim ADX der D+ Wert den D- Wert kreuzt. In der Simulation
funktioniert dies einwandfrei, jedoch nicht im Livekonto. Ich erhalte noch nicht einmal eine Fehlermeldung. Interessant ist aber,
wenn ich die Einstiegsbedingung umändere und zwar so, das D+ (die grüne Kurve) über der D- (rote) Kurve liegt, dann klappt die Buy Trade
Order in Verbindung mit dem voreingestellten ADX Wert einwandfrei.
Wo liegt das Problem?
Ich poste mal meinen Quellcode:
Ich bin wirklich für jede Hilfe sehr dankbar.
Beste Grüße
Paul
Hallo,
also ich würde zuerst mal den gesamten Code auf vordermann bringen, dann finden sich fehler auch leichter
der Teil gehört mal in die OnInit
// sortiere die Preise abwärts von der aktuellen Kerze ArraySetAsSeries(ArrayADX,true); ArraySetAsSeries(ArrayDpl,true); ArraySetAsSeries(ArrayDmi,true);
dieser Code gehört eigentlich in eine eigene bool Variable die dann true oder false zurückgibt, das macht den Code wesentlich übersichtlicher
int copied=CopyTime(_Symbol,_Period,0,1,New_Time); if(copied>0) // ok, the data has been copied successfully { if(Old_Time!=New_Time[0]) // if old time isn't equal to new bar time { IsNewBar=true; // if it isn't a first call, the new bar has appeared if(MQL5InfoInteger(MQL5_DEBUGGING)) Print("We have new bar here ",New_Time[0]," old time was ",Old_Time); Old_Time=New_Time[0]; // saving bar time } } else { Alert("Error in copying historical times data, error =",GetLastError()); ResetLastError(); return; }
dann kann ich dir nur die CTrade Klasse nahelegen,
das spart die OrderSend jedes mal zu definieren und neu in den EA zu schreiben. CTrade Klasse ist ein Bestandteil der von MQL5 mitgeliefert wird.
https://www.mql5.com/de/docs/standardlibrary/tradeclasses/ctrade
für diese zeile gibts bessere Experten als mich, aber in meinen Augen ist die völlig Sinnlos
if(IsNewBar==false) { return; }
vernünftiger wäre es, zu sagen isNewBar == true --> und dann das reinschreiben was passieren soll wenn die variable auf true ist
da kann ich den zuständigen Code nicht finden
if(Buy_opened) { Alert("We already have a Buy Position!!!"); return; // Don't open a new Buy Position } // Ende Buy_opened
was definiert ob eine Buy open ist oder nicht?
ich persönlich mache das genau umgekehrt
sage wenn buyopen == false, dann mache etwas, da spare ich mir den ganze block
um ganz ehrlich zu sein, ich hab in den letzten 15 Jahren nie einen Chart mit weniger als 60 Bars gesehen, also das wird dir immer das richtige ergebnis liefern, den Teil kannst kübeln (da gibts sicher auch andere Meinungen dazu)
if(Bars(_Symbol,_Period)<60) // if total bars is less than 60 bars { Alert("We have less than 60 bars, EA will now exit!!"); return; }
und wenn du die Ctrade Klasse verwendest, brauchst Du diesen Teil nicht, weil das macht die automatisch
//--- Get the result code if ( mresult.retcode == 10009 || mresult.retcode == 10008 ) { Alert("A buy order has been successfully placed with Ticket #", mresult.order, "!"); } else { Alert("The buy order request could not be completed - error: ", GetLastError(), "!"); ResetLastError(); return; } // Ende else } // Ende if Buy Condition

- www.mql5.com
Hallo,
also ich würde zuerst mal den gesamten Code auf vordermann bringen, dann finden sich fehler auch leichter
der Teil gehört mal in die OnInit
dieser Code gehört eigentlich in eine eigene bool Variable die dann true oder false zurückgibt, das macht den Code wesentlich übersichtlicher
dann kann ich dir nur die CTrade Klasse nahelegen,
das spart die OrderSend jedes mal zu definieren und neu in den EA zu schreiben. CTrade Klasse ist ein Bestandteil der von MQL5 mitgeliefert wird.
https://www.mql5.com/de/docs/standardlibrary/tradeclasses/ctrade
für diese zeile gibts bessere Experten als mich, aber in meinen Augen ist die völlig Sinnlos
vernünftiger wäre es, zu sagen isNewBar == true --> und dann das reinschreiben was passieren soll wenn die variable auf true ist
da kann ich den zuständigen Code nicht finden
was definiert ob eine Buy open ist oder nicht?
ich persönlich mache das genau umgekehrt
sage wenn buyopen == false, dann mache etwas, da spare ich mir den ganze block
um ganz ehrlich zu sein, ich hab in den letzten 15 Jahren nie einen Chart mit weniger als 60 Bars gesehen, also das wird dir immer das richtige ergebnis liefern, den Teil kannst kübeln (da gibts sicher auch andere Meinungen dazu)
und wenn du die Ctrade Klasse verwendest, brauchst Du diesen Teil nicht, weil das macht die automatisch
Hallo amando,
vielen Dank für Deine schnelle Antwort und deine Codeanalyse bzw. Tipps. Ich habe diese alle weitestgehend berücksichtigt und auch die Ctrade Klasse verwendet und nun gehts!!!
Besten Dank für Deine tolle Hilfe.
Viele Grüße
Paul

- 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.
Hallo,
ich hoffe Ihr könnt mir weiterhelfen, denn ich habe ein seltsames Problem.Meine Idee ist, immer dann eine Buy Order zu eröffnen, wenn der ADX Wert größer als ein voreingestellter ADX Wert ist und weiterhin beim ADX der D+ Wert den D- Wert kreuzt. In der Simulation funktioniert dies einwandfrei, jedoch nicht im Livekonto. Ich erhalte noch nicht einmal eine Fehlermeldung. Interessant ist aber, wenn ich die Einstiegsbedingung umändere und zwar so, das D+ (die grüne Kurve) über der D- (rote) Kurve liegt, dann klappt die Buy Trade Order in Verbindung mit dem voreingestellten ADX Wert einwandfrei.
Wo liegt das Problem?
Ich poste mal meinen Quellcode:
Ich bin wirklich für jede Hilfe sehr dankbar.
Beste Grüße
Paul