Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вы не поверите, но статус ордера 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).
Подскажите, как правильно использовать торговые классы стандартной библиотеки для отслеживания статуса последнего ордера?