Click or drag to resize

Getting started

The application SampleITCH shows an example of working with ItchTrader as shown in the figure below. The example source code is in the Samples/ITCH folder of the installation package.

ITCHSettings
  1. В конструкторе главного окна: 1) создаем экземпляр коннектора и, чтобы получать стаканы, устанавливаем для свойства CreateDepthFromOrdersLog значение true, 2) передаем в элемент Settings (PropertyGridEx) адаптер рыночных данных коннектора. Настройка свойств адаптера проводится в графическом интерфейсе см. рисунок выше.

    C#
    public MainWindow()
    {
        ..................................................
    
        _logManager.Listeners.Add(new FileLogListener { LogDirectory = "StockSharp_ITCH" });
        _logManager.Listeners.Add(new GuiLogListener(Monitor));
    
        // create connector
        Trader = new ItchTrader
        {
            LogLevel = LogLevels.Debug,
            CreateDepthFromOrdersLog = true
        };
    
        _logManager.Sources.Add(Trader);
    
        Settings.SelectedObject = Trader.MarketDataAdapter;
    }
  2. Далее устанавливаем необходимые обработчики событий IConnector. В обработчике события LookupSecuritiesResult подписываемся на получение лога заявок. Потоки инструментов, заявок, сделок и лога заявок подключаем к соответсвующим графическим элементам. Устанавливаем соединение.

    C#
    private void ConnectClick(object sender, RoutedEventArgs e)
    {
        if (!_isConnected)
        {
            .....................
    
            if (!_initialized)
            {
                _initialized = true;
    
                // subscribe on connection successfully event
                Trader.Connected += () =>
                {
                    // set flag (connection is established)
                    _isConnected = true;
    
                    // update gui labes
                    this.GuiAsync(() => ChangeConnectStatus(true));
                };
                Trader.Disconnected += () => this.GuiAsync(() => ChangeConnectStatus(false));
    
                // subscribe on connection error event
                Trader.ConnectionError += error => this.GuiAsync(() =>
                {
                    // update gui labes
                    ChangeConnectStatus(false);
    
                    MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2959);    
                });
    
                // subscribe on error event
                Trader.Error += error =>
                    this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2955));
    
                // subscribe on error of market data subscription event
                Trader.MarketDataSubscriptionFailed += (security, type, error) =>
                    this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2956Params.Put(type, security)));
    
                Trader.NewSecurities += _securitiesWindow.SecurityPicker.Securities.AddRange;
                Trader.NewTrades += _tradesWindow.TradeGrid.Trades.AddRange;
                Trader.NewOrderLogItems += _orderLogWindow.OrderLogGrid.LogItems.AddRange;
    
                var subscribed = false;
                //if (AllDepths.IsChecked == true)
                {
                    Trader.LookupSecuritiesResult += securities =>
                    {
                        if (subscribed)
                            return;
    
                        subscribed = true;
    
                        Trader.SendInMessage(new MarketDataMessage
                        {
                            IsSubscribe = true,
                            DataType = MarketDataTypes.OrderLog,
                            TransactionId = Trader.TransactionIdGenerator.GetNextId(),
                        });
                    };    
                }
    
                // set market data provider
                _securitiesWindow.SecurityPicker.MarketDataProvider = Trader;
    
                ShowSecurities.IsEnabled = ShowTrades.IsEnabled = ShowOrdersLog.IsEnabled = true;
            }
    
            Trader.Connect();
        }
        else
        {
            Trader.Disconnect();
        }
    }
  3. Для вывода сделок и логов заявок нужно открыть окна при помощи кнопок Тики и Лог заявок соответственно. Для получения стакана нужно открыть окно инструментов, выбрать нужный инструмент и открыть стакан при помощи кнопки Стакан.