NullReferenceException при вызове Strategy.Security.BestAsk.Price
Atom Ответить
28.05.2012


В версии 4.0.23 при вызове Strategy.Security.BestAsk.Price получал нужную цену.
Скачал самую последнюю версию 17334, с dev-ветки.
Теперь Strategy.Security.BestAsk равно null и вылетает NullReferenceException

Теги:


Спасибо:




15 Ответов
Alexander

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


Какой шлюз? Экспорт стакана запускается?
Спасибо:

Кот Матроскин

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


Alexander Mukhanchikov Перейти
Какой шлюз? Экспорт стакана запускается?

Тестирую в EmulationTrader
Экспорт стакана не запускал ни в 4.0.23, ни в текущей
Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 28.05.2012
Ответить


Кот Матроскин Перейти
Тестирую в EmulationTrader
Экспорт стакана не запускал ни в 4.0.23, ни в текущей

Если нет сохраненных стаканов, то у EmulationTrader надо выставить UseMarketDepth = false
Спасибо: Кот Матроскин Yury Smykalov

Кот Матроскин

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


esper Перейти
Кот Матроскин Перейти
Тестирую в EmulationTrader
Экспорт стакана не запускал ни в 4.0.23, ни в текущей

Если нет сохраненных стаканов, то у EmulationTrader надо выставить UseMarketDepth = false

Спасибо, помогло, NullReferenceException больше не вылетает. В 4.0.23 не было такого свойства.
А то, что мы создаем генератор стаканов:
_trader.DepthGenerators[_security] = new TrendMarketDepthGenerator(_security)
это что-то другое?
Автор топика
Спасибо:

esper

Фотография
Программист
Дата: 28.05.2012
Ответить


Если UseMarketDepth = false, то стаканы как раз генерируются, иначе читаются из БД.
Спасибо: Кот Матроскин

Кот Матроскин

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


esper Перейти
Если UseMarketDepth = false, то стаканы как раз генерируются, иначе читаются из БД.

Спасибо, теперь полностью разобрался)))
Автор топика
Спасибо:

Кот Матроскин

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


Все-таки еще иногда вылазит NullReferenceException. Но не всегда:
Цитата:
Метка 3-1 MarketTime:2012.03.07 18:30:01, BestAsk = 97,42000, H = 97,56000, L = 97,36000
Метка 3-1 MarketTime:2012.03.07 18:40:00, BestAsk = 97,25000, H = 97,65000, L = 97,21000
Метка 3-1 MarketTime:2012.03.11 09:59:59, NullReferenceException
Метка 3-1 MarketTime:2012.03.11 10:00:00, BestAsk = 99,60000, H = 99,60000, L = 99,60000
Метка 3-1 MarketTime:2012.03.11 10:10:00, BestAsk = 99,44000, H = 99,80000, L = 99,39000
Метка 3-1 MarketTime:2012.03.11 10:20:00, BestAsk = 99,51000, H = 99,57000, L = 99,35000

Сначала думал, что из-за корявого времени свечи, но в других случаях все нормально

Цитата:
Метка 3-1 MarketTime:2012.03.15 18:30:00, BestAsk = 100,86000, H = 100,89000, L = 100,65000
Метка 3-1 MarketTime:2012.03.15 18:40:00, BestAsk = 100,69000, H = 100,88000, L = 100,54000
Метка 3-1 MarketTime:2012.03.16 09:59:59, BestAsk = 100,67000, H = 100,70000, L = 100,54000
Метка 3-1 MarketTime:2012.03.16 10:00:00, BestAsk = 100,99000, H = 100,99000, L = 100,99000
Метка 3-1 MarketTime:2012.03.16 10:10:00, BestAsk = 100,75000, H = 100,97000, L = 100,35000

Автор топика
Спасибо:

Кот Матроскин

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


Опять полезло NullReferenceException при вызове Strategy.Security.BestBid.Price
при этом UseMarketDepth = false
Цитата:
10:00:00.000 | Error | FDS_SBER@EQBR_test account | System.NullReferenceException: Ссылка на объект не указывает на экземпляр объекта.
в SampleHistoryTesting.FDStrategy.OnCandlesFinished(Candle candle) в F:\S#\4.1.0\StockSharp_4.1\Samples\Testing\HistoryTesting\Strategy\FDStrategy.cs:строка 334
в SampleHistoryTesting.FDStrategy.<OnStarting>b__6(Candle newCandles) в F:\S#\4.1.0\StockSharp_4.1\Samples\Testing\HistoryTesting\Strategy\FDStrategy.cs:строка 96
в StockSharp.Algo.Strategies.StrategyRule`1.#=qbKPfZP$sHNKewBoWTxOVIZWKc2RxMGQkOvMNrefS8FE=()
в StockSharp.Algo.Strategies.Strategy.#=qYja9YukY0RAy8kUzPEwBAg==(IStrategyRule #=quLfxru5uzbPCCVRiCLmC0g==, Func`1 #=qyw4EbBr3D$tMVupgMHmy2Q==, Object #=qayY1ai3QioJ7b725$BZRPA==, Boolean #=qUT7qwl2456HPh4xYvHuyMA==)

Причем вылезает постоянно
Версия stocksharp-17830 trunk
Автор топика
Спасибо:

pyhta4og

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


Вообще-то вы в своей стратегии случай BestBid=null должны сами обрабатывать отдельно потому что
это вполне норм ситуация - в стакане нет бидов.

