Ejemplo n.º 1
0
        private void ConnectClick(object sender, RoutedEventArgs e)
        {
            // создаем подключение
            _trader = new AlfaTrader {
                LogLevel = LogLevels.Debug
            };

            _logManager.Sources.Add(_trader);

            // подписываемся на ошибку обработки данных (транзакций и маркет)
            _trader.ProcessDataError += 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 =>
            {
                this.GuiAsync(() => _securitiesSource.AddRange(securities));

                // начинаем получать текущие сделки (для построения свечек в реальном времени)

                // альфа не выдержит нагрузки получения сделок по всем инструментам
                // нужно подписываться только на те, которые необходимы
                // securities.ForEach(_trader.RegisterTrades);
            };

            _trader.NewPortfolios += portfolios => portfolios.ForEach(_trader.RegisterPortfolio);

            _trader.Connected += () =>
            {
                _trader.StartExport();
                this.GuiAsync(() => ConnectBtn.IsEnabled = false);
            };

            _trader.Connect();
        }
Ejemplo n.º 2
0
        private void ConnectClick(object sender, RoutedEventArgs e)
        {
            try
            {
                if (!_isConnected)
                {
                    if (Trader == null)
                    {
                        // создаем подключение
                        Trader = new AlfaTrader {
                            LogLevel = LogLevels.Debug
                        };

                        _logManager.Sources.Add(Trader);

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

                        // подписываемся на событие успешного соединения
                        Trader.Connected += () =>
                        {
                            this.GuiAsync(() => ChangeConnectStatus(true));

                            Trader.StartExport();
                        };

                        // подписываемся на событие запуска экспорта, и запускаем подписку на новости
                        Trader.ExportStarted += Trader.RegisterNews;

                        // подписываемся на событие успешного отключения
                        Trader.Disconnected += () => this.GuiAsync(() => ChangeConnectStatus(false));

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

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

                        // подписываемся на ошибку обработки данных (транзакций и маркет)
                        Trader.ProcessDataError += 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.NewTrades     += trades => _tradesWindow.TradeGrid.Trades.AddRange(trades);
                        Trader.NewMyTrades   += trades => _myTradesWindow.TradeGrid.Trades.AddRange(trades);
                        Trader.NewOrders     += orders => _ordersWindow.OrderGrid.Orders.AddRange(orders);
                        Trader.NewStopOrders += orders => _stopOrdersWindow.OrderGrid.Orders.AddRange(orders);
                        Trader.NewPortfolios += portfolios =>
                        {
                            portfolios.ForEach(Trader.RegisterPortfolio);
                            _portfoliosWindow.PortfolioGrid.Portfolios.AddRange(portfolios);
                        };
                        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         = ShowNews.IsEnabled =
                            ShowMyTrades.IsEnabled       = ShowOrders.IsEnabled = ShowStopOrders.IsEnabled =
                                ShowPortfolios.IsEnabled = true;

                        Trader.NewNews += news => _newsWindow.NewsPanel.NewsGrid.News.Add(news);
                    }

                    Trader.Login    = TextBoxLogin.Text;
                    Trader.Password = PasswordBox.Password;
                    Trader.Connect();
                }
                else
                {
                    Trader.UnRegisterNews();
                    Trader.StopExport();

                    Trader.Disconnect();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, LocalizedStrings.Str152);
            }
        }