OnTradeTransaction - Seite 9

 
Aleksey Mavrin:

Ja, Sie haben Recht, denn in diesem Fall handelt es sich um eine Positionskennung, die während der gesamten Lebensdauer konstant ist. Ich habe es mit dem Ticket der Position verwechselt, das sich bei Rollover und Netting ändert.

Aber ich verstehe nicht - wenn eine Position teilweise geschlossen wird, ändert sich das Ticket nicht in das Ticket des letzten Auftrags, der die Position betrifft?

Ich werde meine Codes überprüfen, danke. Ich habe das Forum nicht umsonst besucht)

Bezüglich der "verlorenen Bestellung", die nicht in der Liste der aktuellen oder historischen Bestellungen enthalten ist: Es scheint mir, dass dies kein Fehler ist, ich muss mir nur die Funktionen von

Ich denke, dies ist nicht ein Fehler, müssen nur sorgfältig auf Besonderheiten der Terminal-Server MT-Markt (im Falle der sofortigen Ausführung der Markt nicht funktioniert). Ich denke schon, sehen Sie - das Terminal sendet einen Börsenauftrag, im Falle einer synchronen Funktion - es wartet und bekommt eine Antwort vom Server,

Wenn kein Fehler auftritt, kann die Antwort nur TRADE_RETCODE_DONE lauten (im Falle der sofortigen Ausführung sind es Requotes, aber bisher ist es der Markttyp), was im Wesentlichen bedeutet, dass der Server den Auftrag an den Markt gesendet hat und er

Es bedeutet, dass der Server die Bestellung abgeschickt hat und auf die Antwort wartet. Der Status des Auftrags ist in diesem MomentORDER_STATE_STARTED, wenn ich mich nicht irre, und sein Ticket ist bekannt. Wenn der Auftrag ausgeführt wird, sendet der Server OnTradeTransaction an das Terminal, und der Auftragsstatus ändert sich in ORDER_STATE_FILLED, und das Geschäft ist bekannt

und die Position wird bekannt. Erst zu diesem Zeitpunkt speichert das Terminal den Auftrag in der Historie. Er tut dies nicht vorher, da wir nicht wissen, was mit ihm passiert ist und er bereits die erste Antwort des Servers gegeben hat.

Dies ist die Zeit, bis der Auftrag im ECN-Netz oder anderswo ausgeführt wird, sie sind in keiner der beiden Listen enthalten. D.h. im Falle eines Marktauftrags erscheint er nur in der Historie (ich bin mir nicht sicher, was den Fall von Requotes bei sofortiger Ausführung betrifft),

wird er nie in der Liste der offenen Einträge erscheinen. Und wenn ein schwebender Auftrag ausgelöst wird, wird er aus der Liste der offenen Aufträge entfernt, weil er bereits ein Marktauftrag geworden ist, und wir warten auf die Antwort des Marktservers, und dann wird er an die Historie gesendet.

Habe ich Recht?

Nicht wirklich.
 
Aleksey Mavrin:

Habe ich Recht?

Andrey hat es sehr gut erklärt.

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

OnTradeTransaction

Andrey Khatimlianskii, 2019.12.17 08:24

Nein, es ist noch schlimmer.

Der Auftrag verschwindet im Moment der Umwandlung von schwebend (oder Markt) zu historisch (ausgeführt oder gelöscht) für einige Zeit aus dem Terminal. Sie erscheint weder unter den anhängigen (oder "gestarteten" Märkten) noch unter den historischen Märkten.

Es geht also nicht um die Ausführung, sondern um die Synchronisierung dieser beiden Tabellen. Wenn die Antwort vom Server kommt ("Auftrag ausgeführt, Transaktion so und so erzeugt"), wird sie aus der einen Tabelle entfernt, aber nicht in die andere eingetragen.


Das Problem ist nicht OrderSend. Lange Zeit gab es BuyLimit. Und plötzlich sind sie und die Kaufpositionen nirgendwo mehr zu finden. Das ist in etwa die gleiche Situation, die sich abspielt.

 
fxsaber:

Andrei hat es gut geschrieben.


Es geht nicht um OrderSend. Lange Zeit hieß es BuyLimit. Und plötzlich ist weder sie noch die Kaufposition irgendwo zu finden. Das ist in etwa die gleiche Situation, die passiert.


Artyom Trishkin:
Nicht wirklich.