Почему так получается в вашем случае с генерироваными стаканами сложно сразу понять, но есть гипотеза
Поставьте Emulator.Settings.DepthExpirationTime=TimeSpan.MaxValue

Дело в том, что эмулятор очищает стаканы которые старше чем 1 сутки.

Дйте знать, изменится ли поведение.
Спасибо:

Кот Матроскин

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


pyhta4og Перейти
Вообще-то вы в своей стратегии случай BestBid=null должны сами обрабатывать отдельно потому что
это вполне норм ситуация - в стакане нет бидов.

Мне кажется, что для Сбербанка отсутствие в стакане бидов все же не есть норма
pyhta4og Перейти
Почему так получается в вашем случае с генерироваными стаканами сложно сразу понять, но есть гипотеза
Поставьте Emulator.Settings.DepthExpirationTime=TimeSpan.MaxValue

Дело в том, что эмулятор очищает стаканы которые старше чем 1 сутки.

Дйте знать, изменится ли поведение.

Поставил
_trader.MarketEmulator.Settings.DepthExpirationTime = TimeSpan.MaxValue;
Результат то же
Автор топика
Спасибо:

pyhta4og

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


Судя по тому что у вас ошибка в 10:00:00 утра
я думаю что у вас 1я свечка сформировалась до того как пришел первый стакан

Поэтому все-таки моя рекомендация случай Bid=null считать нормальным, во всяком случае на исторических данных. Вы можете просто пропустить эту свечу.

Сам CandleFinished который приходит ровно в 10:00:00 тоже подозрителен - это какие же тики вошли в эту свечу? которые были ДО 10:00:00 - так их быть не должно.

Возможно вам приходит свеча с нулевым объемом?
Спасибо:

Кот Матроскин

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


pyhta4og Перейти
Судя по тому что у вас ошибка в 10:00:00 утра
я думаю что у вас 1я свечка сформировалась до того как пришел первый стакан
Поэтому все-таки моя рекомендация случай Bid=null считать нормальным, во всяком случае на исторических данных. Вы можете просто пропустить эту свечу.
Возможно вам приходит свеча с нулевым объемом?

Сделал так, чтобы BestAsk спрашивался посередине дня в разное время - вылетает то же самое исключение. Так как Bid и Ask у Сбера не могут быть нулевые, ошибка в чем-то другом

pyhta4og Перейти
Сам CandleFinished который приходит ровно в 10:00:00 тоже подозрителен - это какие же тики вошли в эту свечу? которые были ДО 10:00:00 - так их быть не должно.

Что Гидра с Финама скачала, то и юзаем)))))
Автор топика
Спасибо:

pyhta4og

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


Кот Матроскин Перейти
pyhta4og Перейти
Судя по тому что у вас ошибка в 10:00:00 утра
я думаю что у вас 1я свечка сформировалась до того как пришел первый стакан
Поэтому все-таки моя рекомендация случай Bid=null считать нормальным, во всяком случае на исторических данных. Вы можете просто пропустить эту свечу.
Возможно вам приходит свеча с нулевым объемом?

Сделал так, чтобы BestAsk спрашивался посередине дня в разное время - вылетает то же самое исключение. Так как Bid и Ask у Сбера не могут быть нулевые, ошибка в чем-то другом

pyhta4og Перейти
Сам CandleFinished который приходит ровно в 10:00:00 тоже подозрителен - это какие же тики вошли в эту свечу? которые были ДО 10:00:00 - так их быть не должно.

Что Гидра с Финама скачала, то и юзаем)))))



правильно я понимаю, что у вас в течение одного дня сначала BestBid!=null, а потом BestBid==null получается?

Можете прислать истор. данные за 1 день на которых такое поведение EmulationTrader?
какая версия StockSharp?
Спасибо:

Кот Матроскин

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


pyhta4og Перейти
правильно я понимаю, что у вас в течение одного дня сначала BestBid!=null, а потом BestBid==null получается?

Нет, BestBid == null постоянно (BestAsk тоже постоянно == null)
pyhta4og Перейти
Можете прислать истор. данные за 1 день на которых такое поведение EmulationTrader? какая версия StockSharp?

Версия вроде как stocksharp-17830

У вас, я так понял, не получается воспроизвести ошибку?
2012_04_02.RAR 231 KB (0)
Автор топика
Спасибо:

pyhta4og

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


Кот Матроскин Перейти
pyhta4og Перейти
правильно я понимаю, что у вас в течение одного дня сначала BestBid!=null, а потом BestBid==null получается?

Нет, BestBid == null постоянно (BestAsk тоже постоянно == null)
pyhta4og Перейти
Можете прислать истор. данные за 1 день на которых такое поведение EmulationTrader? какая версия StockSharp?

Версия вроде как stocksharp-17830

У вас, я так понял, не получается воспроизвести ошибку?


Воспроизввел. UseMarketDepth=false теперь значит вообще никаких стаканов не использовать, ни генерированных, ни настоящих.

Чтобы использовать настоящие ставьте UseMarketDepth=true, DepthGenerator-ы НЕ регистрируйте
Чтобы использовать генерированные ставьте UseMarketDepth=true и зарегистрируйте генератор через RegisterMarketDepth(new TrendMarketDepthGenerator...)


при генерации стаканов в первом за день NewTrades BestBid/BestAsk будут null, потому что их еще не сгенерировали (генерация происходит после прихода сделки), но это только 1 раз за день.

Спасибо: Кот Матроскин


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

loading
clippy