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

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

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

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

    C#
    // подписываемся на событие успешного соединения
    Trader.Connected += () =>
    {
        // возводим флаг, что соединение установлено
        _isConnected = true;
    
        // разблокируем кнопку Экспорт
        this.GuiAsync(() => ChangeConnectStatus(true));
    };
    
    // подписываемся на событие разрыва соединения
    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.NewSecurities += securities => this.GuiAsync(() => _securitiesWindow.AddSecurities(securities));
    // событие получения новых собственных сделок
    Trader.NewMyTrades += trades => this.GuiAsync(() => _myTradesWindow.Trades.AddRange(trades));
    // событие получения новых сделок по подписанным инструментам
    Trader.NewTrades += trades => this.GuiAsync(() => _tradesWindow.Trades.AddRange(trades));
    // событие получения новых заявок
    Trader.NewOrders += orders => this.GuiAsync(() => _ordersWindow.Orders.AddRange(orders));
    // событие получения новых стоп-заявок
    Trader.NewStopOrders += orders => this.GuiAsync(() => _stopOrdersWindow.Orders.AddRange(orders));
    // событие получения новых портфелей
    Trader.NewPortfolios += portfolios =>
    {
        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. Далее необходимо выполнить подключение:

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

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

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

    C#
    private void BidAsk_Click(object sender, RoutedEventArgs e)
    {
        var security = SelectedSecurity;
        var trader = MainWindow.Instance.Trader;
    
        if (_bidAskSecurities.Contains(security))
        {
            // останавливаем обновления по инструменту
            trader.UnRegisterSecurity(security);
            trader.UnRegisterTrades(security);
    
            _bidAskSecurities.Remove(security);
        }
        else
        {
            // начинаем получать обновления по инструменту
            trader.RegisterSecurity(security);
            trader.RegisterTrades(security);
    
            _bidAskSecurities.Add(security);
        }
    }
  7. Для запроса обновлений по стаканам необходимо воспользоваться методом RegisterMarketDepth(Security):

    C#
    private void Quotes_Click(object sender, RoutedEventArgs e)
    {
        var window = _quotesWindows.SafeAdd(SelectedSecurity, security =>
        {
            // начинаем получать котировки стакана
            MainWindow.Instance.Trader.RegisterMarketDepth(security);
    
            // создаем окно со стаканом
            var wnd = new QuotesWindow { Title = security.Code + " котировки" };
            wnd.MakeHideable();
            return wnd;
        });
    
        if (window.Visibility == Visibility.Visible)
            window.Hide();
        else
            window.Show();
    }
  8. Для получения обновлений по портфелям используется метод RegisterPortfolio(Portfolio):

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

    C#
    private void Send_Click(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;
    }