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

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

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. Для вывода сделок и логов заявок нужно открыть окна при помощи кнопок Тики и Лог заявок соответственно. Для получения стакана нужно открыть окно инструментов, выбрать нужный инструмент и открыть стакан при помощи кнопки Стакан.. .