Ситуация следующая:
Делаю дельта-хеджер. В главном окне предлагается выбрать счет , торгуемые опционы и фьючи. Список опционов и фьючей выводится на основе данных, получаемых из 2 произвольных таблиц: таблица со списком опционов(через табл. "текущая таблица"), где располагаются только опционы и есть поле "Код бумаги" и таблица с параметрами опционов (через табл. "информация по опционам"). Первая нужна мне для списка опционов, а вторая для их параметров (греки, волатильность).
Далее переход к самому хеджеру: в нем 2 стакана (ст. опциона и ст. фьюча) , список параметров для хеджирования и проч. мелочи. Столкнулся с проблемой вывода этих самых стаканов: Для вывода стакана через RegisterQuotes(), на вход надо дать тип Security. У меня же имеется только Код инструмента.
Вопросы:
- Как осуществить вывод стакана , имея только код инструмента?
- Как в дальнейшем получать информацию лишь по одному инструменту, а не искать по ID инструмента в таблице и считывать их. А то слишком много неиспользуемых данных грузится и процесс поиска параметров по инструменту усложняется использованием таблиц.
Kommentare (18)
Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen
Дык в Trader.SecuritiesTable нет метода, позволяющего извлечь по коду элемент с типом Security, как например, если подписаться на событие появления новых инструментов
Только этот код не работает, ибо я не экспортирую стандартную таблицу... Где еще можно выцепить тип Security я не знаю, подскажите пожалуйста.
Распечатайте все инструменты, которые появляются в NewSecurities.
Добавил вывод в текстовое поле - пусто. У меня просто напросто это событие не происходит, поэтому и пусто...
А сделки по инструментам есть? Таблица всех сделок экспортируется?
Если ничего этого нет, таблица инструментов не экспортируется - тогда конечно не будет новых инструментов.
Возвращаясь к вопросам -
В настройках экспорта у меня следующее:
До сделок по инструментам я еще не дошел , т.к. стакан еще не получается вывести, соответственно и сделок не с чем пока совершать.
this.Trader.StartExport(); //Кастомная таблица по опционам this.Trader.Terminal.StartDde(_OptionTable);
Инструменты реально существующие, выводятся из таблицы с квиком. Таблица создается на основе таблицы текущих значений. Да мне просто хочется узнать сам принцип , как имея один код инструмента выделить Security, ибо в дальнейшем много где будет это нужно.
Вот как я делаю:
у вас не приходит Security, т.к.
Т.е. Security нет и найти вы его никак не можете. Если есть желание - создайте руками, задав Id и все необходимые поля. Но зачем такие извращения мне до сих пор неясно
Решил сделать по вашему совету со стандартной таблицей, добавив туда дополнительные поля для опционов. В таблице, когда поступают новые Security веду обработку по типу инструмента, если тип = опцион , то добавляю его в один список, если фьюч , то в другой. Но вот тут возникает проблема обработки этого события. Код обработки события ниже:
Получаю на это дело ошибку:
this.Trader.NewSecurities += securities => this.GuiAsync(() => { foreach (var s in securities) { //фильтры по опционам, фьючам и мусору if (s.OptionType == OptionTypes.Call || s.OptionType == OptionTypes.Put) ]", s.ShortName); if (!OptionBox.Items.Contains(instrumentString)) OptionBox.Items.Add(instrumentString); } if (s.Type == SecurityTypes.Future) ] {2}", s.ExpiryDate.ToString(), s.ShortName.ToString()); if (!FuturesBox.Items.Contains(instrumentString)) FuturesBox.Items.Add(instrumentString); }
Google говорит что это ошибка Managed DirectX. Со S# это точно никак не связано
Вот же блин, ошибка глупая: У String.Format индекс с нуля должен начинаться, а у меня с 1 (0 убрал, вместе с одним элементом и забыл про него). Alexander, спасибо за помощь. Security получаю через стандартную таблицу, дополнительные поля добавил и решилась проблема с 2умя таблицами. Со стаканом думаю разберусь, ибо теперь есть Security обоих! =)
Дабы не плодить темы, спрошу здесь, т.к. новая проблема вытекает из всего , что следовало до нее... Стаканы вывел, все параметры считал, все вроде хорошо, но строки в Таблице с параметрами опционов добавляются кучами. Чтобы это предотвратить вроде как нужно объявить некий идентификатор в классе и потом уже по нему обновлять текущие строки. Следуя руководству и примеру SampleDdeCustomTable , столкнулся со следующим:
не получается объявить атрибут [Identity] и [InnerSchema], подскажите, какую сборку надо подключить
Класс объявляю вот так:
При объявлении ругалось на Equotable (пропущена ссылка на сборку) - заменил на IEquotable, т.к. предположил , что интерфейс уже устарел.
Интересный у вас экспорт данных. Квик греки не рассчитывает. Значит вы их пишите на Купели. А знаете что их умеет считать сам S#?
Ecng.Serialization
почаще смотрите примеры, там есть почти всё. не зря же их мы писали - чтобы не отвечать на вопросы, которые эти примеры покрывают.
И наследоваться лучше от Equatable, он в Ecng.Common. Что также есть в примерах.
Пример - SampleDdeCustomTable.
Alexander, я почему спросил - в примере SampleDdeCustomTable, в объявлении класса как раз и не используется объявление атрибута [Identity] , а в мануале http://stocksharp.com/doc/html/7d73f7bf-ae8b-4d76-9895-cffb6342203f.htm описано только объявление , а в какой сборке этот атрибут имеется не указано. Я стараюсь тщательно изучать примеры, прежде, чем спрашивать.
Mikhail Sukhov, дык в таблице параметров опционов все греки имеются, я их и выгружаю. На Qpile'e не пишу ничего, мне по сути на данном этапе только дельта нужна для хеджа, а она вроде есть в этой таблице. Или вы имеете ввиду , что те данные, которые квик дает сомнительны? Про расчет греков я видел пример, но только где-то на форуме я встречал высказывание, что это не работает для более ранних версий квика. Поэтому и стал делать через Custom-таблицы.