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

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

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

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

При работе с примером с подключением к Sterling Trader Pro Visual Studio нужно запускать от имени администратора!

  1. В самом начале создаем экземпляр класса шлюза SterlingTrader:

    C#
    // создаем коннектор
    Trader = new SterlingTrader { LogLevel = LogLevels.Debug };
  2. Далее устанавливаем необходимые обработчики событий IConnector:

    C#
    // подписываемся на событие успешного соединения
    Trader.Connected += () =>
    {
        this.GuiAsync(() => OnConnectionChanged(true));
        AddSecurities();
        Trader.RegisterNews();
    };
    
    
    // подписываемся на событие ошибки соединения
    Trader.ConnectionError += error => this.GuiAsync(() =>
    {
        OnConnectionChanged(Trader.ConnectionState == ConnectionStates.Connected);
        MessageBox.Show(this, error.ToString(), "Ошибка соединения");
    });
    
    Trader.Disconnected += () => this.GuiAsync(() => OnConnectionChanged(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.NewSecurity += security => _securitiesWindow.SecurityPicker.Securities.Add(security);
    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 =>
    {
        _portfoliosWindow.PortfolioGrid.Portfolios.Add(portfolio);
    
        // subscribe on portfolio updates
        Trader.RegisterPortfolio(portfolio);
    };
    
    
    // подписываемся на событие новой позиции
    Trader.NewPosition += position => _portfoliosWindow.PortfolioGrid.Positions.Add(position);
    
    // подписываемся на событие ошибки регистрации заявки
    Trader.OrdersRegisterFailed += OrdersFailed;
    
    // подписываемся на событие ошибки снятия заявки
    Trader.OrdersCancelFailed += OrdersFailed;
    
    // подписываемся на событие ошибки регистрации стоп-заявки
    Trader.StopOrdersRegisterFailed += OrdersFailed;
    
    // подписываемся на событие ошибки снятия стоп-заявки
    Trader.StopOrdersCancelFailed += OrdersFailed;
    
    // подписываемся на событие получения новости
    Trader.NewNews += news =>  _newsWindow.NewsPanel.NewsGrid.News.Add(news);
  3. Далее необходимо выполнить подключение к серверу Sterling:

    C#
    Trader.Connect();
  4. При успешном подключении можно ожидать срабатывания события IPortfolioProviderNewPortfolio. В обработчике этого события подписываемся на изменения портфелей IConnectorPortfolioChanged при помощи метода RegisterPortfolio(Portfolio).

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

    Sterling securities
    C#
    private void FindClick(object sender, RoutedEventArgs e)
    {
        var wnd = new SecurityLookupWindow { Criteria = new Security { Code = "AAPL" } };
    
        if (!wnd.ShowModal(this))
            return;
    
        MainWindow.Instance.Trader.LookupSecurities(wnd.Criteria);
    }
  6. Для получения сделок по выбранному инструменту необходимо вызвать метод RegisterTrades(Security):

    C#
    private void TradesClick(object sender, RoutedEventArgs e)
    {
        TryInitialize();
    
        var window = _tradesWindows.SafeAdd(SelectedSecurity, security =>
        {
            // create tick trades window
            var wnd = new TradesWindow { Title = security.Code + " сделки" };
    
            // subscribe on tick trades flow
            MainWindow.Instance.Trader.RegisterTrades(security);
    
            wnd.MakeHideable();
            return wnd;
        });
    
        if (window.Visibility == Visibility.Visible)
            window.Hide();
        else
            window.Show();
    }

    Сделки будут приходить в событии IConnectorNewTrade.

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

    C#
    private void DepthClick(object sender, RoutedEventArgs e)
    {
        TryInitialize();
    
        var trader = MainWindow.Instance.Trader;
    
        var window = _quotesWindows.SafeAdd(SelectedSecurity, security =>
        {
            // subscribe on order book flow
            trader.RegisterMarketDepth(security);
    
            // create order book window
            var wnd = new QuotesWindow { Title = security.Id + " " + LocalizedStrings.MarketDepth };
            wnd.MakeHideable();
            return wnd;
        });
    
        if (window.Visibility == Visibility.Visible)
            window.Hide();
        else
            window.Show();
    }

    Стаканы появляются в событии IConnectorMarketDepthChanged.

  8. Для регистрации заявок предусмотрена кнопка Новая заявка... . Метод RegisterOrder(Order) отправляет заявку на сервер:

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