Добрый день, Михаил! Сколько не бился над проблемой, но при эскпорте "все сделки" все время начинается замедление поступления данных из квика. Причем чем больше времени проходит - тем больше оставание - сегодня за 3 часа отставание достигло аж 30 минут! Перепробовал разные способы. И в S#1.8 и в S#2.0 ситуация одинковая. В конце концов до предела отфильтровал данные всех сделок в квике - стал получать только даныне по фьючерсам. Только тогда скорость вроде бы нормализовалась. А до этого во "всех сделках" были действиетльно "все сделки". Заметил также, что во время вечерней сессии скорость обработки и отрисовки нормальная - т.е. фактически после завершения торговли акциями = уменьшения постуающей информации. Получается, что для системы есть какой-то предел количества поступающей информации?
评论 (18)
登录 或 创建账户, 登录或注册以发表评论
Для того, чтобы точно убедиться в чем проблема, попробуйте перестать отрисовывать (кстати что именно). Например, просто выводить сигнал о данных в консоль. Например, как сделано здесь
http://groups.google.ru/group/stocksharp/browse_thread/thread/b68f5d9bc2134b48
Да, так и сделаю. Создал отдельный проект с классом вывода данных в консоль: _trader.NewTrades += trades => Console.WriteLine(trades.Max (c=>c.Time).ToString ())
Поскольку уже вечер и сделок мало, то сейчас данные идут нормально. Завтра потестю во время основных торгов.
С учетом того, что QuikTrader всасывает все данные за сессию (а следовательно, вечерка должна иметь больше данных, чем дневная), уже уменьшает вероятность ошибки в S#. Но тест конечно провести нужно. Возможно проблема не с памятью, а с производительностью.
С производительностью компьютера? Похоже на это. Сегодня я с утра веду тестирование. В таблицу "все сделки" специально по такому случаю загнал все бумаги, что дает квик. Результаты следующие: в целом, задержки с выводом в консоль практически нет - максимум отставание составляет 5 сек, но обычно - 1-2 сек. (Могу выложить скринскан). Правда, где-то в середине дня заметил отставание в 10 минут (после того как таблицу загрузил по максимуму), но потом оно само собой куда- то исчезло. Единственно что смущает - это отставание то возникает, то пропадает почти полностью. Надо делать какой-то вывод, а он напрашивается такой, что в моем "сампле" основное время "воруется" GUI? А как же без него совсем обойтись - писать все настройки через код? :)....
В целях этого же теста еще попытался вывести паралелльно котировки "стакана" таким образом:
_test.somesec = (Security)_test._trader.Securities.Where(q => q.Code == "RIM0").LastOrDefault(); _test._trader.RegisterQuotes(_test.somesec);
но последняя строка выдала исключение: "в экземпляре объекта нет ссылки на объект". Хотя через отладку _test.somesec был вполне "загружен" данными. Про какой объект тогда говорит исключение?
У Вас уже обычная консоль или все таки WPF?
Да, тест я сделал в обычной консоли без всяких WPF. Сейчас работает и задержек нет. Но правда уже вечер. И правда, стакан что-то не получается там туда отобразить. Куда этот экземпляр объекта девается, не пойму?
И Вы говорите на консоли начинает подтормаживать днем?
Да, у меня сегодня в среднем было - 1-2 сек. И это то, что видно чисто визуально. А иногда быаает так - в какой-то момент заметил, что квик сам не всегда стабильно выдает данные - иногда он сам как бы тормозится, а потом за раз выдает то, что задержал на какое-то время - в этот момент, по-моему, и происходит основное "торможение" в QuikTrader. Сейчас визуально задержек не видно, но я добавил функцию вычисления разницы между текущим временем и временем последней сделки в миллисекундах. Интересно, что разброс выдается от 60 мс до 900 мс.
Я кое-что подкрутил. Сохраните проект. Когда выпушу новый билд 2.0 - проверьте еще раз. Ок?
Да, конечно! :) Когда ожидается новый билд?
Пытаюсь теперь проверить все на последней версии 2.0.1. В моей версии с GUI все вроде пошло очень шустро и в самый разгар наплыва информации о торгах - после обеда. Теперь пытаюсь в консоле отследить время появления сделок. Но начали появляться новые доселе неизвестные ошибки:
"
И еще вопрос. Для теста скорости вывода данных я добавил такой код для экспорта стакана:
this.somesec = this._trader.Securities.Where(q => q.Code == "RIM0").LastOrDefault(); this._trader.RegisterQuotes(this.somesec); var _marketDepth1 = this._trader.GetMarketDepth(this.somesec); this.Quotes.AddRange(_marketDepth1.OrderByDescending(e => e.Price).Select( e => new SampleQuote { Price = e.Price, Ask = e.OrderDirection == OrderDirections.Buy ? e.Volume.ToString() : "", Bid = e.OrderDirection == OrderDirections.Sell ? e.Volume.ToString() : "", })); this._trader.GetMarketDepth(this.somesec).Changed += new Action(TestSpeed_Changed);
Аналогичный код в другой программе на 1.8 у меня работал нормально, а сейчас почему-то нет. Из квика экспорт стакана идет, а в прогрмму ничего не приходит. Что тут может быть неправильно?
Запускать экспорт теперь нужно только после событие Connected (например, в его обработчике). Я в SampleConsole показал это.
Спасибо, попробую с Connected.
Запустил тест 2.0.1 после 18:00. Скорость хорошая, впрочем после 18 часов и на 1.8 была нормальная. Среднее время задержки 400-500 мс. Общее количество загруженных сделок - больше 1 млн. Самое интересное посмотрю завтра - как на максимальной загрузке себя поведет.
Наблюдается очень хорошая скорость! Вы молодец, Михаил! :) Задержка при максимуме информации в среднем не более 1-2 с. По-моему, это очень хороший результат. В связи с этими тестами, заметил, что часто сам Квик тормозит - оставание вывода информации может доходить до 5-10 с. Но S#2.0.1 справляется вполне адекватно. Хочу еще проверить как зависит производительность программы от количества одновременно получаемой информации - потому что это явно влияет на скорость вывода: во время вечерних торгов после 18 часов как я писал - запаздывание 0.4-0.5 с, в разгар сессии - 1-2 с. Пока только не придумал, как это измерить.
Что еще радует - в моем варианте со всевозможными GUI скорость остается такой же высокой. Значит,раньше все-таки дело было не совсем в отрисовке. =)