Code:
    [HandlerCategory("vvTSLtools")]
    public class TrendMagic : IBar2DoubleHandler, IContextUses
    {
        [HandlerParameter(true, "50", Min = "5", Max = "100", Step = "1")]
        public int PeriodCCI { get; set; }

        [HandlerParameter(true, "5", Min = "1", Max = "30", Step = "1")]
        public int PeriodATR { get; set; }

        public IList<double> Execute(ISecurity source)
        {

            var h = source.HighPrices;
            var l = source.LowPrices;
            var c = source.ClosePrices;
            double CurrTMVal;

            var atr = Series.AverageTrueRange (source.Bars, PeriodATR);
            var cci = Series.CCI(source.Bars, PeriodCCI);
            IList<double> tm = new List<double>(c.Count);

            for (int i = 0; i < c.Count; i++)
            {
                if (i == 0)
                {
                    tm.Add((h[i] - l[i])/2);
                    continue;
                };

                if (cci[i] > 0)
                {
                    // тренд растущий
                    CurrTMVal = l[i] - atr[i];
                    CurrTMVal = CurrTMVal < tm[i - 1] ? tm[i - 1] : CurrTMVal;
                }
                else
                {
                    // тренд снижающийся
                    CurrTMVal = h[i] + atr[i];
                    CurrTMVal = CurrTMVal > tm[i - 1] ? tm[i - 1] : CurrTMVal;
                }
                tm.Add(CurrTMVal);
            }

            return tm;
        }
        public IContext Context { get; set; }
    }