← Atrás

Тип ордера FillOrCancel

Иногда случается ошибка:

AC$ 30.08.2011 18:00:09.579 [alpha] System.ArgumentException: Транзакции 'ACCOUNT=SPBFUT00czw; CLIENT_CODE=SPBFUT00czw; TRANS_ID=57550479; CLASSCODE=SPBFUT; SECCODE=RIU1; QUANTITY=1; OPERATION=S; TYPE=L; ACTION=NEW_ORDER; PRICE=165065; EXECUTION_CONDITION=FILL_OR_KILL;' не была зарегистрирована. Причина 'Ошибка создания заявки. [FORTS] "Неполное сведение FOK заявки.".'.
Parameter name: transactionTxt
   at #=qWVb3hlEq_bsi0PlbyLoPNGtmi$sN1GAXJmEglIOuywk=.#=qe2XG1WRxcPRM7kYqWweGZ$USUGIpyehjN9FXfaVbRqk=(String #=qoaJFz4elMnSbwxESEkocqA==, OrderStatus& #=qF9fiowcCBpgiw2vJwkeiPQ==, UInt32& #=qVABNTzTaO$dkfjwyZVXGRQ==, Int64& #=qufGPkJZSaS$_1AhJXi0Q_Q==, String& #=qZYLywgaI4aboC1fy22p5YQ==)
   at StockSharp.Quik.QuikTrader.#=qIiEPgk1OxvfO3bGPdOk80whIsPAOOUvmEP23HUwhR00=(Order #=qE1hxwYv7mjShNv3VqnQ$4Q==, TransactionBuilder #=qMayz96ds6ngzqy1uCpM0Mw==)
   at StockSharp.Quik.QuikTrader.OnRegisterOrder(Order order)
   at StockSharp.Algo.BaseTrader.RegisterOrder(Order order)
   at StockSharp.Algo.Strategies.Strategy.RegisterOrder(Order order)
   at Church.Strategies.Alpha.Alpha.GoShort()
   at Church.Strategies.Alpha.Alpha.Process()
   at StockSharp.Algo.Strategies.StrategyRule.#=qFRqbpWkXa_e5qv6Y_c3Cjqa84vmqnWUiNQozd3UzbCQ=.#=qE64_FjSgaXcFnXD55NNbNw==(Object #=qXmNYxa6wjOyOlL9yFxtNvA==)
   at StockSharp.Algo.Strategies.Strategy.#=qiaS4JJP6dIvcV4PykmPE_w==(StrategyRule #=qE1G0wojhtVI3LgG2ikwMjQ==, Object #=qN7sJLpCukdtyplL46bCrEQ==)

Код заполнения ордера:

                    var order = CreateOrder(OrderDirections.Sell, this.Security.BestBid.Price - EntrySlip, this.Volume);
                    order.ExecutionCondition = OrderExecutionConditions.FillOrCancel;

Это бага? Что такое transactionTxt и нужно ли его передавать?

¿Le resultó útil este tema?

Compartir tema

Comentarios (20)

Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario

Mikhail Sukhov
Mikhail Sukhov

Church: Иногда случается ошибка: AC$ 30.08.2011 18:00:09.579 [alpha] System.ArgumentException: Транзакции 'ACCOUNT=SPBFUT00czw; CLIENT_CODE=SPBFUT00czw; TRANS_ID=57550479; CLASSCODE=SPBFUT; SECCODE=RIU1; QUANTITY=1; OPERATION=S; TYPE=L; ACTION=NEW_ORDER; PRICE=165065; EXECUTION_CONDITION=FILL_OR_KILL;' не была зарегистрирована. Причина 'Ошибка создания заявки. [FORTS] "Неполное сведение FOK заявки.".'.

Это к квиковцам нужно, понять, что не так в транзакции.

Alexander
Alexander

Это тестовый сервер Квик или боевой?

Как часто не срабатывает заявка FILL_OR_KILL - каждый раз или иногда?

P.S. Переместил в наш форум Квика.

Church
Church Autor

