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

            _logManager.Sources.Add(_trader);

            // подписываемся на ошибку обработки данных (транзакций и маркет)
            _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 =>
            {
                // начинаем получать текущие сделки (для построения свечек в реальном времени)

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

            Security.SecurityProvider = new FilterableSecurityProvider(_trader);

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

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

            _trader.ConnectionError += error =>
            {
                this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2959));
            };

            _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.Restored += () => this.GuiAsync(() =>
                        {
                            // разблокируем кнопку Экспорт (соединение было восстановлено)
                            ChangeConnectStatus(true);
                            MessageBox.Show(this, LocalizedStrings.Str2958);
                        });

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

                            // запускаем подписку на новости
                            Trader.RegisterNews();
                        };

                        // подписываемся на событие успешного отключения
                        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, msg, error) =>
                                                               this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2956Params.Put(msg.DataType, security)));

                        Trader.NewSecurity  += security => _securitiesWindow.SecurityPicker.Securities.Add(security);
                        Trader.NewTrade     += trade => _tradesWindow.TradeGrid.Trades.Add(trade);
                        Trader.NewMyTrade   += trade => _myTradesWindow.TradeGrid.Trades.Add(trade);
                        Trader.NewOrder     += order => _ordersWindow.OrderGrid.Orders.Add(order);
                        Trader.NewStopOrder += order => _stopOrdersWindow.OrderGrid.Orders.Add(order);
                        Trader.NewPortfolio += portfolio =>
                        {
                            Trader.RegisterPortfolio(portfolio);
                            _portfoliosWindow.PortfolioGrid.Portfolios.Add(portfolio);
                        };
                        Trader.NewPosition += position => _portfoliosWindow.PortfolioGrid.Positions.Add(position);

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

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

                        Trader.MassOrderCancelFailed += (transId, error) =>
                                                        this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str716));

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

                        // set news provider
                        _newsWindow.NewsPanel.NewsProvider = 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.Disconnect();
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(this, ex.Message, LocalizedStrings.Str152);
            }
        }