← Zurück

Скорость вывода данных

Добрый день, Михаил! Сколько не бился над проблемой, но при эскпорте "все сделки" все время начинается замедление поступления данных из квика. Причем чем больше времени проходит - тем больше оставание - сегодня за 3 часа отставание достигло аж 30 минут! Перепробовал разные способы. И в S#1.8 и в S#2.0 ситуация одинковая. В конце концов до предела отфильтровал данные всех сделок в квике - стал получать только даныне по фьючерсам. Только тогда скорость вроде бы нормализовалась. А до этого во "всех сделках" были действиетльно "все сделки". Заметил также, что во время вечерней сессии скорость обработки и отрисовки нормальная - т.е. фактически после завершения торговли акциями = уменьшения постуающей информации. Получается, что для системы есть какой-то предел количества поступающей информации?

War dieses Thema hilfreich?

Thema teilen

Kommentare (18)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Mikhail Sukhov
Mikhail Sukhov

Для того, чтобы точно убедиться в чем проблема, попробуйте перестать отрисовывать (кстати что именно). Например, просто выводить сигнал о данных в консоль. Например, как сделано здесь

http://groups.google.ru/group/stocksharp/browse_thread/thread/b68f5d9bc2134b48

ddd888
ddd888 Autor

Да, так и сделаю. Создал отдельный проект с классом вывода данных в консоль: _trader.NewTrades += trades => Console.WriteLine(trades.Max (c=>c.Time).ToString ())

Поскольку уже вечер и сделок мало, то сейчас данные идут нормально. Завтра потестю во время основных торгов.

Mikhail Sukhov
Mikhail Sukhov

С учетом того, что QuikTrader всасывает все данные за сессию (а следовательно, вечерка должна иметь больше данных, чем дневная), уже уменьшает вероятность ошибки в S#. Но тест конечно провести нужно. Возможно проблема не с памятью, а с производительностью.

ddd888
ddd888 Autor

С производительностью компьютера? Похоже на это. Сегодня я с утра веду тестирование. В таблицу "все сделки" специально по такому случаю загнал все бумаги, что дает квик. Результаты следующие: в целом, задержки с выводом в консоль практически нет - максимум отставание составляет 5 сек, но обычно - 1-2 сек. (Могу выложить скринскан). Правда, где-то в середине дня заметил отставание в 10 минут (после того как таблицу загрузил по максимуму), но потом оно само собой куда- то исчезло. Единственно что смущает - это отставание то возникает, то пропадает почти полностью. Надо делать какой-то вывод, а он напрашивается такой, что в моем "сампле" основное время "воруется" GUI? А как же без него совсем обойтись - писать все настройки через код? :)....

В целях этого же теста еще попытался вывести паралелльно котировки "стакана" таким образом:

_test.somesec = (Security)_test._trader.Securities.Where(q => q.Code == "RIM0").LastOrDefault(); _test._trader.RegisterQuotes(_test.somesec);

но последняя строка выдала исключение: "в экземпляре объекта нет ссылки на объект". Хотя через отладку _test.somesec был вполне "загружен" данными. Про какой объект тогда говорит исключение?

Mikhail Sukhov
Mikhail Sukhov
  1. Попроьбуйте выключить вообще все окна. Чтобы в них данные не добавлялись на отображение.
  2. NullReferenceException говорит о том, что _test равен null. А то что Вы подумали, называется ArgumentNullException.
ddd888
ddd888 Autor
  1. Выключить окна в квике? Или вообще в среде? В самой программе только консоль включается.
  2. Он исключение мне по-русски выдает. Хотя я бы все равно, конечно, разницы не понял. Спасибо за подсказку. :)
Mikhail Sukhov
Mikhail Sukhov

У Вас уже обычная консоль или все таки WPF?

ddd888
ddd888 Autor

Да, тест я сделал в обычной консоли без всяких WPF. Сейчас работает и задержек нет. Но правда уже вечер. И правда, стакан что-то не получается там туда отобразить. Куда этот экземпляр объекта девается, не пойму?

Mikhail Sukhov
Mikhail Sukhov

И Вы говорите на консоли начинает подтормаживать днем?

ddd888
ddd888 Autor

Да, у меня сегодня в среднем было - 1-2 сек. И это то, что видно чисто визуально. А иногда быаает так - в какой-то момент заметил, что квик сам не всегда стабильно выдает данные - иногда он сам как бы тормозится, а потом за раз выдает то, что задержал на какое-то время - в этот момент, по-моему, и происходит основное "торможение" в QuikTrader. Сейчас визуально задержек не видно, но я добавил функцию вычисления разницы между текущим временем и временем последней сделки в миллисекундах. Интересно, что разброс выдается от 60 мс до 900 мс.

Mikhail Sukhov
Mikhail Sukhov

Я кое-что подкрутил. Сохраните проект. Когда выпушу новый билд 2.0 - проверьте еще раз. Ок?

ddd888
ddd888 Autor

Да, конечно! :) Когда ожидается новый билд?

ddd888
ddd888 Autor

Пытаюсь теперь проверить все на последней версии 2.0.1. В моей версии с GUI все вроде пошло очень шустро и в самый разгар наплыва информации о торгах - после обеда. Теперь пытаюсь в консоле отследить время появления сделок. Но начали появляться новые доселе неизвестные ошибки:

  • при запуске _trader.StartDde("инструменты") - появляется ошибка: "в экземпляре объекта нет ссылки на объект", а просто _trader.StartDde()
  • "Нет информации о главном окне Quik. Возможно, было неуспешное подключение." Хотя окна, как я понимаю ведь не менялись? Функция StartDde("инструменты") как-то изменилась? Вручную, экспорт запускается нормально и все идет, но зачем так, если есть программные методы? :)

"

ddd888
ddd888 Autor

И еще вопрос. Для теста скорости вывода данных я добавил такой код для экспорта стакана:

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 у меня работал нормально, а сейчас почему-то нет. Из квика экспорт стакана идет, а в прогрмму ничего не приходит. Что тут может быть неправильно?

Mikhail Sukhov
Mikhail Sukhov

Запускать экспорт теперь нужно только после событие Connected (например, в его обработчике). Я в SampleConsole показал это.

ddd888
ddd888 Autor

Спасибо, попробую с Connected.

Запустил тест 2.0.1 после 18:00. Скорость хорошая, впрочем после 18 часов и на 1.8 была нормальная. Среднее время задержки 400-500 мс. Общее количество загруженных сделок - больше 1 млн. Самое интересное посмотрю завтра - как на максимальной загрузке себя поведет.

ddd888
ddd888 Autor

Наблюдается очень хорошая скорость! Вы молодец, Михаил! :) Задержка при максимуме информации в среднем не более 1-2 с. По-моему, это очень хороший результат. В связи с этими тестами, заметил, что часто сам Квик тормозит - оставание вывода информации может доходить до 5-10 с. Но S#2.0.1 справляется вполне адекватно. Хочу еще проверить как зависит производительность программы от количества одновременно получаемой информации - потому что это явно влияет на скорость вывода: во время вечерних торгов после 18 часов как я писал - запаздывание 0.4-0.5 с, в разгар сессии - 1-2 с. Пока только не придумал, как это измерить.

ddd888
ddd888 Autor

Что еще радует - в моем варианте со всевозможными GUI скорость остается такой же высокой. Значит,раньше все-таки дело было не совсем в отрисовке. =)