#!meta {"kernelInfo":{"defaultKernelName":"csharp","items":[{"aliases":[],"name":"csharp"}]}} #!csharp #r "..\lib\obj\Debug\QuanTAlib.dll" using QuanTAlib; QuanTAlib.Formatters.Initialize(); #!csharp public class Ema { double lastema; double k, extra; int i, p; public Ema(int p) { k = 1/((double) p+1); extra = 1; lastema = 0; } public double Calc(double value) { extra = (1 - k) * extra; double ema = k * (value - lastema) + lastema; lastema = ema; return ema / (1 - extra); } } #!csharp public class Ema { private double smooth, k; private double extra; private int i, p; public Ema(int period) { p = period; k = 1.0 / (p + 1); extra = 1; smooth = 0; i = 0; } public double Calc(double value) { i++; k = 1/((double)Math.Min(p,i)+1); extra *= (1-k); smooth = k * (value - smooth) + smooth; return extra < 1e-10 ? smooth : smooth / (1 - extra); } } #!csharp Ema ma = new(3); double[] input = new[]{1.0,0,0,0,0,0,1,1,1,1,1,0,0,0,0,0}; for (int i=0; i