【发布时间】:2021-10-06 08:30:27
【问题描述】:
我正在尝试使用 ib_insync 包获取多个符号的最后价格,但我不知道如何将 ib 对象传递给函数,函数返回的最后价格是 nan。这将是单线程的,所以我可以为 ib 使用全局变量。
def last_live_price(ib,symbol_in,exchange_in,currency_in):
contract=Stock(symbol=symbol_in,exchange=exchange_in,currency=currency_in)
last_live=ib.reqMktData(contract, genericTickList='', snapshot=True, regulatorySnapshot=False,mktDataOptions=None)
time.sleep(5)
last=last_live.last
return(last)
util.startLoop() # uncomment this line when in a notebook or spynder
ib = IB()
ib.connect('127.0.0.1', 7496,clientId=26)
d = {'symbol':['700', '9988', '2318', '386'],
'exchange':['SEHK','SEHK','SEHK','SEHK'],
'currency':['HKD','HKD','HKD','HKD']
}
hk = pd.DataFrame(data=d)
#how should ib object be passed to the function?
hk['last']=hk.apply(lambda x: ib,last_live_price(symbol_in=x['symbol'],
exchange_in=x['exchange'],
currency_in=x['currency']),axis=1)
#how should ib object be passed to the function?
test_last=last_live_price(ib=ib,symbol_in='CBA',exchange_in='ASX',currency_in='AUD')
【问题讨论】:
-
哪行代码给了你错误?
-
我发现了那个bug——ib.reqMktData返回的对象不能变成数据框,但是我不能把ib对象传递给函数。我将编辑问题。
标签: python interactive-brokers tws