Mikhail Sukhov
|
Date: 6/10/2010
Из-за того, что стакан еще пуст.
|
|
Thanks:
|
|
|
|
|
ddd888
|
Date: 6/10/2010
Но тогда должна работать проверка на null? Еще раз проверил аналогичную ситуацию на 1.8 - там такая ошибка обычно иногда возникает при первичном запуске стакана, но раз запустившись потом никогда не появляется. В 2.0.1 она возникает периодически уже при открытом стакане. У меня GetMarketDepth изменилась логика?
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 6/10/2010
Периодически - это как? По таймеру? Или пользователь что-то кликает? Или в стратегии?
|
|
Thanks:
|
|
|
|
|
ddd888
|
Date: 6/10/2010
Обновление стакана у меня происходит по событию GetMarketDepth(this.Security).Changed Вот во время периодического обновления иногда и выскакивает эта ошибка.
+ опять-таки иногда при инициализации стакана выскакивает ошибка "последовательность не содержит соответствующего элемента". В отладке при этом this.Security - вроде вполне нормально загруженный.
|
|
Thanks:
|
|
|
|
|
ddd888
|
Date: 6/10/2010
Заметил такую особенность - пока все сделки до конца не подгрузились в S#, при открытии стакана GetMarketDepth может вызывать ошибку ("последовательность не содержит элементов"). А RegisterQuotes - "последовательность не содержит соответствующего элемента".
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 6/11/2010
Да, я уже писал о присутствующей ошибке в запуске ДДЕ. Это она. Квик загружен, а S# - нет. S# нажимает на кнопки и ожидает моментального появления окон. Квик же думает, и не всегда может реагировать моментально. Я бы исправил ошибку, если бы она стабильно возникала. Но дело в том, что на моем компе она не возникает практически никогда (да, я шустр!).
|
|
Thanks:
|
|
|
|
|
ddd888
|
Date: 6/11/2010
Да, Вам больше повезло! Хотя вроде у меня тоже комп не слабый. :) При первичном запуске стакана такая ошибка некритична. Хуже когда она возникает уже в процессе от метода GetMarketDepth. В 1.8. такого точно ни разу не было, а сейчас почему-то есть. При этом никак не могу понять такое поведение. Вот, например код:
строка 801. this.BestBid = _marketDepth.Where(t => t.Bid != 0).Max(t => t.Price); строка 802. this.BestAsk = _marketDepth.Where(t => t.Ask != 0).Min(t => t.Price); строка 803. this.MinBid = _marketDepth.Where(t => t.Bid != 0).Min(t => t.Price); строка 804. this.MaxAsk = _marketDepth.Where(t => t.Ask != 0).Max(t => t.Price);
И когда возникает ошибка ("последовательность не содержит элементов"), смотрю куда она указывает и вот странность: каждый раз она указывает на разные строки! Как это может быть? Ведь если коллекция пустая, то ошибка всегда должна появляться на 1-й же строке, т.е. здесь например на 801-й?
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 6/11/2010
Стоп, Вы не разделяете проблемы. Есть ошибка с запуском ДДЕ. Я уже описал симптомы. А есть по работе со стаканом. Я пока не могу понять, у меня она или у Вас.
1. Лучший бид и аск вычисляются и так стаканом. 2. Ошибки могут быть на разных строчках, если, например, биды заполнены, а офера еще нет.
Еще рас прочитал, что Вы писал выше. MarketDepth.Changed вызывается при любом изменении стакана. Пришла новая котировка и т.д. Тоесть, стакан может быть даже не заполнен, а событие будет выведено. По вышепреведенному коду могу сказать, что Вам нужно событие ITrader.QuotesChanged потому что Вам нужно вычислять по всему стакану (иначе, просто код бессмыслен - вычисление будет показывать ерунду по неполному стакану). Скорее всего, в этом и ошибка. И это точно не зависит от версии.
|
|
Thanks:
|
|
|
|
|
ddd888
|
Date: 6/11/2010
Да, я понимаю, что это уже другая проблема. Про событие QuotesChanged и MarketDepth.Changed тоже помню, но как это влияет на метод GetMarketDepth?
1. Лучший бид и аск я стал так выводить потому, что у Вас BestBid и BestAsk на самом деле выводят максимальную и минимальные цены стакана почему-то. 2. Получается, что GetMarketDepth может выводить стакан не полностью в зависимости от того на какое событие QuotesChanged и MarketDepth.Changed подписался?
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 6/11/2010
Что-то не так внутри метода GetMarketDepth? Как я понял, проблема с наружи - использование результатов этого метода. Что делать, если программа пытается обратиться к стакану слишком рано?
1. Ни разу такое не встречал. Как это проверили? 2. GetMarketDepth возвращает всегда стакан. И этот стакан параллельно наполняется QuikTrader.
|
|
Thanks:
|
|
|
|