void trade_OnRtnOrder(object sender, OrderArgs e) { _queueOrderFresh.Enqueue(e.Value.OrderID); //刷新时用 if (e.Value.Status == OrderStatus.Normal) { Ring("报入成功"); } }
void _t_OnRtnOrder(object sender, OrderArgs e) { var trade = (Trade)sender; var vap = _dicStra.FirstOrDefault(n => n.Value.StraID == e.Value.Custom.Trim()); if (vap.Value == null) return; var stra = vap.Value; var ls = _straOrdersId.GetOrAdd(stra, new List<int>()); if (e.Value.IsLocal && e.Value.Status == OrderStatus.Normal) { //if (_curStra != null) { ls.Add(e.Value.OrderID); } } else if (!stra.IsMarket && e.Value.Status == OrderStatus.Filled) { //另一边未全部成交 var instother = stra.Instrument2; var volother = stra.Volume2; if (e.Value.InstrumentID == stra.Instrument2) { instother = stra.Instrument1; volother = stra.Volume1; } var ofs = trade.DicOrderField.Where(n => ls.IndexOf(n.Key) >= 0 && n.Value.InstrumentID == instother); if (ofs.Sum(n => (n.Value.Volume - n.Value.VolumeLeft)) < volother) { foreach (var v in ofs) { if (v.Value.Status == OrderStatus.Canceled) continue; _reSend.Add(v.Key); // 成交后逻辑 // trade.ReqOrderAction(v.Key); } } } }
void trade_OnRtnCancel(object sender, OrderArgs e) { _queueOrderFresh.Enqueue(e.Value.OrderID); //刷新时用 Ring("撤单"); }
void _t_OnRtnCancel(object sender, OrderArgs e) { //重发委托 var trade = (Trade)sender; if (_reSend.IndexOf(e.Value.OrderID) >= 0) { _reSend.Remove(e.Value.OrderID); InstrumentField instField; if (trade.DicInstrumentField.TryGetValue(e.Value.InstrumentID, out instField)) { if (instField.ExchangeID == "SHFE") { double price = e.Value.Direction == DirectionType.Buy ? _q.DicTick[e.Value.InstrumentID].UpperLimitPrice : _q.DicTick[e.Value.InstrumentID].LowerLimitPrice; trade.ReqOrderInsert(e.Value.InstrumentID, e.Value.Direction, e.Value.Offset, price, e.Value.VolumeLeft, pType: OrderType.Limit, pCustom: e.Value.Custom); } else trade.ReqOrderInsert(e.Value.InstrumentID, e.Value.Direction, e.Value.Offset, 0, e.Value.VolumeLeft, pType: OrderType.Market, pCustom: e.Value.Custom); } } }