Как создать объект Security?

Как создать объект Security?
Atom
3/7/2013


Ранее делал так:

Code
_trader.NewSecurities += securities => this.GuiAsync(() =>
{
    Securitites.ItemsSource = _trader.Securities;

    if (_security == null)
    {
        _security = securities.FirstOrDefault(sec => sec.Code == secCode);
    }
});


Но инструмент один и хочу задать константным образом.
Пытаюсь так:

Code
Security _security = new Security
{
    Code = "RIH3",
};


не работает [sad]

Tags:


Thanks:


< 1 2 
MyNick

Avatar
Date: 3/13/2013
Reply


Уж не хотите ли вы сказать, что в этом коде:

Code
_trader.NewSecurities += securities => this.GuiAsync(() =>
{
    Securitites.ItemsSource = _trader.Securities;

    if (_security == null)
    {
        _security = securities.FirstOrDefault(sec => sec.Code == secCode);
        if (_security != null) _trader.RegisterMarketDepth(_security); // запускаем экспорт стакана
    }
});


происходит подключение к квику?
Почему вы думаете, что к квику я не подключен?
Thanks:

MenDel

Avatar
Date: 3/13/2013
Reply


MyNick Go to
Уж не хотите ли вы сказать, что в этом коде:

Code
_trader.NewSecurities += securities => this.GuiAsync(() =>
{
    Securitites.ItemsSource = _trader.Securities;

    if (_security == null)
    {
        _security = securities.FirstOrDefault(sec => sec.Code == secCode);
        if (_security != null) _trader.RegisterMarketDepth(_security); // запускаем экспорт стакана
    }
});


происходит подключение к квику?
Почему вы думаете, что к квику я не подключен?


В этом коде подключения не происходит, в нем мы получаем инструмент.
А получим мы его тогда когда экспорт заработает.
И стакан регистрируется только после всего этого.
А у вас стакан регистрируется сразу.
К тому же зачем вы закомментировали запуск экспорта в коде?

И кстати почему эта строчка хрень
Code
_trader.NewSecurities += sec => sec.ForEach(s => { if (s.Code == "RIH3") MySecurity = s; });

Вроде выглядит легко и просто, указал код инструмента, а дальше все само.
в этом коде как раз можно и стакан сразу зарегистрировать
Thanks: MyNick

MyNick

Avatar
Date: 3/13/2013
Reply


Сейчас все объясню.

>зачем вы закомментировали запуск экспорта в коде?
экспорт я запуская в отдельном обработчике у меня кнопка есть "DDEConnect_Click"

Я правильно думаю, что этот код:

Code
_security = securities.FirstOrDefault(sec => sec.Code == secCode);
и этот тоже _trader.NewSecurities += sec => sec.ForEach(s => { if (s.Code == "RIH3") MySecurity = s; });


ищет инструмент "RIH3" из таблицы "Инструменты" квика полученные по DDE???

Насчет экспорта я понял, сейчас попробовал так:

Code
                    _trader.Connected += () => this.GuiAsync(() =>
                    {
                        Security _security = new Security
                        {
                            Code = "RIH3",
                        };

                        _trader.StartExport();
                        if (_security != null) _trader.RegisterMarketDepth(_security); // запускаем экспорт стакана
                    });


Выдает ту же ошибку "Ссылка на объект не указывает на экземпляр объекта. Для создания экземпляров объектов воспользуйтесь зарезервированным словом new"

Область видимости вроде не при чем. Похоже этот код просто не создает объект.
Тогда что он делает?
Thanks:

MenDel

Avatar
Date: 3/13/2013
Reply


MyNick Go to


Code
_trader.Connected += () => this.GuiAsync(() =>
{
    Security _security = new Security
    {
        Code = "RIH3",
    };
 
    _trader.StartExport();
    if (_security != null) _trader.RegisterMarketDepth(_security); // запускаем экспорт стакана
});


Выдает ту же ошибку "Ссылка на объект не указывает на экземпляр объекта. Для создания экземпляров объектов воспользуйтесь зарезервированным словом new"

Область видимости вроде не при чем. Похоже этот код просто не создает объект.
Тогда что он делает?


Я полагая чтоб создать инструмент одного его кода мало.
Вы же не берете его из квика, а создаете с 0, так что надо все его необходимые параметры заполнить, как Иван З написал выще.

Code
Security _security = new Security
                    {
                        Code = "SBER",
                        Name = "Сбербанк России ОАО ао",
                        Id = "SBER@QJSIM",
                        Class = "QJSIM",
                        MinStepSize = 0.01m,
                        MinStepPrice = 0.01m,
                        ExchangeBoard = ExchangeBoard.Micex,
                    };


Проверил ошибки не вылетело
Путем экспериментов,
я так понял, что стакан регистрируется по Id.
Thanks:

