#!meta {"kernelInfo":{"defaultKernelName":"csharp","items":[{"aliases":[],"name":"csharp"}]}} #!csharp #r "..\lib\obj\Debug\QuanTAlib.dll" #r "nuget:Skender.Stock.Indicators" using Skender.Stock.Indicators; using QuanTAlib; QuanTAlib.Formatters.Initialize(); #!csharp Atr ma = new(10); GbmFeed gbm = new(); gbm.Add(30); IEnumerable quotes = gbm.Select(item => new Quote { Date = item.Time, Open = (decimal)item.Open, High = (decimal)item.High, Low = (decimal)item.Low, Close = (decimal)item.Close, Volume = (decimal)item.Volume }); var SkResults = quotes.GetAtr(10).Select(i => i.Atr.Null2NaN()!); for (int i=0; i< gbm.Length; i++) { ma.Calc(gbm[i]); Console.WriteLine($"{i,3} {ma.Value,10:F3} \t {SkResults.ElementAt(i):F3}"); } #!csharp Atr ma = new(10); GbmFeed gbm = new(); gbm.Add(30); IEnumerable quotes = gbm.Select(item => new Quote { Date = item.Time, Open = (decimal)item.Open, High = (decimal)item.High, Low = (decimal)item.Low, Close = (decimal)item.Close, Volume = (decimal)item.Volume }); var SkResults = quotes.GetTr().Select(i => i.Tr.Null2NaN()!); for (int i=0; i< gbm.Length; i++) { ma.Calc(new TBar(gbm[i])); Console.WriteLine($"{gbm.High[i].Value,6:F4} \t{gbm.Low[i].Value,6:F4} \t{gbm.Close[i].Value,6:F4} \t{ma.Tr,10:F4} \t{SkResults.ElementAt(i),10:F4}"); } #!csharp //ATR test GbmFeed gbm = new(); TBarSeries feed = new(gbm); Atr ma1 = new(gbm, 10); TSeries res1 = new(ma1); gbm.Add(30); IEnumerable quotes = gbm.Select(item => new Quote { Date = item.Time, Open = (decimal)item.Open, High = (decimal)item.High, Low = (decimal)item.Low, Close = (decimal)item.Close, Volume = (decimal)item.Volume }); var SkResults = quotes.GetAtr(10).Select(i => i.Atr.Null2NaN()!); for (int i=0; i< gbm.Length; i++) { double delta = Math.Round(res1[i].Value, 10) - Math.Round(SkResults.ElementAt(i), 10); //Console.WriteLine($"{i,3} {gbm.High[i].Value,6:F2} {gbm.Low[i].Value,6:F2} {gbm.Close[i].Value,6:F2} {res1[i].Value,10:F4} {SkResults.ElementAt(i),10:F4}\t{delta}"); Console.WriteLine($"{i,3} h:{gbm.High[i].Value,6:F2} l:{gbm.Low[i].Value,6:F2} c:{gbm.Close[i].Value,6:F2} {res1[i].Atr,10:F4} {SkResults.ElementAt(i),10:F4}\t{delta}"); } #!csharp //EMA test GbmFeed gbm = new(); Ema ema1 = new(gbm.Close, 10, useSma: true); TSeries res1 = new(ema1); gbm.Add(30); IEnumerable quotes = gbm.Close.Select(item => new Quote { Date = item.Time, Close = (decimal)item.Value }); var SkResults = quotes.GetEma(10).Select(i => i.Ema.Null2NaN()!); for (int i=0; i< gbm.Length; i++) { double delta = Math.Round(res1[i].Value, 10) - Math.Round(SkResults.ElementAt(i), 10); Console.WriteLine($"{i,3} {gbm.Close[i].Value,6:F2} {res1[i].Value,10:F4} {SkResults.ElementAt(i),10:F4}\t{delta}"); }