此代码:
Link
将打印出以下内容:
ib = IB()
ib.connect('127.0.0.1', 7496)
contract = Stock('SLV', 'SMART', 'USD')
test=ib.reqTickers(contract)
print(test)
现在我需要出价并询问价格。
执行[Ticker(contract=Stock(symbol='SLV', exchange='SMART', currency='USD'), time=datetime.datetime(2019, 7, 1, 15, 18, 43, 287622, tzinfo=datetime.timezone.utc), bid=14.26, bidSize=11224, ask=14.27, askSize=2970, last=14.27, lastSize=1, volume=48694, open=14.24, high=14.33, low=14.24, close=14.33, halted=0.0, ticks=[], tickByTicks=[], domBids=[], domAsks=[], domTicks=[])]
或print(test.ask)
通常会出错:AttributeError:'list'对象没有属性'ask'。
我尝试了许多其他与上述类似的操作,但是出现了类似的错误。
答案 0 :(得分:1)
您的test
是长度为1的列表,其唯一条目是您感兴趣的Ticker
对象。请尝试test[0].ask
。
答案 1 :(得分:1)
我遇到了类似的问题,解决方法如下:
在您的示例中,test 是一个 Ticker 对象列表。此外,在您的示例中,contract 包含单个合同,但更常见的是包含一组合同 (*contracts),根据 ib_insync 文档 here .
以下代码是一个解决方案:
test = ib.reqTickers(contract)
for _, r in enumerate(test):
print(r.contract.symbol, r.time, r.bid, r.ask, r.close)
更好的代码(也根据文档链接)是:
tickers = [ib.reqTickers(*contracts)]
for i, r in enumerate(tickers):
for j, t in enumerate(r):
print(t.contract.symbol, t.time, t.bid, t.ask, t.close)