我试图使用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')
此代码正在运行:
time.sleep(x)
会导致问题,因此将其替换为ib.sleep(x)
,通过ib.qualifyContracts(contract)
获取完整合同是一种良好的做法相关问题 更多 >
编程相关推荐