diff --git a/.github/workflows/main_automation.yml b/.github/workflows/main_automation.yml index d18249e0..f6307300 100644 --- a/.github/workflows/main_automation.yml +++ b/.github/workflows/main_automation.yml @@ -88,17 +88,17 @@ jobs: files: /Quantower/Settings/Scripts/Indicators/QuanTAlib/*.dll - name: Authenticate to Github packages source - run: dotnet nuget add source - --username mihakralj - --password ${{ secrets.GITHUB_TOKEN }} - --store-password-in-clear-text + run: dotnet nuget add source + --username mihakralj + --password ${{ secrets.GITHUB_TOKEN }} + --store-password-in-clear-text --name github "https://nuget.pkg.github.com/mihakralj/index.json" - - name: Push package to github - if: ${{ github.ref == 'refs/heads/dev' }} - run: dotnet nuget push '.\Source\bin\Release\QuanTAlib.*.nupkg' - --source https://nuget.pkg.github.com/mihakralj/index.json - --skip-duplicate + - name: Push package to github + if: ${{ github.ref == 'refs/heads/dev' }} + run: dotnet nuget push '.\Source\bin\Release\QuanTAlib.*.nupkg' + --source https://nuget.pkg.github.com/mihakralj/index.json + --skip-duplicate --no-symbols - name: Push package to nuget.org diff --git a/Quantower/Indicators/ATR_chart.cs b/Quantower/Indicators/ATR_chart.cs index ae9795a3..d13e91b9 100644 --- a/Quantower/Indicators/ATR_chart.cs +++ b/Quantower/Indicators/ATR_chart.cs @@ -30,8 +30,8 @@ public class ATR_chart : Indicator this.ShortName = "ATR (" + this.Period + ")"; this.bars = new(); this.indicator = new(source: bars, period: this.Period, useNaN: false); - } - + } + protected override void OnUpdate(UpdateArgs args) { bool update = !(args.Reason == UpdateReason.NewBar || diff --git a/Quantower/Indicators/WMAPE_chart.cs b/Quantower/Indicators/WMAPE_chart.cs index f75dbecd..54fb4256 100644 --- a/Quantower/Indicators/WMAPE_chart.cs +++ b/Quantower/Indicators/WMAPE_chart.cs @@ -51,11 +51,6 @@ public class WMAPE_chart : Indicator this.bars.Add(this.Time(), this.GetPrice(PriceType.Open), this.GetPrice(PriceType.High), this.GetPrice(PriceType.Low), this.GetPrice(PriceType.Close), this.GetPrice(PriceType.Volume), update); double result = this.indicator[this.indicator.Count - 1].v; - this.SetValue(result, 0); - - - - } } diff --git a/Quantower/Indicators/ZLMA_chart.cs b/Quantower/Indicators/ZLMA_chart.cs deleted file mode 100644 index 35cddbdf..00000000 --- a/Quantower/Indicators/ZLMA_chart.cs +++ /dev/null @@ -1,93 +0,0 @@ -using System.Collections; -using System.Drawing; -using System.Drawing.Text; -using TradingPlatform.BusinessLayer; -namespace QuanTAlib; - -public class ZLMA_chart : Indicator -{ - #region Parameters - - [InputParameter("Smoothing period", 0, 1, 999, 1, 1)] - private readonly int Period = 10; - - [InputParameter("Data source", 1, variants: new object[] - { "Open", 0, "High", 1, "Low", 2, "Close", 3, "HL2", 4, "OC2", 5, - "OHL3", 6, "HLC3", 7, "OHLC4", 8, "Weighted (HLCC4)", 9 })] - private readonly int DataSource = 3; - - [InputParameter("MA algorithm", 2, variants: new object[] - { "SMA", 0, - "WMA", 1, - "EMA", 2, - "DEMA", 3, - "TEMA", 4, - "HMA", 5, - "KAMA", 6, - "JMA", 7, - "SMMA", 8 - })] - private readonly int matype = 2; - -#endregion Parameters - - private TBars bars; - /////// - private TSeries indicator; - /////// - - public ZLMA_chart() - { - this.SeparateWindow = false; - this.Name = "ZLMA - Zero-lag Moving Average"; - this.Description = "Zero-Lag Moving Average description"; - this.AddLineSeries("ZLMA", Color.RoyalBlue, 3, LineStyle.Solid); - } - - protected override void OnInit() - { - this.bars = new(); - string maname = matype switch - { - 0 => "SMA", - 1 => "WMA", - 2 => "EMA", - 3 => "DEMA", - 4 => "TEMA", - 5 => "HMA", - 6 => "KAMA", - 7 => "JMA", - 8 => "SMMA", - _ => "???" - }; - - this.ShortName = "ZLMA (" + maname + ", " + TBars.SelectStr(this.DataSource) + ", " + this.Period + ")"; - ZL_Series zerolag = new(source: bars.Select(this.DataSource), period: this.Period, useNaN: false); - this.indicator = matype switch - { - 0 => new SMA_Series(source: zerolag, period: this.Period, useNaN: false), - 1 => new WMA_Series(source: zerolag, period: this.Period, useNaN: false), - 2 => new EMA_Series(source: zerolag, period: this.Period, useNaN: false), - 3 => new DEMA_Series(source: zerolag, period: this.Period, useNaN: false), - 4 => new TEMA_Series(source: zerolag, period: this.Period, useNaN: false), - 5 => new HMA_Series(source: zerolag, period: this.Period, useNaN: false), - 6 => new KAMA_Series(source: zerolag, period: this.Period, useNaN: false), - 7 => new JMA_Series(source: zerolag, period: this.Period, useNaN: false), - 8 => new SMMA_Series(source: zerolag, period: this.Period, useNaN: false), - _ => new EMA_Series(source: zerolag, period: this.Period, useNaN: false) - }; - } - - protected override void OnUpdate(UpdateArgs args) - { - bool update = !(args.Reason == UpdateReason.NewBar || - args.Reason == UpdateReason.HistoricalBar); - this.bars.Add(this.Time(), this.GetPrice(PriceType.Open), - this.GetPrice(PriceType.High), this.GetPrice(PriceType.Low), - this.GetPrice(PriceType.Close), - this.GetPrice(PriceType.Volume), update); - - double result = this.indicator[this.indicator.Count-1].v; - this.SetValue(result); - } -} diff --git a/Source/Basics/Abstracts.cs b/Source/Basics/Abstracts.cs index d20be702..434f3e7a 100644 --- a/Source/Basics/Abstracts.cs +++ b/Source/Basics/Abstracts.cs @@ -32,23 +32,14 @@ public abstract class Single_TSeries_Indicator : TSeries public new virtual void Add((System.DateTime t, double v) TValue, bool update) => base.Add(TValue, update); // potentially overridable Add() method for the whole series (could be replaced with faster bulk algo) - public virtual void Add(TSeries data) - { - for (int i = 0; i < data.Count; i++) { this.Add(TValue: data[i], update: false); } - } + public virtual void Add(TSeries data) { for (int i = 0; i < data.Count; i++) { this.Add(TValue: data[i], update: false); }} - public new void Add((System.DateTime t, double v) TValue) - => this.Add(TValue: TValue, update: false); - public void Add(bool update) - => this.Add(TValue: this._data[this._data.Count - 1], update: update); - public void Add() - => this.Add(TValue: this._data[this._data.Count - 1], update: false); - public new void Sub(object source, TSeriesEventArgs e) - => this.Add(TValue: this._data[this._data.Count - 1], update: e.update); + public new void Add((System.DateTime t, double v) TValue) => this.Add(TValue: TValue, update: false); + public void Add(bool update) => this.Add(TValue: this._data[this._data.Count - 1], update: update); + public void Add() => this.Add(TValue: this._data[this._data.Count - 1], update: false); + public new void Sub(object source, TSeriesEventArgs e) => this.Add(TValue: this._data[this._data.Count - 1], update: e.update); } - - public abstract class Pair_TSeries_Indicator : TSeries { protected readonly TSeries _d1; @@ -83,24 +74,14 @@ public abstract class Pair_TSeries_Indicator : TSeries } // overridable Add(Tvalue, Tvalue) method to add/update a single value at the end of the list - public virtual void Add((System.DateTime t, double v)TValue1, (System.DateTime t, double v)TValue2, bool update) - => base.Add(TValue: (TValue1.t, 0), update: update); // default inserts zeros - + public virtual void Add((System.DateTime t, double v)TValue1, (System.DateTime t, double v)TValue2, bool update) => base.Add(TValue: (TValue1.t, 0), update: update); // default inserts zeros // potentially overridable Add() bulk variations (could be replaced with faster bulk algos) - public virtual void Add(TSeries d1, TSeries d2) { - for (int i = 0; i < d1.Count; i++) { this.Add(d1[i], d2[i], update: false); } - } - public virtual void Add(TSeries d1, double dd2) { - for (int i = 0; i < d1.Count; i++) { this.Add(d1[i], (d1[i].t, dd2), update: false); } - } - public virtual void Add(double dd1, TSeries d2) { - for (int i = 0; i < d2.Count; i++) { this.Add((d2[i].t, dd1), d2[i], update: false); } - } + public virtual void Add(TSeries d1, TSeries d2) { for (int i = 0; i < d1.Count; i++) { this.Add(d1[i], d2[i], update: false); }} + public virtual void Add(TSeries d1, double dd2) { for (int i = 0; i < d1.Count; i++) { this.Add(d1[i], (d1[i].t, dd2), update: false); }} + public virtual void Add(double dd1, TSeries d2) { for (int i = 0; i < d2.Count; i++) { this.Add((d2[i].t, dd1), d2[i], update: false); }} - - public void Add((System.DateTime t, double v)TValue1, (System.DateTime t, double v)TValue2) - => this.Add(TValue1, TValue2, update: false); + public void Add((System.DateTime t, double v)TValue1, (System.DateTime t, double v)TValue2) => this.Add(TValue1, TValue2, update: false); public void Add(bool update) { @@ -123,12 +104,9 @@ public abstract class Pair_TSeries_Indicator : TSeries } public void Add() => this.Add(update: false); - - public new void Sub(object source, TSeriesEventArgs e) - => this.Add(e.update); + public new void Sub(object source, TSeriesEventArgs e) => this.Add(e.update); } - public abstract class Single_TBars_Indicator : TSeries { protected readonly int _p; @@ -148,22 +126,10 @@ public abstract class Single_TBars_Indicator : TSeries public virtual void Add((System.DateTime t, double o, double h, double l, double c, double v) TBar, bool update) => base.Add((TBar.t, 0.0), update); // potentially overridable Add() method for the whole bars or series (could be replaced with faster bulk algo) - public virtual void Add(TBars bars) - { - for (int i = 0; i < bars.Count; i++) { this.Add(TBar: bars[i], update: false); } - } - - public virtual void Add(TSeries data) - { - for (int i = 0; i < data.Count; i++) { base.Add(TValue: data[i], update: false); } - } - -public void Add((System.DateTime t, double o, double h, double l, double c, double v) TBar) - => this.Add(TBar: TBar, update: false); - public void Add(bool update) - => this.Add(TBar: this._bars[this._bars.Count - 1], update: update); - public void Add() - => this.Add(TBar: this._bars[this._bars.Count - 1], update: false); - public new void Sub(object source, TSeriesEventArgs e) - => this.Add(TBar: this._bars[this._bars.Count - 1], update: e.update); + public virtual void Add(TBars bars) { for (int i = 0; i < bars.Count; i++) { this.Add(TBar: bars[i], update: false); }} + public virtual void Add(TSeries data) { for (int i = 0; i < data.Count; i++) { base.Add(TValue: data[i], update: false); }} + public void Add((System.DateTime t, double o, double h, double l, double c, double v) TBar) => this.Add(TBar: TBar, update: false); + public void Add(bool update) => this.Add(TBar: this._bars[this._bars.Count - 1], update: update); + public void Add() => this.Add(TBar: this._bars[this._bars.Count - 1], update: false); + public new void Sub(object source, TSeriesEventArgs e) => this.Add(TBar: this._bars[this._bars.Count - 1], update: e.update); } diff --git a/Source/Basics/TBars.cs b/Source/Basics/TBars.cs index 849ca182..31954ef4 100644 --- a/Source/Basics/TBars.cs +++ b/Source/Basics/TBars.cs @@ -75,7 +75,6 @@ public class TBars : System.Collections.Generic.List<(DateTime t, double o, doub }; } - public void Add((DateTime t, double o, double h, double l, double c, double v) i, bool update = false) => Add(i.t, i.o, i.h, i.l, i.c, i.v, update); @@ -130,6 +129,4 @@ public class TBars : System.Collections.Generic.List<(DateTime t, double o, doub Pub(this, new TSeriesEventArgs { update = update }); } } - - } diff --git a/Source/Feeds/Alphavantage_Feed.cs b/Source/Feeds/Alphavantage_Feed.cs index 721d2f2d..ab485dfb 100644 --- a/Source/Feeds/Alphavantage_Feed.cs +++ b/Source/Feeds/Alphavantage_Feed.cs @@ -55,4 +55,3 @@ public class Alphavantage_Feed : TBars return (date, o, h, l, c, v); } } - diff --git a/Source/Feeds/GBM_Feed.cs b/Source/Feeds/GBM_Feed.cs index dbc9559e..0adcde1d 100644 --- a/Source/Feeds/GBM_Feed.cs +++ b/Source/Feeds/GBM_Feed.cs @@ -38,11 +38,11 @@ public class GBM_Feed : TBars double OCMax = Math.Max(Open,Close); double High = (GBM_value(seed, volatility*0.5, 0)); - High = (HighOCMin)? 2*OCMin-Low : Low; + Low = (Low>OCMin)? (2 * OCMin) - Low : Low; double Volume = GBM_value(seed*10, volatility*2, Drift:0); @@ -55,6 +55,6 @@ public class GBM_Feed : TBars 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); + return Seed * Math.Exp( Drift - (Volatility*Volatility*0.5) + (Volatility * Z)); } } \ No newline at end of file diff --git a/Source/Feeds/RND_Feed.cs b/Source/Feeds/RND_Feed.cs index b7c42e27..9e33aece 100644 --- a/Source/Feeds/RND_Feed.cs +++ b/Source/Feeds/RND_Feed.cs @@ -17,9 +17,9 @@ public class RND_Feed : TBars double c = startvalue; for (int i = 0; i < bars; i++) { - double o = Math.Round(c + c * (volatility * 0.1 * rnd.NextDouble() - 0.005), 2); - double h = Math.Round(o + c * volatility * rnd.NextDouble(), 2); - double l = Math.Round(o - c * volatility * rnd.NextDouble(), 2); + double o = Math.Round(c + (c * (volatility * 0.1 * rnd.NextDouble() - 0.005)), 2); + double h = Math.Round(o + (c * volatility * rnd.NextDouble()), 2); + double l = Math.Round(o - (c * volatility * rnd.NextDouble()), 2); c = Math.Round(l + (h - l) * rnd.NextDouble(), 2); double v = Math.Round(1000 * rnd.NextDouble(), 2); this.Add(DateTime.Today.AddDays(i - bars), o, h, l, c, v); diff --git a/Source/Indicators/ALMA_Series.cs b/Source/Indicators/ALMA_Series.cs index f91267e6..82072d68 100644 --- a/Source/Indicators/ALMA_Series.cs +++ b/Source/Indicators/ALMA_Series.cs @@ -62,7 +62,4 @@ public class ALMA_Series : Single_TSeries_Indicator _norm += _wt; } } - } - - diff --git a/Source/Indicators/ATRP_Series.cs b/Source/Indicators/ATRP_Series.cs index a50916e6..2bb6f1b1 100644 --- a/Source/Indicators/ATRP_Series.cs +++ b/Source/Indicators/ATRP_Series.cs @@ -50,7 +50,7 @@ public class ATRP_Series : Single_TBars_Indicator for (int i = 0; i < _buffer.Count; i++) { _ema += _buffer[i]; } _ema /= this._buffer.Count; } - else { _ema = d.v * _k + _lastema * _k1m; } + else { _ema = (d.v * _k) + (_lastema * _k1m); } this._lastlastema = this._lastema; this._lastema = _ema; diff --git a/Source/Indicators/ATR_Series.cs b/Source/Indicators/ATR_Series.cs index 70ec3c90..75740a1c 100644 --- a/Source/Indicators/ATR_Series.cs +++ b/Source/Indicators/ATR_Series.cs @@ -13,7 +13,6 @@ Sources: */ - public class ATR_Series : Single_TBars_Indicator { private readonly System.Collections.Generic.List _buffer = new(); @@ -53,7 +52,7 @@ public class ATR_Series : Single_TBars_Indicator for (int i = 0; i < _buffer.Count; i++) { _ema += _buffer[i]; } _ema /= this._buffer.Count; } - else { _ema = d.v * _k + _lastema * _k1m; } + else { _ema = (d.v * _k) + (_lastema * _k1m); } this._lastlastema = this._lastema; this._lastema = _ema; diff --git a/Source/Indicators/DEMA_Series.cs b/Source/Indicators/DEMA_Series.cs index 706196f0..d27fc288 100644 --- a/Source/Indicators/DEMA_Series.cs +++ b/Source/Indicators/DEMA_Series.cs @@ -31,7 +31,6 @@ public class DEMA_Series : Single_TSeries_Indicator public override void Add((DateTime t, double v) TValue, bool update) { - if (update) { this._lastema1 = this._lastlastema1; @@ -53,15 +52,14 @@ public class DEMA_Series : Single_TSeries_Indicator for (int i = 0; i < _buffer.Count; i++) { _sma += _buffer[i]; } _sma /= this._buffer.Count; _ema1 = _ema2 = _sma; - } else { - _ema1 = TValue.v * this._k + this._lastema1 * this._k1m; - _ema2 = _ema1 * this._k + this._lastema2 * this._k1m; + _ema1 = (TValue.v * this._k) + (this._lastema1 * this._k1m); + _ema2 = (_ema1 * this._k) + (this._lastema2 * this._k1m); } - double _dema = 2 * _ema1 - _ema2; + double _dema = (2 * _ema1) - _ema2; this._lastlastema1 = this._lastema1; this._lastlastema2 = this._lastema2; this._lastema1 = _ema1; diff --git a/Source/Indicators/EMA_Series.cs b/Source/Indicators/EMA_Series.cs index 98cf4a3e..62256fae 100644 --- a/Source/Indicators/EMA_Series.cs +++ b/Source/Indicators/EMA_Series.cs @@ -52,7 +52,7 @@ public class EMA_Series : Single_TSeries_Indicator } else { - _ema = TValue.v * this._k + this._lastema * this._k1m; + _ema = (TValue.v * this._k) + (this._lastema * this._k1m); } this._lastlastema = this._lastema; diff --git a/Source/Indicators/RMA_Series.cs b/Source/Indicators/RMA_Series.cs index b0d28a94..a93accc1 100644 --- a/Source/Indicators/RMA_Series.cs +++ b/Source/Indicators/RMA_Series.cs @@ -51,7 +51,7 @@ public class RMA_Series : Single_TSeries_Indicator } else { - _ema = TValue.v * _k + _lastema * _k1m; + _ema = (TValue.v * _k) + (_lastema * _k1m); } this._lastlastema = this._lastema; diff --git a/Source/Indicators/TEMA_Series.cs b/Source/Indicators/TEMA_Series.cs index 6dfcbbb0..90aacfe2 100644 --- a/Source/Indicators/TEMA_Series.cs +++ b/Source/Indicators/TEMA_Series.cs @@ -33,7 +33,6 @@ public class TEMA_Series : Single_TSeries_Indicator public override void Add((DateTime t, double v) TValue, bool update) { - if (update) { this._lastema1 = this._lastlastema1; @@ -59,12 +58,12 @@ public class TEMA_Series : Single_TSeries_Indicator } else { - _ema1 = TValue.v * this._k + this._lastema1 * this._k1m; - _ema2 = _ema1 * this._k + this._lastema2 * this._k1m; - _ema3 = _ema2 * this._k + this._lastema3 * this._k1m; + _ema1 = (TValue.v * this._k) + (this._lastema1 * this._k1m); + _ema2 = (_ema1 * this._k) + (this._lastema2 * this._k1m); + _ema3 = (_ema2 * this._k) + (this._lastema3 * this._k1m); } - double _tema = 3 * (_ema1 - _ema2) + _ema3; + double _tema = (3 * (_ema1 - _ema2)) + _ema3; this._lastlastema1 = this._lastema1; this._lastlastema2 = this._lastema2; diff --git a/Source/Indicators/ZLEMA_Series.cs b/Source/Indicators/ZLEMA_Series.cs index 657bfbc7..ae4fef30 100644 --- a/Source/Indicators/ZLEMA_Series.cs +++ b/Source/Indicators/ZLEMA_Series.cs @@ -60,7 +60,7 @@ public class ZLEMA_Series : Single_TSeries_Indicator } else { - _ema = _zl * this._k + this._lastema * this._k1m; + _ema = (_zl * this._k) + (this._lastema * this._k1m); } this._lastlastema = this._lastema; diff --git a/Source/Statistics/KURT_Series.cs b/Source/Statistics/KURT_Series.cs index be84dabe..e91a2c05 100644 --- a/Source/Statistics/KURT_Series.cs +++ b/Source/Statistics/KURT_Series.cs @@ -54,7 +54,7 @@ public class KURT_Series : Single_TSeries_Indicator } double _Vx = _s2 / (_n - 1); - double _kurt = (_n > 3) ? (((_n * (_n + 1)) / ((_n - 1) * (_n - 2) * (_n - 3))) * (_s4 / (_Vx * _Vx)) - (3 * ((_n - 1) * (_n - 1) / ((_n - 2) * (_n - 3))))) : Double.NaN; + double _kurt = (_n > 3) ? (((_n * (_n + 1)) / (((_n - 1) * (_n - 2)) * (_n - 3))) * (_s4 / (_Vx * _Vx)) - (3 * (((_n - 1) * (_n - 1)) / ((_n - 2) * (_n - 3))))) : Double.NaN; var result = (TValue.t, (this.Count < this._p - 1 && this._NaN) ? Double.NaN : _kurt); base.Add(result, update); diff --git a/Source/Statistics/MED_Series.cs b/Source/Statistics/MED_Series.cs index 8d0758ee..8ea91d58 100644 --- a/Source/Statistics/MED_Series.cs +++ b/Source/Statistics/MED_Series.cs @@ -37,7 +37,7 @@ public class MED_Series : Single_TSeries_Indicator System.Collections.Generic.List _s = new(this._buffer); _s.Sort(); int _p1 = _s.Count / 2; - int _p2 = Math.Max(0, _s.Count / 2 - 1); + int _p2 = Math.Max(0, (_s.Count / 2) - 1); double _med = (_s.Count % 2 != 0) ? _s[_p1] : (_s[_p1] + _s[_p2]) / 2; var result = (TValue.t, (this.Count < this._p - 1 && this._NaN) ? double.NaN : _med); diff --git a/Tests/Basics/TBars_Test.cs b/Tests/Basics/TBars_Test.cs index 67b0f121..c5f869a0 100644 --- a/Tests/Basics/TBars_Test.cs +++ b/Tests/Basics/TBars_Test.cs @@ -108,6 +108,5 @@ public class TBars_Test s.Add(DateTime.Today, 0.1, 1.1, 2.1, 3.1, 4.1, false); Assert.Equal(s.Close.v, t.v); Assert.Equal(s.Close.Count, t.Count); - } } diff --git a/Tests/Basics/TSeries_Test.cs b/Tests/Basics/TSeries_Test.cs index 9ec5a85c..32357071 100644 --- a/Tests/Basics/TSeries_Test.cs +++ b/Tests/Basics/TSeries_Test.cs @@ -48,7 +48,6 @@ public class TSeries_Test TSeries t = s; Assert.Equal(5, (double)t); Assert.Equal(5, t.Count); - } [Fact] public void BroadcastingEvents() @@ -58,6 +57,5 @@ public class TSeries_Test s.Pub += t.Sub; s.Add(0.0, update: true); Assert.Equal(0.0, (double)t); - } } diff --git a/Tests/MovingAvg/ALMA_Test.cs b/Tests/MovingAvg/ALMA_Test.cs index fcf15738..75ac5eed 100644 --- a/Tests/MovingAvg/ALMA_Test.cs +++ b/Tests/MovingAvg/ALMA_Test.cs @@ -27,7 +27,5 @@ public class ALMA_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/MovingAvg/BBANDS_Test.cs b/Tests/MovingAvg/BBANDS_Test.cs index cd59b273..b843a361 100644 --- a/Tests/MovingAvg/BBANDS_Test.cs +++ b/Tests/MovingAvg/BBANDS_Test.cs @@ -52,7 +52,5 @@ public class BBANDS_Test Assert.Equal(a.Count, c.PercentB.Count); Assert.Equal(a.Count, c.Zscore.Count); Assert.Equal(a.Count, c.Bandwidth.Count); - } - } diff --git a/Tests/MovingAvg/DEMA_Test.cs b/Tests/MovingAvg/DEMA_Test.cs index 6d2a5a8c..0120be62 100644 --- a/Tests/MovingAvg/DEMA_Test.cs +++ b/Tests/MovingAvg/DEMA_Test.cs @@ -27,7 +27,5 @@ public class DEMA_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/MovingAvg/EMA_Test.cs b/Tests/MovingAvg/EMA_Test.cs index dc25bb3e..5d07b34d 100644 --- a/Tests/MovingAvg/EMA_Test.cs +++ b/Tests/MovingAvg/EMA_Test.cs @@ -27,7 +27,5 @@ public class EMA_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/MovingAvg/HEMA_Test.cs b/Tests/MovingAvg/HEMA_Test.cs index e68aeed6..8ad02f3c 100644 --- a/Tests/MovingAvg/HEMA_Test.cs +++ b/Tests/MovingAvg/HEMA_Test.cs @@ -27,7 +27,5 @@ public class HEMA_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/MovingAvg/HMA_Test.cs b/Tests/MovingAvg/HMA_Test.cs index 15c98600..0096e3a8 100644 --- a/Tests/MovingAvg/HMA_Test.cs +++ b/Tests/MovingAvg/HMA_Test.cs @@ -27,7 +27,5 @@ public class HMA_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/MovingAvg/JMA_Test.cs b/Tests/MovingAvg/JMA_Test.cs index c0df4051..27115e00 100644 --- a/Tests/MovingAvg/JMA_Test.cs +++ b/Tests/MovingAvg/JMA_Test.cs @@ -27,7 +27,5 @@ public class JMA_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/MovingAvg/KAMA_Test.cs b/Tests/MovingAvg/KAMA_Test.cs index 69e771c6..a7541b71 100644 --- a/Tests/MovingAvg/KAMA_Test.cs +++ b/Tests/MovingAvg/KAMA_Test.cs @@ -27,7 +27,5 @@ public class KAMA_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/MovingAvg/MACD_Test.cs b/Tests/MovingAvg/MACD_Test.cs index 61a3b46e..fd13cd88 100644 --- a/Tests/MovingAvg/MACD_Test.cs +++ b/Tests/MovingAvg/MACD_Test.cs @@ -27,7 +27,5 @@ public class MACD_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/MovingAvg/RMA_Test.cs b/Tests/MovingAvg/RMA_Test.cs index 396799bd..88becfac 100644 --- a/Tests/MovingAvg/RMA_Test.cs +++ b/Tests/MovingAvg/RMA_Test.cs @@ -27,7 +27,5 @@ public class RMA_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/MovingAvg/RSI_Test.cs b/Tests/MovingAvg/RSI_Test.cs index 7506cad7..3c89fab6 100644 --- a/Tests/MovingAvg/RSI_Test.cs +++ b/Tests/MovingAvg/RSI_Test.cs @@ -27,7 +27,5 @@ public class RSI_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/MovingAvg/SMA_Test.cs b/Tests/MovingAvg/SMA_Test.cs index a30a808a..d40e4842 100644 --- a/Tests/MovingAvg/SMA_Test.cs +++ b/Tests/MovingAvg/SMA_Test.cs @@ -27,7 +27,5 @@ public class SMA_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/MovingAvg/SMMA_Test.cs b/Tests/MovingAvg/SMMA_Test.cs index b6b1f79e..7c4fa58c 100644 --- a/Tests/MovingAvg/SMMA_Test.cs +++ b/Tests/MovingAvg/SMMA_Test.cs @@ -27,7 +27,5 @@ public class SMMA_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/MovingAvg/TEMA_Test.cs b/Tests/MovingAvg/TEMA_Test.cs index 03960e24..9553e346 100644 --- a/Tests/MovingAvg/TEMA_Test.cs +++ b/Tests/MovingAvg/TEMA_Test.cs @@ -27,7 +27,5 @@ public class TEMA_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/MovingAvg/WMA_Test.cs b/Tests/MovingAvg/WMA_Test.cs index d1839596..c3ab3569 100644 --- a/Tests/MovingAvg/WMA_Test.cs +++ b/Tests/MovingAvg/WMA_Test.cs @@ -27,7 +27,5 @@ public class WMA_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/MovingAvg/ZLEMA_Test.cs b/Tests/MovingAvg/ZLEMA_Test.cs index 634988cf..14af9e12 100644 --- a/Tests/MovingAvg/ZLEMA_Test.cs +++ b/Tests/MovingAvg/ZLEMA_Test.cs @@ -27,7 +27,5 @@ public class ZLEMA_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/Statistics/BIAS_Test.cs b/Tests/Statistics/BIAS_Test.cs index e2f97115..c0370128 100644 --- a/Tests/Statistics/BIAS_Test.cs +++ b/Tests/Statistics/BIAS_Test.cs @@ -27,7 +27,5 @@ public class BIAS_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/Statistics/ENTP_Test.cs b/Tests/Statistics/ENTP_Test.cs index e36f3e76..8fd086b7 100644 --- a/Tests/Statistics/ENTP_Test.cs +++ b/Tests/Statistics/ENTP_Test.cs @@ -27,7 +27,5 @@ public class KURT_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/Statistics/KURT_Test.cs b/Tests/Statistics/KURT_Test.cs index 2a09b1d2..da1a1cfa 100644 --- a/Tests/Statistics/KURT_Test.cs +++ b/Tests/Statistics/KURT_Test.cs @@ -27,7 +27,5 @@ public class ENTP_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/Statistics/LINREG_Test.cs b/Tests/Statistics/LINREG_Test.cs index c0370af1..89a8bb61 100644 --- a/Tests/Statistics/LINREG_Test.cs +++ b/Tests/Statistics/LINREG_Test.cs @@ -27,7 +27,5 @@ public class LINREG_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/Statistics/MAD_Test.cs b/Tests/Statistics/MAD_Test.cs index 413b2eab..a2d3cb5a 100644 --- a/Tests/Statistics/MAD_Test.cs +++ b/Tests/Statistics/MAD_Test.cs @@ -27,7 +27,5 @@ public class MAD_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/Statistics/MAPE_Test.cs b/Tests/Statistics/MAPE_Test.cs index ade998cd..64170230 100644 --- a/Tests/Statistics/MAPE_Test.cs +++ b/Tests/Statistics/MAPE_Test.cs @@ -27,7 +27,5 @@ public class MAPE_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/Statistics/MAX_Test.cs b/Tests/Statistics/MAX_Test.cs index 772c8cb7..b12e205d 100644 --- a/Tests/Statistics/MAX_Test.cs +++ b/Tests/Statistics/MAX_Test.cs @@ -27,7 +27,5 @@ public class MAX_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/Statistics/MED_Test.cs b/Tests/Statistics/MED_Test.cs index 9d1ec409..e9eafb15 100644 --- a/Tests/Statistics/MED_Test.cs +++ b/Tests/Statistics/MED_Test.cs @@ -27,7 +27,5 @@ public class MED_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/Statistics/MIN_Test.cs b/Tests/Statistics/MIN_Test.cs index 38d41ca0..bebd4144 100644 --- a/Tests/Statistics/MIN_Test.cs +++ b/Tests/Statistics/MIN_Test.cs @@ -27,7 +27,5 @@ public class MIN_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/Statistics/MSE_Test.cs b/Tests/Statistics/MSE_Test.cs index 310ad92b..379f9145 100644 --- a/Tests/Statistics/MSE_Test.cs +++ b/Tests/Statistics/MSE_Test.cs @@ -27,7 +27,5 @@ public class MSE_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/Statistics/PSDEV_Test.cs b/Tests/Statistics/PSDEV_Test.cs index 503f9a6d..ce85da27 100644 --- a/Tests/Statistics/PSDEV_Test.cs +++ b/Tests/Statistics/PSDEV_Test.cs @@ -27,7 +27,5 @@ public class PSDEV_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/Statistics/PVAR_Test .cs b/Tests/Statistics/PVAR_Test .cs index 67b4563d..67852e10 100644 --- a/Tests/Statistics/PVAR_Test .cs +++ b/Tests/Statistics/PVAR_Test .cs @@ -27,7 +27,5 @@ public class PVAR_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/Statistics/SDEV_Test .cs b/Tests/Statistics/SDEV_Test .cs index 9b50f719..40c45af0 100644 --- a/Tests/Statistics/SDEV_Test .cs +++ b/Tests/Statistics/SDEV_Test .cs @@ -27,7 +27,5 @@ public class SDEV_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/Statistics/SMAPE_Test.cs b/Tests/Statistics/SMAPE_Test.cs index 2ac0f171..4bef6373 100644 --- a/Tests/Statistics/SMAPE_Test.cs +++ b/Tests/Statistics/SMAPE_Test.cs @@ -27,7 +27,5 @@ public class SMAPE_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/Statistics/VAR_Test.cs b/Tests/Statistics/VAR_Test.cs index 38384d58..db7e92f0 100644 --- a/Tests/Statistics/VAR_Test.cs +++ b/Tests/Statistics/VAR_Test.cs @@ -27,7 +27,5 @@ public class VAR_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/Statistics/WMAPE_Test.cs b/Tests/Statistics/WMAPE_Test.cs index cd1a7276..36024557 100644 --- a/Tests/Statistics/WMAPE_Test.cs +++ b/Tests/Statistics/WMAPE_Test.cs @@ -27,7 +27,5 @@ public class WMAPE_Test Assert.Equal(a.Count, c.Count); a.Add(double.PositiveInfinity); Assert.Equal(a.Count, c.Count); - } - } diff --git a/Tests/Validations/Pandas_TA.cs b/Tests/Validations/Pandas_TA.cs index 38bffb2d..0fd37fdc 100644 --- a/Tests/Validations/Pandas_TA.cs +++ b/Tests/Validations/Pandas_TA.cs @@ -1,5 +1,3 @@ - - using Xunit; using System; using QuanTAlib; @@ -120,5 +118,4 @@ public class PandasTA Assert.Equal(System.Math.Round((double)pta.tail(1), 7), Math.Round(QL.Last().v, 7)); } */ - } \ No newline at end of file diff --git a/Tests/Validations/Skender_Stock.cs b/Tests/Validations/Skender_Stock.cs index 2ee8329d..736c76cd 100644 --- a/Tests/Validations/Skender_Stock.cs +++ b/Tests/Validations/Skender_Stock.cs @@ -3,7 +3,6 @@ using QuanTAlib; using Skender.Stock.Indicators; using Xunit; - namespace Validation; public class Skender_Stock { @@ -177,7 +176,6 @@ public class Skender_Stock Assert.Equal(Math.Round((double)SK.Last().ZScore!, 8), Math.Round(QL.Zscore.Last().v, 8)); } - [Fact] public void RSI() { diff --git a/Tests/Validations/TA_LIB.cs b/Tests/Validations/TA_LIB.cs index 076a17d0..a954ae2c 100644 --- a/Tests/Validations/TA_LIB.cs +++ b/Tests/Validations/TA_LIB.cs @@ -75,7 +75,6 @@ public class TA_LIB Assert.Equal(Math.Round(this.TALIB[this.TALIB.Length - outBegIdx - 1], 8), Math.Round(QL.Last().v, 8)); } - [Fact] public void SMA() { @@ -215,11 +214,8 @@ public class TA_LIB Assert.Equal(Math.Round(outUpper[outUpper.Length - outBegIdx - 1], 7), Math.Round(QL.Upper.Last().v, 7)); Assert.Equal(Math.Round(outMiddle[outMiddle.Length - outBegIdx - 1], 7), Math.Round(QL.Mid.Last().v, 7)); Assert.Equal(Math.Round(outLower[outLower.Length - outBegIdx - 1], 7), Math.Round(QL.Lower.Last().v, 7)); - } - - [Fact] public void HL2() { @@ -255,5 +251,4 @@ public class TA_LIB Assert.Equal(Math.Round(this.TALIB[this.TALIB.Length - outBegIdx - 1], 8), Math.Round(QL.Last().v, 8)); } - }