我正在使用一个程序,它通过IB TWS API检索给定合同的历史数据。我面临的问题是,当我希望将'keepUpToDate‘从False更改为True时,程序不会运行,这样我就可以继续接收最新数据。
代码如下:
from ibapi.client import EClient
from ibapi.wrapper import EWrapper
from ibapi.contract import Contract
from ibapi.common import BarData
import datetime
class MyWrapper(EWrapper):
def nextValidId(self, orderId:int):
print("Setting nextValidOrderId: %d", orderId)
self.nextValidOrderId = orderId
self.start()
def historicalData(self, reqId:int, bar: BarData):
print("HistoricalData. ReqId:", reqId, "BarData.", bar)
def historicalDataEnd(self, reqId: int, start: str, end: str):
print("HistoricalDataEnd. ReqId:", reqId, "from", start, "to", end)
app.disconnect()
print("Finished")
def historicalDataUpdate(self, reqId: int, bar: BarData):
print("HistoricalDataUpdate. ReqId:", reqId, "BarData.", bar)
def error(self, reqId, errorCode, errorString):
print("Error. Id: " , reqId, " Code: " , errorCode , " Msg: " , errorString)
def start(self):
queryTime = (datetime.datetime.today() - datetime.timedelta(days=0)).strftime("%Y%m%d %H:%M:%S")
contract = Contract()
contract.secType = "STK"
contract.symbol = "CBLI"
contract.currency = "USD"
contract.exchange = "SMART"
app.reqHistoricalData(1, contract, queryTime, "2 D", "15 mins", "TRADES", 0, 1, False, [])
app = EClient(MyWrapper())
app.connect("127.0.0.1", 7496, clientId=123)
app.run()我正在尝试将第38行的值从False更改为True。我还认为问题可能出在第30行,因为文档中指出"If True,and endDateTime and be specified“。
https://interactivebrokers.github.io/tws-api/historical_bars.html
任何意见都将不胜感激。
发布于 2020-07-09 02:36:02
当您请求数据时,初始2 D是有结尾的。在historicalDataEnd中执行app.disconnect()
在这里检查您的其他问题以获取代码https://stackoverflow.com/a/62800202/2855515
发布于 2021-03-06 09:34:55
如果您想使用keepUpToDate,则不能声明结束时间。我不使用Python,所以null可能是None或"“之类的东西,我不确定语法是什么。
更改:
app.reqHistoricalData(1, contract, queryTime, "2 D", "15 mins", "TRADES", 0, 1, False, [])至:
app.reqHistoricalData(1, contract, null, "2 D", "15 mins", "TRADES", 0, 1, True, [])https://stackoverflow.com/questions/62755152
复制相似问题