Скорость вывода данных
Atom Ответить
28.05.2010


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

Теги:


Спасибо:




18 Ответов
Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 31.05.2010
Ответить


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

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


Спасибо:

ddd888

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


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

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

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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 31.05.2010
Ответить


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

Спасибо:

ddd888

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


С производительностью компьютера? Похоже на это. Сегодня я с утра веду
тестирование. В таблицу "все сделки" специально по такому случаю
загнал все бумаги, что дает квик. Результаты следующие: в целом,
задержки с выводом в консоль практически нет - максимум отставание
составляет 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

Фотография
Автор статей Программист Трейдер
Дата: 01.06.2010
Ответить


1. Попроьбуйте выключить вообще все окна. Чтобы в них данные не
добавлялись на отображение.
2. NullReferenceException говорит о том, что _test равен null. А то
что Вы подумали, называется ArgumentNullException.

Спасибо:

ddd888

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


1. Выключить окна в квике? Или вообще в среде? В самой программе
только консоль включается.
2. Он исключение мне по-русски выдает. Хотя я бы все равно, конечно,
разницы не понял. Спасибо за подсказку. :)

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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 01.06.2010
Ответить


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

Спасибо:

ddd888

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


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

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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 01.06.2010
Ответить


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

Спасибо:

ddd888

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


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

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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 01.06.2010
Ответить


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

Спасибо:

ddd888

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


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

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

ddd888

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


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

"

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

ddd888

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


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

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

Фотография
Автор статей Программист Трейдер
Дата: 08.06.2010
Ответить


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

Спасибо:

ddd888

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


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

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

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

ddd888

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


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

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

ddd888

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


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

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


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

loading
clippy