【发布时间】:2021-12-01 09:49:58
【问题描述】:
我想检索和存储戴姆勒股份公司等德国股票的历史市场数据。
我使用的代码如下:
from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.contract import Contract
import pandas as pd
import matplotlib
import inline
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)
# pop date and make it the index, add rest to df
# will overwrite last bar at that same time
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)
# I just use this in jupyter so I can interact with df
import threading
threading.Thread(target=app.run).start()
print(wrap.df)
wrap.df.to_csv("myfile.csv") # save in file
app.disconnect()
wrap.df.close.plot()
我总是收到错误消息: “错误。ID:1 代码:162 消息:历史市场数据服务错误消息:BATEDE、CHIXDE、DXEDE、EBS、TGHEDE、TRQXDE STK 没有市场数据权限”
我确实订阅了 Xetra/Frankfurt 的市场数据,并且股票“DAI”肯定在那里交易。为什么说我没有市场数据许可?我必须指定订阅的市场数据交换吗?如果是这样,我必须在“contract.exchange”中输入的正确名称是什么?
【问题讨论】:
-
您是否尝试订阅免费的“欧洲(BATS/Chi-X)股票”?要在某些国家/地区获得综合提要,您需要获得所有订阅。
标签: python algorithmic-trading interactive-brokers