Здравствуйте! Проблема такая. Стратегия котирования запускается, пишет в лог, что запустилась и на этом зависает, не выставляя никакие заявки. Что характерно, этот же самый код отлично работает под QUIK JUNIOR котирование выполняется и завершается. Под нормальным квиком обычные заявки работают правильно, то есть настройки базовой стратегии правильные. Экспорт стакана запускаю (иначе бы под джуниором не работало). Может кто сталкивался? Я чувствую, что тут какая-то совсем глупая ошибка, но не могу понять даже, с какого боку копать ее. Может есть возможность посмотреть более подробные логи стратегии?...
Kommentare (21)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Установить для каждого Strategy.Rules EnableLog = true.
Написал вот так (на всякий случай):
Получил только это:
Дальше ничего... 🤨
В котировании правила создаются в OnStarting. Сделайте сначала добавление стратегии (только убедитесь, что и после этого правил > 0), а затем уже включение для правил логирование.
Вывод такой:```plain В стратегии правил 1
В котировании правил 0
Котирование: MQS || None || Стратегия запущена.
Стратегия: TLS || None || [MQS] Стратегия запущена.
В стратегии правил 2
В котировании правил 3
В текущей версии только через переопределение MarketQuotingStrategy.OnStarting Но в случае ошибок вы получите информацию через ProcessDataError или Strategy.Log.
ProcessDataError помог сдвинуться с мертвой точки. С периодом порядка секунды вылетает System.ArgumentException "An item with the same key has already been added." Вы понимаете, почему это может происходить? Или куда копать дальше?
Полный стек ошибки приведите.
at StockSharp.Quik.QuikTrader.#=qb8UK6OIUIbJMVeHlbOI65jq9T0y5i1xFvpi9bwfv_5k=.#=qyDUX5HBx_RonawnavrhbQw==(Exception #=qJGoxPFUzgnr6CSAPMnl52Q==)\r\n at #=qcHY9fPFm5xqxdHpgEdv8N_FH3JjHn$UY1TnoF9bcYJwclTD9DAZWJnJhLed70G8K.#=qvqiiUmdD8eJCMhhy$DCE3A==(DdeTable #=qwv6c0ugxXuL7ObO0x8XKGA==, IList
1 #=qqsMwosJewabRBWbSGqFU7Q==, Action2 #=q1GmEBNmz2CVGWiCKhcsWPA==, Action`1 #=qtPK2$9KjpId7xK1QohVWEg==)\r\n at StockSharp.Quik.QuikTrader.#=qb8UK6OIUIbJMVeHlbOI65jq9T0y5i1xFvpi9bwfv_5k=.#=qhiRmc7JSZYbx7AaRjum3jQ==()\r\n at StockSharp.Algo.BaseTrader.ProcessEvents(Action handler)Похоже что такая же проблема что и здесь. Попробуйте так же сделать, как я написал там.
И как я
Извините, был в отпуске. Надеялся что проблема решится с новой версией библиотеки, однако не решилась.
Все эти условия выполняются. Quik версии 5.24.0.58 от БКС (на запрос обновления говорит, что версия актуальная). Вкладка одна. Работаю под администратором. Повторюсь: ту же скомпилированную программу запускаю под Quik junior и котирование работает.
Запускаю экспорт всего. В таблице "Портфели по деривативам" ранее дублировались счета, но я оставил только показ денежных средств и теперь дублирования нет. Тем не менее в Trader.ProcessDataError вижу исключение "An item with the same key has already been added."
Подскажите, пожалуйста, как действовать дальше.
Выведите данные, что приходят через QuikTrader.PreProcessDdeData.
И еще вопрос, возможно не для этой темы. Так как котирование у меня не работает, я использую обычные заявки. А в них нужно указать цену. Раньше я брал ее из LastTrade, а теперь LastTrade равен null. Где брать цену? Получаю стакан - там тоже BestAsk/BeatBid null. Чтобы получить руками последнюю сделку, надо подождать, пока все сделки загрузятся (через событие новых сделок), а их очень много. И что значит "по умолчонию равен null"? Можно где-то включить что-то, чтобы это поле было не null?
Значит раньше вы брали нулевую цени и тогда по определению работать должно было неправильно. Запустите экспорт стакана.
Цену брать из последней сделки. Как придёт - так установится не в null. Тоже самое с BestAsk. И то и то устанавливается как приходит первая сделка \ появляется стакан. Для последнего - необходим экспорт стакана.
А чему вы хотите чтобы это поле было равно? :)) Если нет сделок - нет последней цены. Раньше цена равнялась 0, что неверно. Хотите произвольную цену - создайте и задайте LastTrade сами, указав в нём Price.
Все, мужики, каюсь. Столбцы были перепутаны в стакане. Спасибо вам огромное за помощь! Сейчас и в стакане не null-ы =))
Экспорт стакана запущен. Но Trader.GetMarketDepth(Security).BestAsk == null. Решил проблему добавив в Quik в таблицу Инструментов нужные поля.
А что нужно посмотреть в данных из Quik? Вот я распечатал названия таблиц.
И да, Verifier что пишет? Версия 4.0.1?
Столкнулся еще вот с какой проблемой при котировании.
Если я правильно понимаю, вместо заявки 73798096 стратегия начала перекотировать заявку 73798097. Прокомментируйте, пожалуйста, как такое возможно? Или эти номера вообще к делу не относятся, а относится только 5467784981? Кстати, после такой ошибки, какое поведение должно быть у стратегии котирования? У меня сложилось впечатление, что она забыла про заявку 73798096, ибо продала она в результате 4 вместо 2. Кусок лога, следующий сразу за предыдущим.
Вот эти 8значные номера - как они используются? Дело в том, что у меня выставляются стопы параллельно с котированием. И вот мне кажется, что некоторые номера из этой последовательности уходят на мои стопы, и из-за этого происходят ошибки. Как с этим бороться? Стопы выставляются просто по изменению позиции.
Отключил выставление стопов вообще, ситуация не изменилась. Уважаемые разработчики, у вас есть какие-нибудь предположения на счет этой ошибки про отсутствие заявки для перестановки? Мне кажется, это очень важный момент, так как такая же проблема описывалась тут: http://stocksharp.com/posts/m/10521/ и насколько я понял, не была решена.
Было довольно много фиксов последнее время, попробуйте 4.0.5. Если у кого-то будет наблюдаться подобное в последней версии - пишите.