Versuchen Sie, die Werte von marginAllot, PercentRisk und pipsToSL auszudrucken, um einzugrenzen, woher die negative Zahl kommt. Meine spekulative Vermutung ist, dass pipsToSL unter bestimmten Umständen als negative Zahl übergeben wird.
NormalizeDouble(posSize,2);
Diese Zeile bewirkt nichts.- Verwenden Sie NICHT NormalizeDouble, NIE. Aus JEDEM Grund. Es ist ein Trick, verwenden Sie es nicht.Es ist immer falsch.
- SL/TP (Stops) müssen auf die Tickgröße normalisiert werden(bei 5Digit-Brokern dürfen Stops nur auf volle Pip-Werte gesetzt werden). Wie findet man das in mql heraus?-MQL4 Forum) und halten Sie sich an die Limits Anforderungen und Beschränkungen bei der Durchführung von Trades - Anhänge - MQL4 Tutorial und das erfordert das Verständnis von Gleitkomma-Gleichheit Kann Preis != Preis ? - MQL4 Forum
- Nur der offene Preis für Pending Orders muss angepasst werden. Bei Währungen ist Point == TickSize, also erhalten Sie die gleiche Antwort, aber bei Metallen funktioniert es nicht. Machen Sie es also richtig: Trailing Bar Entry EA - MQL4 Forum oder Bid/Ask: (No Need) NormalizeDouble in OrderSend zu verwenden - MQL4 forum
- Die Lotgröße muss auch auf ein Vielfaches von LotStep eingestellt werden. Wenn das nicht eine Potenz von 1/10 ist, dann ist NormalizeDouble falsch. Machen Sie es richtig.
Versuchen Sie, die Werte von marginAllot, PercentRisk und pipsToSL auszudrucken, um einzugrenzen, woher die negative Zahl kommt. Meine spekulative Vermutung ist, dass pipsToSL unter bestimmten Umständen als negative Zahl übergeben wird.
Ich konnte tatsächlich einige Stellen im restlichen Code finden, an denen pipsToSL fälschlicherweise als negativ berechnet wurde. Danke!
- Diese Zeile bewirkt nichts.
- Verwenden Sie NICHT NormalizeDouble, NIE. Aus JEDEM Grund. Es ist eine Mogelpackung, verwenden Sie es nicht. Seine Verwendung ist immer falsch.
- SL/TP (Stops) müssen auf die Tickgröße normalisiert werden.(Beim 5Digit Broker dürfen Stops nur auf volle Pip-Werte gesetzt werden. Wie man in mql herausfinden?-MQL4 Forum) und halten Sie sich an die Grenzen Anforderungen und Einschränkungen bei der Durchführung von Trades - Anhänge - MQL4 Tutorial und das erfordert das Verständnis von Gleitkomma-Gleichheit Kann Preis != Preis ? - MQL4 Forum
- Nur der offene Preis für Pending Orders muss angepasst werden. Bei Währungen ist Point == TickSize, also erhalten Sie die gleiche Antwort, aber bei Metallen funktioniert es nicht. Machen Sie es also richtig: Trailing Bar Entry EA - MQL4 Forum oder Bid/Ask: (No Need) NormalizeDouble in OrderSend zu verwenden - MQL4 forum
- Die Lotgröße muss ebenfalls auf ein Vielfaches von LotStep eingestellt werden. Wenn das nicht eine Potenz von 1/10 ist, dann ist NormalizeDouble falsch. Machen Sie es richtig.
Ich habe schon früher von Ihren Beiträgen zu diesem Thema gelesen, aber ich habe Ihren Standpunkt bis zu Ihrem letzten Link nicht verstanden. Danke!
Warum sollte ich immer noch Antworten mit mehreren Dezimalstellen erhalten, wenn ich MathRound() verwende? Ich habe versucht, DoubleToString zu verwenden, aber das hat überhaupt nicht geholfen. Liegt das ausschließlich an den Einschränkungen von Print() oder ist noch etwas anderes falsch?
posSize = posSize * 10; MathRound(posSize); posSize = posSize / 10;
NoLimitations : Warum erhalte ich immer noch Antworten mit mehreren Dezimalstellen, wenn ich MathRound() verwende? | MathRound gibt einen Double zurück; unendliche Anzahl von Dezimalstellen. |
Laut der Dokumentseite für diese Funktion ist das nicht der Fall. https://docs.mql4.com/math/mathround
"Rückgabewert
Wert gerundet auf die nächste Ganzzahl."
Wenn dies der Fall sein sollte, aber nicht der Fall ist, muss MQ benachrichtigt werden, oder es muss ein Warnhinweis auf die Funktion gesetzt werden.
JD4 hat Recht, die Doku-Seite sagt, dass es auf die nächste ganze Zahl rundet. Ich bin mir nicht sicher, ob es einen anderen Weg gibt, das zu erreichen, was ich oben versucht habe, ohne zu runden oder eine bestimmte Anzahl von Dezimalstellen abzuschneiden. Was wäre der Sinn von MathRound() oder round(), wenn sie keine ganze Zahl zurückgeben?
Ich habe auch gerade versucht, dies zu verwenden, ohne Erfolg. Möglicherweise ändert DTS einfach die Genauigkeit eines Wertes für das Aussehen und nicht den tatsächlichen Wert? Ich sehe keine anderen Optionen.
posSize = posSize * 100; DoubleToString(posSize,0); StringToDouble(posSize); posSize = posSize / 100;
- 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.
In meiner Strategie verwende ich die Funktion GetPosSize(), um die Positionsgrößen zu berechnen. Ich verwende die Strategie im Moment nur mit EURUSD und kann beim besten Willen nicht herausfinden, warum posSize einen negativen Wert zurückgibt, was zu einem OrderSend-Fehler 4051 führt. Für jede Hilfe wäre ich sehr dankbar. Ich werde alle relevanten Code hier posten. Im gesamten Code werden keine weiteren Berechnungen zu posSize durchgeführt, nur die Funktion wird aufgerufen. Alle drei separaten Teile des Codes befinden sich innerhalb der Funktion.