Для изменения размера нажмите или перетащите
Пример использования

Пример работы с AlfaTrader демонстрирует приложение SampleAlfa, показанное на рисунке ниже.

Alfa Connector Test

Примечание Примечание

Исходный код данного примера доступен в дистрибутиве в каталоге Samples/AlfaDirect.

Внимание Внимание

Проверьте, что терминал Альфа-Директ настроен корректно для работы с AlfaTrader - см. Настройка терминала.

Пример работы с AlfaTrader

  1. В самом начале необходимо создать экземпляр коннектора AlfaTrader:

    C#
     // создаем подключение и указываем логин и пароль
    Trader = new AlfaTrader { LogLevel = LogLevels.Debug };
    Trader.Login = TextBoxLogin.Text;
    Trader.Password = PasswordBox.Password;
  2. Создаем обработчики событий IConnector:

    C#
    // подписываемся на событие успешного соединения
    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, 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);
  3. Выполняем подключение:

    C#
    Trader.Connect();
  4. При успешном подключении можно ожидать появления событий:

  5. Для получения обновлений по выбранному инструменту и тиков необходимо воспользоваться методами RegisterSecurity(Security) и RegisterTrades(Security) соответственно:

    C#
    private void QuotesClick(object sender, RoutedEventArgs e)
    {
      var security = SecurityPicker.SelectedSecurity;
      var trader = MainWindow.Instance.Trader;
    
      if (trader.RegisteredSecurities.Contains(security))
          trader.UnRegisterSecurity(security);
      else
          trader.RegisterSecurity(security);
    }
    C#
    private void TradesClick(object sender, RoutedEventArgs e)
    {
      var security = SecurityPicker.SelectedSecurity;
      var trader = MainWindow.Instance.Trader;
    
      if (trader.RegisteredTrades.Contains(security))
          trader.UnRegisterTrades(security);
      else
          trader.RegisterTrades(security);
    }
  6. Для запроса обновлений по стаканам необходимо воспользоваться методом RegisterMarketDepth(Security):

    C#
    private void DepthClick(object sender, RoutedEventArgs e)
    {
      var trader = MainWindow.Instance.Trader;
    
    var window = _quotesWindows.SafeAdd(SecurityPicker.SelectedSecurity, security =>
     {
      // начинаем получать котировки стакана
      trader.RegisterMarketDepth(security);
    
      // создаем окно со стаканом
      var wnd = new QuotesWindow { Title = security.Id + " " + LocalizedStrings.MarketDepth };
      wnd.MakeHideable();
      return wnd;
     });
    
     if (window.Visibility == Visibility.Visible)
        window.Hide();
     else
        window.Show();
    
     if (!_initialized)
     {
       TraderOnMarketDepthsChanged(new[] { trader.GetMarketDepth(SecurityPicker.SelectedSecurity) });
       trader.MarketDepthsChanged += TraderOnMarketDepthsChanged;
       _initialized = true;
      }
    }
  7. Для регистрации заявок используется метод RegisterOrder(Order):

    C#
    private void NewOrderClick(object sender, RoutedEventArgs e)
    {
      var newOrder = new OrderWindow
      {
        Order = new Order { Security = SecurityPicker.SelectedSecurity },
        Connector = MainWindow.Instance.Trader,
      };
    
      if (newOrder.ShowModal(this))
          MainWindow.Instance.Trader.RegisterOrder(newOrder.Order);
    }
См. также