← 戻る

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

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