← Zurück

Тип ордера 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 и нужно ли его передавать?

War dieses Thema hilfreich?

Thema teilen

Kommentare (20)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

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>

Спасибо!