如何从 ib.reqHistoricalData 从 API Interactive Brokers 生成的元组列表中获取元素

How do I get the elements from list of tuples generated by ib.reqHistoricalData from API Interactive Brokers

Interactive Brokers API 为此请求提供:

spzValue = ib.reqHistoricalData(spx, endDateTime='', durationStr='7200 S', barSizeSetting='1 hour', whatToShow='TRADES', useRTH =False)

变量 "spxValue" 的以下输出:

[BarData(date=datetime.datetime(2019, 7, 19, 20, 0), open=200.59, high=200.7, low=199.69, close=199.76, volume=97, average=200.045, barCount=87), BarData(date=datetime.datetime(2019, 7, 19, 21, 0), open=199.66, high=199.67, low=198.19, close=198.21, volume=369, average=198.969, barCount=322)]

不知何故,我没有成功地从这个列表中获取元素,也没有通过以下方式将其转换为 DataFrame:

df = util.df(spzValue)

有没有人对我如何 select 列表 "BarData" 中的特定元素有任何建议?例如,我希望第一个柱的 "close" 值为 199.76。

提前致谢。

您似乎在使用 ib_insync? (不仅仅是本地 IBKR Python API)。

https://github.com/erdewit/ib_insync

有一个接收历史数据的例子
from ib_insync import *
# util.startLoop()  # uncomment this line when in a notebook

ib = IB()
ib.connect('127.0.0.1', 7497, clientId=1)

contract = Forex('EURUSD')
bars = ib.reqHistoricalData(contract, endDateTime='', durationStr='30 D',
        barSizeSetting='1 hour', whatToShow='MIDPOINT', useRTH=True)

# convert to pandas dataframe:
df = util.df(bars)

然后一旦有了数据框,就可以使用 iloc 访问第一行,然后使用列名访问值:

df.iloc[0]['close']