FORTS. Fragen der Durchsetzung - Seite 15

 

Guten Tag, Renat!

Könnten Sie zu der folgenden Situation bei FORTS (real) Stellung nehmen?

Es ist ein Preis im Becher mit einem Volumen von 8. Dieser Band wurde von zwei Korrespondenten erstellt (4 mit dem gleichen Preis)

Ich kaufe (verkaufe) dieses Volumen (8)mit einer Limit-Order.

Es geschieht Folgendes:

1. Wenn der Auftrag vollständig erfüllt ist, erhalte ich in OnTradeTransaction:

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_FILLED

2. Wenn die Order mit dem Volumen des 2. Korrespondenten gefüllt wird, erhalte ich in OnTradeTransaction folgendes:

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_PARTIAL

3. Wenn die Order mit dem Volumen des 1. Korrespondenten gefüllt wird, erhalte ich in OnTradeTransaction:

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_CANCELED

Warum? Denn im zweiten und dritten Fall wurde der Auftrag teilweise ausgeführt.

2015.03.02 17:10:26.204 Trades  'xxxxx': sell limit 8.00 GOLD-6.15 at 1222.1
2015.03.02 17:10:26.234 Trades  'xxxxx': sell limit 8.00 GOLD-6.15 at 1222.1 placed for execution in 23 ms
2015.03.02 17:10:26.254 Trades  'xxxxx': deal #9801184 sell 4.00 GOLD-6.15 at 1222.1 done (based on order #11413991)

2015.03.02 17:10:26.254 Forts_trader (GOLD-6.15,H1)     OnTradeTransaction: ордер удалён. Билет = 11413991


 

Ich habe einen Scheck auf diese Bestellung ausgestellt und hier ist das Ergebnis:

Dies geschah auf dem 1060er Build des Terminals und auf dem 1035er Build des Servers.

Nach der abendlichen (Haupt-)Räumung wurde das Terminal auf 1085 aktualisiert, aber ich

den Handel gestoppt, um den Grund dafür herauszufinden.

In der Demo (1085 - 1085) kann ich den Fehler nicht reproduzieren (keine schnellen Änderungen im Stack)

 

Hat die Historie all meiner Bestellungen "abgerufen".

Der Fehler tritt in den Builds 1035, 1060 und 1085 auf.

 

Im ersten Fall wird der Auftrag in einem Geschäft vollständig ausgeführt und der nicht ausgeführte Restbetrag wird nicht entfernt, da der Auftrag für das gesamte Volumen ausgeführt wurde. Im Protokoll sehen wir einen der von Ihnen erwähnten Einträge:

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_FILLED


Im zweiten Fall wird der Auftrag teilweise ausgeführt und der nicht ausgeführte Restbetrag wird entfernt. Dies geschieht, weil Sie die Auftragsausführungspolitik - ORDER_FILLING_IOC- festgelegt haben:

Zeigt an, dass man sich bereit erklärt hat, ein Geschäft mit dem maximalen Volumen, das auf dem Markt verfügbar ist, innerhalb der im Auftrag angegebenen Grenzen auszuführen. Wenn eine vollständige Ausführung nicht möglich ist, wird der Auftrag für das verfügbare Volumen ausgeführt und das nicht ausgeführte Volumen des Auftrags wird storniert.


In Ihrem Fall handelte es sich um einen Auftrag über 8 Lots zu 1222,1. Zum Zeitpunkt der Auftragserteilung betrug das Volumen der Gegenaufträge zu einem Preis, der nicht schlechter als 1222,1 war, 4 Lots. Infolgedessen wurden 4 Lose als ein Geschäft ausgeführt (da 4 Lose durch einen gegenläufigen Auftrag repräsentiert wurden). Der Rest des Auftrags wurde zurückgezogen, d.h. der Auftrag wurde storniert.

Laut den von Ihnen vorgelegten Protokollen:

der Auftrag wurde teilweise ausgeführt:

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_PARTIAL

Dann wurde der Restbetrag gelöscht, d.h. der Auftrag wurde storniert:

OntradeTransaction --> TRADE_TRANSACTION_HISTORY_ADD --> ORDER_STATE_CANCELED
 
Renat:

Im ersten Fall wird der Auftrag in einem Geschäft vollständig ausgeführt und der nicht ausgeführte Restbetrag wird nicht entfernt, da der Auftrag für das gesamte Volumen ausgeführt wurde. Im Protokoll sehen wir einen der von Ihnen erwähnten Einträge:



Im zweiten Fall wird der Auftrag teilweise ausgeführt und der nicht ausgeführte Restbetrag wird entfernt. Dies geschieht, weil Sie die Auftragsausführungspolitik - ORDER_FILLING_IOC- festgelegt haben:

Zeigt an, dass man sich bereit erklärt hat, ein Geschäft mit dem maximalen Volumen, das auf dem Markt verfügbar ist, innerhalb der im Auftrag angegebenen Grenzen auszuführen. Wenn eine vollständige Ausführung nicht möglich ist, wird der Auftrag für das verfügbare Volumen ausgeführt und das nicht ausgeführte Volumen des Auftrags wird storniert.


