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

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

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

CQGTrader Sample
  1. В самом начале создаем экземпляр класса шлюза CqgContinuumTrader или CqgComTrader в зависимости от используемого подключения:

    C#
    // создаем коннектор
    //  при работе с сервером
    Connector = new.CqgContinuumTrader { LogLevel = LogLevels.Debug };
    ...
    // при работе с теминалом
    Connector = new.CqgComTrader { LogLevel = LogLevels.Debug };
  2. Далее устанавливаем необходимые обработчики событий IConnector:

    C#
    // подписываемся на событие успешного соединения
    Connector.Connected += () =>
    {
        this.GuiAsync(() => OnConnectionChanged(true));
    };
    // подписываемся на событие ошибки соединения
    Connector.ConnectionError += error => this.GuiAsync(() =>
    {
        OnConnectionChanged(Connector.ConnectionState == ConnectionStates.Connected);
        MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2959);
    });
    
    Connector.Disconnected += () => this.GuiAsync(() => OnConnectionChanged(false));
    
    // подписываемся на событие ошибки
    Connector.Error += error =>
        this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2955));
    
    // подписываемся на событие ошибки при подписке на рыночные данные
    Connector.MarketDataSubscriptionFailed += (security, msg, error) =>
        this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str2956Params.Put(msg.DataType, security)));
    
    Connector.NewSecurity += security => _securitiesWindow.SecurityPicker.Securities.Add(security);
    Connector.NewMyTrade += trade => _myTradesWindow.TradeGrid.Trades.Add(trade);
    Connector.NewTrade += trade => _tradesWindow.TradeGrid.Trades.Add(trade);
    Connector.NewOrder += order => _ordersWindow.OrderGrid.Orders.Add(order);
    Connector.NewStopOrder += order => _stopOrdersWindow.OrderGrid.Orders.Add(order);
    Connector.NewPortfolio += portfolio =>
    {
        _portfoliosWindow.PortfolioGrid.Portfolios.Add(portfolio);
        // подписываемся на событие обновления портфелей
        Connector.RegisterPortfolio(portfolio);
    };
    Connector.NewPosition += position => _portfoliosWindow.PortfolioGrid.Positions.Add(position);
    
    // подписываемся на событие ошибки регистрации заявки
    Connector.OrderRegisterFailed += _ordersWindow.OrderGrid.AddRegistrationFail;
    
    // подписываемся на событие ошибки отмены заявки
    Connector.OrderCancelFailed += OrderFailed;
    
    // подписываемся на событие ошибки регистрации стоп-заявки
    Connector.StopOrderRegisterFailed += _stopOrdersWindow.OrderGrid.AddRegistrationFail;
    
    // подписываемся на событие ошибки отмены стоп-заявки
    Connector.StopOrderCancelFailed += OrderFailed;
    
    Connector.MassOrderCancelFailed += (transId, error) =>
        this.GuiAsync(() => MessageBox.Show(this, error.ToString(), LocalizedStrings.Str716));
  3. Далее необходимо выполнить подключение к серверу CQG:

    C#
    Connector.Connect();
  4. При успешном подключении можно ожидать срабатывания события IPortfolioProviderNewPortfolio. В обработчике этого события подписываемся на изменения портфелей IConnectorPortfolioChanged при помощи метода RegisterPortfolio(Portfolio).

  5. Для регистрации заявок предусмотрена кнопка Новая заявка... . Метод RegisterOrder(Order) отправляет заявку на сервер:

    C#
    private void NewOrderClick(object sender, RoutedEventArgs e)
    {
        var newOrder = new OrderWindow
        {
            Order = new Order { Security = SecurityPicker.SelectedSecurity },
            SecurityProvider = Connector,
            MarketDataProvider = Connector,
            Portfolios = new PortfolioDataSource(Connector)
        };
    
        if (newOrder.ShowModal(this))
            Connector.RegisterOrder(newOrder.Order);
    }