Alexander
|
Date: 7/21/2011
Dottz Инструменты реально существующие, выводятся из таблицы с квиком. Таблица создается на основе таблицы текущих значений. Да мне просто хочется узнать сам принцип , как имея один код инструмента выделить Security, ибо в дальнейшем много где будет это нужно. Вот как я делаю: Code
private const string WorkInstrument = "RIU1@RTS";
var security = _multiTrader.Securities.Where(s => s.Id == WorkInstrument).ToList();
у вас не приходит Security, т.к. 1) вы не экспортируете таблицу инструментов почему-то 2) у вас нет сделок по инструменту - он не создаётся никак Т.е. Security нет и найти вы его никак не можете. Если есть желание - создайте руками, задав Id и все необходимые поля. Но зачем такие извращения мне до сих пор неясно
|
|
|
|
|
Dottz
|
Date: 7/21/2011
|
|
|
|
Решил сделать по вашему совету со стандартной таблицей, добавив туда дополнительные поля для опционов. В таблице, когда поступают новые Security веду обработку по типу инструмента, если тип = опцион , то добавляю его в один список, если фьюч , то в другой. Но вот тут возникает проблема обработки этого события. Код обработки события ниже: Code
this.Trader.NewSecurities += securities => this.GuiAsync(() =>
{
foreach (var s in securities)
{
//фильтры по опционам, фьючам и мусору
if (s.OptionType == OptionTypes.Call || s.OptionType == OptionTypes.Put)
{
string instrumentString = String.Format("[{1}]", s.ShortName);
if (!OptionBox.Items.Contains(instrumentString))
OptionBox.Items.Add(instrumentString);
}
if (s.Type == SecurityTypes.Future)
{
string instrumentString = String.Format("[{1}] {2}", s.ExpiryDate.ToString(), s.ShortName.ToString());
if (!FuturesBox.Items.Contains(instrumentString))
FuturesBox.Items.Add(instrumentString);
}
}
});
Получаю на это дело ошибку: Code
Попытка выполнения управляемого кода под блокировкой OS Loader. Запуск управляемого кода в пределах функции DllMain или функции инициализации образа может вызвать зависание приложения.
|
|
Thanks:
|
|
|
|
|
Alexander
|
Date: 7/21/2011
|
|
|
|
Dottz Решил сделать по вашему совету со стандартной таблицей, добавив туда дополнительные поля для опционов. В таблице, когда поступают новые Security веду обработку по типу инструмента, если тип = опцион , то добавляю его в один список, если фьюч , то в другой. Но вот тут возникает проблема обработки этого события. Код обработки события ниже: Code
this.Trader.NewSecurities += securities => this.GuiAsync(() =>
{
foreach (var s in securities)
{
//фильтры по опционам, фьючам и мусору
if (s.OptionType == OptionTypes.Call || s.OptionType == OptionTypes.Put)
{
string instrumentString = String.Format("[{1}]", s.ShortName);
if (!OptionBox.Items.Contains(instrumentString))
OptionBox.Items.Add(instrumentString);
}
if (s.Type == SecurityTypes.Future)
{
string instrumentString = String.Format("[{1}] {2}", s.ExpiryDate.ToString(), s.ShortName.ToString());
if (!FuturesBox.Items.Contains(instrumentString))
FuturesBox.Items.Add(instrumentString);
}
}
});
Получаю на это дело ошибку: Code
Попытка выполнения управляемого кода под блокировкой OS Loader. Запуск управляемого кода в пределах функции DllMain или функции инициализации образа может вызвать зависание приложения.
Google говорит что это ошибка Managed DirectX. Со S# это точно никак не связано
|
|
Thanks:
|
|
|
|
|
Dottz
|
Date: 7/21/2011
Вот же блин, ошибка глупая: У String.Format индекс с нуля должен начинаться, а у меня с 1 (0 убрал, вместе с одним элементом и забыл про него). Alexander, спасибо за помощь. Security получаю через стандартную таблицу, дополнительные поля добавил и решилась проблема с 2умя таблицами. Со стаканом думаю разберусь, ибо теперь есть Security обоих! =)
|
|
Thanks:
|
|
|
|
|
Dottz
|
Date: 7/21/2011
|
|
|
|
Дабы не плодить темы, спрошу здесь, т.к. новая проблема вытекает из всего , что следовало до нее... Стаканы вывел, все параметры считал, все вроде хорошо, но строки в Таблице с параметрами опционов добавляются кучами. Чтобы это предотвратить вроде как нужно объявить некий идентификатор в классе и потом уже по нему обновлять текущие строки. Следуя руководству и примеру SampleDdeCustomTable , столкнулся со следующим: не получается объявить атрибут [Identity] и [InnerSchema], подскажите, какую сборку надо подключить Класс объявляю вот так: Code
public class OptionTypeStrike : IEquatable<OptionTypeStrike>
{
[DdeCustomColumn("Тип", Order = 0)]
public string Type { get; set; }
[DdeCustomColumn("Страйк", Order = 1)]
public long Strike { get; set; }
public override OptionTypeStrike Clone()
{
throw new NotImplementedException();
}
public override int GetHashCode()
{
return this.Type.GetHashCode() ^ this.Strike.GetHashCode();
}
protected override bool OnEquals(OptionTypeStrike other)
{
return this.Type == other.Type && this.Strike == other.Strike;
}
}
При объявлении ругалось на Equotable (пропущена ссылка на сборку) - заменил на IEquotable, т.к. предположил , что интерфейс уже устарел. Code
[DdeCustomTable("Таблица параметров опционов")]
public class OptionDetails
{
//этой штуке и нужно присвоить идентификатор
public OptionTypeStrike Option { get; set; }
[DdeCustomColumn("Теор. цена", Order = 2)]
public long TheorCost { get; set; }
[DdeCustomColumn("Расч.цена", Order = 3)]
public long ActCost { get; set; }
[DdeCustomColumn("Расч.премия", Order = 4)]
public long Premium { get; set; }
[DdeCustomColumn("Дата исполнения", Order = 5)]
public string PerformDate { get; set; }
[DdeCustomColumn("Задан. волат.", Order = 6)]
public decimal GivenVolatility { get; set; }
[DdeCustomColumn("Волатильность", Order = 7)]
public decimal Volatility { get; set; }
[DdeCustomColumn("Дельта", Order = 8)]
public decimal Delta { get; set; }
[DdeCustomColumn("Гамма", Order = 9)]
public decimal Gamma { get; set; }
[DdeCustomColumn("Тета", Order = 10)]
public decimal Teta { get; set; }
[DdeCustomColumn("Вега", Order = 11)]
public decimal Vega { get; set; }
}
|
|
Thanks:
|
|
|
|
|
Alexander
|
Date: 7/22/2011
Ecng.Serialization
почаще смотрите примеры, там есть почти всё. не зря же их мы писали - чтобы не отвечать на вопросы, которые эти примеры покрывают.
И наследоваться лучше от Equatable, он в Ecng.Common. Что также есть в примерах.
Пример - SampleDdeCustomTable.
|
|
Thanks:
|
|
|
|
|
Mikhail Sukhov
|
Date: 7/26/2011
Интересный у вас экспорт данных. Квик греки не рассчитывает. Значит вы их пишите на Купели. А знаете что их умеет считать сам S#?
|
|
Thanks:
|
|
|
|
|
Dottz
|
Date: 7/26/2011
Alexander , я почему спросил - в примере SampleDdeCustomTable, в объявлении класса как раз и не используется объявление атрибута [Identity] , а в мануале http://stocksharp.com/do...6-9895-cffb6342203f.htm описано только объявление , а в какой сборке этот атрибут имеется не указано. Я стараюсь тщательно изучать примеры, прежде, чем спрашивать. Mikhail Sukhov, дык в таблице параметров опционов все греки имеются, я их и выгружаю. На Qpile'e не пишу ничего, мне по сути на данном этапе только дельта нужна для хеджа, а она вроде есть в этой таблице. Или вы имеете ввиду , что те данные, которые квик дает сомнительны? Про расчет греков я видел пример, но только где-то на форуме я встречал высказывание, что это не работает для более ранних версий квика. Поэтому и стал делать через Custom-таблицы.
|
|
Thanks:
|
|
|
|