using System; using System.Collections.Generic; using TSLab.Script; using TSLab.Script.Handlers; using TSLab.Script.Helpers; namespace TSLab.Script.Handlers { [HandlerCategory("uzer")] public class WMA : BasePeriodIndicatorHandler, IDouble2DoubleHandler { public IList Execute(IList source) { var wma = new double[source.Count]; double wma1 =0; int W=0; // Расчет весов в знаменателе int Wv=0; // Расчет весов в числителе //Вычисляем сумму весов for(int j = 0; j < Period; j++) { W=W+j+1; } for(int i = Period; i < source.Count; i++) { //Обнуляем и выставляем начальное значение весов Wv=1; // Вычисляем произведение весов на цену // Относительно текущего i-го элемента нужно слева направо обработать // свечки, для этого необходимо вычислить границы расчетов относительно i for(int k = (i-Period+1); k <= i; k++) { wma1=wma1+(Wv*source[k]); Wv++; } //Вычисляем значение WMA в i-ой точке wma[i]=wma1/W; // Обнуляем промежуточное значение суммы, чтобы не было накопления wma1=0; } return wma; } } }