private void FireLevel2Snapshot(SortedSet <int> Ids, DateTime _dateTime, DateTime _exchangeDateTime, DepthMarketDataNClass pDepthMarketData, DepthMarketDataNClass DepthMarket)
        {
            //行情过来时是今天累计成交量,得转换成每个tick中成交量之差
            double volume = pDepthMarketData.Volume - DepthMarket.Volume;

            // 以前第一条会导致集合竞价后的第一条没有成交量,这种方法就明确了上一笔是空数据
            if (0 == DepthMarket.TradingDay && 0 == DepthMarket.ActionDay)
            {
                //没有接收到最开始的一条,所以这计算每个Bar的数据时肯定超大,强行设置为0
                volume = 0;
            }
            else if (volume < 0)
            {
                //如果隔夜运行,会出现今早成交量0-昨收盘成交量,出现负数,所以当发现为负时要修改
                volume = pDepthMarketData.Volume;
            }

            foreach (var _id in Ids)
            {
                List <Bid> bids = new List <Bid>();
                if (pDepthMarketData.Bids != null)
                {
                    foreach (var d in pDepthMarketData.Bids)
                    {
                        Bid bid = new Bid(
                            _dateTime,
                            _exchangeDateTime,
                            id,
                            _id,
                            d.Price,
                            d.Size);
                        bids.Add(bid);
                    }
                }

                List <Ask> asks = new List <Ask>();
                if (pDepthMarketData.Asks != null)
                {
                    foreach (var d in pDepthMarketData.Asks)
                    {
                        Ask ask = new Ask(
                            _dateTime,
                            _exchangeDateTime,
                            id,
                            _id,
                            d.Price,
                            d.Size);
                        asks.Add(ask);
                    }
                }

                var l2s = new Level2Snapshot(_dateTime, _exchangeDateTime, id, _id, bids.ToArray(), asks.ToArray())
                {
                };

                // 启用底层数据上传
                EmitData(l2s);
            }
        }
        public void OnLevel2(Level2Snapshot snapshot)
        {
            var list = _orders[snapshot.InstrumentId];

            if (FillOnLevel2 && list != null)
            {
                for (int i = 0; i < list.Count; i++)
                {
                    var order = list[i];
                    OnLevel2(order, snapshot);
                }
                RemoveDoneOrders();
            }
        }
 private bool OnAucFill(Order order)
 {
     if (order.Type == OrderType.Limit)
     {
         int instrumentId = order.Instrument.Id;
         if (FillOnQuote)
         {
             Ask ask = framework.DataManager.GetAsk(instrumentId);
             if (ask != null && OnAsk(order, ask))
             {
                 return(true);
             }
             Bid bid = framework.DataManager.GetBid(instrumentId);
             if (bid != null && OnBid(order, bid))
             {
                 return(true);
             }
         }
         if (FillOnTrade)
         {
             Trade trade = framework.DataManager.GetTrade(instrumentId);
             if (trade != null && OnTrade(order, trade))
             {
                 return(true);
             }
         }
         if (FillOnBar)
         {
             Bar bar = framework.DataManager.GetBar(instrumentId);
             if (BarFilter.Count != 0 && !BarFilter.Contains(bar.Type, bar.Size))
             {
                 return(false);
             }
             if (bar != null && OnBar(order, bar))
             {
                 return(true);
             }
         }
         if (FillOnLevel2)
         {
             Level2Snapshot snapshot = framework.DataManager.GetAggregatedSnapshot(instrumentId);
             if (snapshot != null)
             {
                 return(OnLevel2(order, snapshot));
             }
         }
     }
     return(false);
 }
예제 #4
0
 internal void method_10(Level2Snapshot level2Snapshot_0)
 {
     if (this.strategy__0 != null && this.Status == StrategyStatus.Running)
     {
         List <Strategy> list;
         if (this.Mode == StrategyMode.Backtest)
         {
             list = this.idArray_2[level2Snapshot_0.int_0];
         }
         else
         {
             list = this.idArray_3[level2Snapshot_0.int_0][(int)level2Snapshot_0.byte_0];
         }
         for (int i = 0; i < list.Count; i++)
         {
             list[i].vmethod_13(level2Snapshot_0);
         }
     }
 }
        private bool OnLevel2(Order order, Level2Snapshot snapshot)
        {
            if (CheckDataProvider && !IsProviderPassed(order, snapshot.ProviderId))
            {
                return(false);
            }
            bool result = false;

            if (order.Side == OrderSide.Sell)
            {
                for (int i = 0; i < snapshot.Bids.Length; i++)
                {
                    bool flag = false;
                    if (order.LeavesQty > 0.0)
                    {
                        flag = OnBid(order, snapshot.Bids[i]);
                    }
                    if (!flag)
                    {
                        break;
                    }
                    result = true;
                }
            }
            else if (order.Side == OrderSide.Buy)
            {
                for (int i = 0; i < snapshot.Asks.Length; i++)
                {
                    bool flag2 = false;
                    if (order.LeavesQty > 0.0)
                    {
                        flag2 = OnAsk(order, snapshot.Asks[i]);
                    }
                    if (!flag2)
                    {
                        break;
                    }
                    result = true;
                }
            }
            return(result);
        }
예제 #6
0
 internal void method_10(Level2Snapshot level2Snapshot_0)
 {
     if (this.strategy__0 != null && this.Status == StrategyStatus.Running)
     {
         List<Strategy> list;
         if (this.Mode == StrategyMode.Backtest)
         {
             list = this.idArray_2[level2Snapshot_0.int_0];
         }
         else
         {
             list = this.idArray_3[level2Snapshot_0.int_0][(int)level2Snapshot_0.byte_0];
         }
         for (int i = 0; i < list.Count; i++)
         {
             list[i].vmethod_13(level2Snapshot_0);
         }
     }
 }