Esempio n. 1
0
 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);
                    }
                }
            }
        }
Esempio n. 3
0
 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);
         }
     }
 }