Случается часто, что котирование не срабатывает. Использую SmartTrader и котирование вида BestByPriceQuotingStrategy(_Order, 4.Pips(_Order.Security)).
Два примера.
- Ордер был выставлен, но цена ушла далеко против него. Ордер должен был переставиться. Но этого не произошло. Реально ордер выставился, затем был отменен, а новый не поставился. Соответственно сделка не прошла.
22.02.2011 0:22:59 [OpenWealth.StockSharp.SmartCOM.<Smart_NewOrders>b__18] RTS-3.11 +1*187110 Limit
22.02.2011 0:23:55 [OpenWealth.HeadRealTrade.OnLog] ERROR: ЛОГ стратегии Name: BBPQS errorStates: Error str: System.InvalidOperationException: В процессе снятия заявки '0' случился тайм-аут.
в Ecng.Trading.Algo.TraderHelper.GuarantyCancelOrder(Order order)
в Ecng.Trading.Algo.Strategies.Strategy.ReRegisterOrder(Order oldOrder, Func`1 getNewPrice, Func`1 getNewVolume, Boolean isForts)
в Ecng.Trading.Algo.Strategies.QuotingStrategy.OnProcess()
в Ecng.Trading.Algo.Strategies.Strategy.#=q3UdZn4RtstjLq$DRetpesrMPkbpqY9D7UhsAwBvksoY=.#=qYw$3xI3MUzQpTQq5ga9LOw==()
- Ордер был выставлен, цена резко пошла в сторону ордера. Ордер выполнился. Но стратегия котирования выдала ошибку.
22.02.2011 16:14:38 [OpenWealth.StockSharp.SmartCOM.<Smart_NewOrders>b__18] RTS-3.11 +1*183565 Limit
22.02.2011 16:14:39 [OpenWealth.StockSharp.SmartCOM.<Smart_NewMyTrades>b__16] 275103030 RTS-3.11 +1*183515
22.02.2011 16:14:39 [OpenWealth.HeadRealTrade.OnLog] ERROR: ЛОГ стратегии Name: BBPQS errorStates: Warning str: Заявка 57996368 не имеет состояния.
22.02.2011 16:15:01 [OpenWealth.HeadRealTrade.OnLog] ERROR: ЛОГ стратегии Name: BBPQS errorStates: Error str: System.InvalidOperationException: В процессе снятия заявки '0' случился тайм-аут.
в Ecng.Trading.Algo.TraderHelper.GuarantyCancelOrder(Order order)
в Ecng.Trading.Algo.Strategies.Strategy.ReRegisterOrder(Order oldOrder, Func`1 getNewPrice, Func`1 getNewVolume, Boolean isForts)
в Ecng.Trading.Algo.Strategies.QuotingStrategy.OnProcess()
в Ecng.Trading.Algo.Strategies.Strategy.#=q3UdZn4RtstjLq$DRetpesrMPkbpqY9D7UhsAwBvksoY=.#=qYw$3xI3MUzQpTQq5ga9LOw==()
Comentarios (33)
Iniciar sesión o Crear cuenta, Inicie sesión o regístrese para dejar un comentario
Подпишитесь на событие Strategy.Log и напечатайте то, что там приходит.
Я уже переделал метод на свою собственную стратегию. Аналог котирования. Использую _Order.GuarantyCancelOrder() перед тем как выставить ордер с новой ценой. Получаю ту же ошибку:
Strategy.Log сейчас сделаю.
По всей видимости что-то не так с заявкой. Почему у нее нулевой идентификатор?
Идентификатор? Это какое поле? Я стандартно вроде создаю все.
Лог:
Это Order.Id, что приходит от смарта. И судя по логу, заявка вообще не обновляется. Надо смотреть причину в событие о заявках. NewOrders. OrdersChanged. Лучше сразу у SmartTrader.
Мда, демо сервер не работает. Что это за демо такой, который работает только в рабочие часы.👎
По логу. Не выводите самого главного - идентификатора заявок (смарт который приходит в SmartComWrapper.NewOrder, Order.TransactionId и order.Id). Плюс не совсем понял, где в логе вывод SmartTrader.NewOrders SmartTrader.OrdersChanged. То, что к врапперу подключились - очень хорошо. Но еще и сам SmartTrader нужен.
И еще вопрос. Вы после этого обновлялись?
Вот я и не помню, вроде обновлялся. Но вот в этом случае трейд под стратегией не зарегистрировался. Поэтому тоже засомневался, что обновлялся. Проапдейтился до 3.0.5b, но проверить смогу только завтра.
S# 3.0.9 В общем, на демо почему-то работает стабильно. Больше 100 трейдов с котированием отработали на ура. В реале из 4х котирований поломались 2. В обоих случаях ни ордер, ни трейд под стратегией не зарегистрировались.
Лог неудачного котирования:
Лог для успешной операции котирования:
Формат вывода вреппера как обычно:
В 3.0.10 были изменения насчет Order.CancelTime.
S# 3.0.12b
BestByPriceQuotingStrategy(_Order, 5.Pips(_Order.Security));
Из webUI itinvest известно: в результате котирования (лог ниже) выставлена и отменена одна заявка "Продать фьючерсы RTS-3.11 1 лот по цене 201,605 приказ LIMIT". Больше заявок нет.
Формат вывода как обычно:
Лог нормальный. А в чем вопрос?
Сделки нет. Только один отмененный ордер. Ни одного исполненного.
По логу видно, что была заявка, которую котирование не смогло отменить. После этого котирование остановилось. Заявка и не должна в таком случае появиться.
Всмысле? Еще ра. Котирование вида BestByPriceQuotingStrategy(_Order, 5.Pips(_Order.Security)). Оно должно передвигать заявку на край стакана при привышении 5и пунктов и в любом случае исполниться рано или поздно. Разве нет??
Что такое процесс движения. Это когда снимается заявка и регистрируется новая. Если в этот механизме происходит исключение, оно не срабатывает. В вашем случае было ошибка на снятии заявки. Слишком долго Смарт слал инфу о том, что заявка снята. И в этом возможно виноват S#.😊 Sleep с COM объектами не дружит. Если это то, о чем я думаю, то поведение в 3.0.14 будет лучше. Если нет, значит все таки СмартКом.
И что теперь делать? Когда я посылаю запрос на котирование, мне необходима 100% гарантия, что запрос исполнится если нет обрыва связи или креша системы / биржи. Иначе вся логика ломается. Из 7 трейдов сегодня, эта ошибка вылезла 3и раза. Т.е. метод АБСОЛЮТНО нерабочий.
На мой взгляд:
Все верно. Я постараюсь проблему устранить ту, которую сам нашел в метод GuarantyCancelOrder. Если она поможет, гуд. Иначе, как-то по другому решать задачу.
Подтверждаю, с котированием есть проблемы, вот лог [Quik Junior] [3.0.13]:
В первом случае заявка исполнилась, а стратегия пытается ее снять. А дальше возникает ошибка из-за ограничения не более 30 транзакций в секунду на ФОРТС через Quik Junior (у меня от Finam), причем оно дается на всех клиентов. Кроме того, в Quik Junior есть еще похоже ограничение на не более 10 перестановок заявки, возникает стабильно, 11 перестановку отвергает. Выложу лог, как только возникнет еще раз. Хотелось бы, чтобы эти ограничения тоже как-то учитывались при котировании.
По Смарту совсем другая картина - там обновление не приходит о заявке. А тут типичное ограничение объема, что как раз является правильным поведением (не можете вы продать, потому что к лимиту подошли)... С кол-вом транзакций все просто - Strategy.Interval.
В догонку еще лог:
Объем заявки почему-то увеличивается с одного до двух (и может увеличиваться дальше), хотя задано продать один фьючерс через котирование.
Две стратегии на котирование не были зарегистрированы?
Вот часть кода:
Выведите в лог момент создания MarketQuotingStrategy
SmartTrader, S# 3.0.14
Проблема так и не исправлена.
Пишите в саппорт Смарта. Это не нормально, когда по пол минуте от заявки не приходят уведомления.
Это расшифровывается как "бросайте этот глючный смарт, переходите на квик"? )
Вывел в лог.
Лог:
Запустил еще раз и еще лог:
Ну и еще раз запустил:
Ошибку подтверждаю. Выпущу еще один фикс.
[3.0.17]
Заявка 46277906 исполнилась, а котирование продолжается...
Михаил, по предыдущему посту и последнему моему сообщению в теме мыслей не появилось? Хотелось бы окончательно снять проблемы с котированием.
Я упустил предыдущий пост... Строчка "Ecng.Trading.Quik.ApiException: Код ошибки Failed Сообщение [FORTS] Не найдена заявка для удаления" откуда выводиться? Из Strategy.Log или ProcessDataError? QuikTrader.IsAsyncMode = ? QuotingStrategy.IsForts = ?
Насчет тестирования, пока отложу (есть мнение, что нужно кое-что переделать).