[HandlerName("T3")] [HandlerCategory("vvAverages")] public class T3 : IDouble2DoubleHandler, IContextUses { [HandlerParameter(true, "14", Min = "5", Max = "80", Step = "1")] public int Period { get; set; } [HandlerParameter(true, "0.618", Min = "0", Max = "1", Step = "0.05")] public double factor { get; set; } public static IList GenT3(IList src, IContext ctx, int _Period, double _factor) { var barscount = src.Count; var MapBuffer = new double[barscount]; //---- variable reset double e1 = 0, e2 = 0, e3 = 0, e4 = 0, e5 = 0, e6 = 0; double c1 = 0, c2 = 0, c3 = 0, c4 = 0; double n = 0, w1 = 0, w2 = 0, b2 = 0, b3 = 0; b2 = _factor * _factor; b3 = b2 * _factor; c1 = -b3; c2 = (3 * (b2 + b3)); c3 = -3 * (2 * b2 + _factor + b3); c4 = (1 + 3 * _factor + b3 + 3 * b2); n = _Period; if (n < 1) n = 1; n = 1 + 0.5 * (n - 1); w1 = 2 / (n + 1); w2 = 1 - w1; for (int i = 0; i < barscount; i++) { e1 = w1 * src[i] + w2 * e1; e2 = w1 * e1 + w2 * e2; e3 = w1 * e2 + w2 * e3; e4 = w1 * e3 + w2 * e4; e5 = w1 * e4 + w2 * e5; e6 = w1 * e5 + w2 * e6; MapBuffer[i] = c1 * e6 + c2 * e5 + c3 * e4 + c4 * e3; } return MapBuffer; } public IList Execute(IList src) { return GenT3(src, Context, Period, factor); } public IContext Context { get; set; } }