OnTradeTransaction - Seite 7

 
fxsaber:

Einverstanden. Aber leider kann es sein, dass die Handelsumgebung in MT5 im Gegensatz zu MT4 nicht der Realität entspricht. Wenn zum Beispiel ein schwebender Auftrag einige Millisekunden lang ausgeführt wird, kann es sein, dass er nirgendwo zu finden ist. Und hier hilft auch OnTradeTransaction nicht weiter.

Vielleicht wird OnTrade, so wie ich es verstehe, bereits im Terminal selbst auf der Grundlage von Transaktionen generiert.

Oder meinen Sie, dass, wenn eine Pending Order im OnTrade-Handler ausgelöst wird, keine neue offene Position erkannt werden kann?

 
Aleksey Mavrin:

Vielleicht OnTrade, so wie ich es verstehe, wird es im Terminal selbst auf der Grundlage von Transaktionen generiert.

Oder meinen Sie, dass eine neue offene Position im OnTrade-Handler unerkannt bleiben kann, wenn eine Pending Order ausgelöst wird?

In jeder On-Funktion. In diesem Sinne gibt es eine Lücke im MT5. Es ist unwahrscheinlich, dass sie es flicken werden.

 
fxsaber:

In jeder Ein-Funktion. In diesem Sinne gibt es eine Lücke im MT5. Es ist unwahrscheinlich, dass sie es flicken werden.

Wenn ja, dann ist das bedauerlich. Dadurch geht der Sinn von OnTrade praktisch verloren. Wir werden das überprüfen müssen. Im Idealfall sollte OnTrade ungefähr so oft aufgerufen werden, wie der Auftrag ausgelöst wird:

für Haltestellen:

- ein Marktauftrag wird erstellt und gesendet

- der ausstehende Auftrag wurde in die Historie verschoben

- der Auftrag wurde ausgeführt, ein Geschäft wurde registriert

- der Marktauftrag wurde in die Historie verschoben

- Position erstellt

für den Limit-Auftrag:

- limitierter Auftrag aktiviert schriftliches Geschäft

- anhängiger Auftrag wurde in die Historie verschoben

- eine Stelle geschaffen worden ist

Wenn man letzteres annimmt, sollte es bereits eine Position geben und nicht die vorherigen, ist es logisch, dass es keine geben sollte, oder?

Ich habe Funktionen aufgerufen, um alle Handelszustände - Trades, Positionen und Aufträge - in OnTrade zu überprüfen. Bislang scheint alles gut zu funktionieren, aber ich habe noch keine allzu komplexen Geschäfte gemacht.

 
fxsaber:

Warum bin ich in das Forum gekommen, es gibt so viele ungelöste Probleme))

Danke, ich werde es mir ansehen. Ich habe zwar das hervorgehobene gelesen, aber das ist kein Problem, sondern eine Funktion. In Datenbanken und im Allgemeinen bedeutet das Konzept der Transaktion und, dass ALLE

die für die Durchführung einer Abfrage und die Aufrechterhaltung der Korrektheit der Datenbank erforderlich sind, werden durchgeführt, und nachdem die Transaktion mit der Datenbank arbeiten kann, werden keine Fehler auftreten.

Wenn irgendeine Aktion (und selbst um eine Zeile in eine Tabelle zu schreiben, ist es manchmal notwendig, mehr als eine zu machen und sicherzustellen, dass die vorherigen erfolgreich durchgeführt wurden)

Die Änderungen werden rückgängig gemacht und die Transaktion wird abgelehnt. Wo ich damit hinkomme, sollten Sie von MT wahrscheinlich nicht das Niveau eines DBMS erwarten :)

Hier müssen alle Zwischenschritte überwacht und kontrolliert werden, was wiederum irgendwo mehr Flexibilität bietet.