Ich habe verstanden. Sogar der Marktauftrag ist seit einiger Zeit in der Liste der aktuellen Aufträge enthalten (aber es scheint, dass er im Terminal auf der Registerkarte "Handel" nicht angezeigt wird?

Wenn der Auftrag ausgeführt wurde und eine entsprechende Transaktion vom Server empfangen wurde, führt das Terminal folgende Aktionen durch

1. Löschen Sie den Auftrag aus dem aktuellen

2. Schreiben Sie den Auftrag in historischer

3. den Handel in die Liste eintragen

4. Schreibe die Position in die Liste

und in Anbetracht der Tatsache, dass der Expert Advisor und das Terminal selbst in unabhängigen parallelen Strömen arbeiten, wird das Terminal noch nicht in der Lage sein, eine Position zu eröffnen, wenn Sie es innerhalb dieser kurzen Zeitspanne anfordern.

Position, wird es noch nicht da sein. Wie ich bereits geschrieben habe, gäbe es so etwas nicht, wenn dies nach DBMS-Standards geschehen würde, da alle 4 Operationen in einer Transaktion zusammengeführt würden und man sich nicht in "Zwischenzuständen" verfangen könnte.

Oder? Aber ich bin eigentlich interessiert - wenn wir auf OnTrade und OnTradeTransaction verlassen, dann sollte es keine Verzögerung in diese Handler, Sie geschehen durch die Erstellung von Änderungen in entsprechenden Tabellen, richtig?

Oder sendet Terminal sie einfach an Expert Advisor und empfängt gleichzeitig Ereignisse und ändert Tabellen? Im letzteren Fall ist sie natürlich falsch und muss korrigiert werden, vor allem wenn OnTradeTransaction, aus dem die tatsächlichen Informationen stammen könnten, nicht gewährleistet ist.

 
Aleksey Mavrin:

Ich hab's. Sogar der Marktauftrag ist seit einiger Zeit in der Liste der aktuellen Aufträge vorhanden (nur scheint er nicht auf der Registerkarte "Handel" im Terminal angezeigt zu werden).

Manchmal kann man es dort sogar mit den Augen sehen, wenn es sich im Anfangsstadium befindet. Und mit einem Roboter ist es leicht zu verfolgen.


Aleksey Mavrin:

Und da der Expert Advisor und das Terminal selbst in unabhängigen parallelen Strömen arbeiten, ist die Situation wie folgt: Wenn Sie eine Position innerhalb dieser kurzen Zeitspanne anfordern, wird sie nicht erscheinen.

Wir beziehen uns nicht auf Positionen, sondern nur auf Aufträge.

Wir brauchen viel weniger Zeit, um einen Eintrag in die Tabelle aufzunehmen, als wir manchmal bekommen. Und ich meine das nicht ernst, es gibt keine Garantie dafür, dass wir das richtige Handelsumfeld bekommen.


Aleksey Mavrin:

Und ich habe mich tatsächlich gefragt - wenn wir uns auf OnTrade und OnTradeTransaction verlassen, dann sollten diese Handler keine Verzögerung haben, weil sie passieren, wenn Änderungen in die entsprechenden Tabellen geschrieben werden?

Oder sendet Terminal sie einfach an Expert Advisor und empfängt gleichzeitig Ereignisse und ändert Tabellen? Im letzteren Fall ist sie natürlich falsch und muss korrigiert werden, vor allem, wenn OnTradeTransaction, von dem die tatsächlichen Informationen bezogen werden können, nicht gewährleistet ist.

OnTrade in seiner reinen Form wird nicht helfen.

Sie können das Warten auf die Synchronisierung der Auftragstabelle auch damit kombinieren, das ist Geschmackssache. Aber Sie müssen noch warten.

 
Aleksey Mavrin:

Bezüglich der "verlorenen Order", die nicht in der Liste der aktuellen oder historischen Orders steht: Ich denke, es ist kein Fehler, wir müssen uns nur die Funktionen des Terminal-Servers MT-Market genau ansehen (bei sofortiger Ausführung ist der Markt aus). Wenn kein Fehler auftritt, kann die Antwort nur TRADE_RETCODE_DONE lauten (bei sofortiger Ausführung gibt es Requotes, aber bisher ist es der Marktauftrag), was bedeutet, dass der Server den Auftrag an den Markt gesendet hat und auf eine Antwort wartet. Der Status des Auftrags ist in diesem Moment ORDER_STATE_STARTED, wenn ich mich nicht irre, und sein Ticket ist bekannt. Wenn der Auftrag ausgeführt wird, sendet der Server OnTradeTransaction an das Terminal, und der Auftragsstatus ändert sich in ORDER_STATE_FILLED, und der Abschluss und die Position sind bekannt. Erst in diesem Moment zeichnet das Terminal den Auftrag in der Historie auf.

Der Markt hat damit nichts zu tun.

Der MetaTrader-Server sendet den Auftrag an ECN oder eine andere Stelle, erhält die Antwort und sendet sie an das Terminal. Und im Terminal ist das Timing falsch.

Grund der Beschwerde: