АПИ 4.2.72, коннектор Quik lua. Периодически получаю неверное значение лучшей цены в стакане, которая находится в середине противоположных котировок:
var md = this.Connector.GetFilteredMarketDepth(this.Security);
Sides? badside = null;
//проверим, есть ли "плохая" лучшая цена
if (md.Asks.Count() > 1 && md.Bids.Count() > 1)
{
if (md.Asks[0].Price<md.Bids[0].Price)
{
//есть попандос
if (md.Asks[0].Price < md.Bids[1].Price) badside = Sides.Sell;
else if (md.Bids[0].Price > md.Asks[1].Price) badside = Sides.Buy;
}
}
if (badside != null) this.AddErrorLog("В стакане не верная лучшая цена по направлению {0}", badside);
Вместо Asks и Bids можно использовать GetQuotes, GetFilteredQuotes, вместо GetFilteredMarketDepth использовать GetMarketDepth - результат одинаковый. Закономерность появления "плохой" лучшей цены выявить не удалось. Может выскочить с утра, может к вечеру, а может и вообще несколько дней не появляться.
评论 (25)
登录 或 创建账户, 登录或注册以发表评论
Писал историю лучших бидов/асков фьюча на сбер... Тоже наблюдал, что периодически бид и аск перепутаны.. s# 4.2.70 Lua
Они не перепутаны. При формировании стакана в какой-то момент по одной из сторон стакана "зависает" старая цена, которая остается постоянной, пока не перезагрузишь робота. Если она находится "внутри" своей стороны - мы этого не видим, но как только цены сдвигаются на значительное расстояние, она всплывает как "лучшая". Это баг формирования стакана. Кстати есть лог, демонстрирующий этот факт:
Ошибки идут из Луа. Тоесть получаются уже неправильные стаканы.
Они не перепутаны. При формировании стакана в какой-то момент по одной из сторон стакана "зависает" старая цена, которая остается постоянной, пока не перезагрузишь робота. Если она находится "внутри" своей стороны - мы этого не видим, но как только цены сдвигаются на значительное расстояние, она всплывает как "лучшая". Это баг формирования стакана.
......
Вот сравнение лучших цен (приходится делать, чтобы избежать этого бага):
Спасибо за информацию. Можно попробовать импорт через DDE. Если это действительно конфликт lua скрипта и Квика, то избавитесь от ошибки. Напишите, пожалуйста, о результате, если проведете такой эксперимент.
Фикс будет?
Будет. Но я не могу пофиксить Квик.
Так проблема в квике или в коннекторе ЛУА?
Квик
А обращение на этот счет было в техподдержку квика?
По этому отчетов перед юзерами не будет
С чем связана такая секретность? Это ведь не просто баг, это жопа. Я на этом баге потерял 12% депо, пока не понял в чем дело. А у вас нигде намека на это нет, хотя вы и в курсе судя по всему. И ведь эталона кроме глаз нету. В Security.BestAsk/BestBid тоакже транслируется неверные значения в момент проявления этого бага...
Дело не в секретности. Сырцы на Гите. Точка останова и вперед. Или логи.
Как сырцы помогут, если, по вашим словам, проблема в квике? Плюс к тому же я не разработчик и не имею доступа к исходникам коннектора. Я привел код, который позволяет поймать этот баг. Будьте добры, как разработчик и знаток платформы, заняться доработкой коннектора LUA (если проблема все же в нем).
Вы же сами хотите интерактив.😀
Я как то обновился, с версии S# 4.2.61 на более высокую, именно коннектор обновлял. У меня появились проблемы со стаканом, похожие по описанию на ваши. Я сразу откатился назад. Я не утверждаю что проблема в коннекторе, возможно стратегия моя не столь требовательна к стаканам и я просто не замечаю косяки. Но на S# 4.2.61 проблемы не наблюдаю. В общем прорвете на 4.2.61.
Не понял ваш ответ, что имеете в виду под я хотел интерактив? Или это типа троллинг?
Михаил, внятно можете пояснить, было обращение в квик по поводу не верной трансляции данных по стакану или нет?
http://stocksharp.com/posts/m/32966/
Уважаемые разработчики, проверьте пожалуйста коннектор ЛУА, т.к. проблема скорее всего в коннекторе. Я подправил скрипт, который в приложении, он экспортирует лучшую цену в файл. Вот что у меня получилось при работе с SRM5@FORTS: лог робота:
Лог луа-скрипта, который экспортирует лучшие цены:
Надо проверку вот сюда воткнуть https://github.com/StockSharp/StockSharp/blob/master/Connectors/Quik/Lua/LuaFixServer.cs#L473 и напишите, что она даст.
Исходники лучше качать ДО https://github.com/StockSharp/StockSharp/commit/9cc21b7d6f3b89e8fd3ad9f495d7b32f43a8cff6 (включительно). Все что позднее сейчас нестабильно.
Добавил такую проверку:
В момент получения ошибки по стакану в роботе в логе луа ошибок нет, т.е. ошибка появляется где-то дальше. Где еще посмотреть можно?
P.S. Периодически в трейдере получаю такую ошибку на сборке, указанной выше:
Получается, что из Луа приходит нормальные стакана. Видимо порча идет дальше. Выставите в скрипте IncrementalDepthUpdates=false Стакан должен слаться как есть.
Подписка на стаканы идет по одному инструменту или по нескольким?
Михаил, подскажите где в коде устанавливается флаг message.IsSorted для LUA?
А в ответ тишина... Использую фикс a5aee499, все, что выше работает не стабильно.
Лог:
Connector_ProcessMessage.cs функция private void ProcessQuotesMessage(Security security, QuoteChangeMessage message)
Лог:
Вообще загадка... luafixserver public override void SendOutMessage(Message message) получает message без ошибок, далее в ней вызывается base.SendOutMessage(message), который как я понимаю находится в messageadapter.cs и вызывает public virtual void SendOutMessage(Message message) для постановки message в очередь на обработку. А там уже ошибка есть... Код в messageadapter.cs:
Лог луа-сервер:
лог messageadapter
И еще похоже на то, что часть message теряется и не проходит в принципе судя по количеству вызовов в луа-сервере и в адаптере... Этот вариант без IncrementalDepthUpdates=false, позже попробую с ней. Подписка на несколько стаканов, просто чтобы было меньше каши в логах сделал выгрузку только по одному.
P.S. включение флага IncrementalDepthUpdates=false не помогает. P.P.S. Для luafixserver SessionHolder пишет лог в файл сервера StockSharp.QuikLua.log, а для messageadapter SessionHolder пишет лог в файл трейдера QuikTrader.txt. И как тогда поймать передачу данных от одного к другому? P.P.P.S. Михаил, может быть для лучшего быстродействия имеет смысл сделать отдельную очередь и отдельные обработчики для сообщений стакана и для прочих сообщений?