Для изменения размера нажмите или перетащите

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

Пример работы с InteractiveBrokersTrader демонстрирует приложение SampleIB, показанное на рисунке ниже. Исходные коды примера лежат в дистрибутиве в папке Samples/InteractiveBrokers.

ib main window
  1. В самом начале необходимо создать экземпляр класса шлюза InteractiveBrokersTrader:

    C#
    Trader = new InteractiveBrokersTrader {
        Address = Address.Text.To<IPEndPoint>(),
    };
  2. Далее следует установить требуемые обработчики событий IConnector:

    C#
    // подписываемся на событие успешного соединения
    Trader.Connected += () =>
    {
        this.GuiAsync(() => ChangeConnectStatus(true));
        // запускаем подписку на новости
        Trader.RegisterNews();
    };
    
    // подписываемся на событие разрыва соединения
    Trader.ConnectionError += error => this.GuiAsync(() =>
    {
        ChangeConnectStatus(false);
        MessageBox.Show(this, error.ToString(), "Ошибка соединения");
    });
    
    // подписываемся на событие успешного отключения
    Trader.Disconnected += () => this.GuiAsync(() => ChangeConnectStatus(false));
    
    Trader.Error += error => this.GuiAsync(() => MessageBox.Show(this, error.ToString(), "Ошибка обработки данных"));
    Trader.NewSecurity += security => _securitiesWindow.SecurityPicker.Securities.Add(security);
    Trader.NewTrade += trade => _tradesWindow.TradeGrid.Trades.Add(trade);
    Trader.NewOrder += order => _ordersWindow.OrderGrid.Orders.Add(order);
    Trader.NewMyTrade += trade => _myTradesWindow.TradeGrid.Trades.Add(trade);
    Trader.NewStopOrder += order => _conditionOrdersWindow.OrderGrid.Orders.Add(order);
    Trader.NewCandles += _securitiesWindow.AddHistoricalCandles;
    
    Trader.NewPortfolio += portfolio =>
    {
        _portfoliosWindow.PortfolioGrid.Portfolios.Add(portfolio);
        Trader.RegisterPortfolio(portfolio);
    };
    Trader.NewPosition += position => _portfoliosWindow.PortfolioGrid.Positions.Add(position);
    
    // подписываемся на событие о неудачной регистрации заявок
    Trader.OrdersRegisterFailed += OrdersFailed;
    
    // подписываемся на событие о неудачном снятии заявок
    Trader.OrdersCancelFailed += OrdersFailed;
  3. Далее необходимо выполнить подключение к серверу Interactive Brokers:

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

  5. Поиск инструментов (подробнее):

    ib securities
    C#
    private void FindClick(object sender, RoutedEventArgs e)
    {
        var wnd = new SecurityLookupWindow { Criteria = new Security { Code = "AAPL", Type = SecurityTypes.Stock } };
    
        if (!wnd.ShowModal(this))
            return;
    
        Trader.LookupSecurities(wnd.Criteria);
    }

    Если инструментов с заданными критериями не будет найдено, то вернется ошибка через событие Error:

    ib security not found
  6. Для получения обновлений по выбранному инструменту необходимо вызвать метод RegisterSecurity(Security):

    C#
    Trader.RegisterSecurity(SelectedSecurity);
  7. Для запроса обновлений по стаканам необходимо воспользоваться методом RegisterMarketDepth(Security):

    C#
    private void DepthClick(object sender, RoutedEventArgs e)
    {
        if (Depth.IsChecked == false)
        {
            // create order book window
            var wnd = new QuotesWindow { Title = SelectedSecurity.Id + " " + LocalizedStrings.MarketDepth };
            _quotesWindows.Add(SelectedSecurity, wnd);
    
            // subscribe on order book flow
            Trader.RegisterMarketDepth(SelectedSecurity);
    
            wnd.Show();
        }
        else
        {
            Trader.UnRegisterMarketDepth(SelectedSecurity);
    
            var wnd = _quotesWindows[SelectedSecurity];
            _quotesWindows.Remove(SelectedSecurity);
    
            wnd.Close();
        }
    
        if (!_initialized)
        {
            TraderOnMarketDepthChanged(Trader.GetMarketDepth(SecurityPicker.SelectedSecurity));
            Trader.MarketDepthChanged += TraderOnMarketDepthChanged;
            _initialized = true;
        }
    }
    ib market depth
  8. Для регистрации заявок предусмотрена кнопка «Новая заявка». Метод RegisterOrder(Order) отправляет заявку на сервер:

    C#
    private void NewOrderClick(object sender, RoutedEventArgs e)
    {
        var newOrder = new OrderWindow
        {
            Order = new Order { Security = SecurityPicker.SelectedSecurity },
            SecurityProvider = Trader,
            MarketDataProvider = Trader,
            Portfolios = new PortfolioDataSource(Trader),
        };
    
        if (newOrder.ShowModal(this))
            Trader.RegisterOrder(newOrder.Order);
    }