"Floating PositionSelect()-Fehler - Seite 7

 
prostotrader:
Es spielt keine Rolle, welche Reihenfolge und welches Volumen

Das Schema ist wie folgt:

  1. Sie setzen einen schwebenden Auftrag, setzen das Volumen des Auftrags in der Variablen m_volume
  2. Wenn TRADE_TRANSACTION_DEAL_ADD empfangen wird, vergleichen Sie das Positionsvolumen mit der Variablen m_volume und prüfen Sie, ob der ursprüngliche Auftrag noch dort hängt (vielleicht war es eine Teilausführung und Sie haben das Volumen manuell hinzugefügt).

 
prostotrader:

Hallo!

Die Situation ist wie folgt MT5, Build 1375

Bei seiner Arbeit, beim Handel mit Futures, verwendet der Roboter die Funktion OrderSendAsync().

Angenommen, es besteht eine offene Position mit einem Volumen von 2 Kontrakten.

Wie sollte ich die Protokollierung durchführen, um die Entwickler über den Fehler zu informieren?

Ein Beispiel für einen Oszillator, der auf TradeTransaction-Ereignisse reagiert, finden Sie in dem Artikel "Wo fange ich an, wenn ich einen Handelsroboter für die Moskauer Börse MOEX erstelle ".

Versuchen Sie, es auszuführen und sehen Sie sich die Protokolle der ausgeführten Handelsgeschäfte an. Es sollte keine Fragen geben.

Ein Beispiel dafür, wie dieser "Hörer" funktioniert:

2016.06.09 14:51:19.763 TradeTransactionListener (Si-6.16,M15)  LAST PING=14 ms
Покупка
2016.06.09 14:51:24.856 TradeTransactionListener (Si-6.16,M15)  1. OnTradeTransaction
2016.06.09 14:51:24.856 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_ORDER_ADD order #49118594 ORDER_TYPE_BUY ORDER_STATE_STARTED   
2016.06.09 14:51:24.859 TradeTransactionListener (Si-6.16,M15)  2. OnTradeTransaction
2016.06.09 14:51:24.859 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_REQUEST
2016.06.09 14:51:24.859 TradeTransactionListener (Si-6.16,M15)  MqlTradeResult: order #49118594  retcode=TRADE_RETCODE_PLACED 
2016.06.09 14:51:24.859 TradeTransactionListener (Si-6.16,M15)  3. OnTradeTransaction
2016.06.09 14:51:24.859 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE order #49118594 ORDER_TYPE_BUY ORDER_STATE_REQUEST_ADD   
2016.06.09 14:51:24.881 TradeTransactionListener (Si-6.16,M15)  4. OnTradeTransaction
2016.06.09 14:51:24.881 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE order #49118594 ORDER_TYPE_BUY ORDER_STATE_PLACED   
2016.06.09 14:51:24.881 TradeTransactionListener (Si-6.16,M15)  5. OnTradeTransaction
2016.06.09 14:51:24.881 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_ORDER_DELETE order #49118594 ORDER_TYPE_BUY ORDER_STATE_PLACED   
2016.06.09 14:51:24.884 TradeTransactionListener (Si-6.16,M15)  6. OnTradeTransaction
2016.06.09 14:51:24.884 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_HISTORY_ADD order #49118594 ORDER_TYPE_BUY Si-6.16 ORDER_STATE_FILLED   (MOEX ticket=3377179723)
2016.06.09 14:51:24.884 TradeTransactionListener (Si-6.16,M15)  7. OnTradeTransaction
2016.06.09 14:51:24.885 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_DEAL_ADD deal #6945344 DEAL_TYPE_BUY Si-6.16 1.00 lot   (MOEX deal=185290434)
Установка SL/TP
2016.06.09 14:51:50.872 TradeTransactionListener (Si-6.16,M15)  1. OnTradeTransaction
2016.06.09 14:51:50.872 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_REQUEST
2016.06.09 14:51:50.872 TradeTransactionListener (Si-6.16,M15)  2. OnTradeTransaction
2016.06.09 14:51:50.872 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: Position  #0  Si-6.16 modified: SL=62000.00000 TP=67000.00000
Закрытие позиции (продажа)
2016.06.09 14:52:24.063 TradeTransactionListener (Si-6.16,M15)  1. OnTradeTransaction
2016.06.09 14:52:24.063 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_ORDER_ADD order #49118750 ORDER_TYPE_SELL ORDER_STATE_STARTED   
2016.06.09 14:52:24.067 TradeTransactionListener (Si-6.16,M15)  2. OnTradeTransaction
2016.06.09 14:52:24.067 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_REQUEST
2016.06.09 14:52:24.067 TradeTransactionListener (Si-6.16,M15)  MqlTradeResult: order #49118750  retcode=TRADE_RETCODE_PLACED 
2016.06.09 14:52:24.067 TradeTransactionListener (Si-6.16,M15)  3. OnTradeTransaction
2016.06.09 14:52:24.067 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE order #49118750 ORDER_TYPE_SELL ORDER_STATE_REQUEST_ADD   
2016.06.09 14:52:24.071 TradeTransactionListener (Si-6.16,M15)  4. OnTradeTransaction
2016.06.09 14:52:24.071 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_ORDER_UPDATE order #49118750 ORDER_TYPE_SELL ORDER_STATE_PLACED   
2016.06.09 14:52:24.073 TradeTransactionListener (Si-6.16,M15)  5. OnTradeTransaction
2016.06.09 14:52:24.073 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_DEAL_ADD deal #6945378 DEAL_TYPE_SELL Si-6.16 1.00 lot   (MOEX deal=185290646)
2016.06.09 14:52:24.075 TradeTransactionListener (Si-6.16,M15)  6. OnTradeTransaction
2016.06.09 14:52:24.075 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_ORDER_DELETE order #49118750 ORDER_TYPE_SELL ORDER_STATE_PLACED   
2016.06.09 14:52:24.077 TradeTransactionListener (Si-6.16,M15)  7. OnTradeTransaction
2016.06.09 14:52:24.077 TradeTransactionListener (Si-6.16,M15)  MqlTradeTransaction: TRADE_TRANSACTION_HISTORY_ADD order #49118750 ORDER_TYPE_SELL Si-6.16 ORDER_STATE_FILLED   (MOEX ticket=3377182821)

 
Rashid Umarov:

