BuyLimit / SellLimit liefert invalid price

 

Folgender Code liefert bei mir aktuell invalid price, wenn eine Pending order erzeugt werden soll. Hat jemand eine Idee, warum?


	if(buysignal)
         {
            Print("BUY!!");
            trade.BuyLimit(inpVolume, ema10[inpCandles], _Symbol, ema20[inpCandles] - inpSLPuffer * _Point);
         }
         if(sellsignal)
         {
            Print("SELL!!");
            trade.SellLimit(inpVolume, ema10[inpCandles], _Symbol, ema20[inpCandles] + inpSLPuffer * _Point);
         }


ema10 bzw ema20 beinhalten den jeweiligen Wert der entsprechenden EMAs für die aktuelle Kerze.

 
Tobias Jochen Herrmann:

Folgender Code liefert bei mir aktuell invalid price, wenn eine Pending order erzeugt werden soll. Hat jemand eine Idee, warum?



ema10 bzw ema20 beinhalten den jeweiligen Wert der entsprechenden EMAs für die aktuelle Kerze.

leider ist die Glaskugel gerade bei der Reparatur und die Rücksendung aufgrund von Logistikproblemen im Osten nicht möglich.

mit dem Codeschnipsel kann man mal gar nix sagen

 
amando #:

leider ist die Glaskugel gerade bei der Reparatur und die Rücksendung aufgrund von Logistikproblemen im Osten nicht möglich.

mit dem Codeschnipsel kann man mal gar nix sagen

Was fehlt dir? Die Angabe wäre jetzt hilfreich gewesen :D

Da der Preis anscheinend fehlerhaft ist und ich eigentlich hingeschrieben hab, welcher Preis übergeben wird (EMA10), sollte eigentlich klar sein, was ich versuche?


/edit: Ansonsten hier mal noch eine Beispielfehlermeldung (tritt bei jeder Order im Test auf):


Für mich sehen die Preise nicht problematisch aus...

 
Tobias Jochen Herrmann:

Folgender Code liefert bei mir aktuell invalid price, wenn eine Pending order erzeugt werden soll. Hat jemand eine Idee, warum?

...

ema10 bzw ema20 beinhalten den jeweiligen Wert der entsprechenden EMAs für die aktuelle Kerze.

Überprüfe mit dem Debugger (https://www.mql5.com/de/articles/654), ob alle Preise auf der richtigen Seite liegen und der Abstand groß genug ist (Stichwort Stoplevel in den Symbolspezifikationen):


Zur Fehlerbehebung von MQL5-Programmen (Debugging)
Zur Fehlerbehebung von MQL5-Programmen (Debugging)
  • www.mql5.com
Dieser Artikel richtet sich primär an Programmierer, die die Sprache zwar bereits gelernt haben, die allerdings noch keine Meister ihres Fachs sind. Er wird auf verschiedene Debugging-Techniken eingehen, die der gebündelten Erfahrung des Autors sowie vieler anderer Programmierer entspringen.
 

Danke für die Antwort, Carl :-)


Ich hab da jetzt mal noch ein bisschen rumgespielt. Das Ding verhält sich seltsam. Wenn ich den EA auf dem EURUSD in der Range 01.01.2010 bis heute teste, funktioniert alles wunderbar.

Im DAX40 schmeißt er bis ca. 2019 dauerhaft den genannten Fehler, ab dann läufts auch da. Bug, oder hat da jemand ne Erklärung? Der Code kann ja ansich nicht falsch sein....

 
Tobias Jochen Herrmann #:

Danke für die Antwort, Carl :-)


Ich hab da jetzt mal noch ein bisschen rumgespielt. Das Ding verhält sich seltsam. Wenn ich den EA auf dem EURUSD in der Range 01.01.2010 bis heute teste, funktioniert alles wunderbar.

Im DAX40 schmeißt er bis ca. 2019 dauerhaft den genannten Fehler, ab dann läufts auch da. Bug, oder hat da jemand ne Erklärung? Der Code kann ja ansich nicht falsch sein....

Wie gesagt, nimm den Debugger (mit historischen Kursen: Ctrl+F5)
 
Carl Schreiber #:



Anders gesagt Du kannst keine Buy Limit Order setzen wenn der aktuelle Preis unter dem Buy Limit Einstigspreis liegt. Vis versa bei Sell Limit. Da Du als Einstiegspreise EMA-Werte heranziehst, wäre die Frage, was denn Deine Kaufbedingung ist, Da könnte es mitunter sein, dass genau der Fall eintrifft, der nicht funktioniert. Das ist allerdings kein Bug in der MQ-Logik. Es ist wie das Schaubild hier zeigt einfach die Natur der jeweiligen Order.

Aber das ist nur eine Vermutung, denn der Code, den Du gepostet hast ist zu wenig um das zu sehen. Im Übrigen müsstest Du dieses Thema nicht hier reinstellen, wenn Du mit geeigneten Mitteln selbst überprüfen würdest, ob die eingegebenen Preise richtig sind: Printzeile mit Bedingung/Debugger.

 
Tobias Jochen Herrmann #:

Danke für die Antwort, Carl :-)


Ich hab da jetzt mal noch ein bisschen rumgespielt. Das Ding verhält sich seltsam. Wenn ich den EA auf dem EURUSD in der Range 01.01.2010 bis heute teste, funktioniert alles wunderbar.

Im DAX40 schmeißt er bis ca. 2019 dauerhaft den genannten Fehler, ab dann läufts auch da. Bug, oder hat da jemand ne Erklärung? Der Code kann ja ansich nicht falsch sein....

Seit wann gibt es denn Daten für das Symbol DAX40 ?