#!csharp #r "nuget:QuanTAlib;" using QuanTAlib; #!csharp public class GBM1_Feed : TBars { static double seed; readonly double drift, volatility; public GBM1_Feed(int Bars = 252, double Volatility = 1.0, double Drift = 0.05, double Seed = 100.0) { seed = Seed; volatility = Volatility*0.01; drift = Drift*0.01; for (int i = 0; i OCMin)? 2*OCMin-Low : Low; double Volume = GBM_value(seed*10, volatility*2, Drift:0); base.Add((timestamp, Open, High, Low, Close, Volume), update); seed = Close; } private static double GBM_value (double Seed, double Volatility, double Drift) { Random rnd = new((int)(DateTime.UtcNow.Ticks)); double U1 = 1.0-rnd.NextDouble(); double U2 = 1.0-rnd.NextDouble(); double Z = Math.Sqrt(-2.0 * Math.Log(U1)) * Math.Sin(2.0 * Math.PI * U2); return Seed * Math.Exp( Drift - (Volatility*Volatility*0.5) + Volatility * Z); } } #!csharp GBM1_Feed tqqq = new(30); TSeries data = tqqq.Close; SMA_Series sma = new(data, 5, false); MED_Series med = new(data, 5); WMA_Series wma = new(data, 5, false); EMA_Series ema = new(data, 5, false); HMA_Series hma = new(data, 5, false); DEMA_Series dema = new(data, 5, false); TEMA_Series tema = new(data, 5, false); ZLEMA_Series zlema = new(data, 5, false); JMA_Series jma = new(data, 10, 0.0, false); Console.WriteLine($"date\t\t Value\t SMA\t MED\t WMA\t EMA\t HMA\t DEMA\t TEMA \tZLEMA\t JMA"); for (int i=0; i < data.Length; i++) { Console.Write($"{data[i].t:yyyy-MM-dd}\t {data[i].v:f2}\t {sma[i].v:f2}\t {med[i].v:f2}\t {wma[i].v:f2}\t {ema[i].v:f2}\t {hma[i].v:f2}\t {dema[i].v:f2}\t {tema[i].v:f2}\t {zlema[i].v:f2}\t {jma[i].v:f2}\n"); }