В версии 4.0.23 при вызове Strategy.Security.BestAsk.Price получал нужную цену. Скачал самую последнюю версию 17334, с dev-ветки. Теперь Strategy.Security.BestAsk равно null и вылетает NullReferenceException
В версии 4.0.23 при вызове Strategy.Security.BestAsk.Price получал нужную цену. Скачал самую последнюю версию 17334, с dev-ветки. Теперь Strategy.Security.BestAsk равно null и вылетает NullReferenceException
Comentários (15)
Entrar ou Criar conta, Faça login ou cadastre-se para deixar um comentário
Какой шлюз? Экспорт стакана запускается?
Если UseMarketDepth = false, то стаканы как раз генерируются, иначе читаются из БД.
Все-таки еще иногда вылазит NullReferenceException. Но не всегда:
Опять полезло NullReferenceException при вызове Strategy.Security.BestBid.Price при этом UseMarketDepth = false
Вообще-то вы в своей стратегии случай BestBid=null должны сами обрабатывать отдельно потому что это вполне норм ситуация - в стакане нет бидов.
Почему так получается в вашем случае с генерироваными стаканами сложно сразу понять, но есть гипотеза Поставьте Emulator.Settings.DepthExpirationTime=TimeSpan.MaxValue
Дело в том, что эмулятор очищает стаканы которые старше чем 1 сутки.
Дйте знать, изменится ли поведение.
Судя по тому что у вас ошибка в 10:00:00 утра я думаю что у вас 1я свечка сформировалась до того как пришел первый стакан
Поэтому все-таки моя рекомендация случай Bid=null считать нормальным, во всяком случае на исторических данных. Вы можете просто пропустить эту свечу.
Сам CandleFinished который приходит ровно в 10:00:00 тоже подозрителен - это какие же тики вошли в эту свечу? которые были ДО 10:00:00 - так их быть не должно.
Возможно вам приходит свеча с нулевым объемом?
правильно я понимаю, что у вас в течение одного дня сначала BestBid!=null, а потом BestBid==null получается?
Можете прислать истор. данные за 1 день на которых такое поведение EmulationTrader? какая версия StockSharp?
У вас, я так понял, не получается воспроизвести ошибку?
Воспроизввел. UseMarketDepth=false теперь значит вообще никаких стаканов не использовать, ни генерированных, ни настоящих.
Чтобы использовать настоящие ставьте UseMarketDepth=true, DepthGenerator-ы НЕ регистрируйте Чтобы использовать генерированные ставьте UseMarketDepth=true и зарегистрируйте генератор через RegisterMarketDepth(new TrendMarketDepthGenerator...)
при генерации стаканов в первом за день NewTrades BestBid/BestAsk будут null, потому что их еще не сгенерировали (генерация происходит после прихода сделки), но это только 1 раз за день.