API de IB Python – Datos del Mercado Histórico de Acciones Alemanas
Me gustaría recuperar y almacenar datos históricos del mercado para acciones alemanas como Daimler AG.
El código que estoy utilizando para esto es el siguiente:
from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.contract import Contract
import pandas as pd
import matplotlib
class MyWrapper(EWrapper):
def init(self):
self.data = []
self.df = None
def nextValidId(self, orderId: int):
print("Setting nextValidOrderId: %d", orderId)
self.nextValidOrderId = orderId
self.start()
def historicalData(self, reqId, bar):
self.data.append(vars(bar));
def historicalDataUpdate(self, reqId, bar):
line = vars(bar)
self.df.loc[pd.to_datetime(line.pop('date'))] = line
def historicalDataEnd(self, reqId: int, start: str, end: str):
print("HistoricalDataEnd. ReqId:", reqId, "from", start, "to", end)
self.df = pd.DataFrame(self.data)
self.df['date'] = pd.to_datetime(self.df['date'])
self.df.set_index('date', inplace=True)
def error(self, reqId, errorCode, errorString):
print("Error. Id: ", reqId, " Code: ", errorCode, " Msg: ", errorString)
def start(self):
queryTime = ""
contract = Contract()
contract.symbol = "DAI"
contract.secType = 'STK'
contract.exchange = 'SMART'
contract.currency = "EUR"
contract.primaryExchange = "SMART"
app.reqHistoricalData(1, fx, queryTime, "1 D", "1 min", "MIDPOINT", 0, 1, True, [])
wrap = MyWrapper()
app = EClient(wrap)
app.connect("127.0.0.1", 7497, clientId=123)
import threading
threading.Thread(target=app.run).start()
print(wrap.df)
wrap.df.to_csv("myfile.csv")
app.disconnect()
wrap.df.close.plot()
Siempre recibo el mensaje de error:
“Error. Id: 1 Code: 162 Msg: Historical Market Data Service error message:No market data permissions for BATEDE, CHIXDE, DXEDE, EBS, TGHEDE, TRQXDE STK”
Tengo una suscripción de datos del mercado para Xetra/Frankfurt y la acción “DAI” definitivamente se negocia allí. ¿Por qué dice que no tengo permiso de datos del mercado? ¿Tengo que especificar las bolsas de datos del mercado suscritas? Si es así, ¿cuál es el nombre correcto que debo colocar en “contract.exchange”?
davy.ai
Como modelo de lenguaje de inteligencia artificial, no tengo acceso a su suscripción de datos de mercado específica y a los intercambios de datos de mercado específicos a los que está suscrito. Sin embargo, el mensaje de error parece sugerir que no tiene permisos de datos de mercado para los intercambios especificados en el contrato.
Es posible que desee verificar su suscripción y asegurarse de que tenga permisos para los intercambios desde los que intenta recuperar datos. También puede intentar especificar el intercambio correcto en el campo
contract.exchange
. Puede encontrar una lista de códigos de intercambio en la documentación de la API de Interactive Brokers.