" Error de PositionSelect() flotante - página 7

 
prostotrader:
No importa el orden ni el volumen

El esquema es el siguiente:

  1. Si establece una orden pendiente, fije el volumen de la orden en la variable m_volume
  2. Cuando se reciba TRADE_TRANSACTION_DEAL_ADD, compare el volumen de la posición con la variable m_volume y compruebe si la orden inicial sigue colgada allí (quizás fue una ejecución parcial y ha añadido el volumen manualmente).

 
prostotrader:

¡Hola!

La situación es la siguiente MT5, build 1375

En su trabajo, al operar con futuros, el robot utiliza la función OrderSendAsync().

Supongamos que hay una posición abierta con un volumen de 2 contratos.

¿Cómo debo realizar el registro para informar a los desarrolladores sobre el error?

Hay un ejemplo de un oscilador que escucha los eventos de TradeTransaction en el artículo "Por dónde empezar a crear un robot de trading para la Bolsa de Moscú MOEX ".

Intenta ejecutarlo y ver los registros de las operaciones ejecutadas. No debería haber preguntas.

Un ejemplo de cómo funciona esta "escucha":

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:

Hay un ejemplo de un búho que escucha los eventos de TradeTransaction en el artículo Cómo empezar a crear un robot de comercio para la Bolsa de Moscú MOEX

Intenta ejecutarlo y ver los registros de las operaciones comerciales. Cualquier pregunta debería desaparecer.

Muchas gracias.

Sólo quiero saber lo esencial:

¿Lo vas a arreglar?

 
Karputov Vladimir:

El esquema es el siguiente:

  1. Si establece una orden pendiente, fije el volumen de la orden en la variable m_volume
  2. Cuando se reciba TRADE_TRANSACTION_DEAL_ADD, compare el volumen de la posición con la variable m_volume y compruebe si la orden inicial sigue colgada allí (quizás fue una ejecución parcial y añadió el volumen manualmente).

Karputov Vladimir cómo bailar con pandereta I (aproximadamente) know....
 

prostotrader:

Sólo que me gustaría una respuesta de fondo:

¿Corregirá el error?

Siento irrumpir de nuevo... pero déjeme preguntarle, ¿cuál es el error?
 
Dennis Kirichenko:
Siento irrumpir de nuevo... pero que quede claro, ¿cuál es el error?
Eso es lo que iba a escribir.
 
prostotrader:

Muchas gracias.

Sólo que me gustaría una respuesta de fondo:

¿Corregirá el error?

Entonces no necesita el ejemplo: todas las etapas de la ejecución de la orden comercial están claramente explicadas allí. Ni siquiera lo has mirado:

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

Por lo tanto, no es necesario el ejemplo: explica claramente todas las etapas de la ejecución de una orden comercial. Ni siquiera lo has mirado:

¡¡¡Ni siquiera has mirado!!!

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

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



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

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

 
prostotrader:

¡¡¡Ni siquiera lo has mirado!!!

TRADE_TRANSACTION_DEAL_ADD es todo tuyo. Hasta que no se produzca este evento, la información sobre la posición puede ser falsa. Todo lo demás es sólo su idea de cómo funciona. En otras palabras, los deseos.

Espere a TRADE_TRANSACTION_DEAL_ADD, luego obtenga la información de la posición. Eso es todo.

 
Karputov Vladimir:

TRADE_TRANSACTION_DEAL_ADD es su todo. Hasta que reciba este evento - la información de posición puede ser falsa. Todo lo demás es sólo su idea de cómo funciona. En otras palabras, los deseos.

Espere a TRADE_TRANSACTION_DEAL_ADD, luego obtenga la información de la posición. Eso es todo.

Ya se lo he dicho:

Cómo bailar con la pandereta lo sé (más o menos).