Aber für mich sieht alles gut aus - zuerst sagt der Server, dass der Auftrag erledigt ist, und das Terminal löscht ihn im Archiv, dann (später) sagt der Server, dass er eine Position geöffnet hat und aufgrund eines Fehlers nicht öffnen kann, dann sollte es Null-Null sein.

Ich werde das überprüfen und die Ergebnisse im Detail mitteilen.

 
Aleksey Mavrin:

Aber für mich macht alles Sinn - der Server meldet zuerst, dass der Auftrag ausgeführt wurde, das Terminal löscht ihn im Archiv, dann (später) meldet der Server, dass er eine Position eröffnet hat

Der Auftrag ist nicht in der Geschichte und auch nicht in der aktuellen. Und es gibt keine Position. Das heißt, es gibt nichts.

 
Aleksey Mavrin:

Aber für mich macht alles Sinn - der Server meldet zuerst, dass der Auftrag ausgeführt wurde, das Terminal löscht ihn im Archiv, dann (später) meldet der Server, dass er eine Position eröffnet hat, aber es kann sein, dass sie aufgrund eines Fehlers nicht geöffnet wurde, dann sollte sie Null-Null sein.

Ich kann nicht sagen, ob in diesem Forum oder anderswo, wo ich die Beiträge von Admin Renat gelesen habe (wahrscheinlich im Quick-Forum), aber es scheint, dass er geschrieben hat, dass die einzige Prüfung, die der Auftrag auf dem Server durchläuft, darin besteht, die Margin-Anforderungen bereitzustellen, dann "fliegt" der Auftrag durch den Konnektor zur Börse, dann ist die Ungewissheit der Auftragsausführung im Prinzip möglich, der Server weiß nicht, zu welchem Preis der Auftrag ausgeführt wird

 
Zusätzlich zu dem von fxsaber genannten Beispiel gibt es in der Praxis auch einen Fall, in dem es ein Ticket sowohl unter den Aufträgen als auch unter den offenen Positionen gibt. Die Situation dauert ebenfalls mehrere Millisekunden (in den letzten Builds allerdings nicht überprüft). der Prüfmechanismus muss anders sein, also seien Sie im Voraus vorbereitet :)
 
Igor Zakharov:
Abgesehen von dem von fxsaber angeführten Beispiel gibt es in der Praxis den Fall, dass es sowohl unter den Aufträgen als auch unter den offenen Positionen ein Ticket gibt. Diese Situation dauert ebenfalls einige Millisekunden (wird in den neuesten Builds allerdings nicht überprüft). der Prüfmechanismus sollte anders sein, also seien Sie vorher vorbereitet :)

Diese Situation wird so gehandhabt, dass für MT4 EAs alles in MT5 gleich bleibt wie in MT4. Aber bei Phantomaufträgen müssen wir sie aufschreiben.

 

Bei "normalen" Robotern, wie ich sie beschrieben habe, ist mir das überhaupt nicht aufgefallen; aber in einem Fall wurde ich gebeten, ein Sicherheitssystem zu entwickeln: Die Bedingung war, dass die Positionen immer gesperrt sind (entweder mit echten Positionen oder mit einem schwebenden Auftrag), d. h. die Anzahl der Kauflose ist gleich der Anzahl der Verkaufslose. Dies ist der Fall, der mich mit den Nuancen der Auftrags-/Positions-/Handelszählung in einem Fünfer vertraut machte.

Der Unterschied besteht darin, dass der four, wenn er eine Antwort vom Broker erhält, zunächst seine "Tabellen" mit den offenen Aufträgen und der Historie synchronisiert und dann den Benutzer über die Antwort des Brokers informiert. Der five sendet diese Antwort sofort an uns und korrigiert gleichzeitig seine "Tabellen" (und alle mql-Programme lesen Daten aus diesen "Tabellen"). Das ist der Moment, den wir mit dem Millisekunden-Timer erfassen. Aber warum fangen wir es dann nicht im Prüfgerät auf?

Im Allgemeinen habe ich mich damit abgefunden...