[英]interactive brokers api python - pull bid/ask trading book vendor
[英]Get bid/ask price from Interactive Brokers using python
這段代碼:
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)
或print(test.bid)
通常會得到錯誤:AttributeError: 'list' object has no attribute 'ask'。
我嘗試了許多其他與上述類似的事情,但遇到了類似的錯誤。
您的test
是一個長度為1的列表,其唯一條目是您感興趣的Ticker
對象。請嘗試test[0].ask
。
我有一個類似的問題,解決了這個問題:
在您的示例中, test是一個 Ticker 對象列表。 此外,在您的示例中,合同包含單個合同,但更常見的是包含一組合同(*合同),根據此處的 ib_insync 文檔。
下面的代碼是一個解決方案:
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)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.