Отслеживание изменений в списке ордеров по событию Trade. Вопрос к разработчикам - страница 3

 
KlimMalgin:
  • Ставим рыночный ордер, допустим, buy.  
  • Ордер появляется в списке ордеров со статусом STARTED.

Вы не поверите, но статус ордера ENUM_ORDER_STATE::ORDER_STATE_STARTED вы получите в любом случае, даже если и ордера никогда не существовало. Этот статус - значение по умолчанию при инициализации переменной типа ENUM_ORDER_STATE.

Вы даже можете проверить и попытаться выбрать несуществующий ордер через Select, и проверить его статус - будет тот же ORDER_STATE_STARTED.

Тут товарищи уже жаловались на нелогичность такого подхода разработчиков, но что имеем, то и имеем.  

Вот объясните мне, как убедиться, что выставленный ордер отработал, т.е. по нему совершена сделка?

Как пишут сами разработчики:

Успешное окончание работы метода BuyLimit(...) не всегда означает успешное совершение торговой операции. Необходимо проверять результат выполнения торгового запроса (код возврата торгового сервера) вызовом метода ResultRetcode(), а также значение, возвращаемое методом ResultDeal().

 Хорошо... Проверяем...

  метод ResultRetcode() оказывается выдает TRADE_RETCODE_DONE, но это означает всего лишь успешное размещение заявки (ордера).

  метод ResultDeal() также ничего не выдает (выдает 0), но сделка уже совершена и позиция открыта судя по логам в журнале.

  Попробовал просматривать через COrderInfo.State() - ордер всегда в состоянии ENUM_ORDER_STATE::ORDER_STATE_PLACED, даже когда его уже нет в списке действующих ордеров (проверял через функцию OrdersTotal(). Кол-во ордеров = 0).

  Подскажите, как правильно использовать торговые классы стандартной библиотеки для отслеживания статуса последнего ордера?