예제 #1
0
        public ISecurity Execute(ISecurity source)
        {
            var bars = source.Bars.Select(
                bar =>
            {
                var babar = bar as IBar;
                var nbar  = babar == null
                        ? new DataBar()
                        : new BidAskBar
                {
                    Ask              = Math.Ceiling(babar.Ask * Coef),
                    Bid              = Math.Ceiling(babar.Bid * Coef),
                    AskQty           = babar.AskQty,
                    BidQty           = babar.BidQty,
                    StepPrice        = babar.StepPrice,
                    Volatility       = babar.Volatility,
                    TheoreticalPrice = babar.TheoreticalPrice,
                };
                nbar.Date     = bar.Date;
                nbar.Open     = Math.Ceiling(bar.Open * Coef);
                nbar.High     = Math.Ceiling(bar.High * Coef);
                nbar.Low      = Math.Ceiling(bar.Low * Coef);
                nbar.Close    = Math.Ceiling(bar.Close * Coef);
                nbar.Volume   = bar.Volume;
                nbar.Interest = bar.Interest;
                return(nbar);
            });

            return(source.CloneAndReplaceBars(bars));
        }
예제 #2
0
        public ISecurity Execute(ISecurity source, IList <double> src2)
        {
            var dcf  = Math.Pow(10, Decimals);
            var bars = new List <IDataBar>(source.Bars.Count);

            for (int i = 0; i < source.Bars.Count; i++)
            {
                var bar   = source.Bars[i];
                var s2    = src2.Count == 0 ? 0 : src2[Math.Min(i, src2.Count - 1)];
                var coef  = Coef * 1 / Math.Max(s2, 1e-10) * dcf;
                var babar = bar as IBar;
                var nbar  = babar == null
                    ? new DataBar()
                    : new BidAskBar
                {
                    Ask              = Math.Ceiling(babar.Ask * coef) / dcf,
                    Bid              = Math.Ceiling(babar.Bid * coef) / dcf,
                    AskQty           = babar.AskQty,
                    BidQty           = babar.BidQty,
                    StepPrice        = babar.StepPrice,
                    Volatility       = babar.Volatility,
                    TheoreticalPrice = babar.TheoreticalPrice,
                };
                nbar.Date     = bar.Date;
                nbar.Open     = Math.Ceiling(bar.Open * coef) / dcf;
                nbar.High     = Math.Ceiling(bar.High * coef) / dcf;
                nbar.Low      = Math.Ceiling(bar.Low * coef) / dcf;
                nbar.Close    = Math.Ceiling(bar.Close * coef) / dcf;
                nbar.Volume   = bar.Volume;
                nbar.Interest = bar.Interest;
                bars.Add(nbar);
            }
            return(source.CloneAndReplaceBars(bars));
        }
예제 #3
0
        public ISecurity Execute(ISecurity sec)
        {
            var         ValCount = sec.Bars.Count;
            int         prevhour = 0;
            IList <Bar> NewBars  = new List <Bar>();

            foreach (var bar in sec.Bars)
            {
                if (bar.Date.Hour - prevhour > 1 && prevhour > 0)
                {
                    for (int i = 1; i < bar.Date.Hour - prevhour; i++)
                    {
                        Bar newbar = new Bar(bar.Color, bar.Date.AddHours(1), bar.Open, bar.High, bar.Low, bar.Close, bar.Volume);
                        NewBars.Add(newbar);
                    }
                }
                NewBars.Add(bar);
                prevhour = bar.Date.Hour;
            }

            ISecurity newsec = sec.CloneAndReplaceBars(NewBars);

            return(newsec);
        }