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

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

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

Twime Sample
  1. В области определений переменных создаем экземпляр коннектора TwimeTrader.

    C#
    public TwimeTrader Trader = new TwimeTrader();
  2. Для корректной работы коннектор должен содержать адаптер рыночных данных, которые отсутствуют в протоколе TWIME. Поэтому в в конструкторе главного окна создается экземпляр пустого адаптера PassThroughMessageAdapter и добавляется к коннектору.

    C#
    public MainWindow()
    {
        ..................................................    
        var mdAdapter = new PlazaMessageAdapter(Trader.TransactionIdGenerator)
        {
            IsCGate = true,
        };
        mdAdapter.RemoveTransactionalSupport();
        Trader.Adapter.InnerAdapters.Add(mdAdapter);
    }
  3. Далее устанавливаем необходимые обработчики событий IConnector. Если соединение не установлено, то устанавливаем логин и адреса соединения:

    1. TransactionAddress;

    2. RecoveryAddress.

    И устанавливаем соединение.

    C#
    private void ConnectClick(object sender, RoutedEventArgs e)
    {
        if (!_isInitialized)
        {
            _isInitialized = true;
    
            Trader.Restored += () => this.GuiAsync(() =>
            {
                // обновляем метки GUI
                ChangeConnectStatus(true);
                MessageBox.Show(this, LocalizedStrings.Str2958);
            });
    
            Trader.Connected += () =>
            {
                this.GuiAsync(() => ChangeConnectStatus(true));
            };
    
            Trader.Disconnected += () => this.GuiAsync(() => ChangeConnectStatus(false));
    
            // подписываемся на событие ошибки соединения
            Trader.ConnectionError += error => this.GuiAsync(() =>
            {
                // обновляем метки GUI
                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.NewPortfolio += portfolio => _portfoliosWindow.PortfolioGrid.Portfolios.Add(portfolio);
            Trader.NewPosition += position => _portfoliosWindow.PortfolioGrid.Positions.Add(position);
             .................................................
            _securitiesWindow.SecurityPicker.MarketDataProvider = Trader;
            .................................................
        }
    
        switch (Trader.ConnectionState)
        {
            case ConnectionStates.Failed:
            case ConnectionStates.Disconnected:
                Trader.TransactionAddress = TransactionAddress.EndPoint;
                Trader.RecoveryAddress = RecoveryAddress.EndPoint;
                Trader.Login = Login.Text;
                Trader.PortfolioName = PortfolioName.Text;
    
                ((PlazaMessageAdapter)Trader.MarketDataAdapter).IsDemo = IsDemo.IsChecked == true;
    
                Trader.Connect();
                break;
            case ConnectionStates.Connected:
                Trader.Disconnect();
                break;
        }
    }