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)
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