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

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


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

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

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

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


Теги:


Спасибо:


<< < 5 6 7 8 9  >
Mikhail Sukhov

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


[url=http://groups.google.ru/group/stocksharp/browse_thread/thread/b4620292fdd85a53#]http://groups.google.ru/group/stocksharp/browse_thread/thread/b4620292fdd85a53#[/url]

Спасибо:

ddd888

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


Т.е., чтобы изменить строку транзакции сначала надо убрать соотвествующую инструкцию, а потом заново ее написать? Типа

  1. ((QuikTrader)_trader).FormatTransaction += builder => builder.RemoveInstruction(TransactionBuilder.Comment);
  2. ((QuikTrader)_trader).FormatTransaction += str => str.SetComment(_mycomment); ?
Спасибо:

ddd888

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


Да, все работает, только вместо TransactionBuilder.Comment почему-то надо использовать TransactionBuilder.ClientCode тогда "Комментарий" изменяется. А почему не свойство Comment отвечает за комментарий - ведь это логичнее?

Спасибо:

Mikhail Sukhov

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


Особенности настроек Квик сервера.

Спасибо:

ddd888

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


В связи с одним обсуждением (о задержке вывода стакана) возник вопрос: с какой целью в окне "инструменты" был создан таймер, если экспорт стакана можно просто запустить через методы RegisterQuotes и GetMarketDepth?

Кстати, GetMarketDepth.BestBid и GetMarketDepth.BestAsk показывают не лучший бид и аск соответственно, а вообще максимальную и минимальную цены стакана. По-моему, так не должно быть.

Спасибо:

Mikhail Sukhov

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


  1. RegisterQuotes запускает ДДЕ экспорт для стакана.
  2. Получается этот стакан GetMarketDepth
  3. А кто будет в цикле это вызывать? Цикл нужен потому что стакан не статичен и меняется каждый раз. В отличие от таблицы с инструментами, в стакане Quote пересоздается каждый раз, а вот объект Security живет всю жизнь. Что и логично - инструмент о новый каждый раз, а заявки снимаются и исполняются.

GetMarketDepth.BestBid и GetMarketDepth.BestAsk - а как Вы это видите?

Спасибо:

ddd888

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


GetMarketDepth.BestBid и GetMarketDepth.BestAsk получаю просто через GetMarketDepth(this.Security).BestBid.Price. В консоле эти значения соответствеено показывают для данного стакана минимальную и максимальную котировки соответственно.

Я начал тут "копать" по причине того, что уже много "наворотил" в своем GUI для управления стаканом. (Пока S#1.8) И недавно обнаружил, что при переходе на наиболее волатильные фьючи, типа RTS (до этого я тестировал все на сравнительно маловолатильных фьючерсах), стакан начинает резко тормозить. До запуска стакана вывод нормальный, а при запуске - начинается тормоз. Как будто что-то не успевает обрабатываться. Начал выводить данные в консоль - ситуация выглядит получше, но все равно - запаздывает на 5-10 секунд, а то и больше. Вот и ищу причину.

Про цикл не совсем понял. Если можно подписаться на событие GetMarketDepth.Changed и затем получить новые котировки, то зачем нужен цикл? (Или наоборот - если нужен цикл, то зачем нужно событие GetMarketDepth.Changed?) Наверное я не совсем правильно понимаю механику работы GetMarketDepth...

Спасибо:

Mikhail Sukhov

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


На GetMarketDepth.Changed можно подписаться. Но если открыть несколько стаканов - то ГУИ это убъет. GetMarketDepth.Changed вызывается очень часто. И в каждом из этих вызовов необходимо делать BeginInvoke (или Sync). А вот таймер всегда стабильно раз в несколько секунд, и не зависит от количество открытых стаканов.

Спасибо:

ddd888

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


Да, я уже понял, что ресурсов компьютера хватит для более-менее эффективной обработки лишь одного стакана. Наверное, надо переносить большую часть обработки "внутрь" процессов, а на ГУИ выводить лишь самое необходимое. Придется теперь подробнее заниматься производительностью кода. Или искать альтернативы DDE? Хотя, интересно, вот в самом же квике десятки тысяч данных обновляются без видимых затруднений - значит ли это, что у них технология лучше?

Спасибо:

ddd888

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


Столкнулся с таким сообщением от квика: "Вывод в wrapper по DDE приостановлен. Переполнена очередь сообщений." Что это значит?

Спасибо:
<< < 5 6 7 8 9  >

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

loading
clippy