Котирование по волатильности
Atom
05.10.2011


Добрый день!
Пытаюсь организовать работу с заявками по волатильности, но никак не получается добиться более менее комфортной работы от VolatilityQuotingStrategy для Quik. Библиотека S# 4.0 Попытаюсь систематизировать возникащие проблемы:

1) Остановка по ошибке
Сейчас в случае возникновения любой ошибки стратегия котирования останавливается или пытается продолжить работу пока не будет исчерпан лимит MaxErrorCount. Но такое поведение не всегда подходит.

Например, в случае ошибки:
Цитата:
. Причина '[FORTS] Премия по опциону вне лимитов. 12065.00000 - 12565.00000'.


обоснована немедленная остановка стратегии, а в случае ошибок типа:

не удается снять заявку

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

В связи с этим возникает вопрос... - Можно ли как-то определить типы исключений, по которым стратегия должна останавливаться, а по которым нет? Или может есть какой-то альтернативный механизм, при помощи которого можно организовать подобную логику?

2) Логгирование
Сейчас логги стратегии котирования содержат огромное количество информации. И сам процесс перестановки заявок и все ошибки выводятся через событие Log. Очевидно, что в общем случае для пользователя такое количество информации является избыточным, нужно как-то фильтровать сообщения. Например, мне было бы достаточно выводить только ошибки, которые привели к остановке стратегии. Я пытаюсь фильтровать только message, где MessageState.Error Но тексте такой ошибки выводится StackTrace и Транзакция, которые очень сильно захламляют выводимое сообщение.
Пример:

Цитата:
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

Код
if (volaOrder.ProcessState == StockSharp.Algo.Strategies.ProcessStates.Started)
                {
                    volaOrder.CancelActiveOrders();
                }


Но что делать, если стратегия остановлена(она остановилась по ошибке), а активные заявки остались?

b) В последней версии такого не замечал, но возможно по чистой случайности, поэтому напишу еще об одной проблеме. При попытке остановить стратегию VolatilityQuotingStrategy

volaOrder.Stop()

стратегия зависает в состоянии Stopping, начинает что-то пытаться делать, в логи валятся сообщения... Т.е. создается ощущение, что в OnStopping крутится какой-то код, который не дает перевестись стратегии в состояние Stopped. Приходится выводить volaOrder.Stop() в отдельный поток, чтобы не блокировать основной поток при таком зависании.

Теги:


Спасибо:


Alexander

Фотография
Дата: 05.10.2011
Ответить


1) Обрабатывайте событие возникновения ошибки стратегии и поступайте как считаете нужным в зависимости от текста ошибки
2) Переопределите OnWriteMessage
3) Снимайте заявки через Trader.CancelOrders
Спасибо: Артем_2

Артем_2

Фотография
Дата: 05.10.2011
Ответить


Alexander Mukhanchikov Перейти
1) Обрабатывайте событие возникновения ошибки стратегии и поступайте как считаете нужным в зависимости от текста ошибки
2) Переопределите OnWriteMessage
3) Снимайте заявки через Trader.CancelOrders


Спасибо, попробую!
Спасибо:


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

loading
clippy