Это боевой сервер Финама, заявка не срабатывает от раза к разу, пока что не получилось замерять частоты.

Alexander
Alexander

Church: Это боевой сервер Финама, заявка не срабатывает от раза к разу, пока что не получилось замерять частоты.

Задал квику вопрос - получил ответ.

Mikhail Sukhov
Mikhail Sukhov

Alexander:

Church: Это боевой сервер Финама, заявка не срабатывает от раза к разу, пока что не получилось замерять частоты.

Задал квику вопрос - получил ответ.

Напомнило анекдот про админа.

Church
Church Autor

Попробовал руками послать через квик FOK ордер, sell по цене выше рынка - получил эту же ошибку. Т.е. 2 варианта:

  • либо это Финам так FOK-и обрабатывает, либо
  • это стандартная реакция квика на событие Cancel.

Чтобы выяснить это, предлагаю кому-нибудь попробовать это у другого брокера. Если подтвердится второй вариант, то, наверное, надо эту ошибку обернуть внутри S#?

Alexander
Alexander

Church: Попробовал руками послать через квик FOK ордер, sell по цене выше рынка - получил эту же ошибку. Т.е. 2 варианта:

  • либо это Финам так FOK-и обрабатывает, либо
  • это стандартная реакция квика на событие Cancel.

Чтобы выяснить это, предлагаю кому-нибудь попробовать это у другого брокера. Если подтвердится второй вариант, то, наверное, надо эту ошибку обернуть внутри S#?

Проверял - тоже самое и в открытии. Как раз минут 15 назад начал оборачивать внутри S#

Alexander
Alexander

Какой order.Status у непроходящий заявки? OrderStatus.NotDone?

Church
Church Autor

Alexander: Какой order.Status у непроходящий заявки? OrderStatus.NotDone? Сегодня уже не успею написать тест (стратегия больше не использует FOK), но завтра выясню.

Alexander
Alexander

Church:

Alexander: Какой order.Status у непроходящий заявки? OrderStatus.NotDone? Сегодня уже не успею написать тест (стратегия больше не использует FOK), но завтра выясню.

Эх, я на 5 секунд опаздал с тестом, не уложился в торговую сессию. Тогда жду от вас завтра сообщения о статусе для фикса.

Church
Church Autor

State = Failed, Status = null.

Alexander
Alexander

В общем это так просто не исправить. Используйте IsAsyncMode. Начиная с версии 3.2.11 он будет использован по умолчанию.

подробнее - читайте в доке уже сейчас

Den
Den

Alexander Mukhanchikov: В общем это так просто не исправить. Используйте IsAsyncMode. Начиная с версии 3.2.11 он будет использован по умолчанию.

подробнее - читайте в доке уже сейчас

Коллеги,

у кого-нибудь в итоге заработали Fill_or_cancel? :)

Здесь написано про некий параметр @CotirContr. Может быть его не хватает при создании заявки и отправки через Quik?

Alexander
Alexander

Den:

Alexander Mukhanchikov: В общем это так просто не исправить. Используйте IsAsyncMode. Начиная с версии 3.2.11 он будет использован по умолчанию.

подробнее - читайте в доке уже сейчас

Коллеги,

у кого-нибудь в итоге заработали Fill_or_cancel? :)

Здесь написано про некий параметр @CotirContr. Может быть его не хватает при создании заявки и отправки через Quik?

А через квик сейчас не работает? Даже если послать по той цене, которая гарантированно присутствует в стакане?

Den
Den

Alexander Mukhanchikov: А через квик сейчас не работает? Даже если послать по той цене, которая гарантированно присутствует в стакане?

Проверил в боевом Квике:

  1. Если заявка может быть удовлетворена и по цене, и по объему - она сразу удовлетворяется. Ошибок нет.

  2. Если цена в стакане есть, но не хватает объема - ошибка.

  3. Если выставить цену в середину спреда - ошибка.

  4. Если цена есть, но в глубине стакана - ошибка.

Вывод: в любом случае когда заявка не может быть немедленно удовлетворена мы имеем ошибку. Если заявка немедленно удовлетворяется - ошибки нет.

