多个符号的最后价格

2024-09-26 18:08:51 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用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')

Tags: 函数inliveexchange价格symbolpricecurrency
1条回答
网友
1楼 · 发布于 2024-09-26 18:08:51

此代码正在运行:time.sleep(x)会导致问题,因此将其替换为ib.sleep(x),通过ib.qualifyContracts(contract)获取完整合同是一种良好的做法

def last_live_price(symbol_in,exchange_in,currency_in):
        contract=Stock(symbol=symbol_in,exchange=exchange_in,currency=currency_in)  
        ib.qualifyContracts(contract) 
        ib.sleep(5)
        last_live=ib.reqMktData(contract, genericTickList='', snapshot=True, regulatorySnapshot=False,mktDataOptions=None)
        ib.sleep(5)
        last=last_live.last
        return(last)

d = {'symbol':['NAB', 'CBA', 'ANZ', 'ORG'],
        'exchange':['ASX','ASX','ASX','ASX'],
        'currency':['AUD','AUD','AUD','AUD'],
        'last':[None,None,None,None]
        }

stocks = pd.DataFrame(data=d)

stocks['last']=stocks.apply(lambda x: last_live_price(symbol_in=x['symbol'],
                                  exchange_in=x['exchange'],
                                  currency_in=x['currency']),axis=1)

相关问题 更多 >

    热门问题