def __OnRtnTrade(self, f): """""" tf = TradeField() tf.Direction = DirectType.Buy if f.getDirection( ) == DirectionType.Buy else DirectType.Sell tf.ExchangeID = f.getExchangeID() tf.InstrumentID = f.getInstrumentID() tf.Offset = OffsetType.Open if f.getOffsetFlag( ) == OffsetFlagType.Open else OffsetType.Close if f.getOffsetFlag( ) == OffsetFlagType.Close else OffsetType.CloseToday tf.Price = f.getPrice() tf.SysID = f.getOrderSysID() tf.TradeID = f.getTradeID() tf.TradeTime = f.getTradeTime() tf.TradingDay = f.getTradingDay() tf.Volume = f.getVolume() self.DicTradeField[tf.TradeID] = tf id = self.__dic_orderid_sysid[tf.SysID] of = self.DicOrderField[id] tf.OrderID = id # tradeid 与 orderid 关联 of.TradeTime = tf.TradeTime # of.AvgPrice = (of.AvgPrice * (of.Volume - of.VolumeLeft) + pTrade.Price * pTrade.Volume) / (of.Volume - of.VolumeLeft + pTrade.Volume); of.AvgPrice = (of.AvgPrice * (of.Volume - of.VolumeLeft) + tf.Price * tf.Volume) / ( of.Volume - of.VolumeLeft + tf.Volume) of.TradeVolume = tf.Volume of.VolumeLeft -= tf.Volume if of.VolumeLeft == 0: of.Status = OrderStatus.Filled of.StatusMsg = '全部成交' else: of.Status = OrderStatus.Partial of.StatusMsg = '部分成交' # 更新持仓 ***** if tf.Offset == OffsetType.Open: key = '{0}_{1}'.format(tf.InstrumentID, tf.Direction) pf = self.DicPositionField.get(key) if not pf: pf = PositionField() self.DicPositionField[key] = pf pf.InstrumentID = tf.InstrumentID pf.Direction = tf.Direction pf.Price = (pf.Price * pf.Position + tf.Price * tf.Volume) / (pf.Position + tf.Volume) pf.TdPosition += tf.Volume pf.Position += tf.Volume else: key = '{0}_{1}'.format( tf.InstrumentID, DirectType.Sell if tf.Direction == DirectType.Buy else DirectType.Buy) pf = self.DicPositionField.get(key) if pf: # 有可能出现无持仓的情况 if tf.Offset == OffsetType.CloseToday: pf.TdPosition -= tf.Volume else: tdclose = min(pf.TdPosition, tf.Volume) if pf.TdPosition > 0: pf.TdPosition -= tdclose pf.YdPosition -= max(0, tf.Volume - tdclose) pf.Position -= tf.Volume _thread.start_new_thread(self.__onRtn, (of, tf))
def OnTrade(self, trade=TradeField()): """成交响应""" print('成交反应') print('strategy trade') print(trade)
def OnTrade(self, trade=TradeField()): """成交响应""" pass