[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; }
}