Иван З.

Avatar
Date: 3/14/2013
Reply


Сначала создадим инструмент
Code

private _security;//создадим инструмент
private void QuikTraderGo_Click(object sender, RoutedEventArgs e)
        {

Потом после создания трейдера, инициализируем инструмент

Code
                    
//создаем квик трейдера, передавая ему сразу место расположения нашего терминала
                    _trader = new QuikTrader(QuikPath);
                    _security = new Security//инициализируем инструмент
                    {
                        Code = "SBER",
                        Name = "Сбербанк России ОАО ао",
                        Id = "SBER@QJSIM",
                        Class = "QJSIM",
                        MinStepSize = 0.01m,
                        MinStepPrice = 0.01m,
                        ExchangeBoard = ExchangeBoard.Micex,
                        Trader=_trader,// Трейдер если не забить будет ругаться на отсутствие шлюза
                    };


ну а экспорт стакана запустить можно и так(хотя что то подсказывает мне что это не совсем корректно)
Code
 _trader.Connected += () => this.GuiAsync(() =>
                    {
                        _trader.StartExport();
                        if (_security != null) _trader.RegisterMarketDepth(_security); // запускаем экспорт стакана
                    });


Quik подключает следующая строка, весь код который выполнен до этой строки выполняется без подключения к Quik.

Code
                    // подключаем квик
                    _trader.Connect();


Я попробовал на SampleSMA таким образом, _trader.RegisterMarketDepth(_security); прошел, вопросов не задал. Приходят ли события по стакану не проверял, но по крайней мере ошибок не выдавал.


Thanks:

MyNick

Avatar
Date: 3/14/2013
Reply


создал и инициализировал так:

Code
Security _security = new Security
{
   Id = "RIH3@RTS",
   Code = "RIH3",
   Name = "RTS-3.13",
   MinStepSize = 10,
   MinStepPrice = 2,
   ExchangeBoard = ExchangeBoard.Forts,
   Trader = _trader,
};


>Я попробовал на SampleSMA таким образом, _trader.RegisterMarketDepth(_security); прошел, вопросов не задал. Приходят ли события по стакану не проверял, но по крайней мере ошибок не выдавал

У меня на этом этапе ошибку тоже не выдал, но далее события НЕ ПРИХОДЯТ и обращение к _security вызывает все ту же "Ссылка на объект не указывает на экземпляр объекта" [sad]

Что делает код securities.FirstOrDefault(sec => sec.Code == secCode); ?
Thanks:

Иван З.

Avatar
Date: 3/14/2013
Reply


http://msdn.microsoft.co...u/library/bb549039.aspx
Возвращает первый элемент последовательности или значение по умолчанию, если последовательность не содержит элементов.

в пример Sample добавил инструмент
Code
                        var _lkoh = new Security()
                        {
                            Id = "LKOH@EQBR",
                            Code = "LKOH",
                            Class = "EQBR",
                            MinStepSize = 0.1M,
                            MinStepPrice = 0.1M,
                            ExchangeBoard = ExchangeBoard.Micex,
                            Trader = Trader,
                        };

строку
Code
Trader.NewSecurities += securities => this.GuiAsync(() => _securitiesWindow.Securities.AddRange(securities));

заменил на
Code
_securitiesWindow.Securities.Add(_lkoh);

Больше ничего не делал, все работает нормально, экспорт стакана идет. Можете проверить сами.
Sample.rar 4 MB (168)
Thanks:

MyNick

Avatar
Date: 3/15/2013
Reply


Спасибо вам большое за ваши ответы, они многое прояснили для меня.
К сожалению решить проблему так пока и не удалось.

Спасибо вам Иван З. за ваш пример - он помог мне решить другую проблему.

Вчера лазая по форуму нашел такой код:
Code
(Security)this.Securitites.SelectedItem;

вроде так кто-то создавал объект Security, но при попытке его использовать получил сообщение об ошибке: "невозможно преобразовать объект SelectedItem в Security", что-то в этом роде.

Главная задача избавиться от _trader.NewSecurities += securities => или найти инструмент в ComboBox.

Возможно VassilSanych был прав и "избавляясь от этой хренотени, придется нагородить намного больше другой инициализирующей хренотени".

Я просто плохо знаю C# и StockSharp, так как раньше на них не программировал, но чувствую, что проблему можно решить.

Ладно не буду больше мучить вас вопросами.
Thanks:

VassilSanych

Avatar
Date: 3/15/2013
Reply


SelectedItem имеет отношение к выпадающему списку Securities на форме. Надо заменить это своей реализацией.
Thanks:

MyNick

Avatar
Date: 3/15/2013
Reply


Можно создать объект Security из ComboBox, который заполняется вручную?
Как?
Thanks:
< 1 2 

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

loading
clippy