Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Добрый день, Ренат!
Не могли бы Вы прокомментировать следующую ситуацию на ФОРТС (реал):
В стакане есть цена с объёмом 8. Этот объём сделали два корреспондента (по 4 с одинаковой ценой)
Я покупаю (продаю) этот объём (8) лимитированным ордером.
Происходит следующее:
1. Если ордер полностью заливается, то я в OnTradeTransaction получаю:
2. Если ордер заливается объёмом 2-го корреспондента, то то я в OnTradeTransaction получаю:
3. Если ордер заливается объёмом 1-го корреспондента, то то я в OnTradeTransaction получаю:
Почему? Ведь во втором и третьем случае ордер частично исполнился.
Написал проверку по этому ордеру, вот результат:
Это происходило на 1060 билде терминала и на 1035 билде сервера.
После вечернего (основновного) клиринга терминал обновился до 1085, но я
прекратил торговлю до выяснения причины.
На демо (1085 - 1085) не получается воспроизвести ошибку (нет быстрых изменений в стаканах)
"Поднял" историю всех своих ордеров.
Ошибка существует 1035, 1060 и 1085 билдах
В первом случае ордер исполняется полностью одной сделкой и неисполненный остаток не снимается, т.к. ордер исполнился на полный объем. В лога видим одну, приведенную вами, запись:
Во втором случае происходит частичное исполнение ордера и снятие неисполненного остатка. Такое происходит потому что вы задали политику исполнения ордера - ORDER_FILLING_IOC:
В Вашем случае ордер был на 8 лотов по цене 1222.1. В момент выставления ордера на биржу, объем встречных ордеров по цене не хуже 1222.1 был 4 лота. В итоге 4 лота исполнились в виде одной сделки (потому что 4 лота были представлены одним встречным ордером). Остаток ордера снялся, т.е. ордер отменили.
По приведенным вами логам:
ордер частично исполнился:
далее остаток снялся, т.е. ордер отменился:
В первом случае ордер исполняется полностью одной сделкой и неисполненный остаток не снимается, т.к. ордер исполнился на полный объем. В лога видим одну, приведенную вами, запись:
Во втором случае происходит частичное исполнение ордера и снятие неисполненного остатка. Такое происходит потому что вы задали политику исполнения ордера - ORDER_FILLING_IOC:
В Вашем случае ордер был на 8 лотов по цене 1222.1. В момент выставления ордера на биржу, объем встречных ордеров по цене не хуже 1222.1 был 4 лота. В итоге 4 лота исполнились в виде одной сделки (потому что 4 лота были представлены одним встречным ордером). Остаток ордера снялся, т.е. ордер отменили.
По приведенным вами логам:
ордер частично исполнился:
далее остаток снялся, т.е. ордер отменился:
Тогда как же толковать ДОКУМЕНТАЦИЮ?
Дело всё в том, что в OnTradeTransaction не приходит сообщение о сделке (TRADE_TRANSACTION_DEAL_ADD) когда ORDER_STATE_CANCELED !
Но сделка БЫЛА!
Тогда как же толковать ДОКУМЕНТАЦИЮ?
Ордер снят. Клиента можно отпустить домой.
Дело всё в том, что в OnTradeTransaction не приходит сообщение о сделке (TRADE_TRANSACTION_DEAL_ADD) когда ORDER_STATE_CANCELED !
Но сделка БЫЛА!
И где Вы увидели PARTIAL (это один из вариантов развития события)? Только CANCELED
И в истории он хранится (см картинку) как CANCELED
Добрый день, Ренат!
Вы считаете правильным, что частично исполненный ордер должен хранится в истории, как ордер ORDER_STATE_CANCELED,
и в OnTradeTransaction не должно приходить подтверждение о сделке частично исполненного ордера?
Скажите, теперешняя логика работы платформы останется как есть или Вы готовы внести изменения в обозримом будущем?
Добрый день, Ренат!
Вы считаете правильным, что частично исполненный ордер должен хранится в истории, как ордер ORDER_STATE_CANCELED,
и в OnTradeTransaction не должно приходить подтверждение о сделке частично исполненного ордера?
Скажите, теперешняя логика работы платформы останется как есть или Вы готовы внести изменения в обозримом будущем?
А вы сами проверяли или просто среагировали на неполные описания от Mikalas? Приказ ведь был IOC.
Еще раз проверили поведение на своей стороне:
1. Установили эксперта из статьи "Рецепты MQL5 - обработка события TradeTransaction".
2. Выставили IOC ордер на низко ликвидном инструменте SILV-3.15. Ордер выставили на продажу 11 лотов по цене 16.48, при том, что по этой цене есть только 1 лот.
Получили следующее:
В терминале:
Помимо того, что ордер в состоянии "canceled" видим, что исполнился 1 лот из 11 запрошенных, это правильное поведение.
В журнале эксперта:
Т.е. транзакция о сделке пришла в OnTradeTransaction(). Если бы сделка не пришла, то вы бы ее в терминале вообще не увидели. Проверьте пожалуйста точно, что транзакция TRADE_TRANSACTION_DEAL_ADD действительно не приходит. Сравните поведение вашего эксперта с поведением предложенного выше экспертом.
Доброе утро, Ренат!
Вы же не гарантируете приход события OnTradeTransaction, вот оно и не пришло (TRADE_TRANSACTION_DEAL_ADD)
А когда пришло событие TRADE_TRANSACTION_HISTORY_ADD, то статус ордера был ORDER_STATE_CANCELED
Вот и "выросли ноги".
На мой взгляд, если ордер ( не важно с каким исполнением ) частично исполнился, то статус его
должен быть в истории как ORDER_STATE_PARTIAL