InvalidOperationException - Шлюз не инициализирован


InvalidOperationException - Шлюз не инициализирован
Atom
3/28/2012


Начинаю изучать S#. Есть такой код:
Code

    public MainWindow() {
      InitializeComponent();
      .....
      Trader = new QuikTrader(Path.Text);
      Trader.NewSecurities += securities => this.GuiAsync(() => editSecurity.ItemsSource = Trader.Securities);
      Trader.NewTrades += trades => this.GuiAsync(() => Trades.AddRange(trades));
      Trader.ReConnectionSettings.ConnectionRestored += () => this.GuiAsync(() => MessageBox.Show(this, "Connection has been restored."));
      // подписываемся на событие разрыва соединения
      Trader.ConnectionError += error => this.GuiAsync( () => MessageBox.Show( this, error.ToString() ) );
      Trader.ProcessDataError += ex => System.Diagnostics.Debug.WriteLine(ex);
      Trader.Connected += () => this.GuiAsync(() => btnDDE.isEnabled = true); // Gjckt соединения активируем кнопку "Start DDE"
      Trader.Connect();
      _candleManager = new CandleManager(Trader);
    }

    private void StartDde_Click() { // Когда нажали на кнопку "Start DDE"
      Trader.StartExport();
    }
    
    private void StartStrategy_Click(object sender, RoutedEventArgs e) { // Когда нажали на кнопку "Start strateg"
      StartStrategy();
    }

    private void StartStrategy() {
      if (_strategy == null) {
        var timeFrame = TimeSpan.FromSeconds(280);
        _strategy = new FirstStrategy(_candleManager, SelectedSecurity, timeFrame);
        var guiListener = new GuiLogListener();
        _logManager.Listeners.Add(guiListener);
        _logManager.Sources.Add(_strategy);
        _strategy.Start();
      }
      _isStrategyStarted = true;
      btnStartStrategy.Content = "Stop strategy";
    }


Код класса FirstStrategy:
Code

  class FirstStrategy : Strategy {
    private readonly CandleManager _candleManager;
    private readonly Strategy _tradingStrategy;
    private Candle lastCandle;

    public FirstStrategy(CandleManager candleManager, Security security, TimeSpan timeFrame) {
      // Задаем интсрумент по которому должна работать стратегия
      this.Security = security;
      // Создаем менеджер свечек
      _candleManager = candleManager;
      // Регистрируем нужный таймфрейм для свечек
      _candleManager.RegisterTimeFrameCandles(this.Security, timeFrame);
      // Подписываемся на событие окончания свечки
      _candleManager.CandlesFinished += OnCandleFinished;
    }

    protected override void OnStarting() {
      ........
      // Вызываем родительский метод
      base.OnStarting(); // Вот здесь получаю исключение InvalidOperationException Шлюз не инициализирован
    }

    protected void OnCandleFinished(CandleToken token, IEnumerable<Candle> candles) {      
      lastCandle = candles.Last();
      this.AddInfoLog("Последнее время {0}. Цена закрытия {1}", new object[] { lastCandle.Time, lastCandle.ClosePrice } );
    }
  }


Сначало нажимаю на кнопку "Start DDE", через 1 минуту нажимаем на кнопку "Start strateg" и
получаю исключение InvalidOperationException с сообщением "Шлюз не инициализирован" в методе OnStarting() при вызове base.OnStarting().
Подскажите пожалуйста, что я делаю не так?

Tags:


Thanks:


Alexander

Avatar
Date: 3/28/2012
Reply


плохо читаете документацию
Thanks:

PavelAd

Avatar
Date: 3/28/2012
Reply


Alexander Mukhanchikov Go to
плохо читаете документацию

Всю документацию и примеры пересмотрел, не могу понять причину ошибки.
Thanks:

PavelAd

Avatar
Date: 3/28/2012
Reply


В моем примере кнопка для запуска экспорта по DDE делается активной по событию QuikTrader.Connected.
После этого я нажимаю на эту кнопку, и только после того как начинают поступать данные по инструментам нажимаю на кнопку запуска стратегии.
Сравнивал с примером Sample - все вроде так же делаю.
Отредактировал первоначальный код примера.
Thanks:

Moadip

Avatar
Date: 3/28/2012
Reply


Code
_strategy = new FirstStrategy(_candleManager, SelectedSecurity, timeFrame)


Инструмент передаете в конструктор. А кто будет устанавливать шлюз и портфель?[smile]

Можно также через конструктор, но проще через инициализатор.
Code
_strategy = new FirstStrategy(_candleManager, SelectedSecurity, timeFrame){Trader = ..., Portfolio = ...}


Я не вижу подписки на событие появления портфелей.

Code
Trader.NewPortfolios += ...
Thanks: PavelAd komaranton

Alexander

Avatar
Date: 3/28/2012
Reply


Если что - у нас есть поддержка пользователей.
Если возникли вопросы на таком этапе - дальше может быть вопросов ещё больше.
Thanks:

PavelAd

Avatar
Date: 3/29/2012
Reply


Moadip Go to
Инструмент передаете в конструктор. А кто будет устанавливать шлюз и портфель?[smile]
Можно также через конструктор, но проще через инициализатор.
Я не вижу подписки на событие появления портфелей.


Спасибо, ошибка исчезла.
Thanks:


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

loading
clippy