Управление стаканом котировок
Atom
30.03.2010


Добрый день, Михаил! Как-то заметил, что стакан котировок отображается
не совсем правильно - цена почему-то не снижается сверху вниз по всей
глубине, а начинается с мимнимальной котировки и повышается сверху
вниз по "биду", а в месте где начинается "аск" "переворачивается и
снова начинается с самой маленькой котировки "аск" и так повышается до
самого низа. Думал отсортировать данные на этапе прихода данных:

this.Trader.ProcessWellKnownDdeData += (name, dict) =>
// узнаем, что пришедшие данные отвечают за стакан
if (name.Contains("stock"))
// первичная сортировка по цене
IEnumerable<Quote> _curquotes = (IEnumerable<Quote>)dict;
_curquotes = _curquotes.OrderBy(t => t.Price);
... и т.д.

но это ни к чему не привело. Подскажите, пожалуйста, как правильно
отсортировать данные?

Еще здесь был как-то уже вопрос про доступ к отдельным значениям
котировок в стакане, но объяснения я так и не нашел. Как же все-такии
это можно сделать (получить значение той или иной котировки в стакане
для анализа)?

Теги:


Спасибо:


1 2 3  > >>
Mikhail Sukhov

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


Какой пример? Sample?

Насчет Вашей сортировки _curquotes. А дальше вы куда присваиваете
_curquotes?

Спасибо:

ddd888

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


Да, это в Sample. Собственно, на этом _curquotes и заканчиваются...
Т.е. Вы намекаете на то, что таким образом коллекция, которая затем
отображается в окне, осталась прежней? Как же перехватить исходные
данные?

Спасибо:

Mikhail Sukhov

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


Я думаю это нужно вставить в SecuritiesWindow.

pair.Value.Quotes.AddRange(MainWindow.Instance.Trader.GetMarketDepth(pair.ey).OrderBy(t
=> t.Price).Select

Манируляции над IEnumerable не изменяют коллекцию, а возвращают новое
значение. Собственно оно и содержит необходимые изменения.

Спасибо:

ddd888

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


Точно! Это сработало! Спасибо большое! :)

Спасибо:

ddd888

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


Интересно, а вот почему это работает - не понимаю. :) Ведь окно
котировок в момент открытия окна "инструменты" еще не
инициализировано. И экспорт "стакана" тоже еще не начал работать... А
данная манипуляция с сортировкой происходит в "конструкторе", т.е. в
момент создания экземпляра окна "инструменты". Как же это происходит?

Спасибо:

Mikhail Sukhov

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


А Вы посмотрите по-внимательнее. Там создается таймер, который из
коллекции вытаскивает данные. И посмотрите, в какой момент эта
коллекция заполняется.

Спасибо:

ddd888

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


Попытаюсь. Как мне кажется, что CreateTimer() запускается в
конструкторе "инструментов" и потом работает постоянно каждую
миллисекунду, правильно?

Спасибо:

ddd888

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


Определения CreateTimer() я нигде не нашел. В чем состоит его
функция?

Спасибо:

Mikhail Sukhov

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


Он находится в Ecng.Common, TimerHelper. Создание таймера по входящему
TimeSpan? Можно напрямую создавать через класс Timer, но через
TimerHelper запись короче.

Спасибо:

ddd888

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


Добавил исключение в SecuritiesWindow() и обнаружил, что цикл внутри
CreateTimer() вызывается как будто лишь при открытии стакана
котировок и попытке начала экспорта стакана из квика. В другое время
он значит не действует?

Спасибо:
1 2 3  > >>

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

loading
clippy