Получение исторических значений свечей для FOREX

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

В этом примере мы покажем, как запросить отложенные данные по акции, если у вас еще нет открытой учетной записи с разрешениями на рыночные данные. Чтобы переключиться в режим отложенных данных для функции reqMktData, нам сначала нужно вызвать reqMarketDataType. Мы можем использовать либо параметр 3, что указывает на отложенные данные, либо 4, что указывает на отложенные замороженные данные. Отложенные замороженные данные означают, что после закрытия рынка отображаемые значения спроса/предложения будут относиться к последнему доступному значению перед закрытием.
После переключения на тип данных 4 мы можем использовать функцию reqMktData для запроса отложенных данных для определенного объекта контракта AAPL. В дополнение к объекту контракта и идентификатору тикера, который используется для уникальной идентификации конкретного запроса reqMktData, другими параметрами являются общий тик-лист, используемый для запроса других типов данных для инструмента, и логические значения моментальных снимков, используемые для запроса моментальных снимков, а не потоковые данные.

Исторические данные

Исторические данные свечей, соответствующие данным, показанным на графиках TWS, можно получить из API с помощью функции reqHistoricalData. Для этой функции требуется текущий уровень 1 (потоковые данные) для инструмента.
Справочное руководство по API: http://interactivebrokers.github.io/tws-api/historical_data.html
Эти данные соответствуют данным в диаграммах TWS и будут точно совпадать, если диаграмма создается с теми же параметрами. Объем исторических данных, доступных в IBKR, будет зависеть от типа инструмента — для обыкновенных акций:
  1. Для обыкновенных акций обычно доступны данные как минимум за 5-10 лет при больших размерах столбцов.
  2. Доступны данные за 2 года по истекшим фьючерсным контрактам
  3. Данные недоступны для опционов с истекшим сроком действия или опционов на фьючерсы.
Справочное руководство по API: http://interactivebrokers.github.io/tws-api/historical_limitations.html
Некоторые другие важные ограничения исторических данных:
  1. Запросы на размер бара от 30 секунд и меньше имеют ограничение: за 10 минут можно сделать не более 60 запросов.
  2. Запросы на большие объемы данных с более длинными размерами столбцов будут выполняться так, чтобы данные возвращались дольше.

reqHistoricalData

Чтобы запросить исторические данные с помощью функции reqHistoricalData, другие параметры в запросе — это tickerId (который однозначно определяет запрос), размер бара свечи, продолжительность, тип сделки и логическое значение keepUpToDate, которое указывает, должны ли данные продолжать передаваться в режиме реального времени. после возврата исторических данных.

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

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

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

    def historicalData(self, reqId, bar):
        print("HistoricalData. ", reqId, " Date:", bar.date, "Open:", bar.open, "High:", bar.high, "Low:", bar.low, "Close:", bar.close, "Volume:", bar.volume, "Count:", bar.barCount, "WAP:", bar.average)

def main():
    app = TestApp()

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

    # define contract for EUR.USD forex pair
    contract = Contract() 
    contract.symbol = "EUR"
    contract.secType = "CASH"
    contract.exchange = "IDEALPRO"
    contract.currency = "USD"

    app.reqHistoricalData(1, contract, "", "1 D", "1 min", "MIDPOINT", 0, 1, False, [])

    app.run()

if __name__ == "__main__":
    main()

Обычная практика заключается в хранении возвращенных данных во фреймах данных Pandas. https://pandas.pydata.org/
Важно отметить, как свечи из исторического потока данных IB строятся для торговых данных. Некоторые типы сделок, обычно происходящие вне NBBO, не включаются в исторические данные: сделки по средней цене, нечетные лоты и сделки с деривативами. Обычно включаются только сделки на NBBO. По этой причине объем будет отличаться от других источников данных, которые включают эти типы сделок.
Можно переходить к следующему шагу. Выставление ордеров.