using Xunit; using System; using TALib; using QuanTAlib; namespace Validation; public class TA_LIB { private readonly RND_Feed bars; private readonly Random rnd = new(); private readonly int period; private readonly double[] TALIB; private readonly double[] inopen; private readonly double[] inhigh; private readonly double[] inlow; private readonly double[] inclose; private readonly double[] involume; public TA_LIB() { this.bars = new(1000); this.period = this.rnd.Next(28) + 3; this.TALIB = new double[this.bars.Count]; this.inopen = this.bars.Open.v.ToArray(); this.inhigh = this.bars.High.v.ToArray(); this.inlow = this.bars.Low.v.ToArray(); this.inclose = this.bars.Close.v.ToArray(); this.involume = this.bars.Volume.v.ToArray(); } ///////////////////////////////////////// [Fact] public void SMA() { SMA_Series QL = new(this.bars.Close, this.period, false); Core.Sma(this.inclose, 0, this.bars.Count - 1, this.TALIB, out int outBegIdx, out _, this.period); Assert.Equal(Math.Round(this.TALIB[this.TALIB.Length - outBegIdx - 1], 8), Math.Round(QL.Last().v, 8)); } [Fact] public void EMA() { EMA_Series QL = new(this.bars.Close, this.period, false); Core.Ema(this.inclose, 0, this.bars.Count - 1, this.TALIB, out int outBegIdx, out _, this.period); Assert.Equal(Math.Round(this.TALIB[this.TALIB.Length - outBegIdx - 1], 8), Math.Round(QL.Last().v, 8)); } [Fact] public void WMA() { WMA_Series QL = new(this.bars.Close, this.period, false); Core.Wma(this.inclose, 0, this.bars.Count - 1, this.TALIB, out int outBegIdx, out _, this.period); Assert.Equal(Math.Round(this.TALIB[this.TALIB.Length - outBegIdx - 1], 8), Math.Round(QL.Last().v, 8)); } [Fact] public void DEMA() { DEMA_Series QL = new(this.bars.Close, this.period, false); Core.Dema(this.inclose, 0, this.bars.Count - 1, this.TALIB, out int outBegIdx, out _, this.period); Assert.Equal(Math.Round(this.TALIB[this.TALIB.Length - outBegIdx - 1], 8), Math.Round(QL.Last().v, 8)); } [Fact] public void TEMA() { TEMA_Series QL = new(this.bars.Close, this.period, false); Core.Tema(this.inclose, 0, this.bars.Count - 1, this.TALIB, out int outBegIdx, out _, this.period); Assert.Equal(Math.Round(this.TALIB[this.TALIB.Length - outBegIdx - 1], 8), Math.Round(QL.Last().v, 8)); } [Fact] public void MAX() { MAX_Series QL = new(this.bars.Close, this.period, false); Core.Max(this.inclose, 0, this.bars.Count - 1, this.TALIB, out int outBegIdx, out _, this.period); Assert.Equal(Math.Round(this.TALIB[this.TALIB.Length - outBegIdx - 1], 8), Math.Round(QL.Last().v, 8)); } [Fact] public void MIN() { MIN_Series QL = new(this.bars.Close, this.period, false); Core.Min(this.inclose, 0, this.bars.Count - 1, this.TALIB, out int outBegIdx, out _, this.period); Assert.Equal(Math.Round(this.TALIB[this.TALIB.Length - outBegIdx - 1], 8), Math.Round(QL.Last().v, 8)); } [Fact] public void ATR() { ATR_Series QL = new(this.bars, this.period, false); Core.Atr(this.inhigh, this.inlow, this.inclose, 0, this.bars.Count - 1, this.TALIB, out int outBegIdx, out _, this.period); Assert.Equal(Math.Round(this.TALIB[this.TALIB.Length - outBegIdx - 1], 8), Math.Round(QL.Last().v, 8)); } }