[HandlerName("Hull's MA")] [HandlerCategory("vvTSLtools")] public class HMA : BasePeriodIndicatorHandler, IDouble2DoubleHandler { // Hull Moving Average // HMA = WMA(2*WMA(PRICE, n/2) - WMA(PRICE, n), sqrt(n)) public IList Execute(IList source) { int per = Period / 2; int per2 = Convert.ToInt32(Math.Sqrt(Period)); WMA wma_ = new WMA(); IList hma = new double[source.Count]; IList hmabuff = new double[source.Count]; var wma1 = wma_.GenWMA(source, Period / 2); var wma2 = wma_.GenWMA(source, Period); for (int i = 0; i < source.Count; i++ ) { hmabuff[i] = (2 * wma1[i] - wma2[i]); } hma = wma_.GenWMA(hmabuff, per2); return hma; } }