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

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


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

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

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

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


Теги:


Спасибо:


< 1 2 3 4 5  > >>
Mikhail Sukhov

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


GetMarketDepth - это стакан MarketDepth.

MarketDepth - это коллекция котировок. Ошибка говорит о том, что коллекция пуста. Такое бывает, когда нет экспорта по стакану (или он еще не стартанул).

Спасибо:

ddd888

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


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

<ListView.View>

а вот эта (дополнительное текстовое поле в том же окне) нет:

<TextBox Name="AskBox" ... IsReadOnly="True" AcceptsTab="True" Grid.Column="1" Text=""/>

и так тоже нет:

<TextBox Name="BidBox" ... AcceptsTab="True" IsReadOnly="True" MinHeight="0" Grid.Column="1" Text="">

Best Bid - это дополнительное поле в SampleQuote. Причем если Best Bid загрузить в , то данные нормально отображаются, а в текстовом поле нет. Это можно легко объяснить?

Спасибо:

ddd888

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


Похоже, объяснить оказалось нелегко. :) По крайней мере, для меня. Но после долгих "танцев с бубнами" удалось найти решение через обработку событий в коллекции Quotes. Судя по похожим проблемам на многих форумах. по-видимому, это был единственно возможный выход с данной версией WPF.

Спасибо:

Mikhail Sukhov

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


Нет, просто был занят релизом.

Text="" не выводится скорее всего потому, что не такого свойства. BestBid - это свойтство MarketDepth. А quotesWindow работаео к коллекцией SampleQuotes.

Text="" - не уверен что WPF понимает такие запросы. Я думаю, проще будет через форумы программерские спрашивать такие вещи. Например[url=http://rsdn.ru/forum/dotnet.gui/]http://rsdn.ru/forum/dotnet.gui/[/url]

. Так как я и сам не особо спец в визуальной технологии.

Спасибо:

ddd888

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


Сейчас уже не очень актуально, т.к. решение по привязке уже есть и вроде как работает без сбоев. Как я это понял, проблема не в том, что WPF не понимает запросы - он как раз многое понимает - но не обновляет при обновлении коллекции - в этом я нашел причину и исправив ее через подписку на событие измения коллекции, все заработало.

Возник вопрос другого плана. При отправке своей заявки с помощью создания экземпляра класса NewOrderWindow возникает исключение от "Ecng.Trading.Quik.ApiException: Код ошибки: WrongSyntax Сообщение ACCOUNT=..." и т.д. При отправке из "Инструменты" заявка отправляется нормально, а из моего метода - нет, хотя - я проверил - синтаксис отправляемой заявки точно такой же! Отличие от отправки из окна "Инструменты" лишь в том, что я создаю новый пустой экземпляр Security и приписываю ему код бумаги и класс. В чем тут собака порылась?

Спасибо:

Mikhail Sukhov

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


А какой текст транзакции пр которой возникает ошибка?

Спасибо:

ddd888

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


Текст такой (интересно, есть способ как-то его скопировать, чтобы не переписывать? :)):

"ACCOUNT=SPBFUT...;CLIENT_CODE=XXX;TYPE=L;TRANS_ID=3;CLASSCODE=SPBFUT;SECCDE=GZM0;ACTION=NEW_ORDER;OPERATION=B;QUANTITY=10;PRICE=17331;EXECUTION_CONITION=PUT_IN_QUEUE;"

дальше идут:

в [] [] (Int32 [],StringBuilder []) в [] [] (String[], OrderStatus& [], Int32&[], Double& [], Strng& []) и т.д. там где [] - на самом деле квадратики...

Спасибо:

ddd888

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


Поскольку используется одна и та же функция NewOrder, то должно быть дело где-то в составляющих Order order, который параметром в RegisterOrder отправляется? Как же на самом деле формируется класс Order?

Спасибо:

ddd888

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


Пооблему удалось решить, послав в мой класс с методом ссылку на весь экземпляр Security и затем использовав его в формировании заявки. :) Ключевой момент - оказалось, что для формировании заявки только Security.code и Security.class - не достаточно. Что же там еще используется? Т.е. предыдущий вопрос все-таки остается - как формируется класс Order? Какие свойства Security он использует и как?

Спасибо:

Mikhail Sukhov

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


А если посмотреть под Debug режимом в студии эти свойства?

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

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

loading
clippy