Exemplo n.º 1
0
 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'测试撤单--报单已成交')
Exemplo n.º 2
0
    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)