Typische Fehler und wie man damit umgeht, wenn man mit dem Handelsumfeld zu tun hat - Seite 3
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
Die richtige Option anhand eines einfachen Beispiels
Ich denke, es ist besser, wenn der Auftrag noch nicht in der Position verbucht ist, sondern einfach abgewartet wird, bis er verbucht ist.
Ich verstehe die Idee nicht.
Dieses Diagramm zeigt, dass es bei der Platzierung eines Marktauftrags mit OrderSendAsync in MetaQuotes-Demo unmöglich ist, den entsprechenden Auftrag zuverlässig abzufangen, bis er entweder ausgeführt oder abgelehnt wird. D.h. es gibt in MT5 keine einfachen Mechanismen zur Auswertung von Zwischenergebnissen ihrer OrderSendAsync.
scheint ein Thema zu sein,
Ich möchte darauf hinweisen, dass dieser Code :
funktioniert in der DEMO einwandfrei (result=request),
aber bei REAL - ist es unmöglich, ein Ergebnis zu erhalten (Ergebnis=0.0). ... Es sei denn, Sie warten ein paar Sekunden.
Scheint zum Thema zu gehören,
Ich möchte darauf hinweisen, dass ein solcher Code :
Bei DEMO funktioniert es einwandfrei (Ergebnis=Anfrage),
aber bei REAL - ist es unmöglich, ein Ergebnis zu erhalten (Ergebnis=0.0). ... Es sei denn, Sie warten ein paar Sekunden.
Es fehlen Daten - Protokolle, Strukturfeldwerte nach OrderSend, Name des Handelsservers.
Kurz gesagt: Wenn es einen Marktauftrag gibt, ist er auch als "Position" zu betrachten. In Anführungszeichen, weil es sich um eine umbrochene Position handelt. Der hervorgehobene Code wird normalerweise nirgendwo angezeigt. Sie vermeidet jedoch die Wiedereröffnung von Positionen. Das Interessanteste ist hier in rot hervorgehoben. Die Notwendigkeit dieses Chips ist nicht sofort ersichtlich.
Möglicherweise gibt es beim nächsten Tick kein Handelssignal. Da ich selbst MT4 verwende, kann ich nicht umhin, solche "Positionen" zu sehen, ohne in Schwierigkeiten zu geraten.
Es fehlen Daten - Protokolle, Strukturfeldwerte nach OrderSend, Name des Handelsservers.
2018.02.20 15:20:35.845 Trades order #66745055 buy 0.01 / 0.01 EURUSDeur at market done in 610.625 ms
2018.02.20 15:20:35.935 Trades deal #5461453 buy 0.01 EURUSDeur at 1.23403 done (based on order #66745055)
2018.02.20 15:20:35.845 TestBUY (EURUSDeur,M15) retcode=10009 deal=0 order=66745055
Wenn die Anforderung erfüllt ist (10009), warum deal=0
Wenn die Anfrage erledigt ist (10009), warum deal=0
Das war fast der Ausgangspunkt der Diskussion. Die Links enthalten alle Einzelheiten.
Es gibt eine Lösung, damit OrderSend perfekt funktioniert, aber das wäre Werbung.
Die richtige Option anhand eines einfachen Beispiels
Kurz gesagt: Wenn es einen Marktauftrag gibt, ist er auch als "Position" zu betrachten. In Anführungszeichen, denn es handelt sich um eine verpackte Position. Der hervorgehobene Code wird normalerweise nirgendwo angezeigt. Sie vermeidet jedoch die Wiedereröffnung von Positionen. Das Interessanteste ist hier in rot hervorgehoben. Die Notwendigkeit dieses Chips ist nicht sofort ersichtlich.
Es geht darum, dass es so genannte "closing market orders" gibt. Die gleiche SL/TP. Natürlich möchten wir solche Marktaufträge nicht als "Positionen" sehen. Und wir möchten nicht, dass diese Aufträge, die wir erteilt haben, auch noch geschlossen werden. Die hervorgehobene Bedingung ist also der geeignete Filter.
for (int i = OrdersTotal() - 1; i >= 0; i--) if (OrderGetTicket(i) && (OrderGetInteger(ORDER_TYPE) <= ORDER_TYPE_SELL) && !OrderGetInteger(ORDER_POSITION_ID) && (OrderGetString(ORDER_SYMBOL) == Symb)) Res++;
SZY Fügen Sie diesen Code hier ein und prüfen Sie das Ergebnis auf einem Demo-Server.
Ich lade alle Interessierten ein, diese Frage zu diskutieren. Meine Meinung zu diesem Thema ist folgende:
for (int i = OrdersTotal() - 1; i >= 0; i--) if (OrderGetTicket(i) && (OrderGetInteger(ORDER_TYPE) <= ORDER_TYPE_SELL) && !OrderGetInteger(ORDER_POSITION_ID) && (OrderGetString(ORDER_SYMBOL) == Symb)) Res++;
Diese Schleife fügt eine Position hinzu, wenn ein Auftrag gefunden wird, der keinen Positionsbezeichner hat (die ID ist Null).
Wir haben eine weitere Stelle zurückgegeben.
Was passiert, wenn die Bestellung vom Server storniert wird?
...
Ich denke, dass wir bei der Berechnung von Marktaufträgen WRONG_VALUE zurückgeben sollten, zum Beispiel, wenn wir einen gefunden haben - Positionen können nicht kleiner als Null sein. Dies ist ein Signal, dass ein nicht erfasster Marktauftrag vorliegt. Aber nicht, um die Anzahl der Stellen zu erhöhen.