"Posição flutuanteSelect() erro - página 7

 
prostotrader:
Não importa qual ordem e qual é o volume

O esquema é o seguinte:

  1. Você define uma ordem pendente, define o volume da ordem na variável m_volume
  2. Quando TRADE_TRANSACTION_DEAL_ADD é recebido, compare o volume da posição com a variável m_volume e verifique se a ordem inicial ainda está lá (talvez tenha sido uma execução parcial e você tenha adicionado o volume manualmente).

 
prostotrader:

Hi!

A situação é a seguinte MT5, construção 1375

Em seu trabalho, ao negociar futuros, o robô usa a função OrderSendAsync().

Suponha que haja uma posição aberta com um volume de 2 contratos.

Como devo efetuar o registro para informar os desenvolvedores sobre o erro?

Há um exemplo de um oscilador que ouve os eventos TradeTransaction no artigo "Onde começar ao criar um robô comercial para o MOEX da Bolsa de Moscou ".

Tente executá-lo e veja os registros das negociações executadas. Não deve haver dúvidas.

Um exemplo de como este "ouvinte" funciona:

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:

No artigo Onde começar ao criar um robô comercial para o MOEX da Bolsa de Moscou há um exemplo de uma coruja que escuta os eventos da TradeTransaction

Tente executá-lo e veja os logs das operações comerciais. Qualquer dúvida deve ir embora.

Muito obrigado.

Só quero saber a essência do assunto:

Você vai consertar isso?

 
Karputov Vladimir:

O esquema é o seguinte:

  1. Você define uma ordem pendente, define o volume da ordem na variável m_volume
  2. Quando TRADE_TRANSACTION_DEAL_ADD é recebido, compare o volume da posição com a variável m_volume e verifique se a ordem inicial ainda está pendurada (talvez tenha sido uma execução parcial e você adicionou o volume manualmente).

Karputov Vladimir como dançar com pandeiro I (aproximadamente) sabe....
 

prostotrader:

Somente, eu gostaria de uma resposta substantiva:

Você corrigirá o erro?

Desculpe entrar de novo... mas deixe-me perguntar-lhe, qual é o erro?
 
Dennis Kirichenko:
Desculpe entrar de novo... mas deixe-me perguntar-lhe, qual é o erro?
Isso era o que eu ia escrever.
 
prostotrader:

Muito obrigado.

Somente, eu gostaria de uma resposta substantiva:

Você corrigirá o erro?

Então você não precisa do exemplo - todas as etapas de execução das ordens comerciais estão claramente explicitadas lá fora. Você ainda nem sequer olhou para ele:

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

Portanto, você não precisa do exemplo - ele esclarece claramente todas as etapas de execução das ordens comerciais. Você ainda nem sequer olhou para ele:

Você ainda nem olhou!!!

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

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



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

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

 
prostotrader:

Você ainda nem olhou para ele!!!

TRADE_TRANSACTION_DEAL_ADD é todo seu. Até que você obtenha este evento - as informações de posição podem ser falsas. Tudo o resto é apenas sua idéia de como funciona. Deseja, em outras palavras.

Aguarde por TRADE_TRANSACTION_DEAL_ADD, depois obtenha informações de posição. É isso aí.

 
Karputov Vladimir:

TRADE_TRANSACTION_DEAL_ADD é tudo para você. Até que você receba este evento - as informações de posição podem ser falsas. Tudo o resto é apenas sua idéia de como funciona. Deseja, em outras palavras.

Aguarde por TRADE_TRANSACTION_DEAL_ADD, depois obtenha informações de posição. É isso aí.

Eu já lhe disse:

Como dançar com o pandeiro I (mais ou menos) sabe.