Im Artikel Where to start when creating a trading robot for the Moscow Exchange MOEX gibt es ein Beispiel für eine Eule, die auf TradeTransaction-Ereignisse hört

Versuchen Sie, es auszuführen und sehen Sie sich die Protokolle der Handelsoperationen an. Alle Fragen sollten verschwinden.

Ich danke Ihnen vielmals.

Ich möchte nur den Kern der Sache kennen:

Werden Sie es reparieren?

 
Karputov Vladimir:

Das Schema ist wie folgt:

  1. Sie setzen einen schwebenden Auftrag, setzen das Volumen des Auftrags in der Variablen m_volume
  2. Wenn TRADE_TRANSACTION_DEAL_ADD empfangen wird, vergleichen Sie das Positionsvolumen mit der Variablen m_volume und prüfen Sie, ob der ursprüngliche Auftrag noch dort hängt (vielleicht war es eine Teilausführung und Sie haben das Volumen manuell hinzugefügt).

Karputov Vladimir wie man mit Tamburin tanzt I (ungefähr) wissen....
 

prostotrader:

Ich hätte nur gerne eine inhaltliche Antwort:

Werden Sie den Fehler korrigieren?

Es tut mir leid, dass ich mich wieder einmische... aber darf ich Sie fragen, wo der Fehler liegt?
 
Dennis Kirichenko:
Es tut mir leid, dass ich mich wieder einmische... aber lassen Sie mich klarstellen, was ist der Fehler?
Das wollte ich auch schreiben.
 
prostotrader:

Ich danke Ihnen vielmals.

Ich hätte nur gerne eine inhaltliche Antwort:

Werden Sie den Fehler korrigieren?

Dann brauchen Sie das Beispiel nicht - alle Phasen der Auftragsausführung sind dort klar beschrieben. Sie haben es sich nicht einmal angesehen:

 MqlTradeTransaction: TRADE_TRANSACTION_DEAL_ADD deal #6945344 DEAL_TYPE_BUY Si-6.16 1.00 lot   (MOEX deal=185290434)
 
Rashid Umarov:

Sie brauchen das Beispiel also nicht, da es alle Phasen der Ausführung von Handelsaufträgen klar darlegt. Sie haben es sich nicht einmal angesehen:

Du hast noch nicht einmal nachgesehen!!!

MQ Alexander 2016.08.03 18:00 #      EN
Что касается ордеров, позиций и сделок.

Как написано в хелпе - последовательность поступления транзакций не гарантирована - транзакция переноса ордера в историю может быть получена раньше, чем транзакция сделки.
Изменение позиции в терминале происходит строго в результате получения сделочной транзакции, соответственно её получение является гарантией того что позиция поменялась.
Получение транзакции переноса ордера в историю, гарантирует только то, что ордер перестал быть активным (открытым) и был перенесён в историю ордеров.



Кроме того, транзакции могут потеряться при доставке от сервера к терминалу.
Что касается этой фразы. 

Судя по всему - она осталась из документации к одной из начальных версий терминала с асинхронной торговли. В ближайшее время уберём. Виновные будут расстреляны.

 
prostotrader:

Du hast es dir nicht einmal angesehen!!!

TRADE_TRANSACTION_DEAL_ADD gehört ganz Ihnen. Solange dieses Ereignis nicht eintritt, kann die Positionsangabe falsch sein. Alles andere ist nur Ihre Vorstellung davon, wie es funktioniert. Will, mit anderen Worten.

Warten Sie auf TRADE_TRANSACTION_DEAL_ADD und holen Sie dann die Positionsinformationen ab. Das war's.

 
Karputov Vladimir:

TRADE_TRANSACTION_DEAL_ADD ist Ihr Alles. Bis Sie dieses Ereignis erhalten, kann die Positionsangabe falsch sein. Alles andere ist nur Ihre Vorstellung davon, wie es funktioniert. Will, mit anderen Worten.

Warten Sie auf TRADE_TRANSACTION_DEAL_ADD und holen Sie dann die Positionsinformationen ab. Das war's.

Ich habe es Ihnen bereits gesagt:

Wie man mit dem Tamburin tanzt, weiß ich (ungefähr).

Grund der Beschwerde: