Interactive Brokers API получение рыночных данных

Общие вопросы

Одной из наиболее распространенных задач при использовании API является запрос рыночных данных в реальном времени. В этом уроке мы обсудим различные способы запроса данных из API и рассмотрим простейший код программы на Python, который может запрашивать/получать данные в реальном времени.
Для справки: соответствующие разделы справочного руководства по API можно найти по адресу: http://interactivebrokers.github.io/tws-api/market_data.html
Существует несколько функций API, обеспечивающих потоковое обновление рыночных данных:
reqMktData: Предоставляет обновления несколько раз в секунду.
reqRealTimeBars: предоставляет бары OHLC для каждого 5-секундного периода.
reqHistoricalData (когда для параметра «keepUpToDate» установлено значение «Истина»): Предоставляет бары и обновления незавершенных баров
reqTickByTickData: Предоставляет потоковые тиковые данные для каждой сделки или изменения котировок.
Для каждой функции сначала должен быть определен объект контракта, который однозначно определяет отдельный финансовый инструмент. Примеры со множественным определением контрактов можно найти в справочном руководстве по API по адресу:http://interactivebrokers.github.io/tws-api/contracts.html

reqMktData

Наиболее часто используемой функцией для потоковой передачи обновлений рыночных данных является функция reqMktData. Она имеет наименьшее количество ограничений на быстрое выполнение запросов для многих тикеров и имеет наибольшее количество вариантов типов возвращаемых данных. Каждый сеанс TWS может получать не менее 100 потоковых котировок для тикеров в списках наблюдения TWS и API.
Данные, возвращенные из reqMktData, будут соответствовать соответствующему полю тикера, который будет отображаться в списке наблюдения TWS.
При использовании функции reqMktData доступно четыре «режима рыночных данных»:
  1. Прямая трансляция (по умолчанию)
  2. Замороженный (обычно используется для цен покупки/продажи после закрытия рынка)
  3. С задержкой (если имя пользователя не имеет подписки на рыночные данные в реальном времени)
  4. Замедленная заморозка (сочетание типов 2 и 3)
Дополнительная информация в справочном руководстве по API по адресу: http://interactivebrokers.github.io/tws-api/market_data_type.html
Чтобы получать потоковые данные в клиенте API, программа должна иметь основные части, описанные в предыдущем докладе, а именно класс, производный от EClient и EWrapper, переопределенные обратные вызовы EWrapper, вызов connect() и цикл run().
Данные в реальном времени, будь то из API или с торговой платформы IBKR, требуют, чтобы подписка на рыночные данные была включена для инструмента в разделе «Управление счетом». Некоторые данные форекс, облигаций и CFD бесплатны и включены по умолчанию, но другие подписки имеют связанные сборы, и поэтому для добавления подписок требуется финансируемый реальный счет. Чтобы получать исторические данные о свечах для инструмента из API, необходимо сначала иметь разрешения на оперативные данные.
Первым шагом является создание объекта Contract, который однозначно идентифицирует финансовый инструмент. Это было показано в предыдущем примере, в котором демонстрировалась функция reqContractDetails.

Contract Class

Класс Contract API можно использовать для определения любого торгуемого продукта IBKR, а также таких инструментов, как индексы. Затем этот же объект контракта можно использовать для запроса исторических данных о свечах или для размещения ордера. Существует несколько способов определения любого финансового инструмента в объекте Contract с использованием различных комбинаций параметров. Комбинацию или спред также можно определить с помощью одного объекта контракта API. Примеры для всех типов инструментов есть в документации API по адресу:http://interactivebrokers.github.io/tws-api/contracts.html
Отличный способ найти поля для определенного инструмента, который уже находится в списке наблюдения TWS, — щелкнуть инструмент правой кнопкой мыши и выбрать «Информация о финансовом инструменте» -> «Описание» (Financial Instrument Info -> Description). Поля, отображаемые в окне описания финансового инструмента TWS, аналогичны полям, используемым в API.

from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.contract import Contract
from ibapi.ticktype import TickTypeEnum


class TestApp(EWrapper, EClient):
    def __init__(self):
        EClient.__init__(self, self)

    def error(self, reqId, errorCode, errorString):
        print("Error: ", reqId, " ", errorCode, " ", errorString)

    def tickPrice(self, reqId, tickType, price, attrib):
        print("Tick Price. Ticker Id:", reqId, "tickType:", TickTypeEnum.to_str(tickType), "Price:", price, end=' ')

    def tickSize(self, reqId, tickType, size):
        print("Tick Size. Ticker Id:", reqId, "tickType:", TickTypeEnum.to_str(tickType), "Size:", size)


def main():
    app = TestApp()

    app.connect("127.0.0.1", 7497, 0)

    contract = Contract()
    contract.symbol = "AAPL"
    contract.secType = "STK"
    contract.exchange = "SMART"
    contract.currency = "USD"
    contract.primaryExchange = "NASDAQ"

    app.reqMarketDataType(4)  # switch to delayed-frozen data if live is not available
    app.reqMktData(1, contract, "", False, False, [])

    app.run()


if __name__ == "__main__":
    main()

Можно переходить к следующему шагу. Получение исторических значений свечей для FOREX.

Ссылки по теме

tradersacademy.online Receiving Market Data and Historical Candlesticks