Добрый день!
Пытаюсь организовать работу с заявками по волатильности, но никак не получается добиться более менее комфортной работы от
VolatilityQuotingStrategy для Quik. Библиотека S# 4.0 Попытаюсь систематизировать возникащие проблемы:
1)
Остановка по ошибке Сейчас в случае возникновения любой ошибки стратегия котирования останавливается или пытается продолжить работу пока не будет исчерпан лимит
MaxErrorCount. Но такое поведение не всегда подходит.
Например, в случае ошибки:
Quote:. Причина '[FORTS] Премия по опциону вне лимитов. 12065.00000 - 12565.00000'.
обоснована немедленная остановка стратегии, а в случае ошибок типа:
не удается снять заявку
хотелось бы, чтобы стратегия предприняла еще попытки отменить заявку.
В связи с этим возникает вопрос... - Можно ли как-то определить типы исключений, по которым стратегия должна останавливаться, а по которым нет? Или может есть какой-то альтернативный механизм, при помощи которого можно организовать подобную логику?
2)
ЛоггированиеСейчас логги стратегии котирования содержат огромное количество информации. И сам процесс перестановки заявок и все ошибки выводятся через событие Log. Очевидно, что в общем случае для пользователя такое количество информации является избыточным, нужно как-то фильтровать сообщения. Например, мне было бы достаточно выводить только ошибки, которые привели к остановке стратегии. Я пытаюсь фильтровать только message, где MessageState.Error Но тексте такой ошибки выводится StackTrace и Транзакция, которые очень сильно захламляют выводимое сообщение.
Пример:
Quote:System.ArgumentException: Транзакции 'ACCOUNT=SPBFUT00021; CLIENT_CODE=SPBFUT00021; TRANS_ID=53588440; CLASSCODE=SPBOPT; SECCODE=RI125000BX1; QUANTITY=1; OPERATION=B; TYPE=L; ACTION=NEW_ORDER; PRICE=15055; EXECUTION_CONDITION=PUT_IN_QUEUE;' не была зарегистрирована. Причина '[FORTS] Премия по опциону вне лимитов. 12065.00000 - 12565.00000'.
Parameter name: transactionTxt
at #=qWPEZbaPXXnfu0dolel1ZCrOozOSaV9Evx8y5tzJ_qRg=.#=qUmjMMAjUTZss3dBE$Ew$fpc_JpVLlqt0ZmiB6BsvsdU=(String #=qL04X18_51q6kCgj6rYNY5g==, OrderStatus& #=qsrLj2ADhO$O_1gepTOivtA==, UInt32& #=qLxax_yvVk4z0qUc0dAQ32g==, Int64& #=qtjdK4awArO9TiFZTKitnBQ==, String& #=q2bRWR3jcDI1Bu7F20PAwxw==)
at StockSharp.Quik.QuikTrader.#=qNjNbkG4PfYKhxHndxWXTWF1Ov$hID1w11HFWHeJ2x5k=(Order #=qLe3cC9AUaUdkc1nayio1IA==, TransactionBuilder #=qI3zb3NAT7OuakeMqyKo6bw==)
at StockSharp.Quik.QuikTrader.OnRegisterOrder(Order order)
at StockSharp.Algo.BaseTrader.RegisterOrder(Order order)
at StockSharp.Algo.Strategies.Strategy.RegisterOrder(Order order)
at StockSharp.Algo.Strategies.QuotingStrategy.#=qUnRhFjJYBEJR2aX1ii4r3g==()
at StockSharp.Algo.Strategies.QuotingStrategy.#=qMLnz$QQgJVSunmZKGb$991wLpKURSLxlpEtBpES1NFI=.#=qmtxb5GB9904qysMgCjwVBQ==()
at StockSharp.Algo.Strategies.StrategyRule.#=qQrecZK95seh7eX31S0$L1c4z__sUsXGlZDSN84Xriek=.#=qhftCtuaqFJhzzRNZOlqGig==(Object #=qKbVbzSe0ZKnXvU43LzXRuw==)
at StockSharp.Algo.Strategies.Strategy.#=q1CfLqaNuJVblIvl$mfhRZQ==(StrategyRule #=qjNSQS_xTM$cIj4bTUzJoNQ==, Object #=qnC3HLgCCuWFncdxUk6AxAQ==)
3)
Отмена заявок в VolatilityQuotingStrategyНе получается чисто прервать работу VolatilityQuotingStrategy с отменой всех активных заявок:
a) При вызове strategy.CancelActiveOrders() часто выдается исключение типа "Стратегия должна быть зарегистрирована". Поэтому я проверяю сначала ProcessState
Code
if (volaOrder.ProcessState == StockSharp.Algo.Strategies.ProcessStates.Started)
{
volaOrder.CancelActiveOrders();
}
Но что делать, если стратегия остановлена(она остановилась по ошибке), а активные заявки остались?
b) В последней версии такого не замечал, но возможно по чистой случайности, поэтому напишу еще об одной проблеме. При попытке остановить стратегию VolatilityQuotingStrategy
volaOrder.Stop()
стратегия зависает в состоянии Stopping, начинает что-то пытаться делать, в логи валятся сообщения... Т.е. создается ощущение, что в OnStopping крутится какой-то код, который не дает перевестись стратегии в состояние Stopped. Приходится выводить volaOrder.Stop() в отдельный поток, чтобы не блокировать основной поток при таком зависании.