示例#1
0
        private void ConnectClick(object sender, RoutedEventArgs e)
        {
            if (!_isConnected)
            {
                if (Login.Text.IsEmpty())
                {
                    MessageBox.Show(this, LocalizedStrings.Str2974);
                    return;
                }
                else if (Password.Password.IsEmpty())
                {
                    MessageBox.Show(this, LocalizedStrings.Str2975);
                    return;
                }

                if (_trader == null)
                {
                    // создаем подключение
                    _trader = new SmartTrader();

                    _logManager.Sources.Add(_trader);

                    Portfolios.Portfolios = new PortfolioDataSource(_trader);

                    // подписываемся на событие успешного соединения
                    _trader.Connected += () =>
                    {
                        // возводим флаг, что соединение установлено
                        _isConnected = true;

                        // разблокируем кнопку Экспорт
                        this.GuiAsync(() => ChangeConnectStatus(true));

                        _candleManager = new CandleManager(_trader);

                        _trader.NewCandles += (series, candles) => _historyCandles.SyncDo(col =>
                        {
                            _historyCandles.AddRange(candles.Cast <TimeFrameCandle>());

                            foreach (var candle in candles)
                            {
                                ProcessCandle(candle);
                            }
                        });

                        _trader.NewSecurities += securities =>
                        {
                            // находим нужную бумагу
                            var lkoh = securities.FirstOrDefault(s => s.Code == "LKOH");

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

                                this.GuiAsync(() =>
                                {
                                    Start.IsEnabled = true;
                                });
                            }
                        };

                        _trader.NewMyTrades += trades =>
                        {
                            if (_strategy != null)
                            {
                                // найти те сделки, которые совершила стратегия скользящей средней
                                trades = trades.Where(t => _strategy.Orders.Any(o => o == t.Order));

                                _trades.Trades.AddRange(trades);
                            }
                        };

                        // подписываемся на событие о неудачной регистрации заявок
                        //_trader.OrdersRegisterFailed += OrdersFailed;

                        _candleManager.Processing += (s, candle) =>
                        {
                            // выводим только те свечи, которые не были отрисованы как исторические
                            if (candle.OpenTime > _lastHistoryCandle)
                            {
                                ProcessCandle(candle);
                            }
                        };

                        this.GuiAsync(() =>
                        {
                            ConnectBtn.IsEnabled = false;
                        });
                    };

                    // подписываемся на событие разрыва соединения
                    _trader.ConnectionError += error => this.GuiAsync(() =>
                    {
                        // заблокируем кнопку Экспорт (так как соединение было потеряно)
                        ChangeConnectStatus(false);

                        MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2959);
                    });

                    _trader.Disconnected += () => this.GuiAsync(() => ChangeConnectStatus(false));

                    // подписываемся на ошибку обработки данных (транзакций и маркет)
                    //_trader.Error += error => this.GuiAsync(() => MessageBox.Show(this, error.ToString(), "Ошибка обработки данных"));

                    // подписываемся на ошибку подписки маркет-данных
                    _trader.MarketDataSubscriptionFailed += (security, type, error) =>
                                                            this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2956Params.Put(type, security)));
                }

                _trader.Login    = Login.Text;
                _trader.Password = Password.Password;
                _trader.Address  = Address.SelectedAddress;

                // очищаем из текстового поля в целях безопасности
                //Password.Clear();

                _trader.Connect();
            }
            else
            {
                _trader.Disconnect();
            }
        }
示例#2
0
        private void ConnectClick(object sender, RoutedEventArgs e)
        {
            if (!_isConnected)
            {
                if (Login.Text.IsEmpty())
                {
                    MessageBox.Show(this, LocalizedStrings.Str2974);
                    return;
                }
                else if (Password.Password.IsEmpty())
                {
                    MessageBox.Show(this, LocalizedStrings.Str2975);
                    return;
                }

                if (Trader == null)
                {
                    // создаем подключение
                    Trader = new SmartTrader();

                    // инициализируем механизм переподключения
                    Trader.ReConnectionSettings.WorkingTime = ExchangeBoard.Forts.WorkingTime;
                    Trader.Restored += () => this.GuiAsync(() =>
                    {
                        // разблокируем кнопку Экспорт (соединение было восстановлено)
                        ChangeConnectStatus(true);
                        MessageBox.Show(this, LocalizedStrings.Str2958);
                    });

                    // подписываемся на событие успешного соединения
                    Trader.Connected += () =>
                    {
                        // возводим флаг, что соединение установлено
                        _isConnected = true;

                        // разблокируем кнопку Подключиться
                        this.GuiAsync(() => ChangeConnectStatus(true));
                    };
                    Trader.Disconnected += () => this.GuiAsync(() => ChangeConnectStatus(false));

                    // подписываемся на событие разрыва соединения
                    Trader.ConnectionError += error => this.GuiAsync(() =>
                    {
                        // заблокируем кнопку Экспорт (так как соединение было потеряно)
                        ChangeConnectStatus(false);

                        MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2959);
                    });

                    // подписываемся на ошибку обработки данных (транзакций и маркет)
                    Trader.Error += error =>
                                    this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2955));

                    // подписываемся на ошибку подписки маркет-данных
                    Trader.MarketDataSubscriptionFailed += (security, type, error) =>
                                                           this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2956Params.Put(type, security)));

                    Trader.NewSecurities += securities => _securitiesWindow.SecurityPicker.Securities.AddRange(securities);
                    Trader.NewMyTrades   += trades => _myTradesWindow.TradeGrid.Trades.AddRange(trades);
                    Trader.NewTrades     += trades => _tradesWindow.TradeGrid.Trades.AddRange(trades);
                    Trader.NewOrders     += orders => _ordersWindow.OrderGrid.Orders.AddRange(orders);
                    Trader.NewStopOrders += orders => _stopOrdersWindow.OrderGrid.Orders.AddRange(orders);
                    Trader.NewPortfolios += portfolios =>
                    {
                        _portfoliosWindow.PortfolioGrid.Portfolios.AddRange(portfolios);
                        portfolios.ForEach(Trader.RegisterPortfolio);
                    };
                    Trader.NewPositions += positions => _portfoliosWindow.PortfolioGrid.Positions.AddRange(positions);

                    // подписываемся на событие о неудачной регистрации заявок
                    Trader.OrdersRegisterFailed += OrdersFailed;
                    // подписываемся на событие о неудачном снятии заявок
                    Trader.OrdersCancelFailed += OrdersFailed;

                    // подписываемся на событие о неудачной регистрации стоп-заявок
                    Trader.StopOrdersRegisterFailed += OrdersFailed;
                    // подписываемся на событие о неудачном снятии стоп-заявок
                    Trader.StopOrdersCancelFailed += OrdersFailed;

                    // устанавливаем поставщик маркет-данных
                    _securitiesWindow.SecurityPicker.MarketDataProvider = Trader;

                    ShowSecurities.IsEnabled         = ShowTrades.IsEnabled =
                        ShowMyTrades.IsEnabled       = ShowOrders.IsEnabled =
                            ShowPortfolios.IsEnabled = ShowStopOrders.IsEnabled = true;
                }

                Trader.Login    = Login.Text;
                Trader.Password = Password.Password;
                Trader.Address  = Address.SelectedAddress;

                // применить нужную версию SmartCOM
                Trader.Version = IsSmartCom3.IsChecked == true ? SmartComVersions.V3 : SmartComVersions.V2;

                // очищаем из текстового поля в целях безопасности
                //Password.Clear();

                Trader.Connect();
            }
            else
            {
                Trader.Disconnect();
            }
        }