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


Управление стаканом котировок
Atom
3/30/2010


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

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

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

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

Tags:


Thanks:


1 2 3  > >>
Mikhail Sukhov

Avatar
Date: 3/30/2010
Reply


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

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

Thanks:

ddd888

Avatar
Date: 3/30/2010
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 3/30/2010
Reply


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

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

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

Thanks:

ddd888

Avatar
Date: 3/31/2010
Reply


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

Thanks:

ddd888

Avatar
Date: 3/31/2010
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 3/31/2010
Reply


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

Thanks:

ddd888

Avatar
Date: 3/31/2010
Reply


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

Thanks:

ddd888

Avatar
Date: 4/2/2010
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 4/2/2010
Reply


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

Thanks:

ddd888

Avatar
Date: 4/2/2010
Reply


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

Thanks:
1 2 3  > >>

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy