private void OnNewBar(object sender, BarEventArgs args)
        {
            if (NewBar != null)
            {
                CThostFtdcDepthMarketDataField DepthMarket;
                Instrument inst      = InstrumentManager.Instruments[args.Instrument.Symbol];
                string     altSymbol = inst.GetSymbol(Name);

                Bar bar = args.Bar;
                if (_dictDepthMarketData.TryGetValue(altSymbol, out DepthMarket))
                {
                    bar         = new Bar(args.Bar);
                    bar.OpenInt = (long)DepthMarket.OpenInterest;
                }
#if OQ
                if (null != MarketDataFilter)
                {
                    Bar b = MarketDataFilter.FilterBar(bar, args.Instrument.Symbol);
                    if (null != b)
                    {
                        NewBar(this, new BarEventArgs(b, args.Instrument, this));
                    }
                }
                else
#endif
                {
                    NewBar(this, new BarEventArgs(bar, args.Instrument, this));
                }
            }
        }
예제 #2
0
            // 很悲剧,EmitBar对混淆的Simulator无效,不产生OnBar事件,但OnBarOpen事件没有问题
            public override Bar FilterBar(Bar bar, string symbol)
            {
                string key = string.Format("{0}.{1}.{2}", symbol, bar.Type, bar.Size);

                _bars[key] = bar;

                // 在这之前可以做自己的过滤
                Bar b = bar;

                if (filter != null)
                {
                    b = filter.FilterBar(bar, symbol);
                }
                if (b != null)
                {
                    EmitBar(symbol, b.DateTime, b.Open, b.High, b.Low, b.Close, b.Volume, b.OpenInt, b.Size);
                }
                else
                {
                    return(null);
                }

                Bar    b1, b2;
                string key1 = string.Format("{0}.{1}.{2}", "l1405", bar.Type, bar.Size);
                string key2 = string.Format("{0}.{1}.{2}", "v1405", bar.Type, bar.Size);

                if ("l1405-v1405".Contains(symbol))
                {
                    if (_bars.TryGetValue(key1, out b1) &&
                        _bars.TryGetValue(key2, out b2))
                    {
                        // 这个地方一定要注意!!!!b1.High与b2.High由于发生的时间点不同,相减得到的High是不正确的
                        // 如果还用他来计算TR和ATR指标的话,那就更加有问题了,Low原理也是一样
                        // 如果没有用到High/Low,直接用0也不合适,图表显示会乱
                        EmitBar("l1405-v1405", bar.DateTime,
                                b1.Open - b2.Open,
                                Math.Max(b1.Open - b2.Open, b1.Close - b2.Close),
                                Math.Min(b1.Open - b2.Open, b1.Close - b2.Close),
                                b1.Close - b2.Close,
                                0, 0, bar.Size);
                    }
                }

                // 注意,这个地方一定要返回null
                // 这实际上是让插件内部的Emit不调用
                return(null);
            }
 private void OnNewBar(object sender, BarEventArgs args)
 {
     if (NewBar != null)
     {
         Bar bar = args.Bar;
         if (null != MarketDataFilter)
         {
             Bar b = MarketDataFilter.FilterBar(bar, args.Instrument.Symbol);
             if (null != b)
             {
                 NewBar(this, new BarEventArgs(b, args.Instrument, this));
             }
         }
         else
         {
             NewBar(this, new BarEventArgs(bar, args.Instrument, this));
         }
     }
 }