使用python从盈透证券获取买/卖价

时间:2019-07-01 15:22:38

标签: python

此代码:

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'。

我尝试了许多其他与上述类似的操作,但是出现了类似的错误。

2 个答案:

答案 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)