예제 #1
0
 def ReqOrderInsert(self, order, request_id):
     '''报单录入请求, 需要调用成交函数'''
     logging.info(u'报单')
     oid = order.OrderRef
     trade = ApiStruct.Trade(
         InstrumentID=order.InstrumentID,
         Direction=order.Direction,
         Price=order.LimitPrice,
         Volume=order.VolumeTotalOriginal,
         OrderRef=oid,
         TradeID=oid,
         OrderSysID=oid,
         BrokerOrderSeq=oid,
         OrderLocalID=oid,
         TradeTime=time.strftime('%H%M%S'),  #只有备案作用
     )
     if order.CombOffsetFlag == ApiStruct.OF_Open:  #开仓. 为方便起见,假设都是股指
         self.available -= order.LimitPrice * 300 * 0.17
     else:
         self.available += order.LimitPrice * 300 * 0.17
     fl_open = strategy.MAX_OPEN_OVERFLOW * 0.2
     fl_close = strategy.MAX_CLOSE_OVERFLOW * 0.2
     if order.CombOffsetFlag == ApiStruct.OF_Open:
         trade.Price += -fl_open if order.Direction == ApiStruct.D_Buy else fl_open
     else:
         trade.Price += -fl_close if order.Direction == ApiStruct.D_Buy else fl_close
     self.myagent.rtn_trade(trade)
예제 #2
0
    def _check_trade_one(self, pOrder, last_tick):
        #print(last_tick.price,pOrder.LimitPrice)
        if pOrder.Direction == UType.D_Buy and last_tick.price > pOrder.LimitPrice:
            return False
        elif pOrder.Direction == UType.D_Sell and last_tick.price < pOrder.LimitPrice:
            return False

        #print("check_trade_one:True")

        #其它完成状态. 通道测试(非逻辑!!)
        #RTN_ORDER_DONE, 各种状态, 因为trade_matcher中允许多次on_done,所以这么测试分支没有问题

        #正确完成状态: 全部成功
        pOrder.VolumeTraded = pOrder.volume_wanted
        pOrder.OrderStatus = UType.OST_AllTraded
        self.OnRtnOrder(pOrder)  #

        #RTN_TRADE
        pTrade = UStruct.Trade(
            InstrumentID=pOrder.InstrumentID,
            Direction=pOrder.Direction,
            ExchangeID=self._exchange_id,
            OrderSysID=pOrder.OrderSysID,
            #TradingDay = self.trading_day,
            TradingDay=last_tick.date,
            TradeDate=last_tick.date,
            TradeTime=last_tick.time,
            Volume=pOrder.VolumeTraded,
            Price=last_tick.price,
        )
        self.OnRtnTrade(pTrade)
        if pOrder.CombOffsetFlag == UType.OF_Open:
            self._exchange.add(self._contracts[pOrder.InstrumentID],
                               pOrder.Direction, pOrder.VolumeTotalOriginal,
                               last_tick.price, pOrder.LimitPrice)
        else:
            self._exchange.remove(self._contracts[pOrder.InstrumentID],
                                  pOrder.Direction, pOrder.VolumeTotalOriginal,
                                  last_tick.price)
        #print("ROI SUCCESS: ",pInputOrder.InstrumentID)
        return True