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

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

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

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

    C#
    // создаем шлюз
    Trader = new OandaTrader();
    .....
    Trader.Token = Token.Password.To<SecureString>();
    Trader.Server = IsDemo.IsChecked == true ? OandaServers.Practice : OandaServers.Real;
  2. Далее следует установить требуемые обработчики событий IConnector:

    C#
    Trader.Restored += () => this.GuiAsync(() =>
    {
        // update gui labes
        ChangeConnectStatus(true);
        MessageBox.Show(this, LocalizedStrings.Str2958);
    });
    
    // подписываемся на событие успешного соединения
    Trader.Connected += () =>
    {
        // устанавливаем флаг (соединение установлено)
        _isConnected = true;
    
        // обновляем пользовательский интерфейс
        this.GuiAsync(() => ChangeConnectStatus(true));
    };
    
    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.NewSecurity += security => _securitiesWindow.SecurityPicker.Securities.Add(security);
    Trader.NewMyTrade += trade => _myTradesWindow.TradeGrid.Trades.Add(trade);
    Trader.NewTrade += trade => _tradesWindow.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);
    
        // подписываемся на событие обновления портфеля
        Trader.RegisterPortfolio(portfolio);
    };
    Trader.NewPosition += position => _portfoliosWindow.PortfolioGrid.Positions.Add(position);
    
    
    // подписываемся на событие ошибки регистрации заявки
    Trader.OrderRegisterFailed += _ordersWindow.OrderGrid.AddRegistrationFail;
    
    // подписываемся на событие ошибки отмены заявки
    Trader.OrdersCancelFailed += OrdersFailed;
    
    // подписываемся на событие ошибки регистрации стоп-заявки
    Trader.StopOrderRegisterFailed += _stopOrdersWindow.OrderGrid.AddRegistrationFail;
    
    // подписываемся на событие ошибки отмены стоп-заявки
    Trader.StopOrdersCancelFailed += OrdersFailed;
  3. Далее необходимо выполнить подключение к серверу OANDA:

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

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

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

    C#
    private void Level1Click(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);
        }
    }
  7. Для регистрации заявок предусмотрена кнопка Новая заявка. Метод 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);
    }