← Voltar

Проблема при работе с лотом, больше чем одна заявка.

Здравствуйте. Реализовал стратегию, которая работала с одним лотом и все было хорошо. Как приходило событие NewMyTrades я понимал, что произошла сделка и делал действия необходимые в моей стратегии. Сейчас попробовал реализовать аналогичное с числом лотов равным 2 и потерпел неудачу. Мне нужно производить действия когда заявка полностью исчерпана, т.е куплены или проданы ВСЕ 2 лота. Попробовал очевидное решение - добавил в обработчик проверку foreach (MyTrade mt in NewMyTrades) { if (mt.Order.IsMatched()) { выполнилось все, сделать действие } }

но почему-то такое срабатывает не всегда. иногда заявка оказывалась полностью выполненной (в квике), а робот считал, что еще нет.

Тогда попытался обрабатывать событие QTrader.PositionsChanged, и при появлении этого события сравнивать position.CurrentValue с 0 или 2. если вдруг стало 0, то можно сказать, что сделка закрылась. если 2, то сделка полностью открылось. но столкнулся с аналогичными проблемами - в большинстве случаев работает, но не всегда. проблема как и раньше.

Есть какие либо идеи? Очень благодарен за ваш труд.

Este tópico foi útil?

Compartilhar tópico

Comentários (9)

Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário

artemox
artemox

Посмотрите в сторону Strategy.PositionManager.Position

pave111
pave111 Autor

спасибо, попробую.

до этого также пробывал подход position = QTrader.GetPosition(Portfolio, Security); position.CurrentValue

с аналогичным результатом - работало, но не всегда.

не подскажите, в чем отличие Strategy.PositionManager.Position от данного варианта и в чем могла быть ошибка в моих прошлых вариантах?

artemox
artemox

Насколько мне известно: PositionManager считает позицию по сделкам, совершенным в рамках стратегии. GetPosition получает позицию из таблиц квика.

pave111
pave111 Autor

спасибо. а информацию о сделках он как получает?

orderReverse = new Order ; QTrader.RegisterOrder(orderReverse);

отправил заявку и без какой-либо дополнительной обработки, я могу быть уверен, что Strategy.PositionManager.Position вернет верное, реальное значение?

artemox
artemox

Информацию о сделках получает из таблицы квик "мои сделки". Вы привели пример регистрации заявки, но в расчете позиции сами заявки по идее не участвуют. Чтобы Strategy.PositionManager.Position считала позицию по исполненным заявкам, заявку необходимо регистрировать из стратегии.

pave111
pave111 Autor

да, я понимаю, все что писалось выше делалось внутри стратегии.

все же не знаете чем могли быть вызванны ошибки выше?

сейчас переделал на PositionManager, буду тестировать. почему раньше не всегда работало не понятно

Mikhail Sukhov
Mikhail Sukhov

pave111: Здравствуйте. Попробовал очевидное решение - добавил в обработчик проверку foreach (MyTrade mt in NewMyTrades) { if (mt.Order.IsMatched()) { выполнилось все, сделать действие } }

Добавьте обработчик не на NewMyTrades а на OrdersChanged.

pave111
pave111 Autor

большое спасибо, этот вариант как раз не пробывал. разрешите один вопрос - я выставил заявку и она могла либо ВЫПОЛНИТСЯ полностью, либо быть снята мной. в обоих случаях будет state Done Заявка больше не активна на бирже (была полностью удовлетворена или снята из программы). чтобы узнать что именно с ней произошло нужно посмотреть balance (продалась или отменена) ордера, так? это будет правильнее, чем получать позицию из квика?

хотел сказать Вам огромное спасибо за библиотеку, она сэкономила кучу времени и сил.

Mikhail Sukhov
Mikhail Sukhov

pave111: я выставил заявку и она могла либо ВЫПОЛНИТСЯ полностью, либо быть снята мной. в обоих случаях будет state Done Заявка больше не активна на бирже (была полностью удовлетворена или снята из программы). чтобы узнать что именно с ней произошло нужно посмотреть balance (продалась или отменена) ордера, так? это будет правильнее, чем получать позицию из квика?

  1. order.IsMatched() order.IsCanceled()
  2. это будет правильнее, потому что позиция обновляется с запозданием + так будет проще, потому что позиция - это совокупность исполненных частей заявок.