Den
Den

Den:

Alexander Mukhanchikov: А через квик сейчас не работает? Даже если послать по той цене, которая гарантированно присутствует в стакане?

Проверил в боевом Квике:

  1. Если заявка может быть удовлетворена и по цене, и по объему - она сразу удовлетворяется. Ошибок нет.

  2. Если цена в стакане есть, но не хватает объема - ошибка.

  3. Если выставить цену в середину спреда - ошибка.

  4. Если цена есть, но в глубине стакана - ошибка.

Вывод: в любом случае когда заявка не может быть немедленно удовлетворена мы имеем ошибку. Если заявка немедленно удовлетворяется - ошибки нет.

Уважаемые разработчики!

Я еще раз прочитал ответ с форума Квик и ТОЧНО понял, что требуется сделать в S# и почему:

Если заявка не может быть удовлетворена, то с ФОРТСа летит сообщение "Неполное сведение FOK заявки", причем ударение на второй слог: "сведЕние" (см. тут), что означает она не может быть удовлетворена. Квиковцы это сообщение тупо транслируют.

Посему логично было бы на стороне S# это фильтровать и обрабатывать для всех заявок c EXECUTION_CONDITION == FILL_OR_KILL, выставляя заявке статус Cancelled, а не выбрасывать исключение.

Что думаете на этот счет?

Alexander
Alexander

Den:

Den:

Alexander Mukhanchikov: А через квик сейчас не работает? Даже если послать по той цене, которая гарантированно присутствует в стакане?

Проверил в боевом Квике:

  1. Если заявка может быть удовлетворена и по цене, и по объему - она сразу удовлетворяется. Ошибок нет.

  2. Если цена в стакане есть, но не хватает объема - ошибка.

  3. Если выставить цену в середину спреда - ошибка.

  4. Если цена есть, но в глубине стакана - ошибка.

Вывод: в любом случае когда заявка не может быть немедленно удовлетворена мы имеем ошибку. Если заявка немедленно удовлетворяется - ошибки нет.

Уважаемые разработчики!

Я еще раз прочитал ответ с форума Квик и ТОЧНО понял, что требуется сделать в S# и почему:

Если заявка не может быть удовлетворена, то с ФОРТСа летит сообщение "Неполное сведение FOK заявки", причем ударение на второй слог: "сведЕние" (см. тут), что означает она не может быть удовлетворена. Квиковцы это сообщение тупо транслируют.

Посему логично было бы на стороне S# это фильтровать и обрабатывать для всех заявок c EXECUTION_CONDITION == FILL_OR_KILL, выставляя заявке статус Cancelled, а не выбрасывать исключение.

Что думаете на этот счет?

В 4.0.6 будет фикс, спасибо

Den
Den

Alexander Mukhanchikov: В 4.0.6 будет фикс, спасибо

Проверил на 4.0.6. Получил эсепшен:

Транзакция 'ACCOUNT=SPBFUTXXXXX; TRANS_ID=67142778; CLASSCODE=SPBFUT; SECCODE=RTS-12.11; QUANTITY=1; OPERATION=B; TYPE=L; ACTION=NEW_ORDER; PRICE=140000; EXECUTION_CONDITION=FILL_OR_KILL;' не была зарегистрирована. Причина 'Ошибка создания заявки. [FORTS] "Неполное сведение FOK заявки.".'.

У самой заявки я наблюдаю следующие поля:

Canceled: <False>  Empty: <True>  Partially: <False>  Matched: <False>  Balance: <1>  State: <Failed>  Status:  <>

Похоже что поведение не изменилось, в чем заключался фикс?

Alexander
Alexander

Точку забыл во время фикса в сообщении "Неполное сведение FOK заявки." Сделал фикс#2, будет в 4.0.8

Den
Den
Den

Alexander Mukhanchikov: Точку забыл во время фикса в сообщении "Неполное сведение FOK заявки." Сделал фикс#2, будет в 4.0.8

Проверил, эксепшена нет.

State: <Failed>  Status:  <NotDone>

Спасибо!