In Ihrem Fall war der Auftrag für 8 Lose zu 1222,1. Zum Zeitpunkt der Auftragserteilung gab es 4 Lose zu einem Preis, der nicht schlechter als 1222,1 war. Infolgedessen wurden 4 Lose als ein Geschäft ausgeführt (da 4 Lose durch einen gegenläufigen Auftrag repräsentiert wurden). Der Rest des Auftrags wurde zurückgezogen, d.h. der Auftrag wurde storniert.

Laut den von Ihnen vorgelegten Protokollen:

der Auftrag wurde teilweise ausgeführt:

Dann wird der Saldo entfernt, d.h. die Bestellung wird storniert:

Wie ist dann die DOKUMENTATION zu interpretieren?

Die Sache ist die, dass onTradeTransaction es keine Nachricht über den Handel(TRADE_TRANSACTION_DEAL_ADD) gibt, wennORDER_STATE_CANCELED !

Aber der Handel WAS!

 
Mikalas:

Wie ist dann die DOKUMENTATION zu interpretieren?

Der Haftbefehl ist aufgehoben worden. Der Kunde kann nach Hause entlassen werden.
 
Renat:
Die Anordnung wurde aufgehoben. Der Kunde kann nach Hause entlassen werden.

Die Sache ist die, dass es bei onTradeTransaction keine Transaktionsnachricht(TRADE_TRANSACTION_DEAL_ADD) gibt, wennORDER_STATE_CANCELED !

Aber die Transaktion WAS!

Und wo haben Sie PARTIAL gesehen (das ist eine Möglichkeit, Dinge zu tun)? Nur CANCELED !

Und in der Historie ist es als CANCELED gespeichert (siehe Bild)

 

Guten Tag Renat!

Halten Sie es für richtig, dass ein teilweise ausgeführter Auftrag in der Historie alsORDER_STATE_CANCELED-Auftrag gespeichert werden sollte?

und in OnTradeTransaction sollte es keine Bestätigung des Geschäfts einer teilweise ausgeführten Order geben?

Bleibt es bei der derzeitigen Plattformlogik oder sind Sie bereit, in absehbarer Zeit Änderungen vorzunehmen?

 
kond777:

Guten Tag Renat!

Halten Sie es für richtig, dass ein teilweise ausgeführter Auftrag in der Historie alsORDER_STATE_CANCELED-Auftrag gespeichert werden sollte?

und in OnTradeTransaction sollte es keine Bestätigung des Geschäfts einer teilweise ausgeführten Order geben?

Bleibt es bei der derzeitigen Plattformlogik oder sind Sie bereit, in absehbarer Zeit Änderungen vorzunehmen?

Haben Sie es selbst überprüft oder haben Sie nur auf unvollständige Beschreibungen von Mikalas reagiert? Der Auftrag war schließlich vom IOC.

Wir haben das Verhalten auf unserer Seite noch einmal überprüft:

1. Installieren Sie einen Expert Advisor aus dem Artikel Prescriptions of MQL5 - Processing TradeTransaction Events.

2. Wir haben einen IOC-Auftrag für das niedrig liquide Instrument SILV-3.15 erteilt. Der Auftrag wurde erteilt, um 11 Lots zum Preis von 16.48 zu verkaufen, während nur 1 Lot zu diesem Preis verfügbar war.

Wir haben das Folgende erhalten:

Im Terminal:


Abgesehen von der Tatsache, dass der Auftrag "storniert" wurde, können wir sehen, dass 1 von 11 angeforderten Lots ausgeführt wurde, was dem korrekten Verhalten entspricht.

Im Protokoll des Expert Advisors:

2015.03.03 16:32:56.022 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_ADD
2015.03.03 16:32:56.173 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2015.03.03 16:32:56.325 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_REQUEST
2015.03.03 16:32:56.477 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2015.03.03 16:32:56.628 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_DEAL_ADD   <====== транзакция о сделке пришла
2015.03.03 16:32:56.779 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_UPDATE
2015.03.03 16:32:56.930 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_ORDER_DELETE
2015.03.03 16:32:57.082 tradeprocessor (SILV-3.15,H1)   Тип торговой транзакции: TRADE_TRANSACTION_HISTORY_ADD

D.h. die Transaktion über das Geschäft kam in OnTradeTransaction(). Wenn die Transaktion nicht zustande käme, würde man sie im Terminal gar nicht sehen. Bitte stellen Sie sicher, dass die Transaktion TRADE_TRANSACTION_DEAL_ADD nicht gekommen ist. Vergleichen Sie das Verhalten Ihres EA mit dem oben vom Expert Advisor vorgeschlagenen Verhalten.

 

Guten Morgen, Renat!

Sie garantieren das Eintreffen des OnTradeTransaction-Ereignisses nicht, daher ist es nicht eingetroffen (TRADE_TRANSACTION_DEAL_ADD)

Und wenn das Ereignis TRADE_TRANSACTION_HISTORY_ADD eingetreten ist, war der AuftragsstatusORDER_STATE_CANCELED

Dort sind die "Beine gewachsen".

Wenn der Auftrag (unabhängig davon, wie er ausgeführt wurde) teilweise ausgeführt wurde, dann ist der Status meines Erachtens

sollte in der Historie als ORDER_STATE_PARTIAL aufgezeichnet werden

Grund der Beschwerde: