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


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

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

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


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

Код
Security _security = new Security
{
    Code = "RIH3",
};


не работает Sad

Теги:


Спасибо:


1 2  >
Иван З.

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


Здравствуйте! Я делаю так.
Код
Security _securityDefault = new Security()
        {
            Id = "SPFB.RTS@RTS",
            Code = "RTS",
            Class = "SPFB",
            MinStepSize = 5,
            MinStepPrice = 2,
            ExchangeBoard = ExchangeBoard.Forts,
        };
Спасибо: MyNick

MyNick

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


Спасибо, так только я еще и не пробовал - в понедельник попробую.
Спасибо:

MyNick

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


Попробовал,- к сожалению и ваш вариант у меня не работает.

Далее при попытке запустить экспорт стакана if (_security != null) _trader.RegisterMarketDepth(_security);

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

Иван З.

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


Здравствуйте! Прочитал ваш пост внимательнее, и понял, что ввел вас в заблуждение. Изначально посчитал что вам нужен инструмент для тестирования, и тот вариант, что я написал вполне подойдет для тестирования без подключения к терминалу (конечно зависит от того что и как тестировать). При работе с подключением к терминалу лучше воспользоваться вашим первым вариантом, либо если вам нужен только один заранее известный инструмент, то можно еще сделать, так как показано в SampleRealTimeTesting
Код
_trader.NewSecurities += securities => this.GuiAsync(() =>
						{
							// находим нужную бумагу
							var lkoh = securities.FirstOrDefault(s => s.Code == "LKOH");

							if (lkoh != null)
							{
								_lkoh = lkoh;
							}
						});

При таком варианте у вас будет вся информация о инструменте полученная из терминала. Если инструмент создавать вручную, то легко ошибиться. Либо изменяться параметры инструмента, например шаг цены как уже было с фьючерсном на индекс РТС.

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

Код
private Security _securityDefault = new Security()
        {
            Id = "SPFB.RTS@RTS",
            Code = "RTS",
            Class = "SPFB",
            MinStepSize = 5,
            MinStepPrice = 2,
            ExchangeBoard = ExchangeBoard.Forts,
        };


Если вас интересовало тестирование на исторических данных то, посмотрите здесь https://stocksharp.ru/do...a-a699-da47b666194a.htm в пункте №4 про инструмент написано, в пункте №6 описано получение стакана.
Спасибо:

MenDel

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


MyNick Перейти
Попробовал,- к сожалению и ваш вариант у меня не работает.

Далее при попытке запустить экспорт стакана if (_security != null) _trader.RegisterMarketDepth(_security);

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


Я так пишу
Код

public Security MySecurity { get; set; }

_trader.NewSecurities += sec => this.GuiAsync(() => sec.ForEach(s => { if (s.Code == "RIH3") MySecurity = s; }));


а
_trader.RegisterMarketDepth(MySecurity);
_trader.RegisterSecurity(MySecurity);
_trader.RegisterTrades(MySecurity);
я запускаю только тогда, когда экспорт будет работать на 100%.
Потому что когда вы запускаете экспорт, проходит еще какое то время прежде чем, вы получите нужный портфель, инструмент, позиции.
Спасибо:

MyNick

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


Спасибо за ответы.

Тестированием я не занимаюсь, а торгую на реальном счете.

Вот как раз делать "так как показано в SampleRealTimeTesting" я и не хочу.
От этой _trader.NewSecurities += securities => this.GuiAsync(() => хренотени я и пытаюсь избавиться.
Я не хочу получать инструменты из квика, а хочу просто задавать у себя в программе, создав объект Security.

>По поводу ошибки то, скорее всего вы создаете инструмент в одном методе, а пользоваться пытаетесь в другом
Вот-вот что-то с областью видимости у меня неправильно.
Я создаю объект после:
Код
namespace StockSharpWpf
{
    public partial class MainWindow : Window
    {
        Security _security = new Security
        {
            Code = "RIH3",
        };

а использую далее в разных обработчиках.

Кстати объект "Portfolio" я создал точно таким же образом. И он работает!

Код
        Portfolio _portfolio = new Portfolio
        {
            Name = "",
        };
Спасибо:

Иван З.

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


Ну тогда здесь без кода и пол литра не разберешься! BigGrin
Просим код на суд!
Спасибо:

MyNick

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


Вот мой гениальный код BigGrin :

Код
private void QuikTraderGo_Click(object sender, RoutedEventArgs e)
        {
            if (terminal == null) terminal = QuikTerminal.Get(QuikPath);

            if (!terminal.IsLaunched) // если QUIK не запущен
            {
                MessageBox.Show("QUIK не запущен");
            }
            else
            {
                if (_trader != null)
                {
                    _trader.Disconnect();
                    QuikTraderGo.Content = "QuikTrader Go";
                }
                else
                {
                    //создаем квик трейдера, передавая ему сразу место расположения нашего терминала
                    _trader = new QuikTrader(QuikPath);

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

                    // подписываемся на событие обновления стакана
                    _trader.MarketDepthsChanged += depths => this.GuiAsync(() =>
                    {
                        //PRICE.Text = _security.BestBid.Price.ToString();//лучшая цена покупки в стакане
                        if (_depth == null && _security != null)
                        {
                            _depth = depths.FirstOrDefault(d => d.Security == _security);

                            if (_depth != null)
                            {
                                //MessageBox.Show("Стакан " + _security + " появился.");
                            }
                        }
                    });
                    //подписываемся на событие подключения, как только подключимся, сразу запустим Экспорт
                    _trader.Connected += () => this.GuiAsync(() =>
                    {
                        //_trader.StartExport(); //получение он-лайн данных из квика Инструменты, Заявки, Портфели и так далее
                        //MessageBox.Show("Подключение по DDE произведено успешно.");
                    });
                    // подключаем квик
                    _trader.Connect();

                    QuikTraderGo.Content = "QuikTrader Stop";
                }
            }
        }


ошибку указывает на строку "if (_security != null) _trader.RegisterMarketDepth(_security)"
Спасибо:

VassilSanych

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


MyNick Перейти
От этой _trader.NewSecurities += securities => this.GuiAsync(() => хренотени я и пытаюсь избавиться.

Боюсь, избавляясь от этой хренотени, вам придётся нагородить намного больше другой инициализирующей хренотени.
GuiAsync, кстати, совсем не обязательно.

Спасибо:

Иван З.

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


Ваш код не последователен, т.е. вы создаете трейдер

Код
                    //создаем квик трейдера, передавая ему сразу место расположения нашего терминала
                    _trader = new QuikTrader(QuikPath);

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


а к Quikу подключаетесь потом, как же он запустит экспорт стакана если он еще к Quikу не подключен? Запускайте экспорт стакана тогда когда Quik подключен.

VassilSanych как всегда прав, без этой хренотени ни как.






Спасибо:
1 2  >

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

loading
clippy