def ReqOrderAction(self, corder, request_id): '''撤单请求''' #print u'in cancel' oid = corder.OrderRef rorder = ApiStruct.Order( InstrumentID=corder.InstrumentID, OrderRef=corder.OrderRef, OrderStatus=ApiStruct.OST_Canceled, ) #self.myagent.rtn_order(rorder) self.myagent.err_order_action(rorder.OrderRef, rorder.InstrumentID, u'26', u'测试撤单--报单已成交')
def ReqOrderInsert(self, pInputOrder, nRequestID): '''报单录入请求 设定: (与实际不符, 只为了测试相关分支) 普通合约名错误 CTP_REJECT 特定合约名(CERROR)错误 EXCHANGE_REJECT 保证金错误 EXCHANGE_REJECT ''' #print("ROI:direction:",pInputOrder.Direction) self.logger.info("TAStub-ROI:%s" % (str(pInputOrder), )) print("TAStub-ROI:%s" % (str(pInputOrder), )) #print("ROI:1:",pInputOrder.InstrumentID) if pInputOrder.InstrumentID[:2] == "XH": #测试CTP_REJECT专用通道 #调用CTP_REJECT self.OnRspOrderInsert(pInputOrder, self._failureRspInfo, nRequestID, True) return self._orders.append(pInputOrder) last_tick = self._last_tick_map[pInputOrder.InstrumentID] pOrder = UStruct.Order( InstrumentID=pInputOrder.InstrumentID, LimitPrice=pInputOrder.LimitPrice, Direction=pInputOrder.Direction, VolumeTotalOriginal=pInputOrder.VolumeTotalOriginal, #TradingDay = self.trading_day, TradingDay=last_tick.date, UpdateTime=last_tick.time, OrderRef=nRequestID, FrontID=self._front_id, SessionID=self._session_id, OrderStatus=UType.OST_Unknown, CombOffsetFlag=pInputOrder.CombOffsetFlag, ) #print(pOrder) #efunc = self._exchange.add if pInputOrder.CombOffsetFlag == UType.OF_Open else self._exchange.remove efunc = self._exchange.lock if pInputOrder.CombOffsetFlag == UType.OF_Open else self._exchange.check_holding if not efunc(self._contracts[pInputOrder.InstrumentID], pInputOrder.Direction, pInputOrder.VolumeTotalOriginal, pOrder.LimitPrice): #保证金或平仓数不够, CTP拒绝 logging.warning("TAStub-ROI:CTP拒绝") #print("TAStub-ROI:CTP拒绝") self.OnErrRtnOrderInsert(pInputOrder, self._failureRspInfo) pOrder.OrderSubmitStatus = UType.OSS_InsertRejected self.OnRtnOrder(pOrder) return #print("TAStub-ROI:CTP ACCEPT") #CTP_ACCEPT pOrder.OrderSubmitStatus = UType.OSS_InsertSubmitted self.OnRtnOrder(pOrder) #print("ROI CTP ACCEPTED: ",pInputOrder.InstrumentID) if pInputOrder.InstrumentID[:2] == "XX": #调用EXCHANGE_REJECT, self.OnErrRtnOrderInsert(pInputOrder, self._failureRspInfo) pOrder.OrderSubmitStatus = UType.OSS_InsertRejected self.OnRtnOrder(pOrder) #理论上应该有两次reject调用 return #EXCHANGE_ACCEPT #print("ROI EXCHANGE ACCEPTED: ",pInputOrder.InstrumentID) pOrder.ExchangeID = self._exchange_id pOrder.OrderSysID = self.inc_order_sys_id() pOrder.OrderSubmitStatus = UType.OSS_Accepted self.OnRtnOrder(pOrder) # pOrder.volume_wanted = pInputOrder.VolumeTotalOriginal self._wlist.setdefault(pOrder.InstrumentID, []).append(pOrder) #print("TAStub-ROI last_tick:",last_tick,last_tick.instrument,pOrder.InstrumentID,last_tick.price,pOrder.LimitPrice) self._check_trade(last_tick) #print("ExchangeStub.available:",self.exchange.available) #self._account.update_available(self.exchange.available) self._account.update(self._account._stamp + 1, self.exchange.balance, self.exchange.available, self.exchange.margin, self.exchange.locked) #print(self._account.available,self.exchange.available) print("ExchangeStub.available:", self.exchange.available)