// 订单状态跟踪 public void OnOrderStatusChange(Order order) { if (order != _order) { return; } _st.Print("==========订单变化==========="); OrderHelper.PrintOrderStatus(_st, order); if (order.MQOrderStatus == EnumMQOrderStatus.全部成交) { if (_status == HedgeStatus.WaitOpenOrderComplete) { _status = HedgeStatus.WaitClosePosition; } else if (_status == HedgeStatus.WaitCloseOrderComplete) { _status = HedgeStatus.WaitOpenPosition; } _orderLock = false; } else if (order.MQOrderStatus == EnumMQOrderStatus.废单) { if (_status == HedgeStatus.WaitOpenOrderComplete) { _openFailedTimes++; } else if (_status == HedgeStatus.WaitCloseOrderComplete) { _closeFailedTimes++; } } }
public HedgeOrderTracer(StrategyEx st, Future future, int volume) { _st = st; _future = future; _volume = volume; _orderLock = false; _status = HedgeStatus.WaitOpenPosition; _openHitTimes = 0; _closeHitTimes = 0; _openFailedTimes = 0; _closeFailedTimes = 0; }
// 对冲方向平仓 public void ClosePosition(double lastPrice, double priceDiff) { if (_orderLock || _status != HedgeStatus.WaitClosePosition) { return; } double priceLimite = getClosePrice(lastPrice, priceDiff); EnumBuySell dir = getClosePositionDir(); _order = _st.SendOrder(_st.DefaultAccount, _future.ID, EnumMarket.期货, _future.ExchangeID, priceLimite, _volume, dir, EnumOpenClose.平今仓, EnumOrderPriceType.市价, EnumOrderTimeForce.当日有效, EnumHedgeFlag.投机); _orderLock = true; _status = HedgeStatus.WaitCloseOrderComplete; _closeHitTimes++; _st.Print("===========》平今仓:"); OrderHelper.PrintOrderStatus(_st, _order); }