"Плавающая" ошибка PositionSelect() - страница 7

 
prostotrader:
Да не важно какой ордер и не важно какой объём

Схема работы такая:

  1. Выставили отложенный ордер, записали в переменную m_volume объём ордера
  2. При поступлении TRADE_TRANSACTION_DEAL_ADD сравнить объём позиции c переменной m_volume и проверить, а не остался ли ещё висеть первоначальный ордер (может было частичное исполнение, а объём Вы добавили руками).

 
prostotrader:

Привет!

Ситуация следующая МТ5, билд 1375

Робот, в своей работе, при торговле фьючерсами, использует фунцию OrderSendAsync()

Допустим, что есть открытая позиция объёмом 2 контракта.

Как построить логирование, чтобы показать разработчикам наличие ошибки? 

В статье С чего начать при создании торгового робота для Московской биржи MOEX есть пример совеника, который слушает события TradeTransaction

Попробуйте запустить его и посмотреть логи при выполнении торговых операций. Вопросы должны отпасть.

Пример работы этого "слушателя":

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:

В статье С чего начать при создании торгового робота для Московской биржи MOEX есть пример совеника, который слушает события TradeTransaction

Попробуйте запустить его и посмотреть логи при выполнении торговых операций. Вопросы должны отпасть.

Большое спасибо.

Только, хотелось бы получить ответ по-существу: 

Ошибку исправлять будете? 

 
Karputov Vladimir:

Схема работы такая:

  1. Выставили отложенный ордер, записали в переменную m_volume объём ордера
  2. При поступлении TRADE_TRANSACTION_DEAL_ADD сравнить объём позиции c переменной m_volume и проверить, а не остался ли ещё висеть первоначальный ордер (может было частичное исполнение, а объём Вы добавили руками).

Karputov Vladimir как танцевать с бубном я (приблизительно) знаю....
 

prostotrader:

Только, хотелось бы получить ответ по-существу: 

Ошибку исправлять будете? 

Я дико извиняюсь, что снова встреваю... но позвольте уточнить, а в чём ошибка?
 
Dennis Kirichenko:
Я дико извиняюсь, что снова встреваю... но позвольте уточнить, а в чём ошибка?
Тоже самое хотел написать.
 
prostotrader:

Большое спасибо.

Только, хотелось бы получить ответ по-существу: 

Ошибку исправлять будете? 

Значит, пример вам не нужен - там явно прописаны все стадии выполнения торговых приказов. Вы даже не смотрели:

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

Значит, пример вам не нужен - там явно прописаны все стадии выполнения торговых приказов. Вы даже не смотрели:

Это вы даже не смотрели!!!

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

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



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

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

 

 
prostotrader:

Это вы даже не смотрели!!!

 

TRADE_TRANSACTION_DEAL_ADD - это Ваше всё. Пока не получили это событие - информация о позиции может быть ложной. Всё остальное - это только Ваше представление о том, как это работает. Хотелки, другими словами. 

Ждите TRADE_TRANSACTION_DEAL_ADD, потом узнавайте информацию о позиции. Это всё. 

 
Karputov Vladimir:

TRADE_TRANSACTION_DEAL_ADD - это Ваше всё. Пока не получили это событие - информация о позиции может быть ложной. Всё остальное - это только Ваше представление о том, как это работает. Хотелки, другими словами. 

Ждите TRADE_TRANSACTION_DEAL_ADD, потом узнавайте информацию о позиции. Это всё. 

Я уже Вам сказал:

Как танцевать с бубном я (приблизительно) знаю.