"Errore di PositionSelect() fluttuante - pagina 7

 
prostotrader:
Non importa l'ordine e il volume

Lo schema è il seguente:

  1. Se impostate un ordine in sospeso, impostate il volume dell'ordine nella variabile m_volume
  2. Quando TRADE_TRANSACTION_DEAL_ADD viene ricevuto, confronta il volume della posizione con la variabile m_volume e controlla se l'ordine iniziale è ancora appeso lì (forse era un'esecuzione parziale e hai aggiunto il volume manualmente).

 
prostotrader:

Ciao!

La situazione è la seguente MT5, build 1375

Nel suo lavoro, quando fa trading di futures, il robot usa la funzione OrderSendAsync().

Supponiamo che ci sia una posizione aperta con un volume di 2 contratti.

Come dovrei eseguire la registrazione per informare gli sviluppatori dell'errore?

C'è un esempio di un oscillatore che ascolta gli eventi TradeTransaction nell'articolo "Da dove iniziare quando si crea un robot di trading per il Moscow Exchange MOEX ".

Provate a eseguirlo e a vedere i registri delle transazioni eseguite. Non ci dovrebbero essere domande.

Un esempio di come funziona questo "ascoltatore":

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:

C'è un esempio di un gufo che ascolta gli eventi TradeTransaction nell'articolo Come iniziare a creare un robot di trading per il Moscow Exchange MOEX

Provate a eseguirlo e a vedere i log delle operazioni commerciali. Qualsiasi domanda dovrebbe sparire.

Grazie mille.

Voglio solo sapere il succo del discorso:

Lo aggiusterai?

 
Karputov Vladimir:

Lo schema è il seguente:

  1. Se impostate un ordine in sospeso, impostate il volume dell'ordine nella variabile m_volume
  2. Quando TRADE_TRANSACTION_DEAL_ADD viene ricevuto, confronta il volume della posizione con la variabile m_volume e controlla se l'ordine iniziale è ancora sospeso (forse era un'esecuzione parziale e hai aggiunto il volume manualmente).

Karputov Vladimir come ballare con tamburello I (circa) so....
 

prostotrader:

Solo che vorrei una risposta concreta:

Correggerete l'errore?

Scusa se mi intrometto di nuovo... ma lascia che ti chieda: qual è l'errore?
 
Dennis Kirichenko:
Scusa se mi intrometto di nuovo... ma permettimi di essere chiaro, qual è l'errore?
Questo è quello che stavo per scrivere.
 
prostotrader:

Grazie mille.

Solo che vorrei una risposta concreta:

Correggerete l'errore?

Allora non avete bisogno dell'esempio - tutte le fasi dell'esecuzione di un ordine di compravendita sono chiaramente descritte lì. Non l'hai nemmeno guardato:

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

Quindi non c'è bisogno dell'esempio, che spiega chiaramente tutte le fasi dell'esecuzione di un ordine commerciale. Non l'hai nemmeno guardato:

Non hai nemmeno guardato!!!

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

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



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

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

 
prostotrader:

Non l'hai nemmeno guardato!!!

TRADE_TRANSACTION_DEAL_ADD è tutto tuo. Finché non si ottiene questo evento - le informazioni sulla posizione possono essere false. Tutto il resto è solo la vostra idea di come funziona. Vuole, in altre parole.

Attendere TRADE_TRANSACTION_DEAL_ADD, poi ottenere informazioni sulla posizione. Questo è tutto.

 
Karputov Vladimir:

TRADE_TRANSACTION_DEAL_ADD è il vostro tutto. Finché non si riceve questo evento - le informazioni sulla posizione possono essere false. Tutto il resto è solo la vostra idea di come funziona. Vuole, in altre parole.

Attendere TRADE_TRANSACTION_DEAL_ADD, poi ottenere informazioni sulla posizione. Questo è tutto.

Ve l'ho già detto:

Come ballare con il tamburello lo so (più o meno).