请问,标准合约,开仓的时候是一个合约,而成交推送的时候是两个合约,会造成持仓混乱,请问应该如何处理
请问,标准合约,开仓的时候是一个合约,而成交推送的时候是两个合约,会造成持仓混乱,请问应该如何处理
什么叫做标准合约成交会推送两个??具体做的什么接口和品种
期货里大商所和郑商所的标准套利合约
比如开多单SP m1905&m1909, 这是一个标准套利合约
但是成交的推送单子却显示 多m1905和空m1909两个单子的成交,
所以持仓很容易混乱
class CtaEngine(AppEngine):
#----------------------------------------------------------------------
def __init__(self, mainEngine, eventEngine):
#非主力合约持仓
self.NotActivePos = 0
def processTradeEvent(self, event):
"""处理成交推送"""
trade = event.dict_['data']
# 过滤已经收到过的成交回报
if trade.vtTradeID in self.tradeSet:
return
self.tradeSet.add(trade.vtTradeID)
# 将成交推送到策略对象中
if trade.vtOrderID in self.orderStrategyDict:
strategy = self.orderStrategyDict[trade.vtOrderID]
if trade.vtSymbol == strategy.vtSymbol:
# 计算策略持仓
if trade.direction == DIRECTION_LONG:
strategy.pos += trade.volume
else:
strategy.pos -= trade.volume
self.callStrategyFunc(strategy, strategy.onTrade, trade)
# 保存策略持仓到数据库
self.saveSyncData(strategy)
content = f'策略{strategy.name}同步数据保存成功,交易合约:{trade.vtSymbol},当前持仓{strategy.pos}'
self.writeCtaLog(content)
else:
strategy.vtSymbol = trade.vtSymbol
# 计算非主力合约持仓
if trade.direction == DIRECTION_LONG:
self.NotActivePos += trade.volume
else:
self.NotActivePos -= trade.volume
self.callStrategyFunc(strategy, strategy.onTrade, trade)
#保存非主力合约仓位数据
"""保存策略的持仓情况到数据库"""
flt = {'name': strategy.name,
'vtSymbol': trade.vtSymbol}
PosData = copy(flt)
for key in strategy.syncList:
if key == 'pos':
PosData['pos'] = self.NotActivePos
else:
PosData[key] = strategy.__getattribute__(key)
self.mainEngine.dbUpdate(POSITION_DB_NAME, strategy.className,
PosData, flt, True)
content = f'策略{strategy.name}同步数据保存成功,交易合约标的:{trade.vtSymbol},标的持仓:{self.NotActivePos}'
self.writeCtaLog(content)
谢谢!!开盘我试一下,也想了一个办法,就是把self.pos的计算写到 processOrderEvent里,等待验证哈!