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

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


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

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

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

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


Tags:


Thanks:


< 1 2 3 4 5  > >>
Mikhail Sukhov

Avatar
Date: 4/6/2010
Reply


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

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

Thanks:

ddd888

Avatar
Date: 4/7/2010
Reply


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

<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 загрузить в , то данные нормально отображаются, а в текстовом поле нет. Это можно легко объяснить?

Thanks:

ddd888

Avatar
Date: 4/13/2010
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 4/13/2010
Reply


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

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

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

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

Thanks:

ddd888

Avatar
Date: 4/13/2010
Reply


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

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

Thanks:

Mikhail Sukhov

Avatar
Date: 4/13/2010
Reply


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

Thanks:

ddd888

Avatar
Date: 4/13/2010
Reply


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

"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& []) и т.д. там где [] - на самом деле квадратики...

Thanks:

ddd888

Avatar
Date: 4/13/2010
Reply


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

Thanks:

ddd888

Avatar
Date: 4/13/2010
Reply


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

Thanks:

Mikhail Sukhov

Avatar
Date: 4/13/2010
Reply


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

Thanks:
< 1 2 3 4 5  > >>

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

loading
clippy