← Назад

NullReferenceException при подаче заявки

При подаче заявки вылетает NullReferenceException со ссылкой на строчку кода:


var lastPrice = security.LastTrade.Price;

В Visual Studio видно, что почему-то у security поле _lastTrade = null? Где зарыта собака?

Спасибо.

Комментарии (3)

Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий

Garry
Garry

Из приведенного куска не понятно, где зарыта. security это что, как определяется, откуда берется?

Lipot
Lipot Автор

После подключения к Plaza получаю коллекцию инструментов(_securityList) через метод UpdateSecurityList:


Trader.NewSecurities += securities =>
                            this.GuiAsync(() =>
                            {
                                _securitiesWindow.AddSecurities(securities);

                                //Заполняем Combobox "Инструмент" найденными инструментами
                                foreach (var security in securities.Where(security => security.Name.StartsWith("Фьючерсный")))
                                {
                                    Securities.Items.Add(security);
                                }

                                //Заполняем коллекцию инструментов
                                UpdateSecurityList();
                                UpdateMarginPrice(_securityList);

                                //Делаем активным первый элемент списка
                                Securities.SelectedIndex = 0;
                            });
							
		/// <summary>
        /// Метод обновления списка инструментов
        /// </summary>
        private void UpdateSecurityList()
        {
            _securityList.Clear();

            if (InstrumentOnly.IsChecked != null && (bool)InstrumentOnly.IsChecked)
            {
                _securityList.Add((Security)Securities.SelectedItem);
            }
            else
            {
                foreach (Security security in Securities.Items)
                {
                    if (security.ExpiryDate >= _nowTime.AddDays(2))
                    {
                        if (security.ExpiryDate <= _nowTime.AddMonths(3))
                            if (security.Code.StartsWith("GZ") || security.Code.StartsWith("GM"))
                            {
                                _securityList.Add(security);
                            }

                    }
                    else
                    {
                        if (security.ExpiryDate > _nowTime.AddDays(3) && security.ExpiryDate <= _nowTime.AddDays(3).AddMonths(3))
                            if (security.Code.StartsWith("GZ") || security.Code.StartsWith("GM"))
                            {
                                _securityList.Add(security);
                            }


                    }
                }
            }

        }

Передаю коллекцию в стратегию через конструктор и дальше уже в самой стратегии через оператор foreach (var security in _securityList) создаю заявку:


                    var lastPrice = security.LastTrade.Price;

                    var orderBuy = new Order
                    {
                        Type = OrderTypes.Limit,
                        ExpiryDate = DateTime.MaxValue,
                        Volume = Volume,
                        Price = lastPrice,
                        Portfolio = base.Portfolio,
                        Security = security,
                        Direction = OrderDirections.Buy,
                    };

Буду благодарен за любые комментарии.

Garry
Garry

Ну если в соседней ветке все верно, то коннектор не работает, соответственно нет данных.