Talk is cheap ,show my code(不要纠结我的代码命名,我就喜欢这么搞,自己看着舒服)
#下面只发修改部分的代码
class CtpMdApi(MdApi):
"""CTP行情API实现"""
#----------------------------------------------------------------------
def __init__(self, gateway):
#指数合约字典
self.RBSymbolDict ={} #RBtick行情字典,用于合成指数合约
#----------------------------------------------------------------------
def roundToPriceTick(self, priceTick, price):
"""取整价格到合约最小价格变动"""
if not priceTick:
return price
newPrice = round(price/priceTick, 0) * priceTick
return newPrice
def onRtnDepthMarketData(self, data):
#先推送tick行情
self.gateway.onTick(tick)
#合成指数合约
RBTick99 = VtTickData()
#过滤合约没有挂单导致指数合约一档价格无穷大
if 'rb' in tick.symbol and 'efp' not in tick.symbol and (tick.bidPrice1 < 9999999 or tick.askPrice1 < 9999999):
self.RBSymbolDict[tick.symbol] = tick
if self.RBSymbolDict:
for X in range(len(list(self.RBSymbolDict.values()))):
TickValue = list(self.RBSymbolDict.values())[X]
RBTick99.openInterest += TickValue.openInterest
if RBTick99.openInterest:
for X in range(len(list(self.RBSymbolDict.values()))):
TickValue = list(self.RBSymbolDict.values())[X]
#指数合约持仓量加权
RBTick99.lastPrice += TickValue.lastPrice * (TickValue.openInterest/RBTick99.openInterest)
RBTick99.volume += TickValue.volume * (TickValue.openInterest/RBTick