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

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

Iq Feed Sample
  1. В самом начале необходимо создать экземпляр класса шлюза IQFeedTrader:

    C#
    // создаем шлюз
    Trader = new IQFeedTrader();
    
    //устанавливаем настройки для подключения
    ((ITraderSettingsPanel)IqFeedSettings).Save(Trader);
  2. Далее следует установить требуемые обработчики событий IQFeedTrader:

    C#
    // подписываемся на событие успешного соединения
    Trader.Connected += () =>
    {
        // возводим флаг, что соединение установлено
        _isConnected = true;
        Trader.RegisterNews();
    
        // разблокируем кнопки
        this.GuiAsync(() => ChangeConnectStatus(true));
    };
    
    Trader.Disconnected += () => this.GuiAsync(() => ChangeConnectStatus(false));
    // подписываемся на событие разрыва соединения
    Trader.ConnectionError += error => this.GuiAsync(() =>
    {
        // заблокируем кнопки так как соединение было потеряно)
        ChangeConnectStatus(false);
    
        MessageBox.Show(this, error.ToString(), "Ошибка соединения");
    });
    
    Trader.Error += error => this.GuiAsync(() => MessageBox.Show(this, error.ToString(), "Ошибка обработки данных"));
    
    Trader.NewSecurities += securities => this.GuiAsync(() => _securitiesWindow.AddSecurities(securities));
    
    Trader.NewTrades += trades => this.GuiAsync(() => _tradesWindow.Trades.AddRange(trades));
    
    Trader.NewNews += news => this.GuiAsync(() => _newsWindow.News.Add(news));
  3. Далее необходимо выполнить подключение:

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

    C#
    Trader.RegisterNews();

    После этого можно ожидать срабатывания событий:

    1. SecuritiesChanged – изменение инструмента (последней цены, цены спроса/предложения и т.д.).
    2. MarketDepthsChanged – изменение стакана, запрошенного с помощью RegisterMarketDepth(Security).
    3. NewTrades – новые тики по подписанным с помощью RegisterTrades(Security) инструментам.
    4. NewNews – поступление новости.
  5. Поиск инструментов:

    IQFeed Find Security
    C#
    var criteria = new Security
    {
        Type = (SecurityTypes)SecType.SelectedValue,
        Code = SecCode.Text,
    };
    
    MainWindow.Instance.Trader.LookupSecurities(criteria);
  6. Для получения обновлений по выбранному инструменту и тиков необходимо воспользоваться методами RegisterSecurity(Security) и RegisterTrades(Security) соответственно:

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

    C#
    private void QuotesClick(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. Для получения истории сделок за указанную дату необходимо воспользоваться методом IQFeedTraderGetHistoricalLevel1(SecurityId, DateTimeOffset, DateTimeOffset, Boolean):

    IQFeed History Trades
    C#
    Trades.Clear();
    Trades.AddRange(MainWindow.Instance.Trader.GetTrades(SecurityPicker.SelectedSecurity, (DateTime)DatePicker.SelectedDate));
  9. Для получения истории свечей по инструменту за указанный период необходимо воспользоваться методом IQFeedTraderGetHistoricalCandles(Security, Type, Object, Int64, Boolean):

    IQFeed History Candles
    C#
    Candles.Clear();
    Candles.AddRange(MainWindow.Instance.Trader.GetCandles(SecurityPicker.SelectedSecurity, (TimeSpan)TimeFramePicker.SelectedValue, (DateTimeOffset)DateFromPicker.SelectedDate, (DateTimeOffset)DateToPicker.SelectedDate));