Для изменения размера нажмите или перетащите
Пример работы с ETradeTrader

В качестве примера работы с ETradeTrader рассмотрим приложение SampleETrade, показанное на рисунке ниже. Исходные коды примера лежат в дистрибутиве в папке Samples/ETrade.

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

    C#
    Trader = new ETradeTrader(IsSandbox, IsSandbox ? GetSandboxSecurities() : null)
    {
        ConsumerKey = ConsumerKey,
        ConsumerSecret = secret,
        LogLevel = LogLevels.Debug,
        DumpRestData = true
    };
  2. Далее следует установить требуемые обработчики событий IConnector:

    C#
    // подписываемся на событие успешного соединения
    Trader.Connected += () => this.GuiAsync(() =>OnConnectionChanged(true));
    
    // подписываемся на событие разрыва соединения
    Trader.ConnectionError += error => this.GuiAsync(() =>
    {
        OnConnectionChanged(Trader.IsConnected);
        MessageBox.Show(this, error.ToString(), "Ошибкасоединения");
    });
    
    Trader.Disconnected += () =>this.GuiAsync(() => OnConnectionChanged(false));
    
    Trader.Error += error =>this.GuiAsync(() => MessageBox.Show(this, error.ToString(), "Ошибкаобработкиданных"));
    
    Trader.NewSecurities += securities => this.GuiAsync(() => _securitiesWindow.AddSecurities(securities));
    Trader.NewOrders += orders => this.GuiAsync(() => _ordersWindow.Orders.AddRange(orders));
    Trader.NewStopOrders += orders => this.GuiAsync(() => _stopOrdersWindow.Orders.AddRange(orders));
    Trader.NewPortfolios += portfolios => this.GuiAsync(() =>
    {
        // регистрирует портфели на обновление данных
        portfolios.ForEach(Trader.RegisterPortfolio);
    
        _portfoliosWindow.Portfolios.AddRange(portfolios);
    });
    Trader.NewPositions += positions => this.GuiAsync(() => _positionsWindow.Positions.AddRange(positions));
    
    // подписываемся на событие о неудачной регистрации заявок
    Trader.OrdersRegisterFailed += OrdersFailed;
    // подписываемся на событие о неудачном снятии заявок
    Trader.OrdersCancelFailed += OrdersFailed;
    
    // подписываемся на событие о неудачной регистрации стоп-заявок
    Trader.StopOrdersRegisterFailed += OrdersFailed;
    // подписываемся на событие о неудачном снятии стоп-заявок
    Trader.StopOrdersCancelFailed += OrdersFailed;
  3. Далее необходимо выполнить авторизацию на сервере E*TRADE:

    C#
    Trader.Connect();

    Если в текущий день авторизация уже проводилась, то однократного вызова Connect достаточно. В противном случае ETradeTrader автоматически запустит полную процедуру авторизации, в рамках которой пользователю будет предложено ввести логин/пароль на сайте E*TRADE, после чего пользователь получит код верификации. Код верификации необходимо записать в свойство ETradeTraderVerificationCode, после чего повторно стартовать процедуру авторизации:

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

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

    etrade sample securities
    C#
    void SearchTextPreviewKeyUp(object sender, KeyEventArgs e)
    {
        if (e.Key != Key.Enter)
            return;
    
        var text = SearchText.Text.Trim();
    
        if (text.IsEmpty())
            return;
        MainWindow.Instance.Trader.LookupSecurities(new Security { Name = text });
    }
  6. Для получения обновлений по портфелям используется метод RegisterPortfolio:

    C#
    Trader.NewPortfolios += portfolios =>
    {
        // регистрирует портфели на обновление данных
        portfolios.ForEach(Trader.RegisterPortfolio);
    
        _portfoliosWindow.Portfolios.AddRange(portfolios);
    };
  7. Для регистрации заявок предусмотрена кнопка «Новая заявка». Метод RegisterOrder(Order) отправляет заявку на сервер:

    C#
    private void SendClick(object sender, RoutedEventArgs e)
    {
        var order = new Order
        {
            Type = IsMarket.IsChecked == true ? OrderTypes.Market :OrderTypes.Limit,
            Portfolio = Portfolio.SelectedPortfolio,
            Volume = Volume.Text.To<decimal>(),
            Price = Price.Text.To<decimal>(),
            Security = Security,
            Direction = IsBuy.IsChecked == true ? OrderDirections.Buy :OrderDirections.Sell,
        };
    
        MainWindow.Instance.Trader.RegisterOrder(order);
        DialogResult = true;
    }