Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 201
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Für solche Fälle gibt es hier einige Hilfsmakros.
1. Manchmal möchten Sie innerhalb Ihres Makros feststellen, ob ein Parameter gesetzt wurde oder nicht. IS_PARAMETER_SET(p) definiert einen Ausdruck, der true zurückgibt, wenn p gesetzt ist (auch wenn die String-Variable ==NULL ist).
Achtung: der Ausdruck wird nach der Vorverarbeitung zur Kompilierzeit ausgewertet!!!, d.h. er kann nicht verwendet werden, um etwas wie #ifdef IS_PARAMETER_SET(p) #else zu implementieren (dies gilt auch für andere Makros unten)
2. Wenn Sie einen Parameterwert explizit in eine Zeichenkette umwandeln müssen, um einen Kompilierfehler mit einem nicht spezifizierten Parameter zu vermeiden, können Sie __EVAL_STR(p) verwenden. Wenn p nicht oder explizit mit NULL-Literal definiert ist, wird "" zurückgegeben. Gilt nicht für Arrays, Strukturen und Klassen.
Die explizite Umwandlung eines Parameters in eine Zahl ist __EVAL_NON_STR(p). Wenn p nicht gesetzt ist, wird 0 zurückgegeben. Funktioniert nicht, wenn p ein String ist!
Code und Anwendungsbeispiele:
Der folgende Code auf demRannForex-Server Demokonto kann diese Situation sofort reproduzieren, indem dieser Advisor ausgeführt wird.
Ergebnis.
Übrigens, das Skript zeigt (nicht immer zum ersten Mal) einen Fehler in der synchronen OrderSend-Ausführung.
Nachdem OrderSend für einige zehn/hundert Millisekunden ausgeführt wurde, ist der Auftragspreis der alte und nicht derjenige, der durch OrderSend erfolgreich erteilt wurde.
Um auf das Thema der identischen Tickets zurückzukommen, können wir einige Schlussfolgerungen ziehen.
Wenn es jemandem gelungen ist, das Problem auf einem anderen Handelsserver zu reproduzieren, teilen Sie uns bitte den Namen mit.
Suchbegriff: Oshibka 010.
Nochmals zurück zur Frage der Teilvollstreckung.
1. Bitte klären Sie Punkt 3: "Sie können die von Ihnen gebildete Position schließen, ohne die Teilausführung zu entfernen. Wenn der Auftrag jedoch danach ausgelöst wird, wird ein Handel mit einem Ticket eröffnet, das dem Ticket der zuvor geschlossenen Position entspricht. Das heißt, es kann eine Situation eintreten, in der Sie eine Position mit einem bestimmten Ticket schließen. Und dann erscheint wieder eine Position mit demselben Ticket."
War in diesem Fall POSITION_IDENTIFIER gleich POSITION_TICKET oder nicht?
2. Vorhin im Thread "POSITION_TICKET != POSITION_IDENTIFIER" haben Sie eine andere MT5-Logik demonstriert.
https://www.mql5.com/ru/forum/227423/page2#comment_6543129Schlussfolgerungen
Wenn wir davon ausgehen, dass dies ein normales Verhalten von MT5 ist und keine Besonderheit des Broker-Hacks, dann
Gibt es Ihrer Erfahrung nach ein allgemeines Muster, in welchen Fällen/Arbeitsweisen der MT5 verwendet wird?
3. Hat es jemals Situationen gegeben, in denen "POSITION_TICKET != POSITION_IDENTIFIER" war?
Beim Aufruf eines Makros ist es möglich, einen Parameter auszulassen, und manchmal möchte man einem Makro ausdrücklich erlauben, mit einem nicht spezifizierten Parameter zu arbeiten.
Es stellt sich also heraus, dass ein nicht spezifizierter Parameter in einem Makro vom Compiler als leerer String behandelt wird?
In gewisser Weise ja, obwohl "wie ein leerer Raum" vielleicht ein besseres Wort ist. Schwierig, sich klar auszudrücken :-(.
Aber #p wird definitiv zu string ==""
In gewisser Weise ja, obwohl "wie ein leerer Raum" vielleicht ein besseres Wort ist. Schwierig, sich klar auszudrücken :-(.
Aber #p wird definitiv zu string ==""
Danke, eine interessante Nuance.
@fxsaber
Schauen Sie sich bitte diese Ausgabe an: https://www.mql5.com/ru/forum/170952/page201#comment_21964923
Noch einmal zurück zur Frage der Teilleistung.
1. Bitte klären Sie Punkt 3: "Sie können eine gebildete Position schließen, ohne die Partial Put Option zu entfernen. Wenn der Auftrag jedoch danach ausgelöst wird, wird ein Handel mit einem Ticket eröffnet, das dem Ticket der zuvor geschlossenen Position entspricht. Das heißt, es kann eine Situation eintreten, in der Sie eine Position mit einem bestimmten Ticket schließen. Und dann erscheint wieder eine Position mit demselben Ticket."
War in diesem Fall POSITION_IDENTIFIER gleich POSITION_TICKET oder nicht?
2. Vorhin im Zweig "POSITION_TICKET != POSITION_IDENTIFIER" haben Sie eine andere Logik des MT5 demonstriert.
https://www.mql5.com/ru/forum/227423/page2#comment_6543129Gibt es Ihrer Erfahrung nach ein allgemeines Muster, in welchen Fällen/Betriebsarten das MT5-Schema Anwendung findet?
3. Hat es jemals Situationen gegeben, in denen "POSITION_TICKET != POSITION_IDENTIFIER" war?
Beide Links behandeln verschiedene Implementierungen der partiellen Ausführung. Dies wird von der Software des Brokers bestimmt, nicht von MT5.
Es wurde noch nie eine Diskrepanz zwischen Ticket und ID festgestellt.
Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests
Bibliotheken: Nutzung
fxsaber, 2021.05.01 14:17
GetMicrosecondCount kann einen kleineren Wert ausgeben als beim vorherigen Aufruf (ohne ULONG-Überlauf). Beispiele für solche Situationen.Jede Linie wird von verschiedenen EAs auf drei MT4-Terminals erzielt.
Und auf dem MT5 kommt so etwas vor, auf dem MT4 dagegen viel seltener.
Seien Sie vorsichtig.