Управление стаканом котировок
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 4  > >>
Mikhail Sukhov

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


При открытии стакана добавляет элемент в коллекцию. А в таймере идет
перечисление по коллекции. Поэтому, при ни одном открытом инструменте,
таймер выполняет холостую работу.

Спасибо:

ddd888

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


Спасибо, теперь все гораздо яснее стало.
Но при закрытии стакана, насколько я заметил, таймер продолжает
работать, да?

Спасибо:

Mikhail Sukhov

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


Конечно. Таймер на окно с инструментами. У него может быть несколько
стаканов, по одному на инструмент. Если бы он останавливался при
закрытие одного стакана, другие бы тоже переставали работать.

Спасибо:

ddd888

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


Т.е. в данном случае таймер выполняет ту же функцию для стакана
(импорт данных), что и подписка на события обновления котировок в
других окнах (типа "инструменты")?

Спасибо:

Mikhail Sukhov

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


Не понял утверждения, если честно.

Спасибо:

ddd888

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


Имел ввиду следующее. Обновление окна "инструменты" - это работа
this.Trader.NewSecurities += ...,
а обновление окна "стакана" - это работа таймера.

Спасибо:

Mikhail Sukhov

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


Верно, только лучше так: а обновление окон "стаканов" - это работа
таймера

Спасибо:

ddd888

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


Спасибо. С Вашей помощью туман успешно рассеивается. :)

Сейчас пытаюсь понять структуру данных в загружаемых коллекциях. Не
могли бы популярно объяснить, как это работает. Как я понимаю, в конце
"инструменты" создается экземпляр коллекции для будущих "стаканов":

private readonly SynchronizedDictionary<Security, QuotesWindow>
_quotesWindows = new SynchronizedDictionary<Security, QuotesWindow>();

а при открытии окна котировок в конструкторе создается новый экземпляр
но уже другой коллекции:

this.Quotes = new SynchronisedObservableList<SampleQuote>();

SynchronizedDictionary<Security, QuotesWindow> - заполняется
котировками, а в чем состоит работа
SynchronisedObservableList<SampleQuote>? Визуализация данных? И как
они связаны между собой?

Спасибо:

Mikhail Sukhov

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


SampleQuote - это тот же Quote, только еще содержащий собственный
объем.

SynchronisedObservableList<SampleQuote> сделал исключительно для
визуализации.

Вот тут написано как делать отображение данных в программе -

http://msdn.microsoft.com/ru-ru/library/ms752347.aspx


Спасибо:

ddd888

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


Для своих целей я добавил в SampleQuote дополнительные поля для вывода
их в форме. Но никак не получается совладать с "разбором" коллекции. К
примеру при формировании отображения в таймере я добавил строку для
вывода минимальной цены стакана, чтобы потом ее присвоить к полю
SampleQuote:

var _minprice =
MainWindow.Instance.Trader.GetMarketDepth(pair.Key).Min(q => q.Price);

Но компилятор ругается, что "последовательность не содержит данных".
Хотя в режиме отладки все переменные показывают значения. В чем тут
ошибка?

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

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

loading
clippy