From 104ee8bee1697081621ab3202b448ce05a5bf1c1 Mon Sep 17 00:00:00 2001 From: Miha Kralj Date: Sat, 1 Apr 2023 16:54:43 -0700 Subject: [PATCH] Refactoring the structure, upgrading to .NET 6.0/7.0/8.0 --- {Source => Calculations}/Basics/ADD_Series.cs | 0 {Source => Calculations}/Basics/DIV_Series.cs | 0 {Source => Calculations}/Basics/MAX_Series.cs | 48 ++-- .../Basics/MIDPOINT_Series.cs | 72 ++--- .../Basics/MIDPRICE_Series.cs | 62 ++--- {Source => Calculations}/Basics/MIN_Series.cs | 48 ++-- {Source => Calculations}/Basics/MUL_Series.cs | 0 .../Basics/Pair_TSeries_Abstract.cs | 0 {Source => Calculations}/Basics/SUB_Series.cs | 0 {Source => Calculations}/Basics/SUM_Series.cs | 70 ++--- .../Basics/Single_TBars_Abstract.cs | 0 .../Basics/Single_TSeries_Abstract.cs | 140 +++++----- {Source => Calculations}/Basics/TBars.cs | 0 {Source => Calculations}/Basics/TR_Series.cs | 0 {Source => Calculations}/Basics/TSeries.cs | 0 {Source => Calculations}/Basics/ZL_Series.cs | 66 ++--- .../Calculations.csproj | 140 +++++----- .../Feeds/Alphavantage_Feed.cs | 110 ++++---- {Source => Calculations}/Feeds/GBM_Feed.cs | 124 ++++----- {Source => Calculations}/Feeds/RND_Feed.cs | 54 ++-- {Source => Calculations}/Feeds/Yahoo_Feed.cs | 96 +++---- .../Momentum/CCI_Series.cs | 96 +++---- .../Statistics/BIAS_Series.cs | 0 .../Statistics/CORR_Series.cs | 104 ++++---- .../Statistics/COVAR_Series.cs | 0 .../Statistics/DECAY_Series.cs | 0 .../Statistics/ENTROPY_Series.cs | 0 .../Statistics/KURTOSIS_Series.cs | 0 .../Statistics/LINREG_Series.cs | 180 ++++++------- .../Statistics/MAD_Series.cs | 0 .../Statistics/MAPE_Series.cs | 0 .../Statistics/MEDIAN_Series.cs | 0 .../Statistics/MSE_Series.cs | 0 .../Statistics/SDEV_Series.cs | 0 .../Statistics/SMAPE_Series.cs | 0 .../Statistics/SSDEV_Series.cs | 0 .../Statistics/SVAR_Series.cs | 74 +++--- .../Statistics/VAR_Series.cs | 74 +++--- .../Statistics/WMAPE_Series.cs | 0 .../Statistics/ZSCORE_Series.cs | 90 +++---- .../Trends/ALMA_Series.cs | 126 ++++----- .../Trends/DEMA_Series.cs | 148 +++++------ .../Trends/DWMA_Series.cs | 68 ++--- {Source => Calculations}/Trends/EMA_Series.cs | 140 +++++----- {Source => Calculations}/Trends/FMA_Series.cs | 0 .../Trends/HEMA_Series.cs | 112 ++++---- {Source => Calculations}/Trends/HMA_Series.cs | 238 ++++++++--------- .../Trends/HWMA_Series.cs | 0 {Source => Calculations}/Trends/JMA_Series.cs | 248 +++++++++--------- .../Trends/KAMA_Series.cs | 126 ++++----- .../Trends/MACD_Series.cs | 88 +++---- .../Trends/MAMA_Series.cs | 236 ++++++++--------- {Source => Calculations}/Trends/RMA_Series.cs | 110 ++++---- {Source => Calculations}/Trends/SMA_Series.cs | 88 +++---- .../Trends/SMMA_Series.cs | 100 +++---- {Source => Calculations}/Trends/T3_Series.cs | 218 +++++++-------- .../Trends/TEMA_Series.cs | 138 +++++----- .../Trends/TRIMA_Series.cs | 84 +++--- .../Trends/TRIX_Series.cs | 46 ++-- {Source => Calculations}/Trends/WMA_Series.cs | 68 ++--- .../Trends/ZLEMA_Series.cs | 122 ++++----- .../Volatility/ADL_Series.cs | 78 +++--- .../Volatility/ADOSC_Series.cs | 172 ++++++------ .../Volatility/ATRP_Series.cs | 96 +++---- .../Volatility/ATR_Series.cs | 96 +++---- .../Volatility/BBANDS_Series.cs | 144 +++++----- .../Volatility/CMO_Series.cs | 92 +++---- .../Volatility/RSI_Series.cs | 154 +++++------ {Source => Calculations}/Volume/OBV_Series.cs | 118 ++++----- Indicators/Basics/QuanTAlib_Indicator.cs | 40 +++ Indicators/Charts/ATR_chart.cs | 32 +++ .../Charts}/BIAS_chart.cs | 0 .../Charts}/CCI_chart.cs | 86 +++--- .../Charts}/DEMA_chart.cs | 0 Indicators/Charts/DJMA_chart.cs | 78 ++++++ .../Charts}/EMA_chart.cs | 0 .../Charts}/ENTP_chart.cs | 0 .../Charts}/HEMA_chart.cs | 0 .../Charts}/HMA_chart.cs | 104 ++++---- Indicators/Charts/JMA_chart.cs | 53 ++++ .../Charts}/KAMA_chart.cs | 110 ++++---- .../Charts}/KURT_chart.cs | 0 .../Charts}/MAD_chart.cs | 0 .../Charts}/MAPE_chart.cs | 0 .../Charts}/MAX_chart.cs | 0 .../Charts}/MED_chart.cs | 0 .../Charts}/MIN_chart.cs | 0 .../Charts}/MSE_chart.cs | 0 .../Charts}/RMA_chart.cs | 0 Indicators/Charts/RSI_chart.cs | 56 ++++ .../Charts}/SDEV_chart.cs | 102 +++---- .../Charts}/SMAPE_chart.cs | 0 .../Charts}/SMA_chart.cs | 0 .../Charts}/SMMA_chart.cs | 0 .../Charts}/TEMA_chart.cs | 0 .../Charts}/VAR_chart.cs | 104 ++++---- .../Charts}/WMAPE_chart.cs | 110 ++++---- .../Charts}/WMA_chart.cs | 0 .../Indicators.csproj | 97 ++++--- QuanTAlib.sln | 49 +++- Quantower/Indicators/ATR_chart.cs | 45 ---- Quantower/Indicators/JMA_chart.cs | 59 ----- Quantower/Indicators/RSI_chart.cs | 51 ---- .../dll/TradingPlatform.BusinessLayer.dll | Bin 1205664 -> 0 bytes Strategies/SimpleMACross1.cs | 107 ++++++++ Strategies/Strategies.csproj | 45 ++++ Tests/Tests.csproj | 2 +- 107 files changed, 3360 insertions(+), 3072 deletions(-) rename {Source => Calculations}/Basics/ADD_Series.cs (100%) rename {Source => Calculations}/Basics/DIV_Series.cs (100%) rename {Source => Calculations}/Basics/MAX_Series.cs (96%) rename {Source => Calculations}/Basics/MIDPOINT_Series.cs (96%) rename {Source => Calculations}/Basics/MIDPRICE_Series.cs (96%) rename {Source => Calculations}/Basics/MIN_Series.cs (96%) rename {Source => Calculations}/Basics/MUL_Series.cs (100%) rename {Source => Calculations}/Basics/Pair_TSeries_Abstract.cs (100%) rename {Source => Calculations}/Basics/SUB_Series.cs (100%) rename {Source => Calculations}/Basics/SUM_Series.cs (96%) rename {Source => Calculations}/Basics/Single_TBars_Abstract.cs (100%) rename {Source => Calculations}/Basics/Single_TSeries_Abstract.cs (97%) rename {Source => Calculations}/Basics/TBars.cs (100%) rename {Source => Calculations}/Basics/TR_Series.cs (100%) rename {Source => Calculations}/Basics/TSeries.cs (100%) rename {Source => Calculations}/Basics/ZL_Series.cs (96%) rename Source/QuanTAlib.csproj => Calculations/Calculations.csproj (90%) rename {Source => Calculations}/Feeds/Alphavantage_Feed.cs (97%) rename {Source => Calculations}/Feeds/GBM_Feed.cs (97%) rename {Source => Calculations}/Feeds/RND_Feed.cs (97%) rename {Source => Calculations}/Feeds/Yahoo_Feed.cs (97%) rename {Source => Calculations}/Momentum/CCI_Series.cs (97%) rename {Source => Calculations}/Statistics/BIAS_Series.cs (100%) rename {Source => Calculations}/Statistics/CORR_Series.cs (97%) rename {Source => Calculations}/Statistics/COVAR_Series.cs (100%) rename {Source => Calculations}/Statistics/DECAY_Series.cs (100%) rename {Source => Calculations}/Statistics/ENTROPY_Series.cs (100%) rename {Source => Calculations}/Statistics/KURTOSIS_Series.cs (100%) rename {Source => Calculations}/Statistics/LINREG_Series.cs (97%) rename {Source => Calculations}/Statistics/MAD_Series.cs (100%) rename {Source => Calculations}/Statistics/MAPE_Series.cs (100%) rename {Source => Calculations}/Statistics/MEDIAN_Series.cs (100%) rename {Source => Calculations}/Statistics/MSE_Series.cs (100%) rename {Source => Calculations}/Statistics/SDEV_Series.cs (100%) rename {Source => Calculations}/Statistics/SMAPE_Series.cs (100%) rename {Source => Calculations}/Statistics/SSDEV_Series.cs (100%) rename {Source => Calculations}/Statistics/SVAR_Series.cs (97%) rename {Source => Calculations}/Statistics/VAR_Series.cs (96%) rename {Source => Calculations}/Statistics/WMAPE_Series.cs (100%) rename {Source => Calculations}/Statistics/ZSCORE_Series.cs (97%) rename {Source => Calculations}/Trends/ALMA_Series.cs (97%) rename {Source => Calculations}/Trends/DEMA_Series.cs (96%) rename {Source => Calculations}/Trends/DWMA_Series.cs (96%) rename {Source => Calculations}/Trends/EMA_Series.cs (97%) rename {Source => Calculations}/Trends/FMA_Series.cs (100%) rename {Source => Calculations}/Trends/HEMA_Series.cs (97%) rename {Source => Calculations}/Trends/HMA_Series.cs (96%) rename {Source => Calculations}/Trends/HWMA_Series.cs (100%) rename {Source => Calculations}/Trends/JMA_Series.cs (97%) rename {Source => Calculations}/Trends/KAMA_Series.cs (97%) rename {Source => Calculations}/Trends/MACD_Series.cs (97%) rename {Source => Calculations}/Trends/MAMA_Series.cs (97%) rename {Source => Calculations}/Trends/RMA_Series.cs (97%) rename {Source => Calculations}/Trends/SMA_Series.cs (96%) rename {Source => Calculations}/Trends/SMMA_Series.cs (97%) rename {Source => Calculations}/Trends/T3_Series.cs (97%) rename {Source => Calculations}/Trends/TEMA_Series.cs (96%) rename {Source => Calculations}/Trends/TRIMA_Series.cs (97%) rename {Source => Calculations}/Trends/TRIX_Series.cs (99%) rename {Source => Calculations}/Trends/WMA_Series.cs (97%) rename {Source => Calculations}/Trends/ZLEMA_Series.cs (96%) rename {Source => Calculations}/Volatility/ADL_Series.cs (96%) rename {Source => Calculations}/Volatility/ADOSC_Series.cs (96%) rename {Source => Calculations}/Volatility/ATRP_Series.cs (97%) rename {Source => Calculations}/Volatility/ATR_Series.cs (97%) rename {Source => Calculations}/Volatility/BBANDS_Series.cs (97%) rename {Source => Calculations}/Volatility/CMO_Series.cs (97%) rename {Source => Calculations}/Volatility/RSI_Series.cs (97%) rename {Source => Calculations}/Volume/OBV_Series.cs (97%) create mode 100644 Indicators/Basics/QuanTAlib_Indicator.cs create mode 100644 Indicators/Charts/ATR_chart.cs rename {Quantower/Indicators => Indicators/Charts}/BIAS_chart.cs (100%) rename {Quantower/Indicators => Indicators/Charts}/CCI_chart.cs (96%) rename {Quantower/Indicators => Indicators/Charts}/DEMA_chart.cs (100%) create mode 100644 Indicators/Charts/DJMA_chart.cs rename {Quantower/Indicators => Indicators/Charts}/EMA_chart.cs (100%) rename {Quantower/Indicators => Indicators/Charts}/ENTP_chart.cs (100%) rename {Quantower/Indicators => Indicators/Charts}/HEMA_chart.cs (100%) rename {Quantower/Indicators => Indicators/Charts}/HMA_chart.cs (96%) create mode 100644 Indicators/Charts/JMA_chart.cs rename {Quantower/Indicators => Indicators/Charts}/KAMA_chart.cs (97%) rename {Quantower/Indicators => Indicators/Charts}/KURT_chart.cs (100%) rename {Quantower/Indicators => Indicators/Charts}/MAD_chart.cs (100%) rename {Quantower/Indicators => Indicators/Charts}/MAPE_chart.cs (100%) rename {Quantower/Indicators => Indicators/Charts}/MAX_chart.cs (100%) rename {Quantower/Indicators => Indicators/Charts}/MED_chart.cs (100%) rename {Quantower/Indicators => Indicators/Charts}/MIN_chart.cs (100%) rename {Quantower/Indicators => Indicators/Charts}/MSE_chart.cs (100%) rename {Quantower/Indicators => Indicators/Charts}/RMA_chart.cs (100%) create mode 100644 Indicators/Charts/RSI_chart.cs rename {Quantower/Indicators => Indicators/Charts}/SDEV_chart.cs (96%) rename {Quantower/Indicators => Indicators/Charts}/SMAPE_chart.cs (100%) rename {Quantower/Indicators => Indicators/Charts}/SMA_chart.cs (100%) rename {Quantower/Indicators => Indicators/Charts}/SMMA_chart.cs (100%) rename {Quantower/Indicators => Indicators/Charts}/TEMA_chart.cs (100%) rename {Quantower/Indicators => Indicators/Charts}/VAR_chart.cs (96%) rename {Quantower/Indicators => Indicators/Charts}/WMAPE_chart.cs (96%) rename {Quantower/Indicators => Indicators/Charts}/WMA_chart.cs (100%) rename Quantower/Quantower.csproj => Indicators/Indicators.csproj (75%) delete mode 100644 Quantower/Indicators/ATR_chart.cs delete mode 100644 Quantower/Indicators/JMA_chart.cs delete mode 100644 Quantower/Indicators/RSI_chart.cs delete mode 100644 Quantower/dll/TradingPlatform.BusinessLayer.dll create mode 100644 Strategies/SimpleMACross1.cs create mode 100644 Strategies/Strategies.csproj diff --git a/Source/Basics/ADD_Series.cs b/Calculations/Basics/ADD_Series.cs similarity index 100% rename from Source/Basics/ADD_Series.cs rename to Calculations/Basics/ADD_Series.cs diff --git a/Source/Basics/DIV_Series.cs b/Calculations/Basics/DIV_Series.cs similarity index 100% rename from Source/Basics/DIV_Series.cs rename to Calculations/Basics/DIV_Series.cs diff --git a/Source/Basics/MAX_Series.cs b/Calculations/Basics/MAX_Series.cs similarity index 96% rename from Source/Basics/MAX_Series.cs rename to Calculations/Basics/MAX_Series.cs index b8b197c3..109461a9 100644 --- a/Source/Basics/MAX_Series.cs +++ b/Calculations/Basics/MAX_Series.cs @@ -1,25 +1,25 @@ -namespace QuanTAlib; -using System; -using System.Linq; - -/* -MAX - Maximum value in the given period in the series. - If period = 0 => period = full length of the series - */ - -public class MAX_Series : Single_TSeries_Indicator -{ - public MAX_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) - { - if (base._data.Count > 0) { base.Add(base._data); } - } - private readonly System.Collections.Generic.List _buffer = new(); - - public override void Add((DateTime t, double v) TValue, bool update) - { - Add_Replace_Trim(_buffer, TValue.v, _p, update); - double _max = _buffer.Max(); - - base.Add((TValue.t, _max), update, _NaN); - } +namespace QuanTAlib; +using System; +using System.Linq; + +/* +MAX - Maximum value in the given period in the series. + If period = 0 => period = full length of the series + */ + +public class MAX_Series : Single_TSeries_Indicator +{ + public MAX_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) + { + if (base._data.Count > 0) { base.Add(base._data); } + } + private readonly System.Collections.Generic.List _buffer = new(); + + public override void Add((DateTime t, double v) TValue, bool update) + { + Add_Replace_Trim(_buffer, TValue.v, _p, update); + double _max = _buffer.Max(); + + base.Add((TValue.t, _max), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Basics/MIDPOINT_Series.cs b/Calculations/Basics/MIDPOINT_Series.cs similarity index 96% rename from Source/Basics/MIDPOINT_Series.cs rename to Calculations/Basics/MIDPOINT_Series.cs index 9bccdebf..d96a39a6 100644 --- a/Source/Basics/MIDPOINT_Series.cs +++ b/Calculations/Basics/MIDPOINT_Series.cs @@ -1,37 +1,37 @@ -namespace QuanTAlib; -using System; - -/* -MIDPOINT: Midpoint value (max+min)/2 in the given period in the series. - If period = 0 => period = full length of the series - -Sources: - https://thefaqblog.com/what-is-the-midpoint-in-statistics/ - - */ - -public class MIDPOINT_Series : Single_TSeries_Indicator -{ - public MIDPOINT_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) - { - if (base._data.Count > 0) - { base.Add(base._data); } - } - private readonly System.Collections.Generic.List _buffer = new(); - - public override void Add((DateTime t, double v) TValue, bool update) - { - Add_Replace_Trim(_buffer, TValue.v, _p, update); - - double _max = TValue.v; - double _min = TValue.v; - for (int i = 0; i < this._buffer.Count; i++) - { - _max = Math.Max(this._buffer[i], _max); - _min = Math.Min(this._buffer[i], _min); - } - double _mid = (_max + _min) * 0.5; - - base.Add((TValue.t, _mid), update, _NaN); - } +namespace QuanTAlib; +using System; + +/* +MIDPOINT: Midpoint value (max+min)/2 in the given period in the series. + If period = 0 => period = full length of the series + +Sources: + https://thefaqblog.com/what-is-the-midpoint-in-statistics/ + + */ + +public class MIDPOINT_Series : Single_TSeries_Indicator +{ + public MIDPOINT_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) + { + if (base._data.Count > 0) + { base.Add(base._data); } + } + private readonly System.Collections.Generic.List _buffer = new(); + + public override void Add((DateTime t, double v) TValue, bool update) + { + Add_Replace_Trim(_buffer, TValue.v, _p, update); + + double _max = TValue.v; + double _min = TValue.v; + for (int i = 0; i < this._buffer.Count; i++) + { + _max = Math.Max(this._buffer[i], _max); + _min = Math.Min(this._buffer[i], _min); + } + double _mid = (_max + _min) * 0.5; + + base.Add((TValue.t, _mid), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Basics/MIDPRICE_Series.cs b/Calculations/Basics/MIDPRICE_Series.cs similarity index 96% rename from Source/Basics/MIDPRICE_Series.cs rename to Calculations/Basics/MIDPRICE_Series.cs index f7602c3a..c3a3c444 100644 --- a/Source/Basics/MIDPRICE_Series.cs +++ b/Calculations/Basics/MIDPRICE_Series.cs @@ -1,32 +1,32 @@ -namespace QuanTAlib; -using System; -using System.Linq; - -/* -MIDPRICE: Midpoint price (highhest high + lowest low)/2 in the given period in the series. - If period = 0 => period = full length of the series - - */ - -public class MIDPRICE_Series : Single_TBars_Indicator -{ - public MIDPRICE_Series(TBars source, int period, bool useNaN = false) : base(source, period, useNaN) - { - if (base._bars.Count > 0) - { base.Add(base._bars); } - } - private readonly System.Collections.Generic.List _bufferhi = new(); - private readonly System.Collections.Generic.List _bufferlo = new(); - - public override void Add((DateTime t, double o, double h, double l, double c, double v) TBar, bool update) - { - Add_Replace_Trim(_bufferhi, TBar.h, _p, update); - Add_Replace_Trim(_bufferlo, TBar.l, _p, update); - - double _max = _bufferhi.Max(); - double _min = _bufferlo.Min(); - double _mid = (_max + _min) * 0.5; - - base.Add((TBar.t, _mid), update, _NaN); - } +namespace QuanTAlib; +using System; +using System.Linq; + +/* +MIDPRICE: Midpoint price (highhest high + lowest low)/2 in the given period in the series. + If period = 0 => period = full length of the series + + */ + +public class MIDPRICE_Series : Single_TBars_Indicator +{ + public MIDPRICE_Series(TBars source, int period, bool useNaN = false) : base(source, period, useNaN) + { + if (base._bars.Count > 0) + { base.Add(base._bars); } + } + private readonly System.Collections.Generic.List _bufferhi = new(); + private readonly System.Collections.Generic.List _bufferlo = new(); + + public override void Add((DateTime t, double o, double h, double l, double c, double v) TBar, bool update) + { + Add_Replace_Trim(_bufferhi, TBar.h, _p, update); + Add_Replace_Trim(_bufferlo, TBar.l, _p, update); + + double _max = _bufferhi.Max(); + double _min = _bufferlo.Min(); + double _mid = (_max + _min) * 0.5; + + base.Add((TBar.t, _mid), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Basics/MIN_Series.cs b/Calculations/Basics/MIN_Series.cs similarity index 96% rename from Source/Basics/MIN_Series.cs rename to Calculations/Basics/MIN_Series.cs index 2621ec75..e41a0ba4 100644 --- a/Source/Basics/MIN_Series.cs +++ b/Calculations/Basics/MIN_Series.cs @@ -1,25 +1,25 @@ -namespace QuanTAlib; -using System; -using System.Linq; - -/* -MIN - Minimum value in the given period in the series. - If period = 0 => period = full length of the series - */ - -public class MIN_Series : Single_TSeries_Indicator -{ - public MIN_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) - { - if (base._data.Count > 0) { base.Add(base._data); } - } - private readonly System.Collections.Generic.List _buffer = new(); - - public override void Add((System.DateTime t, double v) TValue, bool update) - { - Add_Replace_Trim(_buffer, TValue.v, _p, update); - - double _min = _buffer.Min(); - base.Add((TValue.t, _min), update, _NaN); - } +namespace QuanTAlib; +using System; +using System.Linq; + +/* +MIN - Minimum value in the given period in the series. + If period = 0 => period = full length of the series + */ + +public class MIN_Series : Single_TSeries_Indicator +{ + public MIN_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) + { + if (base._data.Count > 0) { base.Add(base._data); } + } + private readonly System.Collections.Generic.List _buffer = new(); + + public override void Add((System.DateTime t, double v) TValue, bool update) + { + Add_Replace_Trim(_buffer, TValue.v, _p, update); + + double _min = _buffer.Min(); + base.Add((TValue.t, _min), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Basics/MUL_Series.cs b/Calculations/Basics/MUL_Series.cs similarity index 100% rename from Source/Basics/MUL_Series.cs rename to Calculations/Basics/MUL_Series.cs diff --git a/Source/Basics/Pair_TSeries_Abstract.cs b/Calculations/Basics/Pair_TSeries_Abstract.cs similarity index 100% rename from Source/Basics/Pair_TSeries_Abstract.cs rename to Calculations/Basics/Pair_TSeries_Abstract.cs diff --git a/Source/Basics/SUB_Series.cs b/Calculations/Basics/SUB_Series.cs similarity index 100% rename from Source/Basics/SUB_Series.cs rename to Calculations/Basics/SUB_Series.cs diff --git a/Source/Basics/SUM_Series.cs b/Calculations/Basics/SUM_Series.cs similarity index 96% rename from Source/Basics/SUM_Series.cs rename to Calculations/Basics/SUM_Series.cs index b3846737..bb98134d 100644 --- a/Source/Basics/SUM_Series.cs +++ b/Calculations/Basics/SUM_Series.cs @@ -1,35 +1,35 @@ -namespace QuanTAlib; -using System; - -/* -SUM: Cumulative Sum (aka Running Total) - SUM across a period provides a rolling sum of all values across the period. - If SUM values would be divided with period, the output would be SMA() - -Sources: - https://en.wikipedia.org/wiki/CUSUM - - */ - -public class SUM_Series : Single_TSeries_Indicator -{ - public SUM_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) - { - if (base._data.Count > 0) { base.Add(base._data); } - } - private readonly System.Collections.Generic.List _buffer = new(); - - public override void Add((System.DateTime t, double v) TValue, bool update) - { - if (update) { _buffer[_buffer.Count - 1] = TValue.v; } - else { _buffer.Add(TValue.v); } - if (_buffer.Count > this._p && this._p != 0) { _buffer.RemoveAt(0); } - - double _sum = 0; - for (int i = 0; i < _buffer.Count; i++) { _sum += _buffer[i]; } - - var result = (TValue.t, (this.Count < this._p - 1 && this._NaN) ? double.NaN : _sum); - - base.Add(result, update); - } -} +namespace QuanTAlib; +using System; + +/* +SUM: Cumulative Sum (aka Running Total) + SUM across a period provides a rolling sum of all values across the period. + If SUM values would be divided with period, the output would be SMA() + +Sources: + https://en.wikipedia.org/wiki/CUSUM + + */ + +public class SUM_Series : Single_TSeries_Indicator +{ + public SUM_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) + { + if (base._data.Count > 0) { base.Add(base._data); } + } + private readonly System.Collections.Generic.List _buffer = new(); + + public override void Add((System.DateTime t, double v) TValue, bool update) + { + if (update) { _buffer[_buffer.Count - 1] = TValue.v; } + else { _buffer.Add(TValue.v); } + if (_buffer.Count > this._p && this._p != 0) { _buffer.RemoveAt(0); } + + double _sum = 0; + for (int i = 0; i < _buffer.Count; i++) { _sum += _buffer[i]; } + + var result = (TValue.t, (this.Count < this._p - 1 && this._NaN) ? double.NaN : _sum); + + base.Add(result, update); + } +} diff --git a/Source/Basics/Single_TBars_Abstract.cs b/Calculations/Basics/Single_TBars_Abstract.cs similarity index 100% rename from Source/Basics/Single_TBars_Abstract.cs rename to Calculations/Basics/Single_TBars_Abstract.cs diff --git a/Source/Basics/Single_TSeries_Abstract.cs b/Calculations/Basics/Single_TSeries_Abstract.cs similarity index 97% rename from Source/Basics/Single_TSeries_Abstract.cs rename to Calculations/Basics/Single_TSeries_Abstract.cs index 6c283237..d52ad80d 100644 --- a/Source/Basics/Single_TSeries_Abstract.cs +++ b/Calculations/Basics/Single_TSeries_Abstract.cs @@ -1,70 +1,70 @@ -namespace QuanTAlib; -using System; -using System.Collections.Generic; -using System.Linq; - -/* -Abstract classes with all scaffolding required to build indicators. - All abstracts support period, NaN, and all permutations of Add() methods. - Indicator classess need to implement: - - Chaining constructor (Abstract's constructor executes first) - - Default Add(value) class - - optional Add(series) bulk insert class (for optimization of historical analysis) - - Single_TSeries_Indicator - one single-value TSeries in, one TSeries out. - Pair_TSeries_Indicator - Two TSeries in, one TSeries out. (includes simple semaphoring) - Single_TBars_Indicator - One OHLCV TBars in, one TSeries out. - - */ -public abstract class Single_TSeries_Indicator : TSeries -{ - protected readonly int _period; - protected readonly bool _NaN; - protected readonly TSeries _data; - protected int _p; - - // Chainable Constructor - add it at the end of primary constructor :base(source: source, period: period, useNaN: useNaN) - protected Single_TSeries_Indicator(TSeries source, int period, bool useNaN) { - _data = source; - _period = period; - _p = _period; - _NaN = useNaN; - _data.Pub += Sub; - } - - // overridable Add() method to add/update a single item at the end of the list - - public virtual void Add((DateTime t, double v) TValue, bool update, bool useNaN) { - if (_period == 0) { _p = Length; } - var res = (TValue.t, Count < _p - 1 && _NaN ? double.NaN : TValue.v); - base.Add(res, update); - } - public new virtual void Add((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) { - foreach (var item in data) { Add(TValue: item, 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); - - protected static void Add_Replace(List l, double v, bool update) - { - if (update) - { l[l.Count - 1] = v; } - else - { l.Add(v); } - } - protected static double Add_Replace_Trim(List l, double v, int p, bool update) - { - Add_Replace(l, v, update); - double ret = (l.Count > 0) ? l.First() : 0; - if (l.Count > p && p != 0) - { - l.RemoveAt(0); - } - return ret; - } -} +namespace QuanTAlib; +using System; +using System.Collections.Generic; +using System.Linq; + +/* +Abstract classes with all scaffolding required to build indicators. + All abstracts support period, NaN, and all permutations of Add() methods. + Indicator classess need to implement: + - Chaining constructor (Abstract's constructor executes first) + - Default Add(value) class + - optional Add(series) bulk insert class (for optimization of historical analysis) + + Single_TSeries_Indicator - one single-value TSeries in, one TSeries out. + Pair_TSeries_Indicator - Two TSeries in, one TSeries out. (includes simple semaphoring) + Single_TBars_Indicator - One OHLCV TBars in, one TSeries out. + + */ +public abstract class Single_TSeries_Indicator : TSeries +{ + protected readonly int _period; + protected readonly bool _NaN; + protected readonly TSeries _data; + protected int _p; + + // Chainable Constructor - add it at the end of primary constructor :base(source: source, period: period, useNaN: useNaN) + protected Single_TSeries_Indicator(TSeries source, int period, bool useNaN) { + _data = source; + _period = period; + _p = _period; + _NaN = useNaN; + _data.Pub += Sub; + } + + // overridable Add() method to add/update a single item at the end of the list + + public virtual void Add((DateTime t, double v) TValue, bool update, bool useNaN) { + if (_period == 0) { _p = Length; } + var res = (TValue.t, Count < _p - 1 && _NaN ? double.NaN : TValue.v); + base.Add(res, update); + } + public new virtual void Add((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) { + foreach (var item in data) { Add(TValue: item, 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); + + protected static void Add_Replace(List l, double v, bool update) + { + if (update) + { l[l.Count - 1] = v; } + else + { l.Add(v); } + } + protected static double Add_Replace_Trim(List l, double v, int p, bool update) + { + Add_Replace(l, v, update); + double ret = (l.Count > 0) ? l.First() : 0; + if (l.Count > p && p != 0) + { + l.RemoveAt(0); + } + return ret; + } +} diff --git a/Source/Basics/TBars.cs b/Calculations/Basics/TBars.cs similarity index 100% rename from Source/Basics/TBars.cs rename to Calculations/Basics/TBars.cs diff --git a/Source/Basics/TR_Series.cs b/Calculations/Basics/TR_Series.cs similarity index 100% rename from Source/Basics/TR_Series.cs rename to Calculations/Basics/TR_Series.cs diff --git a/Source/Basics/TSeries.cs b/Calculations/Basics/TSeries.cs similarity index 100% rename from Source/Basics/TSeries.cs rename to Calculations/Basics/TSeries.cs diff --git a/Source/Basics/ZL_Series.cs b/Calculations/Basics/ZL_Series.cs similarity index 96% rename from Source/Basics/ZL_Series.cs rename to Calculations/Basics/ZL_Series.cs index 7e06bf96..0a85f65b 100644 --- a/Source/Basics/ZL_Series.cs +++ b/Calculations/Basics/ZL_Series.cs @@ -1,34 +1,34 @@ -namespace QuanTAlib; -using System; - -/* -ZL: Zero Lag - Data is de-lagged by removing the data from “lag” days ago, thus removing - (or attempting to) the cumulative effect of the moving average. - -Calculation: - Lag = (Period-1)/2 - ZL = Data + (Data - Data(Lag days ago) ) - -Sources: - https://mudrex.com/blog/zero-lag-ema-trading-strategy/ - - */ - -public class ZL_Series : Single_TSeries_Indicator -{ - public ZL_Series(TSeries source, int period, bool useNaN = false) : base(source, period:period, useNaN:useNaN) { - if (this._data.Count > 0) { base.Add(this._data); } - } - - public override void Add((DateTime t, double v) TValue, bool update) - { - int _lag = (int)((_p-1) * 0.5); - _lag = (this.Count-_lag < 0) ? 0 : this.Count-_lag; - - double _zl = TValue.v + (TValue.v - _data[_lag].v); - - var ret = (TValue.t, (base.Count==0 && base._NaN) ? double.NaN : _zl ); - base.Add(ret, update); - } +namespace QuanTAlib; +using System; + +/* +ZL: Zero Lag + Data is de-lagged by removing the data from “lag” days ago, thus removing + (or attempting to) the cumulative effect of the moving average. + +Calculation: + Lag = (Period-1)/2 + ZL = Data + (Data - Data(Lag days ago) ) + +Sources: + https://mudrex.com/blog/zero-lag-ema-trading-strategy/ + + */ + +public class ZL_Series : Single_TSeries_Indicator +{ + public ZL_Series(TSeries source, int period, bool useNaN = false) : base(source, period:period, useNaN:useNaN) { + if (this._data.Count > 0) { base.Add(this._data); } + } + + public override void Add((DateTime t, double v) TValue, bool update) + { + int _lag = (int)((_p-1) * 0.5); + _lag = (this.Count-_lag < 0) ? 0 : this.Count-_lag; + + double _zl = TValue.v + (TValue.v - _data[_lag].v); + + var ret = (TValue.t, (base.Count==0 && base._NaN) ? double.NaN : _zl ); + base.Add(ret, update); + } } \ No newline at end of file diff --git a/Source/QuanTAlib.csproj b/Calculations/Calculations.csproj similarity index 90% rename from Source/QuanTAlib.csproj rename to Calculations/Calculations.csproj index 8e07cace..ae442495 100644 --- a/Source/QuanTAlib.csproj +++ b/Calculations/Calculations.csproj @@ -1,71 +1,71 @@ - - - - QuanTAlib - 0.1.30 - Library of Technical Indicators for .NET - Quantitative Technical Analysis library for real-time (streaming) data analysis - git - https://github.com/mihakralj/QuanTAlib - true - Miha Kralj - Miha Kralj - readme.md - net6.0 - disable - preview - disable - true - en-US - QuanTAlib - QuanTAlib - True - AnyCPU - False - embedded - True - True - - Indicators;Stock;Market;Technical;Analysis;Algorithmic;Trading;Trade;Trend;Momentum;Finance;Algorithm;Algo; - AlgoTrading;Financial;Strategy;Chart;Charting;Oscillator;Overlay;Equity;Bitcoin;Crypto;Cryptocurrency;Forex; - Quantitative;Historical;Quotes; - - Apache-2.0 - - - - full - True - 7 - True - anycpu - - - - True - 7 - True - anycpu - - - QuanTAlib2.png - https://raw.githubusercontent.com/mihakralj/QuanTAlib/main/.github/QuanTAlib2.png - True - ..\.sonarlint\mihakralj_quantalibcsharp.ruleset - - - - - - - True - - - - True - False - - - - + + + + QuanTAlib + 0.1.31 + Library of TA Calculations, Charts and Strategies for Quantower + Quantitative Technical Analysis Library in C# for Quantower + git + https://github.com/mihakralj/QuanTAlib + true + Miha Kralj + Miha Kralj + readme.md + net8.0;net7.0;net6.0 + disable + preview + disable + true + en-US + QuanTAlib + QuanTAlib + True + AnyCPU + False + embedded + True + True + + Indicators;Stock;Market;Technical;Analysis;Algorithmic;Trading;Trade;Trend;Momentum;Finance;Algorithm;Algo; + AlgoTrading;Financial;Strategy;Chart;Charting;Oscillator;Overlay;Equity;Bitcoin;Crypto;Cryptocurrency;Forex; + Quantitative;Historical;Quotes; + + Apache-2.0 + + + + full + True + 7 + True + anycpu + + + + True + 7 + True + anycpu + + + QuanTAlib2.png + https://raw.githubusercontent.com/mihakralj/QuanTAlib/main/.github/QuanTAlib2.png + True + ..\.sonarlint\mihakralj_quantalibcsharp.ruleset + + + + + + + True + + + + True + False + + + + \ No newline at end of file diff --git a/Source/Feeds/Alphavantage_Feed.cs b/Calculations/Feeds/Alphavantage_Feed.cs similarity index 97% rename from Source/Feeds/Alphavantage_Feed.cs rename to Calculations/Feeds/Alphavantage_Feed.cs index 2f521ae2..a5c52eba 100644 --- a/Source/Feeds/Alphavantage_Feed.cs +++ b/Calculations/Feeds/Alphavantage_Feed.cs @@ -1,56 +1,56 @@ -namespace QuanTAlib; -using System; -using System.Text.Json; - -/* -Alphavantage - Free API to collect 100 recent daily quotes. It requires a (free) API key - Get API key at https://www.alphavantage.co/support/#api-key - Parameters: - Symbol: stock ("AAPL"), - APIkey: unique Alphavantage API key - - - -public class Alphavantage_Feed : TBars -{ - public enum Interval { Month, Week, Day, Hour, Min30, Min15, Min5, Min1} - public Alphavantage_Feed(string Symbol = "IBM", string APIkey = "demo") - { - System.Net.Http.HttpClient client = new(); - - string req = "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED" + "&symbol=" + Symbol + "&apikey=" + APIkey; - var msg = client.GetStringAsync(req).Result; - var jres = JsonSerializer.Deserialize(msg).RootElement; - jres.TryGetProperty("Time Series (Daily)", out JsonElement json); - - if (json.ValueKind == JsonValueKind.Undefined) {throw new InvalidOperationException("Stock symbol "+Symbol+" not found"); } - foreach (var val in json.EnumerateObject()) { base.Add(GetOHLC(val)); } - base.Reverse(); - } - private static (DateTime t, double o, double h, double l, double c, double v) GetOHLC(JsonProperty json) - { - double o, h, l, c, v; - o = h = l = c = v = 0; - DateTime date = Convert.ToDateTime(json.Name); - foreach (var val in json.Value.EnumerateObject()) - { - switch (val.Name) - { - case "1. open": o = Convert.ToDouble(val.Value.ToString()); break; - case "1b. open (USD)": o = Convert.ToDouble(val.Value.ToString()); break; - case "2. high": h = Convert.ToDouble(val.Value.ToString()); break; - case "2b. high (USD)": h = Convert.ToDouble(val.Value.ToString()); break; - case "3. low": l = Convert.ToDouble(val.Value.ToString()); break; - case "3b. low (USD)": l = Convert.ToDouble(val.Value.ToString()); break; - case "4. close": c = Convert.ToDouble(val.Value.ToString()); break; - case "4b. close (USD)": c = Convert.ToDouble(val.Value.ToString()); break; - case "5. adjusted close": c = Convert.ToDouble(val.Value.ToString()); break; - case "5. volume": v = Convert.ToDouble(val.Value.ToString()); break; - case "6. volume": v = Convert.ToDouble(val.Value.ToString()); break; - default: o = 0; h = 0; l = 0; c = 0; v = 0; break; - } - } - return (date, o, h, l, c, v); - } -} +namespace QuanTAlib; +using System; +using System.Text.Json; + +/* +Alphavantage - Free API to collect 100 recent daily quotes. It requires a (free) API key + Get API key at https://www.alphavantage.co/support/#api-key + Parameters: + Symbol: stock ("AAPL"), + APIkey: unique Alphavantage API key + + + +public class Alphavantage_Feed : TBars +{ + public enum Interval { Month, Week, Day, Hour, Min30, Min15, Min5, Min1} + public Alphavantage_Feed(string Symbol = "IBM", string APIkey = "demo") + { + System.Net.Http.HttpClient client = new(); + + string req = "https://www.alphavantage.co/query?function=TIME_SERIES_DAILY_ADJUSTED" + "&symbol=" + Symbol + "&apikey=" + APIkey; + var msg = client.GetStringAsync(req).Result; + var jres = JsonSerializer.Deserialize(msg).RootElement; + jres.TryGetProperty("Time Series (Daily)", out JsonElement json); + + if (json.ValueKind == JsonValueKind.Undefined) {throw new InvalidOperationException("Stock symbol "+Symbol+" not found"); } + foreach (var val in json.EnumerateObject()) { base.Add(GetOHLC(val)); } + base.Reverse(); + } + private static (DateTime t, double o, double h, double l, double c, double v) GetOHLC(JsonProperty json) + { + double o, h, l, c, v; + o = h = l = c = v = 0; + DateTime date = Convert.ToDateTime(json.Name); + foreach (var val in json.Value.EnumerateObject()) + { + switch (val.Name) + { + case "1. open": o = Convert.ToDouble(val.Value.ToString()); break; + case "1b. open (USD)": o = Convert.ToDouble(val.Value.ToString()); break; + case "2. high": h = Convert.ToDouble(val.Value.ToString()); break; + case "2b. high (USD)": h = Convert.ToDouble(val.Value.ToString()); break; + case "3. low": l = Convert.ToDouble(val.Value.ToString()); break; + case "3b. low (USD)": l = Convert.ToDouble(val.Value.ToString()); break; + case "4. close": c = Convert.ToDouble(val.Value.ToString()); break; + case "4b. close (USD)": c = Convert.ToDouble(val.Value.ToString()); break; + case "5. adjusted close": c = Convert.ToDouble(val.Value.ToString()); break; + case "5. volume": v = Convert.ToDouble(val.Value.ToString()); break; + case "6. volume": v = Convert.ToDouble(val.Value.ToString()); break; + default: o = 0; h = 0; l = 0; c = 0; v = 0; break; + } + } + return (date, o, h, l, c, v); + } +} */ \ No newline at end of file diff --git a/Source/Feeds/GBM_Feed.cs b/Calculations/Feeds/GBM_Feed.cs similarity index 97% rename from Source/Feeds/GBM_Feed.cs rename to Calculations/Feeds/GBM_Feed.cs index e0ca22dc..a08568c1 100644 --- a/Source/Feeds/GBM_Feed.cs +++ b/Calculations/Feeds/GBM_Feed.cs @@ -1,63 +1,63 @@ -namespace QuanTAlib; -using System; - -/* -GBM - Geometric Brownian Motion is a random simulator of market movement, returning List - GBM can be used for testing indicators, validation and Monte Carlo simulations of strategies. - - Sample usage: - GBM-Random data = new(); // generates 1 year (252) list of bars - GBM-Random data = new(Bars: 1000); // generates 1,000 bars - GBM-Random data = new(Bars: 252, Volatility: 0.05, Drift: 0.0005, Seed: 100.0) - - Parameters - Bars: number of bars (quotes) requested - Volatility: how dymamic/volatile the series should be; default is 1 - Drift: incremental drift due to annual interest rate; default is 5% - Seed: starting value of the random series; should not be 0 - - */ - -public class GBM_Feed : TBars -{ - private double seed; - readonly double drift, volatility; - readonly int precision; - public GBM_Feed(int Bars = 252, double Volatility = 1.0, double Drift = 0.05, double Seed = 100.0, int Precision = 2) { - this.seed = Seed; - volatility = Volatility*0.01; - drift = Drift*0.01; - precision = Precision; - for (int i = 0; i OCMin)? (2 * OCMin) - Low : Low; - - double Volume = GBM_value(seed*10, volatility*2, Drift:0, precision: 1); - - base.Add((timestamp, Open, High, Low, Close, Volume), update); - seed = Close; - } - - private static double GBM_value(double Seed, double Volatility, double Drift, int precision) { - Random rnd = new(); - 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 Math.Round(Seed * Math.Exp( Drift - (Volatility*Volatility*0.5) + (Volatility * Z)), digits: precision); - } +namespace QuanTAlib; +using System; + +/* +GBM - Geometric Brownian Motion is a random simulator of market movement, returning List + GBM can be used for testing indicators, validation and Monte Carlo simulations of strategies. + + Sample usage: + GBM-Random data = new(); // generates 1 year (252) list of bars + GBM-Random data = new(Bars: 1000); // generates 1,000 bars + GBM-Random data = new(Bars: 252, Volatility: 0.05, Drift: 0.0005, Seed: 100.0) + + Parameters + Bars: number of bars (quotes) requested + Volatility: how dymamic/volatile the series should be; default is 1 + Drift: incremental drift due to annual interest rate; default is 5% + Seed: starting value of the random series; should not be 0 + + */ + +public class GBM_Feed : TBars +{ + private double seed; + readonly double drift, volatility; + readonly int precision; + public GBM_Feed(int Bars = 252, double Volatility = 1.0, double Drift = 0.05, double Seed = 100.0, int Precision = 2) { + this.seed = Seed; + volatility = Volatility*0.01; + drift = Drift*0.01; + precision = Precision; + for (int i = 0; i OCMin)? (2 * OCMin) - Low : Low; + + double Volume = GBM_value(seed*10, volatility*2, Drift:0, precision: 1); + + base.Add((timestamp, Open, High, Low, Close, Volume), update); + seed = Close; + } + + private static double GBM_value(double Seed, double Volatility, double Drift, int precision) { + Random rnd = new(); + 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 Math.Round(Seed * Math.Exp( Drift - (Volatility*Volatility*0.5) + (Volatility * Z)), digits: precision); + } } \ No newline at end of file diff --git a/Source/Feeds/RND_Feed.cs b/Calculations/Feeds/RND_Feed.cs similarity index 97% rename from Source/Feeds/RND_Feed.cs rename to Calculations/Feeds/RND_Feed.cs index 1d17840d..c6e311af 100644 --- a/Source/Feeds/RND_Feed.cs +++ b/Calculations/Feeds/RND_Feed.cs @@ -1,28 +1,28 @@ -namespace QuanTAlib; -using System; - -/* -Random Bars generator - used for testing, validation and fun - Returns 'bars' number of candles that follow common market movement. - volatility defines how 'jumpy' is the series of - startvalue defines beginning closing price that then guides the rest of series - - */ - -public class RND_Feed : TBars -{ - public RND_Feed(int Bars, double Volatility = 0.05, double Startvalue = 100.0) - { - Random rnd = new(); - 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); - 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); - } - } +namespace QuanTAlib; +using System; + +/* +Random Bars generator - used for testing, validation and fun + Returns 'bars' number of candles that follow common market movement. + volatility defines how 'jumpy' is the series of + startvalue defines beginning closing price that then guides the rest of series + + */ + +public class RND_Feed : TBars +{ + public RND_Feed(int Bars, double Volatility = 0.05, double Startvalue = 100.0) + { + Random rnd = new(); + 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); + 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); + } + } } \ No newline at end of file diff --git a/Source/Feeds/Yahoo_Feed.cs b/Calculations/Feeds/Yahoo_Feed.cs similarity index 97% rename from Source/Feeds/Yahoo_Feed.cs rename to Calculations/Feeds/Yahoo_Feed.cs index 4df7d380..b904fbac 100644 --- a/Source/Feeds/Yahoo_Feed.cs +++ b/Calculations/Feeds/Yahoo_Feed.cs @@ -1,49 +1,49 @@ -namespace QuanTAlib; -using System; -using System.Text.Json; - -/* -Yahoo Finance - Free API feed to collect daily market quotes - Parameters: - Symbol: stock symbol (default: "IBM") - Period: number of days of collected history (default: 252) - Usage: - Yahoo_Feed ticker = new("MSFT", 20) - - - -public class Yahoo_Feed : TBars -{ - public Yahoo_Feed(string Symbol = "IBM", int Period = 252) { - Period = (int)(Period*1.45); - string requestUrl = "https://query1.finance.yahoo.com/v8/finance/chart/"+ - Symbol+"?interval=1d&period1="+ - (int)new DateTimeOffset(DateTime.UtcNow.AddDays(-Period+1)).ToUnixTimeSeconds()+"&period2="+ - (int)new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds(); - System.Net.Http.HttpClient client = new(); - var msg = client.GetStringAsync(requestUrl).Result; - var jresult = JsonSerializer.Deserialize(msg).RootElement; - - jresult.TryGetProperty("chart",out JsonElement json); - json.TryGetProperty("result",out json); - json[0].TryGetProperty("timestamp",out JsonElement datetime); - json[0].TryGetProperty("indicators",out json); - json.TryGetProperty("quote",out json); - json[0].TryGetProperty("open",out JsonElement open); - json[0].TryGetProperty("high",out JsonElement high); - json[0].TryGetProperty("low",out JsonElement low); - json[0].TryGetProperty("close",out JsonElement close); - json[0].TryGetProperty("volume",out JsonElement volume); - - for (int i=0; i +Yahoo Finance - Free API feed to collect daily market quotes + Parameters: + Symbol: stock symbol (default: "IBM") + Period: number of days of collected history (default: 252) + Usage: + Yahoo_Feed ticker = new("MSFT", 20) + + + +public class Yahoo_Feed : TBars +{ + public Yahoo_Feed(string Symbol = "IBM", int Period = 252) { + Period = (int)(Period*1.45); + string requestUrl = "https://query1.finance.yahoo.com/v8/finance/chart/"+ + Symbol+"?interval=1d&period1="+ + (int)new DateTimeOffset(DateTime.UtcNow.AddDays(-Period+1)).ToUnixTimeSeconds()+"&period2="+ + (int)new DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds(); + System.Net.Http.HttpClient client = new(); + var msg = client.GetStringAsync(requestUrl).Result; + var jresult = JsonSerializer.Deserialize(msg).RootElement; + + jresult.TryGetProperty("chart",out JsonElement json); + json.TryGetProperty("result",out json); + json[0].TryGetProperty("timestamp",out JsonElement datetime); + json[0].TryGetProperty("indicators",out json); + json.TryGetProperty("quote",out json); + json[0].TryGetProperty("open",out JsonElement open); + json[0].TryGetProperty("high",out JsonElement high); + json[0].TryGetProperty("low",out JsonElement low); + json[0].TryGetProperty("close",out JsonElement close); + json[0].TryGetProperty("volume",out JsonElement volume); + + for (int i=0; i -CCI: Commodity Channel Index - Commodity Channel Index is a momentum oscillator used to primarily identify overbought - and oversold levels relative to a mean. CCI measures the current price level relative - to an average price level over a given period of time: - - CCI is relatively high when prices are far above their average. - - CCI is relatively low when prices are far below their average. - Using this method, CCI can be used to identify overbought and oversold levels. - -Sources: - https://www.investopedia.com/terms/c/commoditychannelindex.asp - https://www.fidelity.com/learning-center/trading-investing/technical-analysis/technical-indicator-guide/cci - - */ - -public class CCI_Series : Single_TBars_Indicator -{ - private readonly System.Collections.Generic.List _tp = new(); - - public CCI_Series(TBars source, int period = 10, bool useNaN = false) : base(source, period: period, useNaN: useNaN) - { - if (_bars.Count > 0) { base.Add(_bars); } - } - - public override void Add((DateTime t, double o, double h, double l, double c, double v) TBar, bool update) - { - double _tpItem = (TBar.h + TBar.l + TBar.c) / 3.0; - if (update) { this._tp[this._tp.Count - 1] = _tpItem; } else { this._tp.Add(_tpItem); } - if (this._tp.Count > this._p) { this._tp.RemoveAt(0); } - - // average TP over _tp buffer - double _avgTp = _tp.Average(); - - // average Deviation over _tp buffer - double _avgDv = 0; - for (int i = 0; i < this._tp.Count; i++) { _avgDv += Math.Abs(_avgTp - this._tp[i]); } - _avgDv /= this._tp.Count; - - - double _cci = (_avgDv == 0) ? double.NaN : (this._tp[this._tp.Count-1] - _avgTp) / (0.015 * _avgDv); - - base.Add((TBar.t, _cci), update, _NaN); - } +namespace QuanTAlib; +using System; +using System.Linq; +using static System.Net.Mime.MediaTypeNames; + +/* +CCI: Commodity Channel Index + Commodity Channel Index is a momentum oscillator used to primarily identify overbought + and oversold levels relative to a mean. CCI measures the current price level relative + to an average price level over a given period of time: + - CCI is relatively high when prices are far above their average. + - CCI is relatively low when prices are far below their average. + Using this method, CCI can be used to identify overbought and oversold levels. + +Sources: + https://www.investopedia.com/terms/c/commoditychannelindex.asp + https://www.fidelity.com/learning-center/trading-investing/technical-analysis/technical-indicator-guide/cci + + */ + +public class CCI_Series : Single_TBars_Indicator +{ + private readonly System.Collections.Generic.List _tp = new(); + + public CCI_Series(TBars source, int period = 10, bool useNaN = false) : base(source, period: period, useNaN: useNaN) + { + if (_bars.Count > 0) { base.Add(_bars); } + } + + public override void Add((DateTime t, double o, double h, double l, double c, double v) TBar, bool update) + { + double _tpItem = (TBar.h + TBar.l + TBar.c) / 3.0; + if (update) { this._tp[this._tp.Count - 1] = _tpItem; } else { this._tp.Add(_tpItem); } + if (this._tp.Count > this._p) { this._tp.RemoveAt(0); } + + // average TP over _tp buffer + double _avgTp = _tp.Average(); + + // average Deviation over _tp buffer + double _avgDv = 0; + for (int i = 0; i < this._tp.Count; i++) { _avgDv += Math.Abs(_avgTp - this._tp[i]); } + _avgDv /= this._tp.Count; + + + double _cci = (_avgDv == 0) ? double.NaN : (this._tp[this._tp.Count-1] - _avgTp) / (0.015 * _avgDv); + + base.Add((TBar.t, _cci), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Statistics/BIAS_Series.cs b/Calculations/Statistics/BIAS_Series.cs similarity index 100% rename from Source/Statistics/BIAS_Series.cs rename to Calculations/Statistics/BIAS_Series.cs diff --git a/Source/Statistics/CORR_Series.cs b/Calculations/Statistics/CORR_Series.cs similarity index 97% rename from Source/Statistics/CORR_Series.cs rename to Calculations/Statistics/CORR_Series.cs index f82d82de..246baa79 100644 --- a/Source/Statistics/CORR_Series.cs +++ b/Calculations/Statistics/CORR_Series.cs @@ -1,52 +1,52 @@ -namespace QuanTAlib; -using System; -using System.Collections.Generic; -using System.Linq; - -/* -CORR: Pearson's Correlation Coefficient - PCC is a measure of linear correlation between two sets of data. - It is the ratio between the covariance of two variables and the product of - their standard deviations; it is essentially a normalized measurement of - the covariance, such that the result always has a value between −1 and 1. - -Sources: - https://en.wikipedia.org/wiki/Pearson_correlation_coefficient - - */ - -public class CORR_Series : Pair_TSeries_Indicator -{ - public CORR_Series(TSeries d1, TSeries d2, int period, bool useNaN = false) : base(d1, d2, period, useNaN) - { - if (base._d1.Count > 0 && base._d2.Count > 0) { for (int i = 0; i < base._d1.Count; i++) { this.Add(base._d1[i], base._d2[i], false); } } - } - - private readonly System.Collections.Generic.List _x = new(); - private readonly System.Collections.Generic.List _xx = new(); - private readonly System.Collections.Generic.List _y = new(); - private readonly System.Collections.Generic.List _yy = new(); - private readonly System.Collections.Generic.List _xy = new(); - - public override void Add((System.DateTime t, double v) TValue1, (System.DateTime t, double v) TValue2, bool update) - { - Add_Replace_Trim(_x, TValue1.v, _p, update); - Add_Replace_Trim(_xx, TValue1.v * TValue1.v, _p, update); - Add_Replace_Trim(_y, TValue2.v, _p, update); - Add_Replace_Trim(_yy, TValue2.v * TValue2.v, _p, update); - Add_Replace_Trim(_xy, TValue1.v * TValue2.v, _p, update); - - double _sumx = _x.Sum(); - double _sumxx = _xx.Sum(); - double _sumy = _y.Sum(); - double _sumyy = _yy.Sum(); - double _sumxy = _xy.Sum(); - - double _covar = (_sumxx - _sumx * _sumx / _p) * (_sumyy - _sumy * _sumy / _p); - double _cor = (_covar != 0) ? (_sumxy - _sumx * _sumy / _p) / Math.Sqrt(_covar) : 0.0; - - var result = (TValue1.t, (this.Count < this._p - 1 && this._NaN) ? double.NaN : _cor); - if (update) { base[base.Count - 1] = result; } else { base.Add(result); } - - } -} +namespace QuanTAlib; +using System; +using System.Collections.Generic; +using System.Linq; + +/* +CORR: Pearson's Correlation Coefficient + PCC is a measure of linear correlation between two sets of data. + It is the ratio between the covariance of two variables and the product of + their standard deviations; it is essentially a normalized measurement of + the covariance, such that the result always has a value between −1 and 1. + +Sources: + https://en.wikipedia.org/wiki/Pearson_correlation_coefficient + + */ + +public class CORR_Series : Pair_TSeries_Indicator +{ + public CORR_Series(TSeries d1, TSeries d2, int period, bool useNaN = false) : base(d1, d2, period, useNaN) + { + if (base._d1.Count > 0 && base._d2.Count > 0) { for (int i = 0; i < base._d1.Count; i++) { this.Add(base._d1[i], base._d2[i], false); } } + } + + private readonly System.Collections.Generic.List _x = new(); + private readonly System.Collections.Generic.List _xx = new(); + private readonly System.Collections.Generic.List _y = new(); + private readonly System.Collections.Generic.List _yy = new(); + private readonly System.Collections.Generic.List _xy = new(); + + public override void Add((System.DateTime t, double v) TValue1, (System.DateTime t, double v) TValue2, bool update) + { + Add_Replace_Trim(_x, TValue1.v, _p, update); + Add_Replace_Trim(_xx, TValue1.v * TValue1.v, _p, update); + Add_Replace_Trim(_y, TValue2.v, _p, update); + Add_Replace_Trim(_yy, TValue2.v * TValue2.v, _p, update); + Add_Replace_Trim(_xy, TValue1.v * TValue2.v, _p, update); + + double _sumx = _x.Sum(); + double _sumxx = _xx.Sum(); + double _sumy = _y.Sum(); + double _sumyy = _yy.Sum(); + double _sumxy = _xy.Sum(); + + double _covar = (_sumxx - _sumx * _sumx / _p) * (_sumyy - _sumy * _sumy / _p); + double _cor = (_covar != 0) ? (_sumxy - _sumx * _sumy / _p) / Math.Sqrt(_covar) : 0.0; + + var result = (TValue1.t, (this.Count < this._p - 1 && this._NaN) ? double.NaN : _cor); + if (update) { base[base.Count - 1] = result; } else { base.Add(result); } + + } +} diff --git a/Source/Statistics/COVAR_Series.cs b/Calculations/Statistics/COVAR_Series.cs similarity index 100% rename from Source/Statistics/COVAR_Series.cs rename to Calculations/Statistics/COVAR_Series.cs diff --git a/Source/Statistics/DECAY_Series.cs b/Calculations/Statistics/DECAY_Series.cs similarity index 100% rename from Source/Statistics/DECAY_Series.cs rename to Calculations/Statistics/DECAY_Series.cs diff --git a/Source/Statistics/ENTROPY_Series.cs b/Calculations/Statistics/ENTROPY_Series.cs similarity index 100% rename from Source/Statistics/ENTROPY_Series.cs rename to Calculations/Statistics/ENTROPY_Series.cs diff --git a/Source/Statistics/KURTOSIS_Series.cs b/Calculations/Statistics/KURTOSIS_Series.cs similarity index 100% rename from Source/Statistics/KURTOSIS_Series.cs rename to Calculations/Statistics/KURTOSIS_Series.cs diff --git a/Source/Statistics/LINREG_Series.cs b/Calculations/Statistics/LINREG_Series.cs similarity index 97% rename from Source/Statistics/LINREG_Series.cs rename to Calculations/Statistics/LINREG_Series.cs index 0987555c..2aff6af2 100644 --- a/Source/Statistics/LINREG_Series.cs +++ b/Calculations/Statistics/LINREG_Series.cs @@ -1,91 +1,91 @@ -namespace QuanTAlib; -using System; - -/* -LINREG: Linear Regression (using Least Square Method) - Linear Regression provides a slope of a straight line that is the best approximation of the given set of data. - The method of least squares is a standard approach in linear regression analysis to approximate the solution - by minimizing the sum of the squares of the residuals made in the results of each individual equation. - -Additional outputs provided by LINREG: - .Intercept - y-intercept point of the best fit line - .RSquared - R-Squared (R²), Coefficient of Determination - .StdDev - Standard Deviation of data over given periods - - y = Slope * x + Intercept - -Sources: - https://en.wikipedia.org/wiki/Least_squares - - */ - -public class LINREG_Series : Single_TSeries_Indicator -{ - public readonly TSeries Intercept = new(); - public readonly TSeries RSquared = new(); - public readonly TSeries StdDev = new(); - private readonly System.Collections.Generic.List _buffer = new(); - - public LINREG_Series(TSeries source, int period, bool useNaN = false) - : base(source, period, useNaN) - { - if (this._data.Count > 0) { base.Add(this._data); } - } - - public override void Add((System.DateTime t, double v) TValue, bool update) - { - Add_Replace_Trim(_buffer, TValue.v, _p, update); - - int _len = this._buffer.Count; - - // get averages for period - double sumX = 0; - double sumY = 0; - - for (int p = 0; p < _len; p++) - { - sumX += this.Count - _len + 2 + p; - sumY += _buffer[p]; - } - double avgX = sumX / _len; - double avgY = sumY / _len; - - // least squares method - double sumSqX = 0; - double sumSqY = 0; - double sumSqXY = 0; - - for (int p = 0; p < _len; p++) - { - double devX = this.Count - _len + 2 + p - avgX; - double devY = _buffer[p] - avgY; - - sumSqX += devX * devX; - sumSqY += devY * devY; - sumSqXY += devX * devY; - } - - double _slope = sumSqXY / sumSqX; - double _intercept = avgY - (_slope * avgX); - - // calculate Standard Deviation and R-Squared - double stdDevX = Math.Sqrt(sumSqX / _len); - double stdDevY = Math.Sqrt(sumSqY / _len); - double _StdDev = stdDevY; - - double arrr = (stdDevX * stdDevY != 0) ? sumSqXY / (stdDevX * stdDevY) / _len : 0; - double _RSquared = arrr * arrr; - - var ret = (TValue.t, this.Count < this._p - 1 && this._NaN ? double.NaN : _slope); - base.Add(ret, update, _NaN); - - ret = (TValue.t, this.Count < this._p - 1 && this._NaN ? double.NaN : _intercept); - Intercept.Add(ret, update); - - ret = (TValue.t, this.Count < this._p - 1 && this._NaN ? double.NaN : _StdDev); - StdDev.Add(ret, update); - - ret = (TValue.t, this.Count < this._p - 1 && this._NaN ? double.NaN : _RSquared); - RSquared.Add(ret, update); - } +namespace QuanTAlib; +using System; + +/* +LINREG: Linear Regression (using Least Square Method) + Linear Regression provides a slope of a straight line that is the best approximation of the given set of data. + The method of least squares is a standard approach in linear regression analysis to approximate the solution + by minimizing the sum of the squares of the residuals made in the results of each individual equation. + +Additional outputs provided by LINREG: + .Intercept - y-intercept point of the best fit line + .RSquared - R-Squared (R²), Coefficient of Determination + .StdDev - Standard Deviation of data over given periods + + y = Slope * x + Intercept + +Sources: + https://en.wikipedia.org/wiki/Least_squares + + */ + +public class LINREG_Series : Single_TSeries_Indicator +{ + public readonly TSeries Intercept = new(); + public readonly TSeries RSquared = new(); + public readonly TSeries StdDev = new(); + private readonly System.Collections.Generic.List _buffer = new(); + + public LINREG_Series(TSeries source, int period, bool useNaN = false) + : base(source, period, useNaN) + { + if (this._data.Count > 0) { base.Add(this._data); } + } + + public override void Add((System.DateTime t, double v) TValue, bool update) + { + Add_Replace_Trim(_buffer, TValue.v, _p, update); + + int _len = this._buffer.Count; + + // get averages for period + double sumX = 0; + double sumY = 0; + + for (int p = 0; p < _len; p++) + { + sumX += this.Count - _len + 2 + p; + sumY += _buffer[p]; + } + double avgX = sumX / _len; + double avgY = sumY / _len; + + // least squares method + double sumSqX = 0; + double sumSqY = 0; + double sumSqXY = 0; + + for (int p = 0; p < _len; p++) + { + double devX = this.Count - _len + 2 + p - avgX; + double devY = _buffer[p] - avgY; + + sumSqX += devX * devX; + sumSqY += devY * devY; + sumSqXY += devX * devY; + } + + double _slope = sumSqXY / sumSqX; + double _intercept = avgY - (_slope * avgX); + + // calculate Standard Deviation and R-Squared + double stdDevX = Math.Sqrt(sumSqX / _len); + double stdDevY = Math.Sqrt(sumSqY / _len); + double _StdDev = stdDevY; + + double arrr = (stdDevX * stdDevY != 0) ? sumSqXY / (stdDevX * stdDevY) / _len : 0; + double _RSquared = arrr * arrr; + + var ret = (TValue.t, this.Count < this._p - 1 && this._NaN ? double.NaN : _slope); + base.Add(ret, update, _NaN); + + ret = (TValue.t, this.Count < this._p - 1 && this._NaN ? double.NaN : _intercept); + Intercept.Add(ret, update); + + ret = (TValue.t, this.Count < this._p - 1 && this._NaN ? double.NaN : _StdDev); + StdDev.Add(ret, update); + + ret = (TValue.t, this.Count < this._p - 1 && this._NaN ? double.NaN : _RSquared); + RSquared.Add(ret, update); + } } \ No newline at end of file diff --git a/Source/Statistics/MAD_Series.cs b/Calculations/Statistics/MAD_Series.cs similarity index 100% rename from Source/Statistics/MAD_Series.cs rename to Calculations/Statistics/MAD_Series.cs diff --git a/Source/Statistics/MAPE_Series.cs b/Calculations/Statistics/MAPE_Series.cs similarity index 100% rename from Source/Statistics/MAPE_Series.cs rename to Calculations/Statistics/MAPE_Series.cs diff --git a/Source/Statistics/MEDIAN_Series.cs b/Calculations/Statistics/MEDIAN_Series.cs similarity index 100% rename from Source/Statistics/MEDIAN_Series.cs rename to Calculations/Statistics/MEDIAN_Series.cs diff --git a/Source/Statistics/MSE_Series.cs b/Calculations/Statistics/MSE_Series.cs similarity index 100% rename from Source/Statistics/MSE_Series.cs rename to Calculations/Statistics/MSE_Series.cs diff --git a/Source/Statistics/SDEV_Series.cs b/Calculations/Statistics/SDEV_Series.cs similarity index 100% rename from Source/Statistics/SDEV_Series.cs rename to Calculations/Statistics/SDEV_Series.cs diff --git a/Source/Statistics/SMAPE_Series.cs b/Calculations/Statistics/SMAPE_Series.cs similarity index 100% rename from Source/Statistics/SMAPE_Series.cs rename to Calculations/Statistics/SMAPE_Series.cs diff --git a/Source/Statistics/SSDEV_Series.cs b/Calculations/Statistics/SSDEV_Series.cs similarity index 100% rename from Source/Statistics/SSDEV_Series.cs rename to Calculations/Statistics/SSDEV_Series.cs diff --git a/Source/Statistics/SVAR_Series.cs b/Calculations/Statistics/SVAR_Series.cs similarity index 97% rename from Source/Statistics/SVAR_Series.cs rename to Calculations/Statistics/SVAR_Series.cs index 5f569081..a83d5deb 100644 --- a/Source/Statistics/SVAR_Series.cs +++ b/Calculations/Statistics/SVAR_Series.cs @@ -1,38 +1,38 @@ -namespace QuanTAlib; -using System; -using System.Linq; - -/* -SVAR: Sample Variance - Sample variance uses Bessel's correction to correct the bias in the estimation of population variance. - -Sources: - https://en.wikipedia.org/wiki/Variance - Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction - -Remark: - SVAR is also known as the Unbiased Sample Variance, while VAR (Population Variance) is known as - the Biased Sample Variance. - - */ - -public class SVAR_Series : Single_TSeries_Indicator -{ - public SVAR_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) - { - if (base._data.Count > 0) { base.Add(base._data); } - } - private readonly System.Collections.Generic.List _buffer = new(); - - public override void Add((System.DateTime t, double v) TValue, bool update) - { - Add_Replace_Trim(_buffer, TValue.v, _p, update); - double _sma = _buffer.Average(); - - double _svar = 0; - for (int i = 0; i < this._buffer.Count; i++) { _svar += (this._buffer[i] - _sma) * (this._buffer[i] - _sma); } - _svar /= (this._buffer.Count > 1) ? this._buffer.Count - 1 : 1; // Bessel's correction - - base.Add((TValue.t, _svar), update, _NaN); - } +namespace QuanTAlib; +using System; +using System.Linq; + +/* +SVAR: Sample Variance + Sample variance uses Bessel's correction to correct the bias in the estimation of population variance. + +Sources: + https://en.wikipedia.org/wiki/Variance + Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction + +Remark: + SVAR is also known as the Unbiased Sample Variance, while VAR (Population Variance) is known as + the Biased Sample Variance. + + */ + +public class SVAR_Series : Single_TSeries_Indicator +{ + public SVAR_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) + { + if (base._data.Count > 0) { base.Add(base._data); } + } + private readonly System.Collections.Generic.List _buffer = new(); + + public override void Add((System.DateTime t, double v) TValue, bool update) + { + Add_Replace_Trim(_buffer, TValue.v, _p, update); + double _sma = _buffer.Average(); + + double _svar = 0; + for (int i = 0; i < this._buffer.Count; i++) { _svar += (this._buffer[i] - _sma) * (this._buffer[i] - _sma); } + _svar /= (this._buffer.Count > 1) ? this._buffer.Count - 1 : 1; // Bessel's correction + + base.Add((TValue.t, _svar), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Statistics/VAR_Series.cs b/Calculations/Statistics/VAR_Series.cs similarity index 96% rename from Source/Statistics/VAR_Series.cs rename to Calculations/Statistics/VAR_Series.cs index 2aebee3b..447ae16f 100644 --- a/Source/Statistics/VAR_Series.cs +++ b/Calculations/Statistics/VAR_Series.cs @@ -1,38 +1,38 @@ -namespace QuanTAlib; -using System; -using System.Linq; - -/* -VAR: Population Variance - Population variance without Bessel's correction - -Sources: - https://en.wikipedia.org/wiki/Variance - Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction - -Remark: - VAR (Population Variance) is also known as a biased Sample Variance. For unbiased - sample variance use SVAR instead. - - */ - -public class VAR_Series : Single_TSeries_Indicator -{ - public VAR_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) - { - if (base._data.Count > 0) { base.Add(base._data); } - } - private readonly System.Collections.Generic.List _buffer = new(); - - public override void Add((System.DateTime t, double v) TValue, bool update) - { - Add_Replace_Trim(_buffer, TValue.v, _p, update); - double _sma = _buffer.Average(); - - double _pvar = 0; - for (int i = 0; i < _buffer.Count; i++) { _pvar += (_buffer[i] - _sma) * (_buffer[i] - _sma); } - _pvar /= this._buffer.Count; - - base.Add((TValue.t, _pvar), update, _NaN); - } +namespace QuanTAlib; +using System; +using System.Linq; + +/* +VAR: Population Variance + Population variance without Bessel's correction + +Sources: + https://en.wikipedia.org/wiki/Variance + Bessel's correction: https://en.wikipedia.org/wiki/Bessel%27s_correction + +Remark: + VAR (Population Variance) is also known as a biased Sample Variance. For unbiased + sample variance use SVAR instead. + + */ + +public class VAR_Series : Single_TSeries_Indicator +{ + public VAR_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) + { + if (base._data.Count > 0) { base.Add(base._data); } + } + private readonly System.Collections.Generic.List _buffer = new(); + + public override void Add((System.DateTime t, double v) TValue, bool update) + { + Add_Replace_Trim(_buffer, TValue.v, _p, update); + double _sma = _buffer.Average(); + + double _pvar = 0; + for (int i = 0; i < _buffer.Count; i++) { _pvar += (_buffer[i] - _sma) * (_buffer[i] - _sma); } + _pvar /= this._buffer.Count; + + base.Add((TValue.t, _pvar), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Statistics/WMAPE_Series.cs b/Calculations/Statistics/WMAPE_Series.cs similarity index 100% rename from Source/Statistics/WMAPE_Series.cs rename to Calculations/Statistics/WMAPE_Series.cs diff --git a/Source/Statistics/ZSCORE_Series.cs b/Calculations/Statistics/ZSCORE_Series.cs similarity index 97% rename from Source/Statistics/ZSCORE_Series.cs rename to Calculations/Statistics/ZSCORE_Series.cs index 097482d9..fbaf02b9 100644 --- a/Source/Statistics/ZSCORE_Series.cs +++ b/Calculations/Statistics/ZSCORE_Series.cs @@ -1,46 +1,46 @@ -namespace QuanTAlib; -using System; -using System.Linq; - -/* -ZSCORE: number of standard deviations from SMA - Z-score describes a value's relationship to the mean of a series, as measured in - terms of standard deviations from the mean. If a Z-score is 0, it indicates that - the data point's score is identical to the mean score. A Z-score of 1.0 would - indicate a value that is one standard deviation from the mean. Z-scores may be - positive or negative, with a positive value indicating the score is above the - mean and a negative score indicating it is below the mean. - -Sources: - https://en.wikipedia.org/wiki/Z-score - https://www.investopedia.com/terms/z/zscore.asp - -Calculation: - std = std * STDEV(close, length) - mean = SMA(close, length) - ZSCORE = (close - mean) / std - - */ - -public class ZSCORE_Series : Single_TSeries_Indicator -{ - public ZSCORE_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) - { - if (base._data.Count > 0) { base.Add(base._data); } - } - private readonly System.Collections.Generic.List _buffer = new(); - - public override void Add((System.DateTime t, double v) TValue, bool update) - { - Add_Replace_Trim(_buffer, TValue.v, _p, update); - double _sma = _buffer.Average(); - - double _pvar = 0; - for (int i = 0; i < _buffer.Count; i++) { _pvar += (_buffer[i] - _sma) * (_buffer[i] - _sma); } - _pvar /= this._buffer.Count; - double _psdev = Math.Sqrt(_pvar); - double _zscore = (_psdev == 0) ? double.NaN : (TValue.v - _sma) / _psdev; - - base.Add((TValue.t, _zscore), update, _NaN); - } +namespace QuanTAlib; +using System; +using System.Linq; + +/* +ZSCORE: number of standard deviations from SMA + Z-score describes a value's relationship to the mean of a series, as measured in + terms of standard deviations from the mean. If a Z-score is 0, it indicates that + the data point's score is identical to the mean score. A Z-score of 1.0 would + indicate a value that is one standard deviation from the mean. Z-scores may be + positive or negative, with a positive value indicating the score is above the + mean and a negative score indicating it is below the mean. + +Sources: + https://en.wikipedia.org/wiki/Z-score + https://www.investopedia.com/terms/z/zscore.asp + +Calculation: + std = std * STDEV(close, length) + mean = SMA(close, length) + ZSCORE = (close - mean) / std + + */ + +public class ZSCORE_Series : Single_TSeries_Indicator +{ + public ZSCORE_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) + { + if (base._data.Count > 0) { base.Add(base._data); } + } + private readonly System.Collections.Generic.List _buffer = new(); + + public override void Add((System.DateTime t, double v) TValue, bool update) + { + Add_Replace_Trim(_buffer, TValue.v, _p, update); + double _sma = _buffer.Average(); + + double _pvar = 0; + for (int i = 0; i < _buffer.Count; i++) { _pvar += (_buffer[i] - _sma) * (_buffer[i] - _sma); } + _pvar /= this._buffer.Count; + double _psdev = Math.Sqrt(_pvar); + double _zscore = (_psdev == 0) ? double.NaN : (TValue.v - _sma) / _psdev; + + base.Add((TValue.t, _zscore), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Trends/ALMA_Series.cs b/Calculations/Trends/ALMA_Series.cs similarity index 97% rename from Source/Trends/ALMA_Series.cs rename to Calculations/Trends/ALMA_Series.cs index 39ff8101..ceb70320 100644 --- a/Source/Trends/ALMA_Series.cs +++ b/Calculations/Trends/ALMA_Series.cs @@ -1,63 +1,63 @@ -namespace QuanTAlib; -using System; - -/* -ALMA: Arnaud Legoux Moving Average - The ALMA moving average uses the curve of the Normal (Gauss) distribution, which - can be shifted from 0 to 1. This allows regulating the smoothness and high - sensitivity of the indicator. Sigma is another parameter that is responsible for - the shape of the curve coefficients. This moving average reduces lag of the data - in conjunction with smoothing to reduce noise. - - -Sources: - https://phemex.com/academy/what-is-arnaud-legoux-moving-averages - https://www.prorealcode.com/prorealtime-indicators/alma-arnaud-legoux-moving-average/ - -TODO: Discrepancy with Pandas-TA (but passes the validation with Skender.GetAlma) - - */ - -public class ALMA_Series : Single_TSeries_Indicator -{ - private readonly System.Collections.Generic.List _buffer = new(); - private readonly double[] _weight; - private double _norm; - private readonly double _offset, _sigma; - - public ALMA_Series(TSeries source, int period, double offset = 0.85, double sigma = 6.0, bool useNaN = false) - : base(source, period, useNaN) - { - _offset = offset; - _sigma = sigma; - _weight = new double[period]; - - if (this._data.Count > 0) { base.Add(this._data); } - } - - public override void Add((System.DateTime t, double v) TValue, bool update) - { - Add_Replace_Trim(_buffer, TValue.v, _p, update); - - if (this._buffer.Count <= _p) - { - int _len = this._buffer.Count; - _norm = 0; - double _m = _offset * (_len - 1); - double _s = _len / _sigma; - for (int i = 0; i < _len; i++) - { - double _wt = Math.Exp(-((i - _m) * (i - _m)) / (2 * _s * _s)); - _weight[i] = _wt; - _norm += _wt; - } - } - - double _weightedSum = 0; - for (int i = 0; i < this._buffer.Count; i++) - { _weightedSum += _weight[i] * _buffer[i]; } - double _alma = _weightedSum / _norm; - - base.Add((TValue.t, _alma), update, _NaN); - } -} +namespace QuanTAlib; +using System; + +/* +ALMA: Arnaud Legoux Moving Average + The ALMA moving average uses the curve of the Normal (Gauss) distribution, which + can be shifted from 0 to 1. This allows regulating the smoothness and high + sensitivity of the indicator. Sigma is another parameter that is responsible for + the shape of the curve coefficients. This moving average reduces lag of the data + in conjunction with smoothing to reduce noise. + + +Sources: + https://phemex.com/academy/what-is-arnaud-legoux-moving-averages + https://www.prorealcode.com/prorealtime-indicators/alma-arnaud-legoux-moving-average/ + +TODO: Discrepancy with Pandas-TA (but passes the validation with Skender.GetAlma) + + */ + +public class ALMA_Series : Single_TSeries_Indicator +{ + private readonly System.Collections.Generic.List _buffer = new(); + private readonly double[] _weight; + private double _norm; + private readonly double _offset, _sigma; + + public ALMA_Series(TSeries source, int period, double offset = 0.85, double sigma = 6.0, bool useNaN = false) + : base(source, period, useNaN) + { + _offset = offset; + _sigma = sigma; + _weight = new double[period]; + + if (this._data.Count > 0) { base.Add(this._data); } + } + + public override void Add((System.DateTime t, double v) TValue, bool update) + { + Add_Replace_Trim(_buffer, TValue.v, _p, update); + + if (this._buffer.Count <= _p) + { + int _len = this._buffer.Count; + _norm = 0; + double _m = _offset * (_len - 1); + double _s = _len / _sigma; + for (int i = 0; i < _len; i++) + { + double _wt = Math.Exp(-((i - _m) * (i - _m)) / (2 * _s * _s)); + _weight[i] = _wt; + _norm += _wt; + } + } + + double _weightedSum = 0; + for (int i = 0; i < this._buffer.Count; i++) + { _weightedSum += _weight[i] * _buffer[i]; } + double _alma = _weightedSum / _norm; + + base.Add((TValue.t, _alma), update, _NaN); + } +} diff --git a/Source/Trends/DEMA_Series.cs b/Calculations/Trends/DEMA_Series.cs similarity index 96% rename from Source/Trends/DEMA_Series.cs rename to Calculations/Trends/DEMA_Series.cs index bc874e9e..3aaf2560 100644 --- a/Source/Trends/DEMA_Series.cs +++ b/Calculations/Trends/DEMA_Series.cs @@ -1,75 +1,75 @@ -namespace QuanTAlib; -using System; -using System.Linq; -using System.Runtime.CompilerServices; - -/* -DEMA: Double Exponential Moving Average - DEMA uses EMA(EMA()) to calculate smoother Exponential moving average. - -Sources: - https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/double-exponential-moving-average-dema/ - -Remark: - ema1 = EMA(close, length) - ema2 = EMA(ema1, length) - DEMA = 2 * ema1 - ema2 - - */ - -public class DEMA_Series : Single_TSeries_Indicator -{ - private readonly double _k; - private int _len; - private readonly bool _useSMA; - private double _sum, _lastsum, _lastlastsum; - private double _lastema1, _lastlastema1; - private double _lastema2, _lastlastema2; - - public DEMA_Series(TSeries source, int period, bool useNaN = false, bool useSMA = true) : base(source, period, useNaN) - { - _k = 2.0 / (_p + 1); - _len = 0; - _useSMA = useSMA; - _sum = _lastema1 = _lastema2 =0; - if (_data.Count > 0) { base.Add(_data); } - } - - public override void Add((DateTime t, double v) TValue, bool update) - { - if (update) { - _lastsum = _lastlastsum; - _lastema1 = _lastlastema1; - _lastema2 = _lastlastema2; - } - else { - _lastlastsum = _lastsum; - _lastlastema1 = _lastema1; - _lastlastema2 = _lastema2; - _len++; - } - - double _ema1, _ema2, _dema; - if (this.Count == 0) { - _ema1 = _ema2 = _sum = TValue.v; - } - else if (_len <= _period && _useSMA && _period != 0) { - _sum += TValue.v; - if (_period != 0 && _len > _period) { - _sum -= (_data[base.Count - _period - (update ? 1 : 0)].v); - } - _ema1 = _sum / Math.Min(_len, _period); - _ema2 = _ema1; - } - else { - _ema1 = (TValue.v - _lastema1) * _k + _lastema1; - _ema2 = (_ema1 - _lastema2) * _k + _lastema2; - } - _dema = 2*_ema1 - _ema2; - - _lastema1 = _ema1; - _lastema2 = _ema2; - - base.Add((TValue.t, _dema), update, _NaN); - } +namespace QuanTAlib; +using System; +using System.Linq; +using System.Runtime.CompilerServices; + +/* +DEMA: Double Exponential Moving Average + DEMA uses EMA(EMA()) to calculate smoother Exponential moving average. + +Sources: + https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/double-exponential-moving-average-dema/ + +Remark: + ema1 = EMA(close, length) + ema2 = EMA(ema1, length) + DEMA = 2 * ema1 - ema2 + + */ + +public class DEMA_Series : Single_TSeries_Indicator +{ + private readonly double _k; + private int _len; + private readonly bool _useSMA; + private double _sum, _lastsum, _lastlastsum; + private double _lastema1, _lastlastema1; + private double _lastema2, _lastlastema2; + + public DEMA_Series(TSeries source, int period, bool useNaN = false, bool useSMA = true) : base(source, period, useNaN) + { + _k = 2.0 / (_p + 1); + _len = 0; + _useSMA = useSMA; + _sum = _lastema1 = _lastema2 =0; + if (_data.Count > 0) { base.Add(_data); } + } + + public override void Add((DateTime t, double v) TValue, bool update) + { + if (update) { + _lastsum = _lastlastsum; + _lastema1 = _lastlastema1; + _lastema2 = _lastlastema2; + } + else { + _lastlastsum = _lastsum; + _lastlastema1 = _lastema1; + _lastlastema2 = _lastema2; + _len++; + } + + double _ema1, _ema2, _dema; + if (this.Count == 0) { + _ema1 = _ema2 = _sum = TValue.v; + } + else if (_len <= _period && _useSMA && _period != 0) { + _sum += TValue.v; + if (_period != 0 && _len > _period) { + _sum -= (_data[base.Count - _period - (update ? 1 : 0)].v); + } + _ema1 = _sum / Math.Min(_len, _period); + _ema2 = _ema1; + } + else { + _ema1 = (TValue.v - _lastema1) * _k + _lastema1; + _ema2 = (_ema1 - _lastema2) * _k + _lastema2; + } + _dema = 2*_ema1 - _ema2; + + _lastema1 = _ema1; + _lastema2 = _ema2; + + base.Add((TValue.t, _dema), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Trends/DWMA_Series.cs b/Calculations/Trends/DWMA_Series.cs similarity index 96% rename from Source/Trends/DWMA_Series.cs rename to Calculations/Trends/DWMA_Series.cs index ebda7418..7cdb0954 100644 --- a/Source/Trends/DWMA_Series.cs +++ b/Calculations/Trends/DWMA_Series.cs @@ -1,35 +1,35 @@ -namespace QuanTAlib; -using System; - -/* -DWMA: Double Weighted Moving Average - The weights are decreasing over the period with p^2 decay - and the most recent data has the heaviest weight. - - */ - -public class DWMA_Series : Single_TSeries_Indicator { - public DWMA_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) { - for (int i = 0; i < this._p; i++) { - double _weight = (i + 1) * (i + 1); - this._weights.Add(_weight); - } - - if (base._data.Count > 0) { base.Add(base._data); } - } - private readonly System.Collections.Generic.List _buffer1 = new(); - private readonly System.Collections.Generic.List _weights = new(); - - public override void Add((System.DateTime t, double v) TValue, bool update) { - Add_Replace_Trim(_buffer1, TValue.v, _p, update); - double _wma1 = 0; - double _wsum = 0; - for (int i = 0; i < _buffer1.Count; i++) { - _wma1 += _buffer1[i] * this._weights[i]; - _wsum += this._weights[i]; - } - _wma1 /= _wsum; - - base.Add((TValue.t, _wma1), update, _NaN); - } +namespace QuanTAlib; +using System; + +/* +DWMA: Double Weighted Moving Average + The weights are decreasing over the period with p^2 decay + and the most recent data has the heaviest weight. + + */ + +public class DWMA_Series : Single_TSeries_Indicator { + public DWMA_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) { + for (int i = 0; i < this._p; i++) { + double _weight = (i + 1) * (i + 1); + this._weights.Add(_weight); + } + + if (base._data.Count > 0) { base.Add(base._data); } + } + private readonly System.Collections.Generic.List _buffer1 = new(); + private readonly System.Collections.Generic.List _weights = new(); + + public override void Add((System.DateTime t, double v) TValue, bool update) { + Add_Replace_Trim(_buffer1, TValue.v, _p, update); + double _wma1 = 0; + double _wsum = 0; + for (int i = 0; i < _buffer1.Count; i++) { + _wma1 += _buffer1[i] * this._weights[i]; + _wsum += this._weights[i]; + } + _wma1 /= _wsum; + + base.Add((TValue.t, _wma1), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Trends/EMA_Series.cs b/Calculations/Trends/EMA_Series.cs similarity index 97% rename from Source/Trends/EMA_Series.cs rename to Calculations/Trends/EMA_Series.cs index 6a3011ab..6fe35b19 100644 --- a/Source/Trends/EMA_Series.cs +++ b/Calculations/Trends/EMA_Series.cs @@ -1,71 +1,71 @@ -namespace QuanTAlib; -using System; -using System.Linq; - -/* -EMA: Exponential Moving Average - EMA needs very short history buffer and calculates the EMA value using just the - previous EMA value. The weight of the new datapoint (k) is k = 2 / (period-1) - -Sources: - https://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:moving_averages - https://www.investopedia.com/ask/answers/122314/what-exponential-moving-average-ema-formula-and-how-ema-calculated.asp - https://blog.fugue88.ws/archives/2017-01/The-correct-way-to-start-an-Exponential-Moving-Average-EMA - -Issues: - There is no consensus what the first EMA value should be - a zero, a first - datapoint, or an average of the initial Period bars. All three starting methods - converge within 20+ bars to the same moving average. Most implementations (including this one) - use SMA() for the first Period bars as a seeding value for EMA. - - */ - -public class EMA_Series : Single_TSeries_Indicator { - private double _k; - private double _lastema, _lastlastema; - private double _sum, _oldsum; - private int _len; - private readonly bool _useSMA; - - public EMA_Series(TSeries source, int period, bool useNaN = false, bool useSMA = true) : base(source, period, useNaN) { - _k = 2.0 / (_p + 1); - _sum = _oldsum = _lastema = _lastlastema = 0; - _len = 0; - _useSMA = useSMA; - if (this._data.Count > 0) { base.Add(this._data); } - } - - public override void Add((DateTime t, double v) TValue, bool update) { - - if (update) { _lastema = _lastlastema; _sum = _oldsum; } - else { _lastlastema = _lastema; _oldsum = _sum; _len++; } - - double _ema = 0; - // when period = 0, create cumulative/additive series where _k is progressively larger - if (_period == 0) { _k = 2.0 / (_len + 1); } - - // the first value of the series - if (this.Count == 0) { - _ema = _sum = TValue.v; - } - // if SMA is used for seeding, calculate SMA within period - else if (_len <= _period && _useSMA && _period != 0) { - _sum += TValue.v; - if (_period != 0 && _len > _period) { - _sum -= (_data[base.Count - _period - (update ? 1 : 0)].v); - } - _ema = _sum / Math.Min(_len, _period); - } - // calculate EMA out from last EMA and factor k - else { - _ema = _k * (TValue.v - _lastema) + _lastema; - } - _lastema = _ema; - - base.Add((TValue.t, _ema), update, _NaN); - } - public void Reset() { - _sum = _oldsum = _lastema = _lastlastema = 0; - _len = 0; - } +namespace QuanTAlib; +using System; +using System.Linq; + +/* +EMA: Exponential Moving Average + EMA needs very short history buffer and calculates the EMA value using just the + previous EMA value. The weight of the new datapoint (k) is k = 2 / (period-1) + +Sources: + https://stockcharts.com/school/doku.php?id=chart_school:technical_indicators:moving_averages + https://www.investopedia.com/ask/answers/122314/what-exponential-moving-average-ema-formula-and-how-ema-calculated.asp + https://blog.fugue88.ws/archives/2017-01/The-correct-way-to-start-an-Exponential-Moving-Average-EMA + +Issues: + There is no consensus what the first EMA value should be - a zero, a first + datapoint, or an average of the initial Period bars. All three starting methods + converge within 20+ bars to the same moving average. Most implementations (including this one) + use SMA() for the first Period bars as a seeding value for EMA. + + */ + +public class EMA_Series : Single_TSeries_Indicator { + private double _k; + private double _lastema, _lastlastema; + private double _sum, _oldsum; + private int _len; + private readonly bool _useSMA; + + public EMA_Series(TSeries source, int period, bool useNaN = false, bool useSMA = true) : base(source, period, useNaN) { + _k = 2.0 / (_p + 1); + _sum = _oldsum = _lastema = _lastlastema = 0; + _len = 0; + _useSMA = useSMA; + if (this._data.Count > 0) { base.Add(this._data); } + } + + public override void Add((DateTime t, double v) TValue, bool update) { + + if (update) { _lastema = _lastlastema; _sum = _oldsum; } + else { _lastlastema = _lastema; _oldsum = _sum; _len++; } + + double _ema = 0; + // when period = 0, create cumulative/additive series where _k is progressively larger + if (_period == 0) { _k = 2.0 / (_len + 1); } + + // the first value of the series + if (this.Count == 0) { + _ema = _sum = TValue.v; + } + // if SMA is used for seeding, calculate SMA within period + else if (_len <= _period && _useSMA && _period != 0) { + _sum += TValue.v; + if (_period != 0 && _len > _period) { + _sum -= (_data[base.Count - _period - (update ? 1 : 0)].v); + } + _ema = _sum / Math.Min(_len, _period); + } + // calculate EMA out from last EMA and factor k + else { + _ema = _k * (TValue.v - _lastema) + _lastema; + } + _lastema = _ema; + + base.Add((TValue.t, _ema), update, _NaN); + } + public void Reset() { + _sum = _oldsum = _lastema = _lastlastema = 0; + _len = 0; + } } \ No newline at end of file diff --git a/Source/Trends/FMA_Series.cs b/Calculations/Trends/FMA_Series.cs similarity index 100% rename from Source/Trends/FMA_Series.cs rename to Calculations/Trends/FMA_Series.cs diff --git a/Source/Trends/HEMA_Series.cs b/Calculations/Trends/HEMA_Series.cs similarity index 97% rename from Source/Trends/HEMA_Series.cs rename to Calculations/Trends/HEMA_Series.cs index 3f1678f5..dcb9d560 100644 --- a/Source/Trends/HEMA_Series.cs +++ b/Calculations/Trends/HEMA_Series.cs @@ -1,57 +1,57 @@ -namespace QuanTAlib; -using System; - -/* -HEMA: Hull-EMA Moving Average - a hybrid indicator - Modified HUll Moving Average; instead of using WMA (Weighted MA) for calculation, - HEMA uses EMA for Hull's formula: - -EMA1 = EMA(n/2) of price - where k = 4/(n/2 +1) -EMA2 = EMA(n) of price - where k = 3/(n+1) -Raw HMA = (2 * EMA1) - EMA2 -EMA3 = EMA(sqrt(n)) of Raw HMA - where k = 2/(sqrt(n)+1) - - */ - -public class HEMA_Series : Single_TSeries_Indicator -{ - public HEMA_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) - { - this._k1 = 4 / ((period * 0.5) + 1); - this._k2 = 3 / (double)(period + 1); - this._k3 = 2 / (Math.Sqrt(period) + 1); - this._lastema1 = this._lastlastema1 = double.NaN; - this._lastema2 = this._lastlastema2 = double.NaN; - this._lastema3 = this._lastlastema3 = double.NaN; - - if (base._data.Count > 0) { base.Add(base._data); } - } - private readonly double _k1, _k2, _k3; - private double _lastema1, _lastlastema1; - private double _lastema2, _lastlastema2; - private double _lastema3, _lastlastema3; - - public override void Add((System.DateTime t, double v) TValue, bool update) - { - if (update) - { - this._lastema1 = this._lastlastema1; - this._lastema2 = this._lastlastema2; - this._lastema3 = this._lastlastema3; - } - double _ema1 = System.Double.IsNaN(this._lastema1) ? TValue.v : TValue.v * this._k1 + this._lastema1 * (1 - this._k1); - double _ema2 = System.Double.IsNaN(this._lastema2) ? TValue.v : TValue.v * this._k2 + this._lastema2 * (1 - this._k2); - - double _rawhema = (2 * _ema1) - _ema2; - double _ema3 = System.Double.IsNaN(this._lastema3) ? _rawhema : _rawhema * this._k3 + this._lastema3 * (1 - this._k3); - - this._lastlastema1 = this._lastema1; - this._lastlastema2 = this._lastema2; - this._lastlastema3 = this._lastema3; - this._lastema1 = _ema1; - this._lastema2 = _ema2; - this._lastema3 = _ema3; - - base.Add((TValue.t, _ema3), update, _NaN); - } +namespace QuanTAlib; +using System; + +/* +HEMA: Hull-EMA Moving Average - a hybrid indicator + Modified HUll Moving Average; instead of using WMA (Weighted MA) for calculation, + HEMA uses EMA for Hull's formula: + +EMA1 = EMA(n/2) of price - where k = 4/(n/2 +1) +EMA2 = EMA(n) of price - where k = 3/(n+1) +Raw HMA = (2 * EMA1) - EMA2 +EMA3 = EMA(sqrt(n)) of Raw HMA - where k = 2/(sqrt(n)+1) + + */ + +public class HEMA_Series : Single_TSeries_Indicator +{ + public HEMA_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) + { + this._k1 = 4 / ((period * 0.5) + 1); + this._k2 = 3 / (double)(period + 1); + this._k3 = 2 / (Math.Sqrt(period) + 1); + this._lastema1 = this._lastlastema1 = double.NaN; + this._lastema2 = this._lastlastema2 = double.NaN; + this._lastema3 = this._lastlastema3 = double.NaN; + + if (base._data.Count > 0) { base.Add(base._data); } + } + private readonly double _k1, _k2, _k3; + private double _lastema1, _lastlastema1; + private double _lastema2, _lastlastema2; + private double _lastema3, _lastlastema3; + + public override void Add((System.DateTime t, double v) TValue, bool update) + { + if (update) + { + this._lastema1 = this._lastlastema1; + this._lastema2 = this._lastlastema2; + this._lastema3 = this._lastlastema3; + } + double _ema1 = System.Double.IsNaN(this._lastema1) ? TValue.v : TValue.v * this._k1 + this._lastema1 * (1 - this._k1); + double _ema2 = System.Double.IsNaN(this._lastema2) ? TValue.v : TValue.v * this._k2 + this._lastema2 * (1 - this._k2); + + double _rawhema = (2 * _ema1) - _ema2; + double _ema3 = System.Double.IsNaN(this._lastema3) ? _rawhema : _rawhema * this._k3 + this._lastema3 * (1 - this._k3); + + this._lastlastema1 = this._lastema1; + this._lastlastema2 = this._lastema2; + this._lastlastema3 = this._lastema3; + this._lastema1 = _ema1; + this._lastema2 = _ema2; + this._lastema3 = _ema3; + + base.Add((TValue.t, _ema3), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Trends/HMA_Series.cs b/Calculations/Trends/HMA_Series.cs similarity index 96% rename from Source/Trends/HMA_Series.cs rename to Calculations/Trends/HMA_Series.cs index ad6f30f8..8a522fba 100644 --- a/Source/Trends/HMA_Series.cs +++ b/Calculations/Trends/HMA_Series.cs @@ -1,119 +1,119 @@ -namespace QuanTAlib; -using System; - -/* -HMA: Hull Moving Average - Developed by Alan Hull, an extremely fast and smooth moving average; almost - eliminates lag altogether and manages to improve smoothing at the same time. - -Sources: - https://alanhull.com/hull-moving-average - https://school.stockcharts.com/doku.php?id=technical_indicators:hull_moving_average - -WMA1 = WMA(n/2) of price -WMA2 = WMA(n) of price -Raw HMA = (2 * WMA1) - WMA2 -HMA = WMA(sqrt(n)) of Raw HMA - - */ - -public class HMA_Series : TSeries -{ - private readonly int _p; - private readonly bool _NaN; - private readonly TSeries _data; - private double _wma1, _wma2; - private readonly System.Collections.Generic.List _buf1 = new(); - private readonly System.Collections.Generic.List _buf2 = new(); - private readonly System.Collections.Generic.List _buf3 = new(); - private readonly System.Collections.Generic.List _weights = new(); - - public HMA_Series(TSeries source, int period, bool useNaN = false) - { - this._p = period; - this._data = source; - this._NaN = useNaN; - for (int i = 0; i < this._p; i++) - { - this._weights.Add(i + 1); - } - - source.Pub += this.Sub; - if (source.Count > 0) - { - for (int i = 0; i < source.Count; i++) - { - this.Add(source[i], false); - } - } - } - public new void Add((System.DateTime t, double v) data, bool update = false) - { - if (update) - { - this._buf1[this._buf1.Count - 1] = data.v; - this._buf2[this._buf2.Count - 1] = data.v; - } - else - { - this._buf1.Add(data.v); - this._buf2.Add(data.v); - } - if (this._buf1.Count > (int)((double)this._p / 2)) - { - this._buf1.RemoveAt(0); - } - if (this._buf2.Count > this._p) - { - this._buf2.RemoveAt(0); - } - - this._wma1 = 0; - for (int i = 0; i < this._buf1.Count; i++) - { - this._wma1 += this._buf1[i] * this._weights[i]; - } - this._wma1 /= (this._buf1.Count * (this._buf1.Count + 1)) * 0.5; - - this._wma2 = 0; - for (int i = 0; i < this._buf2.Count; i++) - { - this._wma2 += this._buf2[i] * this._weights[i]; - } - this._wma2 /= (this._buf2.Count * (this._buf2.Count + 1)) * 0.5; - - if (update) - { - this._buf3[this._buf3.Count - 1] = 2 * this._wma1 - this._wma2; - } - else - { - this._buf3.Add(2 * this._wma1 - this._wma2); - } - - if (this._buf3.Count > (int)Math.Sqrt(this._p)) - { - this._buf3.RemoveAt(0); - } - - double _hma = 0; - for (int i = 0; i < this._buf3.Count; i++) - { - _hma += this._buf3[i] * this._weights[i]; - } - - _hma /= (this._buf3.Count * (this._buf3.Count + 1)) * 0.5; - - (System.DateTime t, double v) result = - (data.t, (this.Count < this._p - 1 && this._NaN) ? double.NaN : _hma); - base.Add(result, update); - } - public void Add(bool update = false) - { - this.Add(this._data[this._data.Count - 1], update); - } - public new void Sub(object source, TSeriesEventArgs e) - { - this.Add(this._data[this._data.Count - 1], e.update); - } -} +namespace QuanTAlib; +using System; + +/* +HMA: Hull Moving Average + Developed by Alan Hull, an extremely fast and smooth moving average; almost + eliminates lag altogether and manages to improve smoothing at the same time. + +Sources: + https://alanhull.com/hull-moving-average + https://school.stockcharts.com/doku.php?id=technical_indicators:hull_moving_average + +WMA1 = WMA(n/2) of price +WMA2 = WMA(n) of price +Raw HMA = (2 * WMA1) - WMA2 +HMA = WMA(sqrt(n)) of Raw HMA + + */ + +public class HMA_Series : TSeries +{ + private readonly int _p; + private readonly bool _NaN; + private readonly TSeries _data; + private double _wma1, _wma2; + private readonly System.Collections.Generic.List _buf1 = new(); + private readonly System.Collections.Generic.List _buf2 = new(); + private readonly System.Collections.Generic.List _buf3 = new(); + private readonly System.Collections.Generic.List _weights = new(); + + public HMA_Series(TSeries source, int period, bool useNaN = false) + { + this._p = period; + this._data = source; + this._NaN = useNaN; + for (int i = 0; i < this._p; i++) + { + this._weights.Add(i + 1); + } + + source.Pub += this.Sub; + if (source.Count > 0) + { + for (int i = 0; i < source.Count; i++) + { + this.Add(source[i], false); + } + } + } + public new void Add((System.DateTime t, double v) data, bool update = false) + { + if (update) + { + this._buf1[this._buf1.Count - 1] = data.v; + this._buf2[this._buf2.Count - 1] = data.v; + } + else + { + this._buf1.Add(data.v); + this._buf2.Add(data.v); + } + if (this._buf1.Count > (int)((double)this._p / 2)) + { + this._buf1.RemoveAt(0); + } + if (this._buf2.Count > this._p) + { + this._buf2.RemoveAt(0); + } + + this._wma1 = 0; + for (int i = 0; i < this._buf1.Count; i++) + { + this._wma1 += this._buf1[i] * this._weights[i]; + } + this._wma1 /= (this._buf1.Count * (this._buf1.Count + 1)) * 0.5; + + this._wma2 = 0; + for (int i = 0; i < this._buf2.Count; i++) + { + this._wma2 += this._buf2[i] * this._weights[i]; + } + this._wma2 /= (this._buf2.Count * (this._buf2.Count + 1)) * 0.5; + + if (update) + { + this._buf3[this._buf3.Count - 1] = 2 * this._wma1 - this._wma2; + } + else + { + this._buf3.Add(2 * this._wma1 - this._wma2); + } + + if (this._buf3.Count > (int)Math.Sqrt(this._p)) + { + this._buf3.RemoveAt(0); + } + + double _hma = 0; + for (int i = 0; i < this._buf3.Count; i++) + { + _hma += this._buf3[i] * this._weights[i]; + } + + _hma /= (this._buf3.Count * (this._buf3.Count + 1)) * 0.5; + + (System.DateTime t, double v) result = + (data.t, (this.Count < this._p - 1 && this._NaN) ? double.NaN : _hma); + base.Add(result, update); + } + public void Add(bool update = false) + { + this.Add(this._data[this._data.Count - 1], update); + } + public new void Sub(object source, TSeriesEventArgs e) + { + this.Add(this._data[this._data.Count - 1], e.update); + } +} diff --git a/Source/Trends/HWMA_Series.cs b/Calculations/Trends/HWMA_Series.cs similarity index 100% rename from Source/Trends/HWMA_Series.cs rename to Calculations/Trends/HWMA_Series.cs diff --git a/Source/Trends/JMA_Series.cs b/Calculations/Trends/JMA_Series.cs similarity index 97% rename from Source/Trends/JMA_Series.cs rename to Calculations/Trends/JMA_Series.cs index 0ce50524..09cdeeb3 100644 --- a/Source/Trends/JMA_Series.cs +++ b/Calculations/Trends/JMA_Series.cs @@ -1,125 +1,125 @@ -namespace QuanTAlib; -using System; -using System.Linq; - -/* -JMA: Jurik Moving Average - Mark Jurik's Moving Average (JMA) attempts to eliminate noise to see the - underlying activity. It has extremely low lag, is very smooth and is responsive - to market gaps. - -Sources: - https://c.mql5.com/forextsd/forum/164/jurik_1.pdf - https://www.prorealcode.com/prorealtime-indicators/jurik-volatility-bands/ - -Issues: - Real JMA algorithm is not published and this formula is derived through - deduction and reverse analysis of JMA behavior. It is really close, but not - exact - published JMA tests against JMA.CSV fail with small deviation. The - original algo is slightly different, yet this approximation is close enough. - - -*/ -public class JMA_Series : Single_TSeries_Indicator { - private readonly System.Collections.Generic.List volty_short = new(); - private readonly System.Collections.Generic.List vsum_buff = new(); - private readonly double pr; - public TSeries mma1 { get; } - public TSeries mma2 { get; } - - private double upperBand, lowerBand, vsum, Kv, del1, del2; - private double prev_ma1, prev_det0, prev_det1, prev_vsum, prev_jma; - private double p_upperBand, p_lowerBand, p_Kv, p_prev_ma1, p_prev_det0, p_prev_det1, p_prev_vsum, p_prev_jma; - private readonly int _voltyS, _voltyL; - - public JMA_Series(TSeries source, int period, double phase = 0.0, int vshort = 10, int vlong = 65, bool useNaN = false) : base(source, period, useNaN) { - upperBand = lowerBand = prev_ma1 = prev_det0 = prev_det1 = prev_vsum = prev_jma = Kv = del1 = del2 = 0.0; - Kv = 0; - - pr = (phase * 0.01) + 1.5; - if (phase < -100) { pr = 0.5; } - if (phase > 100) { pr = 2.5; } - _voltyS = vshort; - _voltyL = vlong; - mma1 = new(); - mma2 = new(); - - if (base._data.Count > 0) { base.Add(base._data); } - } - - public override void Add((System.DateTime t, double v) TValue, bool update) { - if (this.Count == 0) { prev_ma1 = prev_jma = TValue.v; } - if (update) { - upperBand = p_upperBand; - lowerBand = p_lowerBand; - Kv = p_Kv; - prev_vsum = p_prev_vsum; - prev_ma1 = p_prev_ma1; - prev_det0 = p_prev_det0; - prev_det1 = p_prev_det1; - prev_jma = p_prev_jma; - } - else { - p_upperBand = upperBand; - p_lowerBand = lowerBand; - p_Kv = Kv; - p_prev_vsum = prev_vsum; - p_prev_ma1 = prev_ma1; - p_prev_det0 = prev_det0; - p_prev_det1 = prev_det1; - p_prev_jma = prev_jma; - } - - // from Tvalue to volty - del1 = TValue.v - upperBand; - del2 = TValue.v - lowerBand; - upperBand = (del1 > 0) ? TValue.v : TValue.v - (Kv * del1); - lowerBand = (del2 < 0) ? TValue.v : TValue.v - (Kv * del2); - double volty = 0; - if (Math.Abs(del1) > Math.Abs(del2)) { volty = Math.Abs(del1); } - if (Math.Abs(del1) < Math.Abs(del2)) { volty = Math.Abs(del2); } - - //// from volty to avolty - if (update) { volty_short[volty_short.Count - 1] = volty; } - else { volty_short.Add(volty); } - if (volty_short.Count > _voltyS) { volty_short.RemoveAt(0); } - vsum = prev_vsum + 0.1 * (volty - volty_short.First()); - prev_vsum = vsum; - if (update) { vsum_buff[vsum_buff.Count - 1] = vsum; } - else { vsum_buff.Add(vsum); } - if (vsum_buff.Count > _voltyL) { vsum_buff.RemoveAt(0); } - double avolty = 0; - for (int i = 0; i < vsum_buff.Count; i++) { avolty += vsum_buff[i]; } - avolty /= vsum_buff.Count; - - /// from avolty to rolty - double rvolty = (avolty != 0) ? volty / avolty : 0; - double len1 = (Math.Log(Math.Sqrt(_p)) / Math.Log(2.0)) + 2; - if (len1 < 0) - len1 = 0; - double pow1 = Math.Max(len1 - 2.0, 0.5); - if (rvolty > Math.Pow(len1, 1.0 / pow1)) { rvolty = Math.Pow(len1, 1.0 / pow1); } - if (rvolty < 1) { rvolty = 1; } - - //// from rvolty to second smoothing - double pow2 = Math.Pow(rvolty, pow1); - double beta = 0.45 * (_p - 1) / (0.45 * (_p - 1) + 2); - Kv = Math.Pow(beta, Math.Sqrt(pow2)); - double alpha = Math.Pow(beta, pow2); - double ma1 = (1 - alpha) * TValue.v + alpha * prev_ma1; - prev_ma1 = ma1; - mma1.Add(ma1); - - double det0 = (1 - beta) * (TValue.v - ma1) + beta * prev_det0; - prev_det0 = det0; - double ma2 = ma1 + pr * det0; - mma2.Add(ma2); - - double det1 = ((1 - alpha) * (1 - alpha) * (ma2 - prev_jma)) + (alpha * alpha * prev_det1); - prev_det1 = det1; - double jma = prev_jma + det1; - prev_jma = jma; - - base.Add((TValue.t, jma), update, _NaN); - } +namespace QuanTAlib; +using System; +using System.Linq; + +/* +JMA: Jurik Moving Average + Mark Jurik's Moving Average (JMA) attempts to eliminate noise to see the + underlying activity. It has extremely low lag, is very smooth and is responsive + to market gaps. + +Sources: + https://c.mql5.com/forextsd/forum/164/jurik_1.pdf + https://www.prorealcode.com/prorealtime-indicators/jurik-volatility-bands/ + +Issues: + Real JMA algorithm is not published and this formula is derived through + deduction and reverse analysis of JMA behavior. It is really close, but not + exact - published JMA tests against JMA.CSV fail with small deviation. The + original algo is slightly different, yet this approximation is close enough. + + +*/ +public class JMA_Series : Single_TSeries_Indicator { + private readonly System.Collections.Generic.List volty_short = new(); + private readonly System.Collections.Generic.List vsum_buff = new(); + private readonly double pr; + public TSeries mma1 { get; } + public TSeries mma2 { get; } + + private double upperBand, lowerBand, vsum, Kv, del1, del2; + private double prev_ma1, prev_det0, prev_det1, prev_vsum, prev_jma; + private double p_upperBand, p_lowerBand, p_Kv, p_prev_ma1, p_prev_det0, p_prev_det1, p_prev_vsum, p_prev_jma; + private readonly int _voltyS, _voltyL; + + public JMA_Series(TSeries source, int period, double phase = 0.0, int vshort = 10, int vlong = 65, bool useNaN = false) : base(source, period, useNaN) { + upperBand = lowerBand = prev_ma1 = prev_det0 = prev_det1 = prev_vsum = prev_jma = Kv = del1 = del2 = 0.0; + Kv = 0; + + pr = (phase * 0.01) + 1.5; + if (phase < -100) { pr = 0.5; } + if (phase > 100) { pr = 2.5; } + _voltyS = vshort; + _voltyL = vlong; + mma1 = new(); + mma2 = new(); + + if (base._data.Count > 0) { base.Add(base._data); } + } + + public override void Add((System.DateTime t, double v) TValue, bool update) { + if (this.Count == 0) { prev_ma1 = prev_jma = TValue.v; } + if (update) { + upperBand = p_upperBand; + lowerBand = p_lowerBand; + Kv = p_Kv; + prev_vsum = p_prev_vsum; + prev_ma1 = p_prev_ma1; + prev_det0 = p_prev_det0; + prev_det1 = p_prev_det1; + prev_jma = p_prev_jma; + } + else { + p_upperBand = upperBand; + p_lowerBand = lowerBand; + p_Kv = Kv; + p_prev_vsum = prev_vsum; + p_prev_ma1 = prev_ma1; + p_prev_det0 = prev_det0; + p_prev_det1 = prev_det1; + p_prev_jma = prev_jma; + } + + // from Tvalue to volty + del1 = TValue.v - upperBand; + del2 = TValue.v - lowerBand; + upperBand = (del1 > 0) ? TValue.v : TValue.v - (Kv * del1); + lowerBand = (del2 < 0) ? TValue.v : TValue.v - (Kv * del2); + double volty = 0; + if (Math.Abs(del1) > Math.Abs(del2)) { volty = Math.Abs(del1); } + if (Math.Abs(del1) < Math.Abs(del2)) { volty = Math.Abs(del2); } + + //// from volty to avolty + if (update) { volty_short[volty_short.Count - 1] = volty; } + else { volty_short.Add(volty); } + if (volty_short.Count > _voltyS) { volty_short.RemoveAt(0); } + vsum = prev_vsum + 0.1 * (volty - volty_short.First()); + prev_vsum = vsum; + if (update) { vsum_buff[vsum_buff.Count - 1] = vsum; } + else { vsum_buff.Add(vsum); } + if (vsum_buff.Count > _voltyL) { vsum_buff.RemoveAt(0); } + double avolty = 0; + for (int i = 0; i < vsum_buff.Count; i++) { avolty += vsum_buff[i]; } + avolty /= vsum_buff.Count; + + /// from avolty to rolty + double rvolty = (avolty != 0) ? volty / avolty : 0; + double len1 = (Math.Log(Math.Sqrt(_p)) / Math.Log(2.0)) + 2; + if (len1 < 0) + len1 = 0; + double pow1 = Math.Max(len1 - 2.0, 0.5); + if (rvolty > Math.Pow(len1, 1.0 / pow1)) { rvolty = Math.Pow(len1, 1.0 / pow1); } + if (rvolty < 1) { rvolty = 1; } + + //// from rvolty to second smoothing + double pow2 = Math.Pow(rvolty, pow1); + double beta = 0.45 * (_p - 1) / (0.45 * (_p - 1) + 2); + Kv = Math.Pow(beta, Math.Sqrt(pow2)); + double alpha = Math.Pow(beta, pow2); + double ma1 = (1 - alpha) * TValue.v + alpha * prev_ma1; + prev_ma1 = ma1; + mma1.Add(ma1); + + double det0 = (1 - beta) * (TValue.v - ma1) + beta * prev_det0; + prev_det0 = det0; + double ma2 = ma1 + pr * det0; + mma2.Add(ma2); + + double det1 = ((1 - alpha) * (1 - alpha) * (ma2 - prev_jma)) + (alpha * alpha * prev_det1); + prev_det1 = det1; + double jma = prev_jma + det1; + prev_jma = jma; + + base.Add((TValue.t, jma), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Trends/KAMA_Series.cs b/Calculations/Trends/KAMA_Series.cs similarity index 97% rename from Source/Trends/KAMA_Series.cs rename to Calculations/Trends/KAMA_Series.cs index 812fa6c2..808ce8c7 100644 --- a/Source/Trends/KAMA_Series.cs +++ b/Calculations/Trends/KAMA_Series.cs @@ -1,64 +1,64 @@ -namespace QuanTAlib; -using System; - -/* -KAMA: Kaufman's Adaptive Moving Average - Created in 1988 by American quantitative finance theorist Perry J. Kaufman and is known as - Kaufman's Adaptive Moving Average (KAMA). Even though the method was developed as early as 1972, - it was not until the popular book titled "Trading Systems and Methods" that it was made widely - available to the public. Unlike other conventional moving averages systems, the Kaufman's Adaptive - Moving Average, considers market volatility apart from price fluctuations. - - KAMAi = KAMAi - 1 + SC * ( price - KAMAi-1 ) - -Sources: - https://www.tutorialspoint.com/kaufman-s-adaptive-moving-average-kama-formula-and-how-does-it-work - https://corporatefinanceinstitute.com/resources/knowledge/trading-investing/kaufmans-adaptive-moving-average-kama/ - https://www.technicalindicators.net/indicators-technical-analysis/152-kama-kaufman-adaptive-moving-average - -Remark: - If useNaN:true argument is provided, KAMA starts calculating values from [period] bar onwards. - Without useNaN argument (default setting), KAMA starts calculating values from bar 1 - and yields - slightly different results for the first 50 bars - and then converges with the other one. - - */ - -public class KAMA_Series : Single_TSeries_Indicator -{ - private readonly double _scFast, _scSlow; - private readonly System.Collections.Generic.List _buffer = new(); - private double _lastkama = double.NaN; - private double _lastlastkama; - - public KAMA_Series(TSeries source, int period, int fast = 2, int slow= 30, bool useNaN = false) : base(source, period, useNaN) { - _scFast = 2.0 / (fast+1); - _scSlow = 2.0 / (slow+1); - if (base._data.Count > 0) { base.Add(base._data); } - } - public override void Add((System.DateTime t, double v) TValue, bool update) - { - if (update){ - _buffer[_buffer.Count - 1] = TValue.v; - _lastkama = _lastlastkama; - } - else { - _buffer.Add(TValue.v); - _lastlastkama = _lastkama; - } - if (_buffer.Count > _p + 1) { _buffer.RemoveAt(0); } - - double _kama = 0; - if (this.Count < this._p) { _kama = TValue.v; } - else { - double _change = Math.Abs(_buffer[_buffer.Count - 1] - _buffer[(_buffer.Count > _p + 1) ? 1 : 0]); - double _sumpv = 0; - for (int i = 1; i < _buffer.Count; i++) - { _sumpv += Math.Abs(_buffer[(_buffer.Count > 0) ? i : 0] - _buffer[i - 1]); } - double _er = (_sumpv == 0) ? 0 : _change / _sumpv; - double _sc = (_er * (_scFast - _scSlow)) + _scSlow; - _kama = (_lastkama + (_sc * _sc * (TValue.v - _lastkama))); - } - _lastkama = _kama; - base.Add((TValue.t, _kama), update, _NaN); - } +namespace QuanTAlib; +using System; + +/* +KAMA: Kaufman's Adaptive Moving Average + Created in 1988 by American quantitative finance theorist Perry J. Kaufman and is known as + Kaufman's Adaptive Moving Average (KAMA). Even though the method was developed as early as 1972, + it was not until the popular book titled "Trading Systems and Methods" that it was made widely + available to the public. Unlike other conventional moving averages systems, the Kaufman's Adaptive + Moving Average, considers market volatility apart from price fluctuations. + + KAMAi = KAMAi - 1 + SC * ( price - KAMAi-1 ) + +Sources: + https://www.tutorialspoint.com/kaufman-s-adaptive-moving-average-kama-formula-and-how-does-it-work + https://corporatefinanceinstitute.com/resources/knowledge/trading-investing/kaufmans-adaptive-moving-average-kama/ + https://www.technicalindicators.net/indicators-technical-analysis/152-kama-kaufman-adaptive-moving-average + +Remark: + If useNaN:true argument is provided, KAMA starts calculating values from [period] bar onwards. + Without useNaN argument (default setting), KAMA starts calculating values from bar 1 - and yields + slightly different results for the first 50 bars - and then converges with the other one. + + */ + +public class KAMA_Series : Single_TSeries_Indicator +{ + private readonly double _scFast, _scSlow; + private readonly System.Collections.Generic.List _buffer = new(); + private double _lastkama = double.NaN; + private double _lastlastkama; + + public KAMA_Series(TSeries source, int period, int fast = 2, int slow= 30, bool useNaN = false) : base(source, period, useNaN) { + _scFast = 2.0 / (fast+1); + _scSlow = 2.0 / (slow+1); + if (base._data.Count > 0) { base.Add(base._data); } + } + public override void Add((System.DateTime t, double v) TValue, bool update) + { + if (update){ + _buffer[_buffer.Count - 1] = TValue.v; + _lastkama = _lastlastkama; + } + else { + _buffer.Add(TValue.v); + _lastlastkama = _lastkama; + } + if (_buffer.Count > _p + 1) { _buffer.RemoveAt(0); } + + double _kama = 0; + if (this.Count < this._p) { _kama = TValue.v; } + else { + double _change = Math.Abs(_buffer[_buffer.Count - 1] - _buffer[(_buffer.Count > _p + 1) ? 1 : 0]); + double _sumpv = 0; + for (int i = 1; i < _buffer.Count; i++) + { _sumpv += Math.Abs(_buffer[(_buffer.Count > 0) ? i : 0] - _buffer[i - 1]); } + double _er = (_sumpv == 0) ? 0 : _change / _sumpv; + double _sc = (_er * (_scFast - _scSlow)) + _scSlow; + _kama = (_lastkama + (_sc * _sc * (TValue.v - _lastkama))); + } + _lastkama = _kama; + base.Add((TValue.t, _kama), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Trends/MACD_Series.cs b/Calculations/Trends/MACD_Series.cs similarity index 97% rename from Source/Trends/MACD_Series.cs rename to Calculations/Trends/MACD_Series.cs index ebe205f2..02f9360c 100644 --- a/Source/Trends/MACD_Series.cs +++ b/Calculations/Trends/MACD_Series.cs @@ -1,45 +1,45 @@ -namespace QuanTAlib; -using System; - -/* -MACD: Moving Average Convergence/Divergence - Moving average convergence divergence (MACD) is a trend-following momentum - indicator that shows the relationship between two moving averages of a series. - The MACD is calculated by subtracting the 26-period exponential moving average (EMA) - from the 12-period EMA. MACD Signal is 9-day EMA of MACD. - -Sources: - https://www.investopedia.com/terms/m/macd.asp - https://www.fidelity.com/learning-center/trading-investing/technical-analysis/technical-indicator-guide/macd - - */ - -public class MACD_Series : Single_TSeries_Indicator -{ - private readonly EMA_Series _TSslow; - private readonly EMA_Series _TSfast; - private readonly SUB_Series _TSmacd; - public EMA_Series Signal { get; } - - public MACD_Series(TSeries source, int slow = 26, int fast = 12, int signal = 9, bool useNaN = false) - : base(source, period: 0, useNaN) - { - _TSslow = new(source: source, period: slow, useNaN: false); - _TSfast = new(source: source, period: fast, useNaN: false); - _TSmacd = new(_TSfast, _TSslow); - this.Signal = new(source: _TSmacd, period: signal, useNaN: useNaN); - - if (source.Count > 0) { base.Add(_TSmacd); } - } - public override void Add((System.DateTime t, double v) TValue, bool update) - { - double _macd; - if (update) - { - _TSslow.Add(TValue, true); - _TSfast.Add(TValue, true); - } - _macd = this._TSmacd[(this.Count < this._TSmacd.Count) ? this.Count : this._TSmacd.Count - 1].v; - base.Add((TValue.t, _macd), update, _NaN); - } +namespace QuanTAlib; +using System; + +/* +MACD: Moving Average Convergence/Divergence + Moving average convergence divergence (MACD) is a trend-following momentum + indicator that shows the relationship between two moving averages of a series. + The MACD is calculated by subtracting the 26-period exponential moving average (EMA) + from the 12-period EMA. MACD Signal is 9-day EMA of MACD. + +Sources: + https://www.investopedia.com/terms/m/macd.asp + https://www.fidelity.com/learning-center/trading-investing/technical-analysis/technical-indicator-guide/macd + + */ + +public class MACD_Series : Single_TSeries_Indicator +{ + private readonly EMA_Series _TSslow; + private readonly EMA_Series _TSfast; + private readonly SUB_Series _TSmacd; + public EMA_Series Signal { get; } + + public MACD_Series(TSeries source, int slow = 26, int fast = 12, int signal = 9, bool useNaN = false) + : base(source, period: 0, useNaN) + { + _TSslow = new(source: source, period: slow, useNaN: false); + _TSfast = new(source: source, period: fast, useNaN: false); + _TSmacd = new(_TSfast, _TSslow); + this.Signal = new(source: _TSmacd, period: signal, useNaN: useNaN); + + if (source.Count > 0) { base.Add(_TSmacd); } + } + public override void Add((System.DateTime t, double v) TValue, bool update) + { + double _macd; + if (update) + { + _TSslow.Add(TValue, true); + _TSfast.Add(TValue, true); + } + _macd = this._TSmacd[(this.Count < this._TSmacd.Count) ? this.Count : this._TSmacd.Count - 1].v; + base.Add((TValue.t, _macd), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Trends/MAMA_Series.cs b/Calculations/Trends/MAMA_Series.cs similarity index 97% rename from Source/Trends/MAMA_Series.cs rename to Calculations/Trends/MAMA_Series.cs index 0224dc98..ff85d784 100644 --- a/Source/Trends/MAMA_Series.cs +++ b/Calculations/Trends/MAMA_Series.cs @@ -1,118 +1,118 @@ -namespace QuanTAlib; -using System; - -/* -MAMA: MESA Adaptive Moving Average - Created by John Ehlers, the MAMA indicator is a 5-period adaptive moving average of - high/low price that uses classic electrical radio-frequency signal processing algorithms - to reduce noise. - - KAMAi = KAMAi - 1 + SC * ( price - KAMAi-1 ) - -Sources: - https://mesasoftware.com/papers/MAMA.pdf - https://www.tradingview.com/script/foQxLbU3-Ehlers-MESA-Adaptive-Moving-Average-LazyBear/ - - */ - -public class MAMA_Series : Single_TSeries_Indicator -{ - public MAMA_Series(TSeries source, double fastlimit = 0.5, double slowlimit = 0.05, bool useNaN = false) : base(source, period: 5, useNaN) - { - fastl = fastlimit; - slowl = slowlimit; - Fama = new(); - if (base._data.Count > 0) { base.Add(base._data); } - } - - private double sumPr, jI, jQ, fastl, slowl; - private (double i, double i1, double i2, double i3, double i4, double i5, double i6, double io) pr, i1, q1, sm, dt; - private (double i, double i1, double io) i2, q2, re, im, pd, ph, mama, fama; - public TSeries Fama { get; } - - public override void Add((System.DateTime t, double v) TValue, bool update) - { - - if (!update) { - // roll forward (oldx = x) - pr.io = pr.i6; pr.i6 = pr.i5; pr.i5 = pr.i4; pr.i4 = pr.i3; pr.i3 = pr.i2; pr.i2 = pr.i1; pr.i1 = pr.i; - i1.io = i1.i6; i1.i6 = i1.i5; i1.i5 = i1.i4; i1.i4 = i1.i3; i1.i3 = i1.i2; i1.i2 = i1.i1; i1.i1 = i1.i; - q1.io = q1.i6; q1.i6 = q1.i5; q1.i5 = q1.i4; q1.i4 = q1.i3; q1.i3 = q1.i2; q1.i2 = q1.i1; q1.i1 = q1.i; - dt.io = dt.i6; dt.i6 = dt.i5; dt.i5 = dt.i4; dt.i4 = dt.i3; dt.i3 = dt.i2; dt.i2 = dt.i1; dt.i1 = dt.i; - sm.io = sm.i6; sm.i6 = sm.i5; sm.i5 = sm.i4; sm.i4 = sm.i3; sm.i3 = sm.i2; sm.i2 = sm.i1; sm.i1 = sm.i; - i2.io = i2.i1; i2.i1 = i2.i; - q2.io = q2.i1; q2.i1 = q2.i; - re.io = re.i1; re.i1 = re.i; - im.io = im.i1; im.i1 = im.i; - pd.io = pd.i1; pd.i1 = pd.i; - ph.io = ph.i1; ph.i1 = ph.i; - mama.io = mama.i1; mama.i1 = mama.i; - fama.io = fama.i1; fama.i1 = fama.i; - } - int i = base.Count; - pr.i = TValue.v; - if (i > 5) { - double adj = (0.075 * pd.i1) + 0.54; - - // smooth and detrender - sm.i = ((4 * pr.i) + (3 * pr.i1) + (2 * pr.i2) + pr.i3) / 10; - dt.i = ((0.0962 * sm.i) + (0.5769 * sm.i2) - (0.5769 * sm.i4) - (0.0962 * sm.i6)) * adj; - - // in-phase and quadrature - q1.i = ((0.0962 * dt.i) + (0.5769 * dt.i2) - (0.5769 * dt.i4) - (0.0962 * dt.i6)) * adj; - i1.i = dt.i3; - - // advance the phases by 90 degrees - jI = ((0.0962 * i1.i) + (0.5769 * i1.i2) - (0.5769 * i1.i4) - (0.0962 * i1.i6)) * adj; - jQ = ((0.0962 * q1.i) + (0.5769 * q1.i2) - (0.5769 * q1.i4) - (0.0962 * q1.i6)) * adj; - - // phasor addition for 3-bar averaging - i2.i = i1.i - jQ; - q2.i = q1.i + jI; - - i2.i = (0.2 * i2.i) + (0.8 * i2.i1); // smoothing it - q2.i = (0.2 * q2.i) + (0.8 * q2.i1); - - // homodyne discriminator - re.i = (i2.i * i2.i1) + (q2.i * q2.i1); - im.i = (i2.i * q2.i1) - (q2.i * i2.i1); - - re.i = (0.2 * re.i) + (0.8 * re.i1); // smoothing it - im.i = (0.2 * im.i) + (0.8 * im.i1); - - // calculate period - pd.i = (im.i != 0 && re.i != 0) ? (6.283185307179586 / Math.Atan(im.i / re.i)) : 0d; - - // adjust period to thresholds - pd.i = (pd.i > 1.5 * pd.i1) ? 1.5 * pd.i1 : pd.i; - pd.i = (pd.i < 0.67 * pd.i1) ? 0.67 * pd.i1 : pd.i; - pd.i = (pd.i < 6d) ? 6d : pd.i; - pd.i = (pd.i > 50d) ? 50d : pd.i; - - // smooth the period - pd.i = (0.2 * pd.i) + (0.8 * pd.i1); - - // determine phase position - ph.i = (i1.i != 0) ? Math.Atan(q1.i / i1.i) * 57.29577951308232 : 0; - - // change in phase - double delta = Math.Max(ph.i1 - ph.i, 1d); - - // adaptive alpha value - double alpha = Math.Max(fastl / delta, slowl); - - // final indicators - mama.i = ((alpha * pr.i) + ((1d - alpha) * mama.i1)); - fama.i = ((0.5d * alpha * mama.i) + ((1d - (0.5d * alpha)) * fama.i1)); - } - else { - sumPr += pr.i; - pd.i = sm.i = dt.i = i1.i = q1.i = i2.i = q2.i = re.i = im.i = ph.i = 0; - mama.i = fama.i = sumPr / (i+1); - } - - base.Add((TValue.t, mama.i), update, _NaN); - var result = (TValue.t, this.Count < this._p - 1 && this._NaN ? double.NaN : fama.i); - Fama.Add(result, update); - } -} +namespace QuanTAlib; +using System; + +/* +MAMA: MESA Adaptive Moving Average + Created by John Ehlers, the MAMA indicator is a 5-period adaptive moving average of + high/low price that uses classic electrical radio-frequency signal processing algorithms + to reduce noise. + + KAMAi = KAMAi - 1 + SC * ( price - KAMAi-1 ) + +Sources: + https://mesasoftware.com/papers/MAMA.pdf + https://www.tradingview.com/script/foQxLbU3-Ehlers-MESA-Adaptive-Moving-Average-LazyBear/ + + */ + +public class MAMA_Series : Single_TSeries_Indicator +{ + public MAMA_Series(TSeries source, double fastlimit = 0.5, double slowlimit = 0.05, bool useNaN = false) : base(source, period: 5, useNaN) + { + fastl = fastlimit; + slowl = slowlimit; + Fama = new(); + if (base._data.Count > 0) { base.Add(base._data); } + } + + private double sumPr, jI, jQ, fastl, slowl; + private (double i, double i1, double i2, double i3, double i4, double i5, double i6, double io) pr, i1, q1, sm, dt; + private (double i, double i1, double io) i2, q2, re, im, pd, ph, mama, fama; + public TSeries Fama { get; } + + public override void Add((System.DateTime t, double v) TValue, bool update) + { + + if (!update) { + // roll forward (oldx = x) + pr.io = pr.i6; pr.i6 = pr.i5; pr.i5 = pr.i4; pr.i4 = pr.i3; pr.i3 = pr.i2; pr.i2 = pr.i1; pr.i1 = pr.i; + i1.io = i1.i6; i1.i6 = i1.i5; i1.i5 = i1.i4; i1.i4 = i1.i3; i1.i3 = i1.i2; i1.i2 = i1.i1; i1.i1 = i1.i; + q1.io = q1.i6; q1.i6 = q1.i5; q1.i5 = q1.i4; q1.i4 = q1.i3; q1.i3 = q1.i2; q1.i2 = q1.i1; q1.i1 = q1.i; + dt.io = dt.i6; dt.i6 = dt.i5; dt.i5 = dt.i4; dt.i4 = dt.i3; dt.i3 = dt.i2; dt.i2 = dt.i1; dt.i1 = dt.i; + sm.io = sm.i6; sm.i6 = sm.i5; sm.i5 = sm.i4; sm.i4 = sm.i3; sm.i3 = sm.i2; sm.i2 = sm.i1; sm.i1 = sm.i; + i2.io = i2.i1; i2.i1 = i2.i; + q2.io = q2.i1; q2.i1 = q2.i; + re.io = re.i1; re.i1 = re.i; + im.io = im.i1; im.i1 = im.i; + pd.io = pd.i1; pd.i1 = pd.i; + ph.io = ph.i1; ph.i1 = ph.i; + mama.io = mama.i1; mama.i1 = mama.i; + fama.io = fama.i1; fama.i1 = fama.i; + } + int i = base.Count; + pr.i = TValue.v; + if (i > 5) { + double adj = (0.075 * pd.i1) + 0.54; + + // smooth and detrender + sm.i = ((4 * pr.i) + (3 * pr.i1) + (2 * pr.i2) + pr.i3) / 10; + dt.i = ((0.0962 * sm.i) + (0.5769 * sm.i2) - (0.5769 * sm.i4) - (0.0962 * sm.i6)) * adj; + + // in-phase and quadrature + q1.i = ((0.0962 * dt.i) + (0.5769 * dt.i2) - (0.5769 * dt.i4) - (0.0962 * dt.i6)) * adj; + i1.i = dt.i3; + + // advance the phases by 90 degrees + jI = ((0.0962 * i1.i) + (0.5769 * i1.i2) - (0.5769 * i1.i4) - (0.0962 * i1.i6)) * adj; + jQ = ((0.0962 * q1.i) + (0.5769 * q1.i2) - (0.5769 * q1.i4) - (0.0962 * q1.i6)) * adj; + + // phasor addition for 3-bar averaging + i2.i = i1.i - jQ; + q2.i = q1.i + jI; + + i2.i = (0.2 * i2.i) + (0.8 * i2.i1); // smoothing it + q2.i = (0.2 * q2.i) + (0.8 * q2.i1); + + // homodyne discriminator + re.i = (i2.i * i2.i1) + (q2.i * q2.i1); + im.i = (i2.i * q2.i1) - (q2.i * i2.i1); + + re.i = (0.2 * re.i) + (0.8 * re.i1); // smoothing it + im.i = (0.2 * im.i) + (0.8 * im.i1); + + // calculate period + pd.i = (im.i != 0 && re.i != 0) ? (6.283185307179586 / Math.Atan(im.i / re.i)) : 0d; + + // adjust period to thresholds + pd.i = (pd.i > 1.5 * pd.i1) ? 1.5 * pd.i1 : pd.i; + pd.i = (pd.i < 0.67 * pd.i1) ? 0.67 * pd.i1 : pd.i; + pd.i = (pd.i < 6d) ? 6d : pd.i; + pd.i = (pd.i > 50d) ? 50d : pd.i; + + // smooth the period + pd.i = (0.2 * pd.i) + (0.8 * pd.i1); + + // determine phase position + ph.i = (i1.i != 0) ? Math.Atan(q1.i / i1.i) * 57.29577951308232 : 0; + + // change in phase + double delta = Math.Max(ph.i1 - ph.i, 1d); + + // adaptive alpha value + double alpha = Math.Max(fastl / delta, slowl); + + // final indicators + mama.i = ((alpha * pr.i) + ((1d - alpha) * mama.i1)); + fama.i = ((0.5d * alpha * mama.i) + ((1d - (0.5d * alpha)) * fama.i1)); + } + else { + sumPr += pr.i; + pd.i = sm.i = dt.i = i1.i = q1.i = i2.i = q2.i = re.i = im.i = ph.i = 0; + mama.i = fama.i = sumPr / (i+1); + } + + base.Add((TValue.t, mama.i), update, _NaN); + var result = (TValue.t, this.Count < this._p - 1 && this._NaN ? double.NaN : fama.i); + Fama.Add(result, update); + } +} diff --git a/Source/Trends/RMA_Series.cs b/Calculations/Trends/RMA_Series.cs similarity index 97% rename from Source/Trends/RMA_Series.cs rename to Calculations/Trends/RMA_Series.cs index e8b1ef63..f7059c51 100644 --- a/Source/Trends/RMA_Series.cs +++ b/Calculations/Trends/RMA_Series.cs @@ -1,56 +1,56 @@ -namespace QuanTAlib; -using System; -using System.Linq; - -/* -RMA: wildeR Moving Average - J. Welles Wilder introduced RMA as an alternative to EMA. RMA's weight (k) is - set as 1/period, giving less weight to the new data compared to EMA. - -Sources: - https://archive.org/details/newconceptsintec00wild/page/23/mode/2up - https://tlc.thinkorswim.com/center/reference/Tech-Indicators/studies-library/V-Z/WildersSmoothing - https://www.incrediblecharts.com/indicators/wilder_moving_average.php - -Issues: - Pandas-TA library calculates RMA using straight Exponential Weighted Mean: - pandas.ewm().mean() and returns incorrect first (period) of bars compared to - published formula. This implementation passess the validation test in Wilder's book. - - */ - -public class RMA_Series : Single_TSeries_Indicator -{ - private readonly System.Collections.Generic.List _buffer = new(); - private readonly double _k, _k1m; - private double _lastema, _lastlastema; - - public RMA_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) - { - this._k = 1.0 / (double)(this._p); - this._k1m = 1.0 - this._k; - this._lastema = this._lastlastema = double.NaN; - if (_data.Count > 0) { base.Add(_data); } - } - - public override void Add((DateTime t, double v) TValue, bool update) - { - double _ema; - if (update) { this._lastema = this._lastlastema; } - - if (this.Count < this._p) - { - Add_Replace_Trim(_buffer, TValue.v, _p, update); - _ema = _buffer.Average(); - } - else - { - _ema = (TValue.v * _k) + (_lastema * _k1m); - } - - this._lastlastema = this._lastema; - this._lastema = _ema; - - base.Add((TValue.t, _ema), update, _NaN); - } +namespace QuanTAlib; +using System; +using System.Linq; + +/* +RMA: wildeR Moving Average + J. Welles Wilder introduced RMA as an alternative to EMA. RMA's weight (k) is + set as 1/period, giving less weight to the new data compared to EMA. + +Sources: + https://archive.org/details/newconceptsintec00wild/page/23/mode/2up + https://tlc.thinkorswim.com/center/reference/Tech-Indicators/studies-library/V-Z/WildersSmoothing + https://www.incrediblecharts.com/indicators/wilder_moving_average.php + +Issues: + Pandas-TA library calculates RMA using straight Exponential Weighted Mean: + pandas.ewm().mean() and returns incorrect first (period) of bars compared to + published formula. This implementation passess the validation test in Wilder's book. + + */ + +public class RMA_Series : Single_TSeries_Indicator +{ + private readonly System.Collections.Generic.List _buffer = new(); + private readonly double _k, _k1m; + private double _lastema, _lastlastema; + + public RMA_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) + { + this._k = 1.0 / (double)(this._p); + this._k1m = 1.0 - this._k; + this._lastema = this._lastlastema = double.NaN; + if (_data.Count > 0) { base.Add(_data); } + } + + public override void Add((DateTime t, double v) TValue, bool update) + { + double _ema; + if (update) { this._lastema = this._lastlastema; } + + if (this.Count < this._p) + { + Add_Replace_Trim(_buffer, TValue.v, _p, update); + _ema = _buffer.Average(); + } + else + { + _ema = (TValue.v * _k) + (_lastema * _k1m); + } + + this._lastlastema = this._lastema; + this._lastema = _ema; + + base.Add((TValue.t, _ema), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Trends/SMA_Series.cs b/Calculations/Trends/SMA_Series.cs similarity index 96% rename from Source/Trends/SMA_Series.cs rename to Calculations/Trends/SMA_Series.cs index 9c23f298..84c8395d 100644 --- a/Source/Trends/SMA_Series.cs +++ b/Calculations/Trends/SMA_Series.cs @@ -1,44 +1,44 @@ -namespace QuanTAlib; -using System; - -/* -SMA: Simple Moving Average - The weights are equally distributed across the period, resulting in a mean() of - the data within the period - -Sources: - https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/simple-moving-average-sma/ - https://stats.stackexchange.com/a/24739 - -Remark: - This calc doesn't use LINQ or SUM() or any of (slow) iterative methods. It is not as fast as TA-LIB - implementation, but it does allow incremental additions of inputs and real-time calculations of SMA() - - */ - -public class SMA_Series : Single_TSeries_Indicator { - private double _sum, _oldsum; - private int _len; - - public SMA_Series(TSeries source, int period = 0, bool useNaN = false) : base(source, period, false) { - _sum = _oldsum = 0; - _len = 0; - if (this._data.Count > 0) { base.Add(this._data); } - } - - public override void Add((DateTime t, double v) TValue, bool update) { - if (update) { _sum = _oldsum; } - else { _oldsum = _sum; _len++; } - - _sum += TValue.v; - if (_period != 0 && _len > _period) { - _sum -= (_data[base.Count - _period - (update ? 1 : 0)].v); - } - double _div = (_period == 0) ? _len : Math.Min(_len, _period); - base.Add((TValue.t, _sum / _div), update, _NaN); - } - public void Reset() { - _sum = _oldsum = 0; - _len = 0; - } -} +namespace QuanTAlib; +using System; + +/* +SMA: Simple Moving Average + The weights are equally distributed across the period, resulting in a mean() of + the data within the period + +Sources: + https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/simple-moving-average-sma/ + https://stats.stackexchange.com/a/24739 + +Remark: + This calc doesn't use LINQ or SUM() or any of (slow) iterative methods. It is not as fast as TA-LIB + implementation, but it does allow incremental additions of inputs and real-time calculations of SMA() + + */ + +public class SMA_Series : Single_TSeries_Indicator { + private double _sum, _oldsum; + private int _len; + + public SMA_Series(TSeries source, int period = 0, bool useNaN = false) : base(source, period, false) { + _sum = _oldsum = 0; + _len = 0; + if (this._data.Count > 0) { base.Add(this._data); } + } + + public override void Add((DateTime t, double v) TValue, bool update) { + if (update) { _sum = _oldsum; } + else { _oldsum = _sum; _len++; } + + _sum += TValue.v; + if (_period != 0 && _len > _period) { + _sum -= (_data[base.Count - _period - (update ? 1 : 0)].v); + } + double _div = (_period == 0) ? _len : Math.Min(_len, _period); + base.Add((TValue.t, _sum / _div), update, _NaN); + } + public void Reset() { + _sum = _oldsum = 0; + _len = 0; + } +} diff --git a/Source/Trends/SMMA_Series.cs b/Calculations/Trends/SMMA_Series.cs similarity index 97% rename from Source/Trends/SMMA_Series.cs rename to Calculations/Trends/SMMA_Series.cs index 08a22068..27d3bfcd 100644 --- a/Source/Trends/SMMA_Series.cs +++ b/Calculations/Trends/SMMA_Series.cs @@ -1,51 +1,51 @@ -namespace QuanTAlib; -using System; -using System.Linq; - -/* -SMMA: Smoothed Moving Average - The Smoothed Moving Average (SMMA) is a combination of a SMA and an EMA. It gives the recent prices - an equal weighting as the historic prices as it takes all available price data into account. - The main advantage of a smoothed moving average is that it removes short-term fluctuations. - - SMMA(i) = (SMMA-1*(N-1) + CLOSE (i)) / N - -Sources: - https://blog.earn2trade.com/smoothed-moving-average - https://guide.traderevolution.com/traderevolution/mobile-applications/phone/android/technical-indicators/moving-averages/smma-smoothed-moving-average - https://www.chartmill.com/documentation/technical-analysis-indicators/217-MOVING-AVERAGES-%7C-The-Smoothed-Moving-Average-%28SMMA%29 - - */ - -public class SMMA_Series : Single_TSeries_Indicator -{ - private readonly System.Collections.Generic.List _buffer = new(); - private double _lastsmma, _lastlastsmma; - - public SMMA_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) - { - this._lastsmma = this._lastlastsmma = double.NaN; - if (this._data.Count > 0) { base.Add(this._data); } - } - - public override void Add((DateTime t, double v) TValue, bool update) - { - double _smma = 0; - if (update) { this._lastsmma = this._lastlastsmma; } - - if (this.Count < this._p) - { - Add_Replace_Trim(_buffer, TValue.v, _p, update); - _smma = _buffer.Average(); - } - else - { - _smma = ((_lastsmma * (_p-1)) + TValue.v) / _p ; - } - - this._lastlastsmma = this._lastsmma; - this._lastsmma = _smma; - - base.Add((TValue.t, _smma), update, _NaN); - } +namespace QuanTAlib; +using System; +using System.Linq; + +/* +SMMA: Smoothed Moving Average + The Smoothed Moving Average (SMMA) is a combination of a SMA and an EMA. It gives the recent prices + an equal weighting as the historic prices as it takes all available price data into account. + The main advantage of a smoothed moving average is that it removes short-term fluctuations. + + SMMA(i) = (SMMA-1*(N-1) + CLOSE (i)) / N + +Sources: + https://blog.earn2trade.com/smoothed-moving-average + https://guide.traderevolution.com/traderevolution/mobile-applications/phone/android/technical-indicators/moving-averages/smma-smoothed-moving-average + https://www.chartmill.com/documentation/technical-analysis-indicators/217-MOVING-AVERAGES-%7C-The-Smoothed-Moving-Average-%28SMMA%29 + + */ + +public class SMMA_Series : Single_TSeries_Indicator +{ + private readonly System.Collections.Generic.List _buffer = new(); + private double _lastsmma, _lastlastsmma; + + public SMMA_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) + { + this._lastsmma = this._lastlastsmma = double.NaN; + if (this._data.Count > 0) { base.Add(this._data); } + } + + public override void Add((DateTime t, double v) TValue, bool update) + { + double _smma = 0; + if (update) { this._lastsmma = this._lastlastsmma; } + + if (this.Count < this._p) + { + Add_Replace_Trim(_buffer, TValue.v, _p, update); + _smma = _buffer.Average(); + } + else + { + _smma = ((_lastsmma * (_p-1)) + TValue.v) / _p ; + } + + this._lastlastsmma = this._lastsmma; + this._lastsmma = _smma; + + base.Add((TValue.t, _smma), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Trends/T3_Series.cs b/Calculations/Trends/T3_Series.cs similarity index 97% rename from Source/Trends/T3_Series.cs rename to Calculations/Trends/T3_Series.cs index 12479ceb..304fc200 100644 --- a/Source/Trends/T3_Series.cs +++ b/Calculations/Trends/T3_Series.cs @@ -1,110 +1,110 @@ -namespace QuanTAlib; -using System; -using System.Linq; -using System.Numerics; - -/* -T3: Tillson T3 Moving Average - Tim Tillson described it in "Technical Analysis of Stocks and Commodities", January 1998 in the - article "Better Moving Averages". Tillson’s moving average becomes a popular indicator of - technical analysis as it gets less lag with the price chart and its curve is considerably smoother. - -Sources: - https://technicalindicators.net/indicators-technical-analysis/150-t3-moving-average - http://www.binarytribune.com/forex-trading-indicators/t3-moving-average-indicator/ - -Calculation: - Volume Factor is typically 0.7 (but also 0.618); - Ema1 = Ema (Close); - Ema2 = Ema (Ema1); - Ema3 = Ema (Ema2); - Ema4 = Ema (Ema3); - Ema5 = Ema (Ema4); - Ema6 = Ema (Ema5); - T3 = –(a*a*a) * Ema6 + (3*a*a + 3*a*a*a) * Ema5 + (–6*a*a – 3*a – 3*a*a*a) * Ema4 + (1 + 3*a + a*a*a + 3*a*a) * Ema3 - - */ -public class T3_Series : Single_TSeries_Indicator { - private readonly double _k, _k1m, _c1, _c2, _c3, _c4; - private readonly System.Collections.Generic.List _buffer1 = new(); - private readonly System.Collections.Generic.List _buffer2 = new(); - private readonly System.Collections.Generic.List _buffer3 = new(); - private readonly System.Collections.Generic.List _buffer4 = new(); - private readonly System.Collections.Generic.List _buffer5 = new(); - private readonly System.Collections.Generic.List _buffer6 = new(); - - private double _lastema1, _lastema2, _lastema3, _lastema4, _lastema5, _lastema6; - private double _llastema1, _llastema2, _llastema3, _llastema4, _llastema5, _llastema6; - private bool _useSMA; - - public T3_Series(TSeries source, int period, double vfactor = 0.7, bool useNaN = false, bool useSMA = true) : base(source, period, useNaN) { - double _a = vfactor; //0.7; //0.618 - _c1 = -_a * _a * _a; - _c2 = 3 * _a * _a + 3 * _a * _a * _a; - _c3 = -6 * _a * _a - 3 * _a - 3 * _a * _a * _a; - _c4 = 1 + 3 * _a + _a * _a * _a + 3 * _a * _a; - - _k = 2.0 / (_p + 1); - _k1m = 1.0 - _k; - _lastema1 = _llastema1 = _lastema2 = _llastema2 = _lastema3 = _llastema3 = _lastema4 = _llastema4 = _lastema5 = _llastema5 = _lastema5 = _llastema5 = 0; - _useSMA = useSMA; - if (this._data.Count > 0) { base.Add(this._data); } - } - - public override void Add((DateTime t, double v) TValue, bool update) { - double _ema1, _ema2, _ema3, _ema4, _ema5, _ema6; - if (update) { _lastema1 = _llastema1; _lastema2 = _llastema2; _lastema3 = _llastema3; _lastema4 = _llastema4; _lastema5 = _llastema5; _lastema6 = _llastema6; } - else { _llastema1 = _lastema1; _llastema2 = _lastema2; _llastema3 = _lastema3; _llastema4 = _lastema4; _llastema5 = _lastema5; _llastema6 = _lastema6; } - - if (this.Count == 0) { _lastema1 = _lastema2 = _lastema3 = _lastema4 = _lastema5 = _lastema6 = TValue.v; } - - if ((this.Count < _p) && _useSMA) { - Add_Replace(_buffer1, TValue.v, update); - _ema1 = 0; - for (int i = 0; i < _buffer1.Count; i++) { _ema1 += _buffer1[i]; } - _ema1 /= _buffer1.Count; - - Add_Replace(_buffer2, _ema1, update); - _ema2 = 0; - for (int i = 0; i < _buffer2.Count; i++) { _ema2 += _buffer2[i]; } - _ema2 /= _buffer2.Count; - - Add_Replace(_buffer3, _ema2, update); - _ema3 = 0; - for (int i = 0; i < _buffer3.Count; i++) { _ema3 += _buffer3[i]; } - _ema3 /= _buffer3.Count; - - Add_Replace(_buffer4, _ema3, update); - _ema4 = 0; - for (int i = 0; i < _buffer4.Count; i++) { _ema4 += _buffer4[i]; } - _ema4 /= _buffer4.Count; - - Add_Replace(_buffer5, _ema4, update); - _ema5 = 0; - for (int i = 0; i < _buffer5.Count; i++) { _ema5 += _buffer5[i]; } - _ema5 /= _buffer5.Count; - - Add_Replace(_buffer6, _ema5, update); - _ema6 = 0; - for (int i = 0; i < _buffer6.Count; i++) { _ema6 += _buffer6[i]; } - _ema6 /= _buffer6.Count; - } - 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); - _ema4 = (_ema3 * this._k) + (this._lastema4 * this._k1m); - _ema5 = (_ema4 * this._k) + (this._lastema5 * this._k1m); - _ema6 = (_ema5 * this._k) + (this._lastema6 * this._k1m); - } - _lastema1 = _ema1; - _lastema2 = _ema2; - _lastema3 = _ema3; - _lastema4 = _ema4; - _lastema5 = _ema5; - _lastema6 = _ema6; - - double _T3 = _c1 * _ema6 + _c2 * _ema5 + _c3 * _ema4 + _c4 * _ema3; - base.Add((TValue.t, _T3), update, _NaN); - } +namespace QuanTAlib; +using System; +using System.Linq; +using System.Numerics; + +/* +T3: Tillson T3 Moving Average + Tim Tillson described it in "Technical Analysis of Stocks and Commodities", January 1998 in the + article "Better Moving Averages". Tillson’s moving average becomes a popular indicator of + technical analysis as it gets less lag with the price chart and its curve is considerably smoother. + +Sources: + https://technicalindicators.net/indicators-technical-analysis/150-t3-moving-average + http://www.binarytribune.com/forex-trading-indicators/t3-moving-average-indicator/ + +Calculation: + Volume Factor is typically 0.7 (but also 0.618); + Ema1 = Ema (Close); + Ema2 = Ema (Ema1); + Ema3 = Ema (Ema2); + Ema4 = Ema (Ema3); + Ema5 = Ema (Ema4); + Ema6 = Ema (Ema5); + T3 = –(a*a*a) * Ema6 + (3*a*a + 3*a*a*a) * Ema5 + (–6*a*a – 3*a – 3*a*a*a) * Ema4 + (1 + 3*a + a*a*a + 3*a*a) * Ema3 + + */ +public class T3_Series : Single_TSeries_Indicator { + private readonly double _k, _k1m, _c1, _c2, _c3, _c4; + private readonly System.Collections.Generic.List _buffer1 = new(); + private readonly System.Collections.Generic.List _buffer2 = new(); + private readonly System.Collections.Generic.List _buffer3 = new(); + private readonly System.Collections.Generic.List _buffer4 = new(); + private readonly System.Collections.Generic.List _buffer5 = new(); + private readonly System.Collections.Generic.List _buffer6 = new(); + + private double _lastema1, _lastema2, _lastema3, _lastema4, _lastema5, _lastema6; + private double _llastema1, _llastema2, _llastema3, _llastema4, _llastema5, _llastema6; + private bool _useSMA; + + public T3_Series(TSeries source, int period, double vfactor = 0.7, bool useNaN = false, bool useSMA = true) : base(source, period, useNaN) { + double _a = vfactor; //0.7; //0.618 + _c1 = -_a * _a * _a; + _c2 = 3 * _a * _a + 3 * _a * _a * _a; + _c3 = -6 * _a * _a - 3 * _a - 3 * _a * _a * _a; + _c4 = 1 + 3 * _a + _a * _a * _a + 3 * _a * _a; + + _k = 2.0 / (_p + 1); + _k1m = 1.0 - _k; + _lastema1 = _llastema1 = _lastema2 = _llastema2 = _lastema3 = _llastema3 = _lastema4 = _llastema4 = _lastema5 = _llastema5 = _lastema5 = _llastema5 = 0; + _useSMA = useSMA; + if (this._data.Count > 0) { base.Add(this._data); } + } + + public override void Add((DateTime t, double v) TValue, bool update) { + double _ema1, _ema2, _ema3, _ema4, _ema5, _ema6; + if (update) { _lastema1 = _llastema1; _lastema2 = _llastema2; _lastema3 = _llastema3; _lastema4 = _llastema4; _lastema5 = _llastema5; _lastema6 = _llastema6; } + else { _llastema1 = _lastema1; _llastema2 = _lastema2; _llastema3 = _lastema3; _llastema4 = _lastema4; _llastema5 = _lastema5; _llastema6 = _lastema6; } + + if (this.Count == 0) { _lastema1 = _lastema2 = _lastema3 = _lastema4 = _lastema5 = _lastema6 = TValue.v; } + + if ((this.Count < _p) && _useSMA) { + Add_Replace(_buffer1, TValue.v, update); + _ema1 = 0; + for (int i = 0; i < _buffer1.Count; i++) { _ema1 += _buffer1[i]; } + _ema1 /= _buffer1.Count; + + Add_Replace(_buffer2, _ema1, update); + _ema2 = 0; + for (int i = 0; i < _buffer2.Count; i++) { _ema2 += _buffer2[i]; } + _ema2 /= _buffer2.Count; + + Add_Replace(_buffer3, _ema2, update); + _ema3 = 0; + for (int i = 0; i < _buffer3.Count; i++) { _ema3 += _buffer3[i]; } + _ema3 /= _buffer3.Count; + + Add_Replace(_buffer4, _ema3, update); + _ema4 = 0; + for (int i = 0; i < _buffer4.Count; i++) { _ema4 += _buffer4[i]; } + _ema4 /= _buffer4.Count; + + Add_Replace(_buffer5, _ema4, update); + _ema5 = 0; + for (int i = 0; i < _buffer5.Count; i++) { _ema5 += _buffer5[i]; } + _ema5 /= _buffer5.Count; + + Add_Replace(_buffer6, _ema5, update); + _ema6 = 0; + for (int i = 0; i < _buffer6.Count; i++) { _ema6 += _buffer6[i]; } + _ema6 /= _buffer6.Count; + } + 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); + _ema4 = (_ema3 * this._k) + (this._lastema4 * this._k1m); + _ema5 = (_ema4 * this._k) + (this._lastema5 * this._k1m); + _ema6 = (_ema5 * this._k) + (this._lastema6 * this._k1m); + } + _lastema1 = _ema1; + _lastema2 = _ema2; + _lastema3 = _ema3; + _lastema4 = _ema4; + _lastema5 = _ema5; + _lastema6 = _ema6; + + double _T3 = _c1 * _ema6 + _c2 * _ema5 + _c3 * _ema4 + _c4 * _ema3; + base.Add((TValue.t, _T3), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Trends/TEMA_Series.cs b/Calculations/Trends/TEMA_Series.cs similarity index 96% rename from Source/Trends/TEMA_Series.cs rename to Calculations/Trends/TEMA_Series.cs index 3cb1aafc..71f84698 100644 --- a/Source/Trends/TEMA_Series.cs +++ b/Calculations/Trends/TEMA_Series.cs @@ -1,70 +1,70 @@ -namespace QuanTAlib; -using System; -using System.Linq; - -/* -TEMA: Triple Exponential Moving Average - TEMA uses EMA(EMA(EMA())) to calculate less laggy Exponential moving average. - -Sources: - https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/triple-exponential-moving-average-tema/ - -Remark: - ema1 = EMA(close, length) - ema2 = EMA(ema1, length) - ema3 = EMA(ema2, length) - TEMA = 3 * (ema1 - ema2) + ema3 - - */ - -public class TEMA_Series : Single_TSeries_Indicator -{ - private readonly System.Collections.Generic.List _buffer = new(); - private readonly double _k, _k1m; - private double _lastema1, _lastlastema1; - private double _lastema2, _lastlastema2; - private double _lastema3, _lastlastema3; - - public TEMA_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) - { - this._k = 2.0 / (this._p + 1); - this._k1m = 1.0 - this._k; - if (_data.Count > 0) { base.Add(_data); } - } - - public override void Add((DateTime t, double v) TValue, bool update) - { - if (update) - { - this._lastema1 = this._lastlastema1; - this._lastema2 = this._lastlastema2; - this._lastema3 = this._lastlastema3; - } - - double _ema1, _ema2, _ema3; - - if (this.Count < this._p) - { - Add_Replace_Trim(_buffer, TValue.v, _p, update); - double _sma = _buffer.Average(); - _ema1 = _ema2 = _ema3 = _sma; - } - 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); - } - - double _tema = (3 * (_ema1 - _ema2)) + _ema3; - - this._lastlastema1 = this._lastema1; - this._lastlastema2 = this._lastema2; - this._lastlastema3 = this._lastema3; - this._lastema1 = _ema1; - this._lastema2 = _ema2; - this._lastema3 = _ema3; - - base.Add((TValue.t, _tema), update, _NaN); - } +namespace QuanTAlib; +using System; +using System.Linq; + +/* +TEMA: Triple Exponential Moving Average + TEMA uses EMA(EMA(EMA())) to calculate less laggy Exponential moving average. + +Sources: + https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/triple-exponential-moving-average-tema/ + +Remark: + ema1 = EMA(close, length) + ema2 = EMA(ema1, length) + ema3 = EMA(ema2, length) + TEMA = 3 * (ema1 - ema2) + ema3 + + */ + +public class TEMA_Series : Single_TSeries_Indicator +{ + private readonly System.Collections.Generic.List _buffer = new(); + private readonly double _k, _k1m; + private double _lastema1, _lastlastema1; + private double _lastema2, _lastlastema2; + private double _lastema3, _lastlastema3; + + public TEMA_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) + { + this._k = 2.0 / (this._p + 1); + this._k1m = 1.0 - this._k; + if (_data.Count > 0) { base.Add(_data); } + } + + public override void Add((DateTime t, double v) TValue, bool update) + { + if (update) + { + this._lastema1 = this._lastlastema1; + this._lastema2 = this._lastlastema2; + this._lastema3 = this._lastlastema3; + } + + double _ema1, _ema2, _ema3; + + if (this.Count < this._p) + { + Add_Replace_Trim(_buffer, TValue.v, _p, update); + double _sma = _buffer.Average(); + _ema1 = _ema2 = _ema3 = _sma; + } + 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); + } + + double _tema = (3 * (_ema1 - _ema2)) + _ema3; + + this._lastlastema1 = this._lastema1; + this._lastlastema2 = this._lastema2; + this._lastlastema3 = this._lastema3; + this._lastema1 = _ema1; + this._lastema2 = _ema2; + this._lastema3 = _ema3; + + base.Add((TValue.t, _tema), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Trends/TRIMA_Series.cs b/Calculations/Trends/TRIMA_Series.cs similarity index 97% rename from Source/Trends/TRIMA_Series.cs rename to Calculations/Trends/TRIMA_Series.cs index d0276359..7a082b7e 100644 --- a/Source/Trends/TRIMA_Series.cs +++ b/Calculations/Trends/TRIMA_Series.cs @@ -1,43 +1,43 @@ -namespace QuanTAlib; -using System; -using System.Linq; - -/* -TRIMA: Triangular Moving Average - A weighted moving average where the shape of the weights are triangular and the greatest - weight is in the middle of the period, - -Sources: - https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/triangular-moving-average-trima/ - -Remark: - trima = sma(sma(signal, n/2), n/2) - - */ - -public class TRIMA_Series : Single_TSeries_Indicator -{ - private readonly System.Collections.Generic.List _buffer1 = new(); - private readonly System.Collections.Generic.List _buffer2 = new(); - private readonly int _p1a, _p1b; - - public TRIMA_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) - { - _p1a = (int) Math.Floor((period * 0.5) + 1); - _p1b = (int) Math.Ceiling(0.5 * period); - if (base._data.Count > 0) { base.Add(base._data); } - } - - public override void Add((System.DateTime t, double v) TValue, bool update) - { - if (update) { _buffer1[_buffer1.Count - 1] = TValue.v; } else { _buffer1.Add(TValue.v); } - if (_buffer1.Count > this._p1b && this._p1b != 0) { _buffer1.RemoveAt(0); } - double _sma1 = _buffer1.Average(); - - if (update) { _buffer2[_buffer2.Count - 1] = _sma1; } else { _buffer2.Add(_sma1); } - if (_buffer2.Count > this._p1a && this._p1a != 0) { _buffer2.RemoveAt(0); } - double _trima = _buffer2.Average(); - - base.Add((TValue.t, _trima), update, _NaN); - } +namespace QuanTAlib; +using System; +using System.Linq; + +/* +TRIMA: Triangular Moving Average + A weighted moving average where the shape of the weights are triangular and the greatest + weight is in the middle of the period, + +Sources: + https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/triangular-moving-average-trima/ + +Remark: + trima = sma(sma(signal, n/2), n/2) + + */ + +public class TRIMA_Series : Single_TSeries_Indicator +{ + private readonly System.Collections.Generic.List _buffer1 = new(); + private readonly System.Collections.Generic.List _buffer2 = new(); + private readonly int _p1a, _p1b; + + public TRIMA_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) + { + _p1a = (int) Math.Floor((period * 0.5) + 1); + _p1b = (int) Math.Ceiling(0.5 * period); + if (base._data.Count > 0) { base.Add(base._data); } + } + + public override void Add((System.DateTime t, double v) TValue, bool update) + { + if (update) { _buffer1[_buffer1.Count - 1] = TValue.v; } else { _buffer1.Add(TValue.v); } + if (_buffer1.Count > this._p1b && this._p1b != 0) { _buffer1.RemoveAt(0); } + double _sma1 = _buffer1.Average(); + + if (update) { _buffer2[_buffer2.Count - 1] = _sma1; } else { _buffer2.Add(_sma1); } + if (_buffer2.Count > this._p1a && this._p1a != 0) { _buffer2.RemoveAt(0); } + double _trima = _buffer2.Average(); + + base.Add((TValue.t, _trima), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Trends/TRIX_Series.cs b/Calculations/Trends/TRIX_Series.cs similarity index 99% rename from Source/Trends/TRIX_Series.cs rename to Calculations/Trends/TRIX_Series.cs index d557bc56..36c97fdb 100644 --- a/Source/Trends/TRIX_Series.cs +++ b/Calculations/Trends/TRIX_Series.cs @@ -1,25 +1,25 @@ -namespace QuanTAlib; -using System; -using System.Linq; -using System.Numerics; - -/* -TRIX: Triple Exponential Average - Developed by Jack Hutson in the early 1980s, the triple exponential average (TRIX) - has become a popular technical analysis tool to aid chartists in spotting diversions -and directional cues in stock trading patterns. - - -Calculation: - Ema1 = Ema (Close); - Ema2 = Ema (Ema1); - Ema3 = Ema (Ema2); - TRIX = (Ema3-Ema3[1]) / Ema3[1] - -Sources: - https://www.investopedia.com/terms/t/trix.asp - - */ +namespace QuanTAlib; +using System; +using System.Linq; +using System.Numerics; + +/* +TRIX: Triple Exponential Average + Developed by Jack Hutson in the early 1980s, the triple exponential average (TRIX) + has become a popular technical analysis tool to aid chartists in spotting diversions +and directional cues in stock trading patterns. + + +Calculation: + Ema1 = Ema (Close); + Ema2 = Ema (Ema1); + Ema3 = Ema (Ema2); + TRIX = (Ema3-Ema3[1]) / Ema3[1] + +Sources: + https://www.investopedia.com/terms/t/trix.asp + + */ public class TRIX_Series : Single_TSeries_Indicator { private readonly double _k, _k1m; @@ -78,5 +78,5 @@ public class TRIX_Series : Single_TSeries_Indicator _lastema3 = _ema3; base.Add((TValue.t, _trix), update, _NaN); - } + } } \ No newline at end of file diff --git a/Source/Trends/WMA_Series.cs b/Calculations/Trends/WMA_Series.cs similarity index 97% rename from Source/Trends/WMA_Series.cs rename to Calculations/Trends/WMA_Series.cs index a6c4a1aa..2b835b7f 100644 --- a/Source/Trends/WMA_Series.cs +++ b/Calculations/Trends/WMA_Series.cs @@ -1,35 +1,35 @@ -namespace QuanTAlib; -using System; - -/* -WMA: (linearly) Weighted Moving Average - The weights are linearly decreasing over the period and the most recent data has - the heaviest weight. - -Sources: - https://corporatefinanceinstitute.com/resources/knowledge/trading-investing/weighted-moving-average-wma/ - https://www.technicalindicators.net/indicators-technical-analysis/83-moving-averages-simple-exponential-weighted - - */ - -public class WMA_Series : Single_TSeries_Indicator -{ - public WMA_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) - { - for (int i = 0; i < this._p; i++) { this._weights.Add(i + 1); } - if (base._data.Count > 0) { base.Add(base._data); } - } - private readonly System.Collections.Generic.List _buffer = new(); - private readonly System.Collections.Generic.List _weights = new(); - - public override void Add((System.DateTime t, double v) TValue, bool update) - { - Add_Replace_Trim(_buffer, TValue.v, _p, update); - - double _wma = 0; - for (int i = 0; i < _buffer.Count; i++) { _wma += _buffer[i] * this._weights[i]; } - _wma /= (this._buffer.Count * (this._buffer.Count + 1)) * 0.5; - - base.Add((TValue.t, _wma), update, _NaN); - } +namespace QuanTAlib; +using System; + +/* +WMA: (linearly) Weighted Moving Average + The weights are linearly decreasing over the period and the most recent data has + the heaviest weight. + +Sources: + https://corporatefinanceinstitute.com/resources/knowledge/trading-investing/weighted-moving-average-wma/ + https://www.technicalindicators.net/indicators-technical-analysis/83-moving-averages-simple-exponential-weighted + + */ + +public class WMA_Series : Single_TSeries_Indicator +{ + public WMA_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) + { + for (int i = 0; i < this._p; i++) { this._weights.Add(i + 1); } + if (base._data.Count > 0) { base.Add(base._data); } + } + private readonly System.Collections.Generic.List _buffer = new(); + private readonly System.Collections.Generic.List _weights = new(); + + public override void Add((System.DateTime t, double v) TValue, bool update) + { + Add_Replace_Trim(_buffer, TValue.v, _p, update); + + double _wma = 0; + for (int i = 0; i < _buffer.Count; i++) { _wma += _buffer[i] * this._weights[i]; } + _wma /= (this._buffer.Count * (this._buffer.Count + 1)) * 0.5; + + base.Add((TValue.t, _wma), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Trends/ZLEMA_Series.cs b/Calculations/Trends/ZLEMA_Series.cs similarity index 96% rename from Source/Trends/ZLEMA_Series.cs rename to Calculations/Trends/ZLEMA_Series.cs index 2f4276d3..a72da3ce 100644 --- a/Source/Trends/ZLEMA_Series.cs +++ b/Calculations/Trends/ZLEMA_Series.cs @@ -1,62 +1,62 @@ -namespace QuanTAlib; -using System; -using System.Linq; - -/* -ZLEMA: Zero Lag Exponential Moving Average - The Zero lag exponential moving average (ZLEMA) indicator was created by John - Ehlers and Ric Way. - -The formula for a given N-Day period and for a given Data series is: - Lag = (Period-1)/2 - Ema Data = {Data+(Data-Data(Lag days ago)) - ZLEMA = EMA (EmaData,Period) - -Remark: - The idea is do a regular exponential moving average (EMA) calculation but on a - de-lagged data instead of doing it on the regular data. Data is de-lagged by - removing the data from "lag" days ago thus removing (or attempting to remove) - the cumulative lag effect of the moving average. - - */ - -public class ZLEMA_Series : Single_TSeries_Indicator -{ - private readonly System.Collections.Generic.List _buffer = new(); - private readonly double _k, _k1m; - private double _lastema, _lastema_o; - private int _llag; - private readonly bool _useSMA; - - public ZLEMA_Series(TSeries source, int period, bool useNaN = false, bool useSMA = true) : base(source, period, useNaN) - { - this._k = 2.0 / (this._p + 1); - this._k1m = 1.0 - this._k; - this._lastema = this._lastema_o = double.NaN; - _llag = (int)((_p-1) * 0.5); - _useSMA = useSMA; - if (_data.Count > 0) { base.Add(_data); } - } - - public override void Add((System.DateTime t, double v) TValue, bool update) - { - int _lag = Math.Max(this.Count-_llag, 0); - if (update) { - _lastema = _lastema_o; _lag--; - } else { - _lastema_o = _lastema; - } - double _zl = TValue.v + (TValue.v - _data[_lag].v); - double _ema = 0; - - if (this.Count < this._p && _useSMA) { - Add_Replace_Trim(_buffer, _zl, _p, update); - _ema = _buffer.Average(); - } else { - _ema = (_zl * _k) + (_lastema * _k1m); - } - _lastema = _ema; - - base.Add((TValue.t, _ema), update, _NaN); - } +namespace QuanTAlib; +using System; +using System.Linq; + +/* +ZLEMA: Zero Lag Exponential Moving Average + The Zero lag exponential moving average (ZLEMA) indicator was created by John + Ehlers and Ric Way. + +The formula for a given N-Day period and for a given Data series is: + Lag = (Period-1)/2 + Ema Data = {Data+(Data-Data(Lag days ago)) + ZLEMA = EMA (EmaData,Period) + +Remark: + The idea is do a regular exponential moving average (EMA) calculation but on a + de-lagged data instead of doing it on the regular data. Data is de-lagged by + removing the data from "lag" days ago thus removing (or attempting to remove) + the cumulative lag effect of the moving average. + + */ + +public class ZLEMA_Series : Single_TSeries_Indicator +{ + private readonly System.Collections.Generic.List _buffer = new(); + private readonly double _k, _k1m; + private double _lastema, _lastema_o; + private int _llag; + private readonly bool _useSMA; + + public ZLEMA_Series(TSeries source, int period, bool useNaN = false, bool useSMA = true) : base(source, period, useNaN) + { + this._k = 2.0 / (this._p + 1); + this._k1m = 1.0 - this._k; + this._lastema = this._lastema_o = double.NaN; + _llag = (int)((_p-1) * 0.5); + _useSMA = useSMA; + if (_data.Count > 0) { base.Add(_data); } + } + + public override void Add((System.DateTime t, double v) TValue, bool update) + { + int _lag = Math.Max(this.Count-_llag, 0); + if (update) { + _lastema = _lastema_o; _lag--; + } else { + _lastema_o = _lastema; + } + double _zl = TValue.v + (TValue.v - _data[_lag].v); + double _ema = 0; + + if (this.Count < this._p && _useSMA) { + Add_Replace_Trim(_buffer, _zl, _p, update); + _ema = _buffer.Average(); + } else { + _ema = (_zl * _k) + (_lastema * _k1m); + } + _lastema = _ema; + + base.Add((TValue.t, _ema), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Volatility/ADL_Series.cs b/Calculations/Volatility/ADL_Series.cs similarity index 96% rename from Source/Volatility/ADL_Series.cs rename to Calculations/Volatility/ADL_Series.cs index 7e0a962f..0eb43ec2 100644 --- a/Source/Volatility/ADL_Series.cs +++ b/Calculations/Volatility/ADL_Series.cs @@ -1,40 +1,40 @@ -namespace QuanTAlib; -using System; - -/* -ADL: Chaikin Accumulation/Distribution Line - ADL is a volume-based indicator that measures the cumulative Money Flow Volume: - - 1. Money Flow Multiplier = [(Close - Low) - (High - Close)] /(High - Low) - 2. Money Flow Volume = Money Flow Multiplier x Volume for the Period - 3. ADL = Previous ADL + Current Period's Money Flow Volume - -Sources: - https://school.stockcharts.com/doku.php?id=technical_indicators:accumulation_distribution_line - - */ - -public class ADL_Series : Single_TBars_Indicator -{ - private double _lastadl, _lastlastadl; - - public ADL_Series(TBars source, bool useNaN = false) : base(source, 0, useNaN) - { - _lastadl = _lastlastadl = 0; - if (_bars.Count > 0) { base.Add(_bars); } - } - - public override void Add((DateTime t, double o, double h, double l, double c, double v) TBar, bool update) - { - if (update) { this._lastadl = this._lastlastadl; } - - double _adl = 0; - double tmp = TBar.h - TBar.l; - if (tmp > 0.0 ) { _adl = _lastadl + ((2*TBar.c - TBar.l - TBar.h) / tmp * TBar.v); } - - this._lastlastadl = this._lastadl; - this._lastadl = _adl; - - base.Add((TBar.t, _adl), update, _NaN); - } +namespace QuanTAlib; +using System; + +/* +ADL: Chaikin Accumulation/Distribution Line + ADL is a volume-based indicator that measures the cumulative Money Flow Volume: + + 1. Money Flow Multiplier = [(Close - Low) - (High - Close)] /(High - Low) + 2. Money Flow Volume = Money Flow Multiplier x Volume for the Period + 3. ADL = Previous ADL + Current Period's Money Flow Volume + +Sources: + https://school.stockcharts.com/doku.php?id=technical_indicators:accumulation_distribution_line + + */ + +public class ADL_Series : Single_TBars_Indicator +{ + private double _lastadl, _lastlastadl; + + public ADL_Series(TBars source, bool useNaN = false) : base(source, 0, useNaN) + { + _lastadl = _lastlastadl = 0; + if (_bars.Count > 0) { base.Add(_bars); } + } + + public override void Add((DateTime t, double o, double h, double l, double c, double v) TBar, bool update) + { + if (update) { this._lastadl = this._lastlastadl; } + + double _adl = 0; + double tmp = TBar.h - TBar.l; + if (tmp > 0.0 ) { _adl = _lastadl + ((2*TBar.c - TBar.l - TBar.h) / tmp * TBar.v); } + + this._lastlastadl = this._lastadl; + this._lastadl = _adl; + + base.Add((TBar.t, _adl), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Volatility/ADOSC_Series.cs b/Calculations/Volatility/ADOSC_Series.cs similarity index 96% rename from Source/Volatility/ADOSC_Series.cs rename to Calculations/Volatility/ADOSC_Series.cs index e5b279bb..9fca7e30 100644 --- a/Source/Volatility/ADOSC_Series.cs +++ b/Calculations/Volatility/ADOSC_Series.cs @@ -1,87 +1,87 @@ -namespace QuanTAlib; -using System; - -/* -ADO: Chaikin Accumulation/Distribution Oscillator - ADO measures the momentum of ADL using the difference between slow (10-day) EMA(ADL) - and fast (3-day) EMA(ADL): - - Chaikin A/D Oscillator = (3-day EMA of ADL) - (10-day EMA of ADL) - -Sources: - https://school.stockcharts.com/doku.php?id=technical_indicators:chaikin_oscillator - - */ - - -public class ADOSC_Series : Single_TBars_Indicator -{ - private readonly double _k1, _k2; - private double _lastema1, _lastlastema1, _lastema2, _lastlastema2; - private double _lastadl, _lastlastadl; - - public ADOSC_Series(TBars source, int shortPeriod = 3, int longPeriod =10, bool useNaN = false) : base(source, period: 0, useNaN) - { - _k1 = 2.0 / (shortPeriod + 1); - _k2 = 2.0 / (longPeriod + 1); - _lastadl = _lastlastadl = _lastema1 = _lastlastema1 = _lastema2 = _lastlastema2 = 0; - if (_bars.Count > 0) { base.Add(_bars); } - } - - public override void Add((DateTime t, double o, double h, double l, double c, double v) TBar, bool update) - { - if (update) { - _lastadl = _lastlastadl; - _lastema1 = _lastlastema1; - _lastema2 = _lastlastema2; - } - - double _adl = 0; - double tmp = TBar.h - TBar.l; - if (tmp > 0.0) { _adl = _lastadl + ((2 * TBar.c - TBar.l - TBar.h) / tmp * TBar.v); } - if (this.Count == 0) { _lastema1 = _lastema2 = _adl; } - - double _ema1 = (_adl - _lastema1) * _k1 + _lastema1; - double _ema2 = (_adl - _lastema2) * _k2 + _lastema2; - - _lastlastadl = _lastadl; _lastadl = _adl; - _lastlastema1 = _lastema1; _lastema1 = _ema1; - _lastlastema2 = _lastema2; _lastema2 = _ema2; - - double _adosc = _ema1 - _ema2; - base.Add((TBar.t, _adosc), update, _NaN); - } - -} -/* -public class ADOSC_Series : Single_TBars_Indicator -{ - private readonly ADL_Series _TSadl; - - private readonly EMA_Series _TSslow; - private readonly EMA_Series _TSfast; - private readonly SUB_Series _TSado; - - public ADOSC_Series(TBars source, bool useNaN = false) : base(source, period: 0, useNaN) - { - _TSadl = new(source: source, useNaN: false); - _TSslow = new(source: _TSadl, period: 10, useNaN: false); - _TSfast = new(source: _TSadl, period: 3, useNaN: false); - _TSado = new(_TSfast, _TSslow); - - if (source.Count > 0) - { base.Add(_TSado); } - Console.WriteLine(base.Count); - } - - public override void Add((DateTime t, double o, double h, double l, double c, double v) TBar, bool update) - { - if (update) - { _TSadl.Add(TBar, true); } - - double _ado = this._TSado[(this.Count < this._TSado.Count) ? this.Count : this._TSado.Count - 1].v; - var result = (TBar.t, _ado); - base.Add(result, update); - } -} +namespace QuanTAlib; +using System; + +/* +ADO: Chaikin Accumulation/Distribution Oscillator + ADO measures the momentum of ADL using the difference between slow (10-day) EMA(ADL) + and fast (3-day) EMA(ADL): + + Chaikin A/D Oscillator = (3-day EMA of ADL) - (10-day EMA of ADL) + +Sources: + https://school.stockcharts.com/doku.php?id=technical_indicators:chaikin_oscillator + + */ + + +public class ADOSC_Series : Single_TBars_Indicator +{ + private readonly double _k1, _k2; + private double _lastema1, _lastlastema1, _lastema2, _lastlastema2; + private double _lastadl, _lastlastadl; + + public ADOSC_Series(TBars source, int shortPeriod = 3, int longPeriod =10, bool useNaN = false) : base(source, period: 0, useNaN) + { + _k1 = 2.0 / (shortPeriod + 1); + _k2 = 2.0 / (longPeriod + 1); + _lastadl = _lastlastadl = _lastema1 = _lastlastema1 = _lastema2 = _lastlastema2 = 0; + if (_bars.Count > 0) { base.Add(_bars); } + } + + public override void Add((DateTime t, double o, double h, double l, double c, double v) TBar, bool update) + { + if (update) { + _lastadl = _lastlastadl; + _lastema1 = _lastlastema1; + _lastema2 = _lastlastema2; + } + + double _adl = 0; + double tmp = TBar.h - TBar.l; + if (tmp > 0.0) { _adl = _lastadl + ((2 * TBar.c - TBar.l - TBar.h) / tmp * TBar.v); } + if (this.Count == 0) { _lastema1 = _lastema2 = _adl; } + + double _ema1 = (_adl - _lastema1) * _k1 + _lastema1; + double _ema2 = (_adl - _lastema2) * _k2 + _lastema2; + + _lastlastadl = _lastadl; _lastadl = _adl; + _lastlastema1 = _lastema1; _lastema1 = _ema1; + _lastlastema2 = _lastema2; _lastema2 = _ema2; + + double _adosc = _ema1 - _ema2; + base.Add((TBar.t, _adosc), update, _NaN); + } + +} +/* +public class ADOSC_Series : Single_TBars_Indicator +{ + private readonly ADL_Series _TSadl; + + private readonly EMA_Series _TSslow; + private readonly EMA_Series _TSfast; + private readonly SUB_Series _TSado; + + public ADOSC_Series(TBars source, bool useNaN = false) : base(source, period: 0, useNaN) + { + _TSadl = new(source: source, useNaN: false); + _TSslow = new(source: _TSadl, period: 10, useNaN: false); + _TSfast = new(source: _TSadl, period: 3, useNaN: false); + _TSado = new(_TSfast, _TSslow); + + if (source.Count > 0) + { base.Add(_TSado); } + Console.WriteLine(base.Count); + } + + public override void Add((DateTime t, double o, double h, double l, double c, double v) TBar, bool update) + { + if (update) + { _TSadl.Add(TBar, true); } + + double _ado = this._TSado[(this.Count < this._TSado.Count) ? this.Count : this._TSado.Count - 1].v; + var result = (TBar.t, _ado); + base.Add(result, update); + } +} */ \ No newline at end of file diff --git a/Source/Volatility/ATRP_Series.cs b/Calculations/Volatility/ATRP_Series.cs similarity index 97% rename from Source/Volatility/ATRP_Series.cs rename to Calculations/Volatility/ATRP_Series.cs index 72fdcd48..086db3db 100644 --- a/Source/Volatility/ATRP_Series.cs +++ b/Calculations/Volatility/ATRP_Series.cs @@ -1,48 +1,48 @@ -namespace QuanTAlib; -using System; - -/* -ATRP: Average True Range Percent - Average True Range Percent is (ATR/Close Price)*100. - This normalizes so it can be compared to other stocks. - -Sources: - https://www.fidelity.com/learning-center/trading-investing/technical-analysis/technical-indicator-guide/atrp - - */ - -public class ATRP_Series : Single_TBars_Indicator { - private readonly System.Collections.Generic.List _buffer = new(); - private readonly double _k; - private double _lastatr, _lastlastatr, _cm1, _lastcm1, _sum, _oldsum; - private readonly int _period; - - public ATRP_Series(TBars source, int period, bool useNaN = false) : base(source, period, useNaN) { - _period = period; - _k = 1.0 / (double)(_p); - _lastatr = _lastlastatr = _cm1 = _lastcm1 = _sum = _oldsum = 0; - if (this._bars.Count > 0) { base.Add(this._bars); } - } - - public override void Add((DateTime t, double o, double h, double l, double c, double v) TBar, bool update) { - if (update) { _lastatr = _lastlastatr; _cm1 = _lastcm1; _sum = _oldsum; } - else { _lastlastatr = _lastatr; _lastcm1 = _cm1; _oldsum = _sum; } - - if (this.Count == 0) { _cm1 = TBar.c; } - double d1 = Math.Abs(TBar.h - TBar.l); - double d2 = Math.Abs(_cm1 - TBar.h); - double d3 = Math.Abs(_cm1 - TBar.l); - (DateTime t, double v) d = (TBar.t, Math.Max(d1, Math.Max(d2, d3))); - _cm1 = TBar.c; - - double _atr = 0; - if (this.Count == 0) { _atr = d.v; } - else if (this.Count < _p + 1) { _sum += d.v; _atr = _sum / (this.Count); } - else { _atr = _k * (d.v - _lastatr) + _lastatr; } - _lastatr = _atr; - - double _atrp = 100 * (_atr / TBar.c); - var ret = (d.t, this.Count < this._p - 1 && this._NaN ? double.NaN : _atrp); - base.Add(ret, update); - } -} +namespace QuanTAlib; +using System; + +/* +ATRP: Average True Range Percent + Average True Range Percent is (ATR/Close Price)*100. + This normalizes so it can be compared to other stocks. + +Sources: + https://www.fidelity.com/learning-center/trading-investing/technical-analysis/technical-indicator-guide/atrp + + */ + +public class ATRP_Series : Single_TBars_Indicator { + private readonly System.Collections.Generic.List _buffer = new(); + private readonly double _k; + private double _lastatr, _lastlastatr, _cm1, _lastcm1, _sum, _oldsum; + private readonly int _period; + + public ATRP_Series(TBars source, int period, bool useNaN = false) : base(source, period, useNaN) { + _period = period; + _k = 1.0 / (double)(_p); + _lastatr = _lastlastatr = _cm1 = _lastcm1 = _sum = _oldsum = 0; + if (this._bars.Count > 0) { base.Add(this._bars); } + } + + public override void Add((DateTime t, double o, double h, double l, double c, double v) TBar, bool update) { + if (update) { _lastatr = _lastlastatr; _cm1 = _lastcm1; _sum = _oldsum; } + else { _lastlastatr = _lastatr; _lastcm1 = _cm1; _oldsum = _sum; } + + if (this.Count == 0) { _cm1 = TBar.c; } + double d1 = Math.Abs(TBar.h - TBar.l); + double d2 = Math.Abs(_cm1 - TBar.h); + double d3 = Math.Abs(_cm1 - TBar.l); + (DateTime t, double v) d = (TBar.t, Math.Max(d1, Math.Max(d2, d3))); + _cm1 = TBar.c; + + double _atr = 0; + if (this.Count == 0) { _atr = d.v; } + else if (this.Count < _p + 1) { _sum += d.v; _atr = _sum / (this.Count); } + else { _atr = _k * (d.v - _lastatr) + _lastatr; } + _lastatr = _atr; + + double _atrp = 100 * (_atr / TBar.c); + var ret = (d.t, this.Count < this._p - 1 && this._NaN ? double.NaN : _atrp); + base.Add(ret, update); + } +} diff --git a/Source/Volatility/ATR_Series.cs b/Calculations/Volatility/ATR_Series.cs similarity index 97% rename from Source/Volatility/ATR_Series.cs rename to Calculations/Volatility/ATR_Series.cs index cd99885f..bc641e92 100644 --- a/Source/Volatility/ATR_Series.cs +++ b/Calculations/Volatility/ATR_Series.cs @@ -1,49 +1,49 @@ -namespace QuanTAlib; -using System; - -/* -ATR: wildeR Moving Average - The average true range (ATR) is a price volatility indicator - showing the average price variation of assets within a given time period. - -Sources: - https://en.wikipedia.org/wiki/Average_true_range - https://www.tradingview.com/wiki/Average_True_Range_(ATR) - https://www.investopedia.com/terms/a/atr.asp - - */ - -public class ATR_Series : Single_TBars_Indicator { - private readonly System.Collections.Generic.List _buffer = new(); - private readonly double _k; - private double _lastatr, _lastlastatr, _cm1, _lastcm1, _sum, _oldsum; - private readonly int _period; - - public ATR_Series(TBars source, int period, bool useNaN = false) : base(source, period, useNaN) { - _period = period; - _k = 1.0 / (double)(_p); - _lastatr = _lastlastatr = _cm1 = _lastcm1 = _sum = _oldsum = 0; - if (this._bars.Count > 0) { base.Add(this._bars); } - } - - public override void Add((DateTime t, double o, double h, double l, double c, double v) TBar, bool update) { - if (update) { _lastatr = _lastlastatr; _cm1 = _lastcm1; _sum = _oldsum; } - else { _lastlastatr = _lastatr; _lastcm1 = _cm1; _oldsum = _sum; } - - if (this.Count == 0) { _cm1 = TBar.c; } - double d1 = Math.Abs(TBar.h - TBar.l); - double d2 = Math.Abs(_cm1 - TBar.h); - double d3 = Math.Abs(_cm1 - TBar.l); - (DateTime t, double v) d = (TBar.t, Math.Max(d1, Math.Max(d2, d3))); - _cm1 = TBar.c; - - double _atr = 0; - if (this.Count == 0) { _atr = d.v; } - else if (this.Count < _p + 1) { _sum += d.v; _atr = _sum / (this.Count); } - else { _atr = _k * (d.v - _lastatr) + _lastatr; } - _lastatr = _atr; - - var ret = (d.t, this.Count < this._p - 1 && this._NaN ? double.NaN : _atr); - base.Add(ret, update); - } +namespace QuanTAlib; +using System; + +/* +ATR: wildeR Moving Average + The average true range (ATR) is a price volatility indicator + showing the average price variation of assets within a given time period. + +Sources: + https://en.wikipedia.org/wiki/Average_true_range + https://www.tradingview.com/wiki/Average_True_Range_(ATR) + https://www.investopedia.com/terms/a/atr.asp + + */ + +public class ATR_Series : Single_TBars_Indicator { + private readonly System.Collections.Generic.List _buffer = new(); + private readonly double _k; + private double _lastatr, _lastlastatr, _cm1, _lastcm1, _sum, _oldsum; + private readonly int _period; + + public ATR_Series(TBars source, int period, bool useNaN = false) : base(source, period, useNaN) { + _period = period; + _k = 1.0 / (double)(_p); + _lastatr = _lastlastatr = _cm1 = _lastcm1 = _sum = _oldsum = 0; + if (this._bars.Count > 0) { base.Add(this._bars); } + } + + public override void Add((DateTime t, double o, double h, double l, double c, double v) TBar, bool update) { + if (update) { _lastatr = _lastlastatr; _cm1 = _lastcm1; _sum = _oldsum; } + else { _lastlastatr = _lastatr; _lastcm1 = _cm1; _oldsum = _sum; } + + if (this.Count == 0) { _cm1 = TBar.c; } + double d1 = Math.Abs(TBar.h - TBar.l); + double d2 = Math.Abs(_cm1 - TBar.h); + double d3 = Math.Abs(_cm1 - TBar.l); + (DateTime t, double v) d = (TBar.t, Math.Max(d1, Math.Max(d2, d3))); + _cm1 = TBar.c; + + double _atr = 0; + if (this.Count == 0) { _atr = d.v; } + else if (this.Count < _p + 1) { _sum += d.v; _atr = _sum / (this.Count); } + else { _atr = _k * (d.v - _lastatr) + _lastatr; } + _lastatr = _atr; + + var ret = (d.t, this.Count < this._p - 1 && this._NaN ? double.NaN : _atr); + base.Add(ret, update); + } } \ No newline at end of file diff --git a/Source/Volatility/BBANDS_Series.cs b/Calculations/Volatility/BBANDS_Series.cs similarity index 97% rename from Source/Volatility/BBANDS_Series.cs rename to Calculations/Volatility/BBANDS_Series.cs index 499fba44..169f8f35 100644 --- a/Source/Volatility/BBANDS_Series.cs +++ b/Calculations/Volatility/BBANDS_Series.cs @@ -1,73 +1,73 @@ -namespace QuanTAlib; -using System; - -/* -BBANDS: Bollinger Bands® - Price channels created by John Bollinger, depict volatility as standard deviation boundary - line range from a moving average of price. The bands automatically widen when volatility - increases and contract when volatility decreases. Their dynamic nature allows them to be - used on different securities with the standard settings. - - Mid Band = simple moving average (SMA) - Upper Band = SMA + (standard deviation of price x multiplier) - Lower Band = SMA - (standard deviation of price x multiplier) - Bandwidth = Width of the channel: (Upper-Lower)/SMA - %B = The location of the data point within the channel: (Price-Lower)/(Upper/Lower) - Z-Score = number of standard deviations of the data point from SMA - -Sources: - https://www.investopedia.com/terms/b/bollingerbands.asp - https://school.stockcharts.com/doku.php?id=technical_indicators:bollinger_bands - -Note: - Bollinger Bands® is a registered trademark of John A. Bollinger. - - */ - -public class BBANDS_Series : Single_TSeries_Indicator -{ - public SMA_Series Mid { get; } - public ADD_Series Upper { get; } - public SUB_Series Lower { get; } - public DIV_Series PercentB { get; } - public DIV_Series Bandwidth { get; } - public DIV_Series Zscore { get; } - - private readonly SDEV_Series _sdev; - private readonly MUL_Series _mulsdev; - private readonly SUB_Series _pbdnd; - private readonly SUB_Series _pbdvr; - private readonly SUB_Series _zdnd; - - public BBANDS_Series(TSeries source, int period = 26, double multiplier = 2.0, bool useNaN = false) - : base(source, period: 0, useNaN) - { - this.Mid = new(source: source, period: period, useNaN: useNaN); - - _sdev = new(source, period, useNaN: useNaN); - _mulsdev = new(_sdev, multiplier); - this.Upper = new(Mid, _mulsdev); - this.Lower = new(Mid, _mulsdev); - - _pbdnd = new(source, Lower); - _pbdvr = new(Upper, Lower); - - this.PercentB = new(_pbdnd, _pbdvr); - this.Bandwidth = new(_pbdvr, Mid); - - _zdnd = new(source, Mid); - this.Zscore = new(_zdnd, _sdev); - - if (source.Count > 0) - { base.Add(this.Bandwidth); } - } - public override void Add((System.DateTime t, double v) TValue, bool update) - { - double _bbandwidth; - if (update) - { _sdev.Add(TValue, true); } - _bbandwidth = this.Bandwidth[(this.Count < this.Bandwidth.Count) ? this.Count : this.Bandwidth.Count - 1].v; - var result = (TValue.t, _bbandwidth); - base.Add(result, update); - } +namespace QuanTAlib; +using System; + +/* +BBANDS: Bollinger Bands® + Price channels created by John Bollinger, depict volatility as standard deviation boundary + line range from a moving average of price. The bands automatically widen when volatility + increases and contract when volatility decreases. Their dynamic nature allows them to be + used on different securities with the standard settings. + + Mid Band = simple moving average (SMA) + Upper Band = SMA + (standard deviation of price x multiplier) + Lower Band = SMA - (standard deviation of price x multiplier) + Bandwidth = Width of the channel: (Upper-Lower)/SMA + %B = The location of the data point within the channel: (Price-Lower)/(Upper/Lower) + Z-Score = number of standard deviations of the data point from SMA + +Sources: + https://www.investopedia.com/terms/b/bollingerbands.asp + https://school.stockcharts.com/doku.php?id=technical_indicators:bollinger_bands + +Note: + Bollinger Bands® is a registered trademark of John A. Bollinger. + + */ + +public class BBANDS_Series : Single_TSeries_Indicator +{ + public SMA_Series Mid { get; } + public ADD_Series Upper { get; } + public SUB_Series Lower { get; } + public DIV_Series PercentB { get; } + public DIV_Series Bandwidth { get; } + public DIV_Series Zscore { get; } + + private readonly SDEV_Series _sdev; + private readonly MUL_Series _mulsdev; + private readonly SUB_Series _pbdnd; + private readonly SUB_Series _pbdvr; + private readonly SUB_Series _zdnd; + + public BBANDS_Series(TSeries source, int period = 26, double multiplier = 2.0, bool useNaN = false) + : base(source, period: 0, useNaN) + { + this.Mid = new(source: source, period: period, useNaN: useNaN); + + _sdev = new(source, period, useNaN: useNaN); + _mulsdev = new(_sdev, multiplier); + this.Upper = new(Mid, _mulsdev); + this.Lower = new(Mid, _mulsdev); + + _pbdnd = new(source, Lower); + _pbdvr = new(Upper, Lower); + + this.PercentB = new(_pbdnd, _pbdvr); + this.Bandwidth = new(_pbdvr, Mid); + + _zdnd = new(source, Mid); + this.Zscore = new(_zdnd, _sdev); + + if (source.Count > 0) + { base.Add(this.Bandwidth); } + } + public override void Add((System.DateTime t, double v) TValue, bool update) + { + double _bbandwidth; + if (update) + { _sdev.Add(TValue, true); } + _bbandwidth = this.Bandwidth[(this.Count < this.Bandwidth.Count) ? this.Count : this.Bandwidth.Count - 1].v; + var result = (TValue.t, _bbandwidth); + base.Add(result, update); + } } \ No newline at end of file diff --git a/Source/Volatility/CMO_Series.cs b/Calculations/Volatility/CMO_Series.cs similarity index 97% rename from Source/Volatility/CMO_Series.cs rename to Calculations/Volatility/CMO_Series.cs index 9a47b469..9295dfa5 100644 --- a/Source/Volatility/CMO_Series.cs +++ b/Calculations/Volatility/CMO_Series.cs @@ -1,47 +1,47 @@ -namespace QuanTAlib; -using System; - -/* -CMO: Chande Momentum Oscillator - Chande Momentum Oscillator (also known as CMO indicator) was developed by Tushar S. Chande - CMO is similar to other momentum oscillators (e.g. RSI or Stochastics). Alike RSI oscillator, - the CMO values move in the range from -100 to +100 points and its aim is to detect the - overbought and oversold market conditions. CMO calculates the price momentum on both the up - days as well as the down days. The CMO calculation is based on non-smoothed price values - meaning that it can reach its extremes more frequently and the short-time swings are more visible. - -Sources: - https://www.technicalindicators.net/indicators-technical-analysis/144-cmo-chande-momentum-oscillator - - */ - -public class CMO_Series : Single_TSeries_Indicator { - private readonly System.Collections.Generic.List _buff_up = new(); - private readonly System.Collections.Generic.List _buff_dn = new(); - private double _plast_value, _last_value; - - public CMO_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) { - if (this._data.Count > 0) { base.Add(this._data); } - } - - public override void Add((DateTime t, double v) TValue, bool update) { - if (this.Count == 0) { _plast_value = _last_value = TValue.v; } - if (update) _last_value = _plast_value; else _plast_value = _last_value; - - Add_Replace_Trim(_buff_up, (TValue.v > _last_value) ? TValue.v-_last_value : 0, _p, update); - Add_Replace_Trim(_buff_dn, (TValue.v < _last_value) ? _last_value-TValue.v : 0, _p, update); - _last_value = TValue.v; - - double _cmo_up = 0; - double _cmo_dn = 0; - for (int i = 0; i < Math.Min(_buff_up.Count, _buff_dn.Count); i++) { - _cmo_up += _buff_up[i]; - _cmo_dn += _buff_dn[i]; - } - - double _cmo = 100 * (_cmo_up - _cmo_dn) / (_cmo_up + _cmo_dn); - if (_cmo_up + _cmo_dn == 0) - _cmo = 0; - base.Add((TValue.t, _cmo), update, _NaN); - } +namespace QuanTAlib; +using System; + +/* +CMO: Chande Momentum Oscillator + Chande Momentum Oscillator (also known as CMO indicator) was developed by Tushar S. Chande + CMO is similar to other momentum oscillators (e.g. RSI or Stochastics). Alike RSI oscillator, + the CMO values move in the range from -100 to +100 points and its aim is to detect the + overbought and oversold market conditions. CMO calculates the price momentum on both the up + days as well as the down days. The CMO calculation is based on non-smoothed price values + meaning that it can reach its extremes more frequently and the short-time swings are more visible. + +Sources: + https://www.technicalindicators.net/indicators-technical-analysis/144-cmo-chande-momentum-oscillator + + */ + +public class CMO_Series : Single_TSeries_Indicator { + private readonly System.Collections.Generic.List _buff_up = new(); + private readonly System.Collections.Generic.List _buff_dn = new(); + private double _plast_value, _last_value; + + public CMO_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) { + if (this._data.Count > 0) { base.Add(this._data); } + } + + public override void Add((DateTime t, double v) TValue, bool update) { + if (this.Count == 0) { _plast_value = _last_value = TValue.v; } + if (update) _last_value = _plast_value; else _plast_value = _last_value; + + Add_Replace_Trim(_buff_up, (TValue.v > _last_value) ? TValue.v-_last_value : 0, _p, update); + Add_Replace_Trim(_buff_dn, (TValue.v < _last_value) ? _last_value-TValue.v : 0, _p, update); + _last_value = TValue.v; + + double _cmo_up = 0; + double _cmo_dn = 0; + for (int i = 0; i < Math.Min(_buff_up.Count, _buff_dn.Count); i++) { + _cmo_up += _buff_up[i]; + _cmo_dn += _buff_dn[i]; + } + + double _cmo = 100 * (_cmo_up - _cmo_dn) / (_cmo_up + _cmo_dn); + if (_cmo_up + _cmo_dn == 0) + _cmo = 0; + base.Add((TValue.t, _cmo), update, _NaN); + } } \ No newline at end of file diff --git a/Source/Volatility/RSI_Series.cs b/Calculations/Volatility/RSI_Series.cs similarity index 97% rename from Source/Volatility/RSI_Series.cs rename to Calculations/Volatility/RSI_Series.cs index e4f6a350..0805df35 100644 --- a/Source/Volatility/RSI_Series.cs +++ b/Calculations/Volatility/RSI_Series.cs @@ -1,78 +1,78 @@ -namespace QuanTAlib; -using System; - -/* -RSI: Relative Strength Index - Created by J. Welles Wilder, the Relative Strength Index measures strength - of the winning/losing streak over N lookback periods on a scale of 0 to 100, - to depict overbought and oversold conditions. - -Sources: - https://www.investopedia.com/terms/r/rsi.asp - - */ - -public class RSI_Series : Single_TSeries_Indicator -{ - private readonly System.Collections.Generic.List _gain = new(); - private readonly System.Collections.Generic.List _loss = new(); - private double _avgGain, _avgLoss, _lastValue; - private double _avgGain_o, _avgLoss_o, _lastValue_o; - private int i; - - public RSI_Series(TSeries source, int period = 10, bool useNaN = false) : base(source, period: period, useNaN: useNaN) { - i = 0; - if (source.Count > 0) { base.Add(source); } - } - - public override void Add((System.DateTime t, double v) TValue, bool update) { - double _rsi = 0; - if (update) { - _lastValue = _lastValue_o; - _avgGain = _avgGain_o; - _avgLoss = _avgLoss_o; - } - else { - _lastValue_o = _lastValue; - _avgGain_o = _avgGain; - _avgLoss_o = _avgLoss; - } - - if (i == 0) { _lastValue = TValue.v; } - - double _gainval = (TValue.v > _lastValue) ? TValue.v - _lastValue : 0; - Add_Replace_Trim(_gain, _gainval, _p, update); - double _lossval = (TValue.v < _lastValue) ? _lastValue - TValue.v : 0; - Add_Replace_Trim(_loss, _lossval, _p, update); - _lastValue = TValue.v; - - // calculate RSI - if (i > _p) - { - _avgGain = ((_avgGain * (_p - 1)) + _gain[_gain.Count - 1]) / _p; - _avgLoss = ((_avgLoss * (_p - 1)) + _loss[_loss.Count - 1]) / _p; - if (_avgLoss > 0) { - double rs = _avgGain / _avgLoss; - _rsi = 100 - (100 / (1 + rs)); - } - else { _rsi = 100; } - } - // initialize average gain - else - { - double _sumGain = 0; - for (int p = 0; p < _gain.Count; p++) { _sumGain += _gain[p]; } - double _sumLoss = 0; - for (int p = 0; p < _loss.Count; p++) { _sumLoss += _loss[p]; } - - _avgGain = _sumGain / _gain.Count; - _avgLoss = _sumLoss / _loss.Count; - - _rsi = (_avgLoss > 0) ? 100 - (100 / (1 + (_avgGain / _avgLoss))) : 100; - } - - if (!update) { i++; } - var result = (TValue.t, (this.Count < this._p && this._NaN) ? double.NaN : _rsi); - base.Add(result, update); - } +namespace QuanTAlib; +using System; + +/* +RSI: Relative Strength Index + Created by J. Welles Wilder, the Relative Strength Index measures strength + of the winning/losing streak over N lookback periods on a scale of 0 to 100, + to depict overbought and oversold conditions. + +Sources: + https://www.investopedia.com/terms/r/rsi.asp + + */ + +public class RSI_Series : Single_TSeries_Indicator +{ + private readonly System.Collections.Generic.List _gain = new(); + private readonly System.Collections.Generic.List _loss = new(); + private double _avgGain, _avgLoss, _lastValue; + private double _avgGain_o, _avgLoss_o, _lastValue_o; + private int i; + + public RSI_Series(TSeries source, int period = 10, bool useNaN = false) : base(source, period: period, useNaN: useNaN) { + i = 0; + if (source.Count > 0) { base.Add(source); } + } + + public override void Add((System.DateTime t, double v) TValue, bool update) { + double _rsi = 0; + if (update) { + _lastValue = _lastValue_o; + _avgGain = _avgGain_o; + _avgLoss = _avgLoss_o; + } + else { + _lastValue_o = _lastValue; + _avgGain_o = _avgGain; + _avgLoss_o = _avgLoss; + } + + if (i == 0) { _lastValue = TValue.v; } + + double _gainval = (TValue.v > _lastValue) ? TValue.v - _lastValue : 0; + Add_Replace_Trim(_gain, _gainval, _p, update); + double _lossval = (TValue.v < _lastValue) ? _lastValue - TValue.v : 0; + Add_Replace_Trim(_loss, _lossval, _p, update); + _lastValue = TValue.v; + + // calculate RSI + if (i > _p) + { + _avgGain = ((_avgGain * (_p - 1)) + _gain[_gain.Count - 1]) / _p; + _avgLoss = ((_avgLoss * (_p - 1)) + _loss[_loss.Count - 1]) / _p; + if (_avgLoss > 0) { + double rs = _avgGain / _avgLoss; + _rsi = 100 - (100 / (1 + rs)); + } + else { _rsi = 100; } + } + // initialize average gain + else + { + double _sumGain = 0; + for (int p = 0; p < _gain.Count; p++) { _sumGain += _gain[p]; } + double _sumLoss = 0; + for (int p = 0; p < _loss.Count; p++) { _sumLoss += _loss[p]; } + + _avgGain = _sumGain / _gain.Count; + _avgLoss = _sumLoss / _loss.Count; + + _rsi = (_avgLoss > 0) ? 100 - (100 / (1 + (_avgGain / _avgLoss))) : 100; + } + + if (!update) { i++; } + var result = (TValue.t, (this.Count < this._p && this._NaN) ? double.NaN : _rsi); + base.Add(result, update); + } } \ No newline at end of file diff --git a/Source/Volume/OBV_Series.cs b/Calculations/Volume/OBV_Series.cs similarity index 97% rename from Source/Volume/OBV_Series.cs rename to Calculations/Volume/OBV_Series.cs index c77570a8..73d4e327 100644 --- a/Source/Volume/OBV_Series.cs +++ b/Calculations/Volume/OBV_Series.cs @@ -1,59 +1,59 @@ -namespace QuanTAlib; -using System; - -/* -OBV: On-Balance Volume - On-balance volume (OBV) is a technical trading momentum indicator that uses volume flow to predict - changes in stock price. Joseph Granville first developed the OBV metric in the 1963 book - Granville's New Key to Stock Market Profits. - - | +volume; if close > close[previous] - OBV = OBV[previous] + | 0; if close = close[previous] - | -volume; if close < close[previous] - -Sources: - https://www.investopedia.com/terms/o/onbalancevolume.asp - https://www.tradingview.com/wiki/On_Balance_Volume_(OBV) - https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/on-balance-volume-obv/ - https://www.motivewave.com/studies/on_balance_volume.htm - -Note: - There is no consensus on what is the first OBV value in the series: - - TA-LIB uses the first volume: OBV[0] = volume[0] - - Skender stock library uses 0: OBV[0] = 0 - - */ - -public class OBV_Series : Single_TBars_Indicator -{ - private double _lastobv, _lastlastobv; - private double _lastclose, _lastlastclose; - public OBV_Series(TBars source, int period = 10, bool useNaN = false) : base(source, period: period, useNaN: useNaN) - { - this._lastobv = this._lastlastobv = 0; - this._lastclose = this._lastlastclose = 0; - if (_bars.Count > 0) { base.Add(_bars); } - } - - public override void Add((DateTime t, double o, double h, double l, double c, double v) TBar, bool update) - { - if (update) - { - this._lastobv = this._lastlastobv; - this._lastclose = this._lastlastclose; - } - - double _obv = this._lastobv; - if (TBar.c > this._lastclose) { _obv += TBar.v; } - if (TBar.c < this._lastclose) { _obv -= TBar.v; } - - this._lastlastobv = this._lastobv; - this._lastobv = _obv; - - this._lastlastclose = this._lastclose; - this._lastclose = TBar.c; - - var result = (TBar.t, (this.Count < this._p && this._NaN) ? double.NaN : _obv); - base.Add(result, update); - } -} +namespace QuanTAlib; +using System; + +/* +OBV: On-Balance Volume + On-balance volume (OBV) is a technical trading momentum indicator that uses volume flow to predict + changes in stock price. Joseph Granville first developed the OBV metric in the 1963 book + Granville's New Key to Stock Market Profits. + + | +volume; if close > close[previous] + OBV = OBV[previous] + | 0; if close = close[previous] + | -volume; if close < close[previous] + +Sources: + https://www.investopedia.com/terms/o/onbalancevolume.asp + https://www.tradingview.com/wiki/On_Balance_Volume_(OBV) + https://www.tradingtechnologies.com/help/x-study/technical-indicator-definitions/on-balance-volume-obv/ + https://www.motivewave.com/studies/on_balance_volume.htm + +Note: + There is no consensus on what is the first OBV value in the series: + - TA-LIB uses the first volume: OBV[0] = volume[0] + - Skender stock library uses 0: OBV[0] = 0 + + */ + +public class OBV_Series : Single_TBars_Indicator +{ + private double _lastobv, _lastlastobv; + private double _lastclose, _lastlastclose; + public OBV_Series(TBars source, int period = 10, bool useNaN = false) : base(source, period: period, useNaN: useNaN) + { + this._lastobv = this._lastlastobv = 0; + this._lastclose = this._lastlastclose = 0; + if (_bars.Count > 0) { base.Add(_bars); } + } + + public override void Add((DateTime t, double o, double h, double l, double c, double v) TBar, bool update) + { + if (update) + { + this._lastobv = this._lastlastobv; + this._lastclose = this._lastlastclose; + } + + double _obv = this._lastobv; + if (TBar.c > this._lastclose) { _obv += TBar.v; } + if (TBar.c < this._lastclose) { _obv -= TBar.v; } + + this._lastlastobv = this._lastobv; + this._lastobv = _obv; + + this._lastlastclose = this._lastclose; + this._lastclose = TBar.c; + + var result = (TBar.t, (this.Count < this._p && this._NaN) ? double.NaN : _obv); + base.Add(result, update); + } +} diff --git a/Indicators/Basics/QuanTAlib_Indicator.cs b/Indicators/Basics/QuanTAlib_Indicator.cs new file mode 100644 index 00000000..ea2644a6 --- /dev/null +++ b/Indicators/Basics/QuanTAlib_Indicator.cs @@ -0,0 +1,40 @@ +using TradingPlatform.BusinessLayer; +using System.Drawing; +using QuanTAlib; +using System; +using TradingPlatform.BusinessLayer.Chart; + +namespace QuanTAlib; + +public class QuanTAlib_Indicator : Indicator { + protected TBars bars; + protected IChartWindow mainWindow; + protected Graphics graphics; + protected int firstOnScreenBarIndex, lastOnScreenBarIndex; + + protected override void OnInit() { + base.OnInit(); + bars = new(); + } + + protected override void OnUpdate(UpdateArgs args) { + base.OnUpdate(args); + bars.Add(Time(), GetPrice(PriceType.Open), + GetPrice(PriceType.High), + GetPrice(PriceType.Low), + GetPrice(PriceType.Close), + GetPrice(PriceType.Volume), + update: !(args.Reason == UpdateReason.NewBar || args.Reason == UpdateReason.HistoricalBar)); + } + public override void OnPaintChart(PaintChartEventArgs args) { + base.OnPaintChart(args); + if (this.CurrentChart == null) return; + graphics = args.Graphics; + mainWindow = this.CurrentChart.MainWindow; + + DateTime leftTime = mainWindow.CoordinatesConverter.GetTime(mainWindow.ClientRectangle.Left); + DateTime rightTime = mainWindow.CoordinatesConverter.GetTime(mainWindow.ClientRectangle.Right); + firstOnScreenBarIndex = (int)mainWindow.CoordinatesConverter.GetBarIndex(leftTime); + lastOnScreenBarIndex = (int)Math.Ceiling(mainWindow.CoordinatesConverter.GetBarIndex(rightTime)); + } +} \ No newline at end of file diff --git a/Indicators/Charts/ATR_chart.cs b/Indicators/Charts/ATR_chart.cs new file mode 100644 index 00000000..c8fd76f9 --- /dev/null +++ b/Indicators/Charts/ATR_chart.cs @@ -0,0 +1,32 @@ +using System.Drawing; +using TradingPlatform.BusinessLayer; +namespace QuanTAlib; + +public class ATR_chart : QuanTAlib_Indicator { + #region Parameters + + [InputParameter("Smoothing period", 0, 1, 999, 1, 1)] + private readonly int Period = 10; + + #endregion Parameters + + private ATR_Series indicator; + + public ATR_chart() + { + this.SeparateWindow = true; + this.Name = "ATR - Average True Range"; + this.Description = "Average True Range description"; + this.AddLineSeries("ATR", Color.RoyalBlue, 3, LineStyle.Solid); + } + + protected override void OnInit() { base.OnInit(); + indicator = new(source: bars, period: Period, useNaN: false); + } + + protected override void OnUpdate(UpdateArgs args) { + base.OnUpdate(args); + this.SetValue(indicator[^1].v, lineIndex: 0); + } + +} diff --git a/Quantower/Indicators/BIAS_chart.cs b/Indicators/Charts/BIAS_chart.cs similarity index 100% rename from Quantower/Indicators/BIAS_chart.cs rename to Indicators/Charts/BIAS_chart.cs diff --git a/Quantower/Indicators/CCI_chart.cs b/Indicators/Charts/CCI_chart.cs similarity index 96% rename from Quantower/Indicators/CCI_chart.cs rename to Indicators/Charts/CCI_chart.cs index 38d5ec7e..748828f5 100644 --- a/Quantower/Indicators/CCI_chart.cs +++ b/Indicators/Charts/CCI_chart.cs @@ -1,43 +1,43 @@ -using System.Diagnostics; -using System.Drawing; -using TradingPlatform.BusinessLayer; -namespace QuanTAlib; - -public class CCI_chart : Indicator -{ - #region Parameters - - [InputParameter("Smoothing period", 0, 1, 999, 1, 1)] - private readonly int Period = 10; - - #endregion Parameters - - private TBars bars; - - /////// - private CCI_Series indicator; - /////// - - public CCI_chart() - { - this.SeparateWindow = true; - this.Name = "CCI - Commodity Channel Index"; - this.Description = "CCI description"; - this.AddLineSeries("CCI", Color.RoyalBlue, 3, LineStyle.Solid); - } - - protected override void OnInit() - { - 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 && 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); - } -} +using System.Diagnostics; +using System.Drawing; +using TradingPlatform.BusinessLayer; +namespace QuanTAlib; + +public class CCI_chart : Indicator +{ + #region Parameters + + [InputParameter("Smoothing period", 0, 1, 999, 1, 1)] + private readonly int Period = 10; + + #endregion Parameters + + private TBars bars; + + /////// + private CCI_Series indicator; + /////// + + public CCI_chart() + { + this.SeparateWindow = true; + this.Name = "CCI - Commodity Channel Index"; + this.Description = "CCI description"; + this.AddLineSeries("CCI", Color.RoyalBlue, 3, LineStyle.Solid); + } + + protected override void OnInit() + { + 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 && 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/Quantower/Indicators/DEMA_chart.cs b/Indicators/Charts/DEMA_chart.cs similarity index 100% rename from Quantower/Indicators/DEMA_chart.cs rename to Indicators/Charts/DEMA_chart.cs diff --git a/Indicators/Charts/DJMA_chart.cs b/Indicators/Charts/DJMA_chart.cs new file mode 100644 index 00000000..b58824f3 --- /dev/null +++ b/Indicators/Charts/DJMA_chart.cs @@ -0,0 +1,78 @@ +using System; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using TradingPlatform.BusinessLayer; +namespace QuanTAlib; + +public class DJMA_chart : Indicator { + #region Parameters + + [InputParameter("Fast Data source", 0, 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 int FDataSource = 3; + + [InputParameter("Fast Smoothing period", 1, 1, 999, 1, 1)] + private int FPeriod = 12; + + [InputParameter("Fast Volatility short", 2, 3, 50, 1, 1)] + private int FVshort = 10; + + [InputParameter("Fast Volatility long", 3, 20, 500, 5, 1)] + private int FVlong = 65; + + [InputParameter("Fast Phase", 4, -100, 100, 1, 2)] + private double FJphase = 100.0; + + [InputParameter("Slow Data source", 5, 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 int SDataSource = 3; + + [InputParameter("Slow Smoothing period", 6, 1, 999, 1, 1)] + private int SPeriod = 26; + + [InputParameter("Slow Volatility short", 7, 3, 50, 1, 1)] + private int SVshort = 10; + + [InputParameter("Slow Volatility long", 8, 20, 500, 5, 1)] + private int SVlong = 65; + + [InputParameter("Slow Phase", 9, -100, 100, 1, 2)] + private double SJphase = -100.0; + + + #endregion Parameters + + private TBars bars; + + /////// + private JMA_Series fJma, sJma; + /////// + + public DJMA_chart() { + this.SeparateWindow = false; + this.Name = "DJMA - Two JMAs"; + this.Description = "Jurik Moving Average description"; + this.AddLineSeries("JMA-fast", Color.Blue, 2, LineStyle.Solid); + this.AddLineSeries("JMA-slow", Color.Green, 2, LineStyle.Solid); + } + + + protected override void OnInit() { + this.bars = new(); + this.fJma = new(source: bars.Select(this.FDataSource), period: this.FPeriod, phase: FJphase, vshort: FVshort, vlong: FVlong, useNaN: false); + this.sJma = new(source: bars.Select(this.SDataSource), period: this.SPeriod, phase: SJphase, vshort: SVshort, vlong: SVlong, 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); + this.SetValue(this.fJma[^1].v, lineIndex: 0); + this.SetValue(this.sJma[^1].v, lineIndex: 1); + } +} \ No newline at end of file diff --git a/Quantower/Indicators/EMA_chart.cs b/Indicators/Charts/EMA_chart.cs similarity index 100% rename from Quantower/Indicators/EMA_chart.cs rename to Indicators/Charts/EMA_chart.cs diff --git a/Quantower/Indicators/ENTP_chart.cs b/Indicators/Charts/ENTP_chart.cs similarity index 100% rename from Quantower/Indicators/ENTP_chart.cs rename to Indicators/Charts/ENTP_chart.cs diff --git a/Quantower/Indicators/HEMA_chart.cs b/Indicators/Charts/HEMA_chart.cs similarity index 100% rename from Quantower/Indicators/HEMA_chart.cs rename to Indicators/Charts/HEMA_chart.cs diff --git a/Quantower/Indicators/HMA_chart.cs b/Indicators/Charts/HMA_chart.cs similarity index 96% rename from Quantower/Indicators/HMA_chart.cs rename to Indicators/Charts/HMA_chart.cs index 93667ef6..72b1e2fa 100644 --- a/Quantower/Indicators/HMA_chart.cs +++ b/Indicators/Charts/HMA_chart.cs @@ -1,52 +1,52 @@ -using System.Diagnostics; -using System.Drawing; -using TradingPlatform.BusinessLayer; -namespace QuanTAlib; - -public class HMA_chart : Indicator -{ - #region Parameters - - [InputParameter("Smoothing period", 0, 1, 999, 1, 1)] - private 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 int DataSource = 3; - - #endregion Parameters - - private TBars bars; - - /////// - private HMA_Series indicator; - /////// - - public HMA_chart() - { - this.SeparateWindow = false; - this.Name = "HMA - Hull Moving Average"; - this.Description = "Hull Moving Average description"; - this.AddLineSeries("HMA", Color.RoyalBlue, 3, LineStyle.Solid); - } - - protected override void OnInit() - { - this.bars = new(); - this.indicator = new(source: bars.Select(this.DataSource), - period: this.Period, useNaN: false); - Debug.WriteLine("Send to debug output."); -} - - 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); - } -} +using System.Diagnostics; +using System.Drawing; +using TradingPlatform.BusinessLayer; +namespace QuanTAlib; + +public class HMA_chart : Indicator +{ + #region Parameters + + [InputParameter("Smoothing period", 0, 1, 999, 1, 1)] + private 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 int DataSource = 3; + + #endregion Parameters + + private TBars bars; + + /////// + private HMA_Series indicator; + /////// + + public HMA_chart() + { + this.SeparateWindow = false; + this.Name = "HMA - Hull Moving Average"; + this.Description = "Hull Moving Average description"; + this.AddLineSeries("HMA", Color.RoyalBlue, 3, LineStyle.Solid); + } + + protected override void OnInit() + { + this.bars = new(); + this.indicator = new(source: bars.Select(this.DataSource), + period: this.Period, useNaN: false); + Debug.WriteLine("Send to debug output."); +} + + 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/Indicators/Charts/JMA_chart.cs b/Indicators/Charts/JMA_chart.cs new file mode 100644 index 00000000..340c2287 --- /dev/null +++ b/Indicators/Charts/JMA_chart.cs @@ -0,0 +1,53 @@ +using System; +using System.Diagnostics; +using System.Drawing; +using System.Linq; +using TradingPlatform.BusinessLayer; +namespace QuanTAlib; + +public class JMA_chart : QuanTAlib_Indicator { + #region Parameters + + [InputParameter("Data source", 0, 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 int DataSource = 3; + + [InputParameter("Smoothing period", 1, 1, 999, 1, 1)] + private int Period = 10; + + [InputParameter("Volatility short", 2, 3, 50, 1, 1)] + private int Vshort = 10; + + [InputParameter("Volatility long", 3, 20, 500, 1, 1)] + private int Vlong = 65; + + [InputParameter("Phase", 4, -100, 100, 1, 2)] + private double Jphase = 0.0; + + #endregion Parameters + + /////// + private JMA_Series indicator; + /////// + + public JMA_chart() :base() { + Name = "JMA - Jurik Moving Avg"; + Description = "Jurik Moving Average description"; + AddLineSeries(lineName: "JMA", lineColor: Color.Yellow, lineWidth: 3,lineStyle: LineStyle.Solid); + SeparateWindow = false; + } + + + protected override void OnInit() { + base.OnInit(); + indicator = new(source: bars.Select(DataSource), period: Period, + phase: Jphase, vshort: Vshort, vlong: Vlong, + useNaN: false); + } + + protected override void OnUpdate(UpdateArgs args) { + base.OnUpdate(args); + this.SetValue(indicator[^1].v, lineIndex: 0); + } +} diff --git a/Quantower/Indicators/KAMA_chart.cs b/Indicators/Charts/KAMA_chart.cs similarity index 97% rename from Quantower/Indicators/KAMA_chart.cs rename to Indicators/Charts/KAMA_chart.cs index 88658444..8de883f7 100644 --- a/Quantower/Indicators/KAMA_chart.cs +++ b/Indicators/Charts/KAMA_chart.cs @@ -1,55 +1,55 @@ -using System.Diagnostics; -using System.Drawing; -using TradingPlatform.BusinessLayer; -namespace QuanTAlib; - -public class KAMA_chart : Indicator -{ - #region Parameters - - [InputParameter("Smoothing period", 0, 1, 999, 1, 1)] - private int Period = 10; - [InputParameter("Fastest EMA", 1, 1, 999, 1, 1)] - private int Fast = 2; - [InputParameter("Slowest EMA", 2, 1, 999, 1, 1)] - private int Slow = 30; - - [InputParameter("Data source", 3, 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 int DataSource = 3; - - #endregion Parameters - - private TBars bars; - - /////// - private KAMA_Series indicator; - /////// - - public KAMA_chart() - { - this.SeparateWindow = false; - this.Name = "KAMA - Kaufman's Adaptive Moving Average"; - this.Description = "Kaufman's Adaptive Moving Average description"; - this.AddLineSeries("KAMA", Color.RoyalBlue, 3, LineStyle.Solid); - } - - protected override void OnInit() - { - this.bars = new(); - this.indicator = new(source: bars.Select(this.DataSource), period: this.Period, fast: this.Fast, slow: this.Slow, 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.SetValue(result); - Debug.WriteLine($"{this.indicator[0].v}"); - } -} +using System.Diagnostics; +using System.Drawing; +using TradingPlatform.BusinessLayer; +namespace QuanTAlib; + +public class KAMA_chart : Indicator +{ + #region Parameters + + [InputParameter("Smoothing period", 0, 1, 999, 1, 1)] + private int Period = 10; + [InputParameter("Fastest EMA", 1, 1, 999, 1, 1)] + private int Fast = 2; + [InputParameter("Slowest EMA", 2, 1, 999, 1, 1)] + private int Slow = 30; + + [InputParameter("Data source", 3, 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 int DataSource = 3; + + #endregion Parameters + + private TBars bars; + + /////// + private KAMA_Series indicator; + /////// + + public KAMA_chart() + { + this.SeparateWindow = false; + this.Name = "KAMA - Kaufman's Adaptive Moving Average"; + this.Description = "Kaufman's Adaptive Moving Average description"; + this.AddLineSeries("KAMA", Color.RoyalBlue, 3, LineStyle.Solid); + } + + protected override void OnInit() + { + this.bars = new(); + this.indicator = new(source: bars.Select(this.DataSource), period: this.Period, fast: this.Fast, slow: this.Slow, 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.SetValue(result); + Debug.WriteLine($"{this.indicator[0].v}"); + } +} diff --git a/Quantower/Indicators/KURT_chart.cs b/Indicators/Charts/KURT_chart.cs similarity index 100% rename from Quantower/Indicators/KURT_chart.cs rename to Indicators/Charts/KURT_chart.cs diff --git a/Quantower/Indicators/MAD_chart.cs b/Indicators/Charts/MAD_chart.cs similarity index 100% rename from Quantower/Indicators/MAD_chart.cs rename to Indicators/Charts/MAD_chart.cs diff --git a/Quantower/Indicators/MAPE_chart.cs b/Indicators/Charts/MAPE_chart.cs similarity index 100% rename from Quantower/Indicators/MAPE_chart.cs rename to Indicators/Charts/MAPE_chart.cs diff --git a/Quantower/Indicators/MAX_chart.cs b/Indicators/Charts/MAX_chart.cs similarity index 100% rename from Quantower/Indicators/MAX_chart.cs rename to Indicators/Charts/MAX_chart.cs diff --git a/Quantower/Indicators/MED_chart.cs b/Indicators/Charts/MED_chart.cs similarity index 100% rename from Quantower/Indicators/MED_chart.cs rename to Indicators/Charts/MED_chart.cs diff --git a/Quantower/Indicators/MIN_chart.cs b/Indicators/Charts/MIN_chart.cs similarity index 100% rename from Quantower/Indicators/MIN_chart.cs rename to Indicators/Charts/MIN_chart.cs diff --git a/Quantower/Indicators/MSE_chart.cs b/Indicators/Charts/MSE_chart.cs similarity index 100% rename from Quantower/Indicators/MSE_chart.cs rename to Indicators/Charts/MSE_chart.cs diff --git a/Quantower/Indicators/RMA_chart.cs b/Indicators/Charts/RMA_chart.cs similarity index 100% rename from Quantower/Indicators/RMA_chart.cs rename to Indicators/Charts/RMA_chart.cs diff --git a/Indicators/Charts/RSI_chart.cs b/Indicators/Charts/RSI_chart.cs new file mode 100644 index 00000000..85a5c78d --- /dev/null +++ b/Indicators/Charts/RSI_chart.cs @@ -0,0 +1,56 @@ +using System; +using System.Drawing; +using TradingPlatform.BusinessLayer; +namespace QuanTAlib; + +public class RSI_chart : QuanTAlib_Indicator { + #region Parameters + + [InputParameter("Smoothing period", 0, 1, 999, 1, 1)] + private 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 int DataSource = 8; + + [InputParameter("Overbought level", 2, 1, 100, 1, 1)] + private int Overbought = 70; + + [InputParameter("Oversold level", 2, 1, 100, 1, 1)] + private int Oversold = 30; + + #endregion Parameters + + /////// + private RSI_Series indicator; + /////// + + public RSI_chart() : base() { + this.Name = "RSI - Relative Strength Index"; + this.Description = "RSI description"; + this.AddLineSeries("RSI", Color.RoyalBlue, 3, LineStyle.Solid); + this.SeparateWindow = true; + } + + protected override void OnInit() { + base.OnInit(); + indicator = new(source: bars.Select(this.DataSource), period: this.Period, useNaN: true); + } + + protected override void OnUpdate(UpdateArgs args) { + base.OnUpdate(args); + SetValue(indicator[^1].v, lineIndex: 0); + if (indicator[^1].v >= Overbought) + LinesSeries[0].SetMarker(0, color: Color.Red); + if (indicator[^1].v <= Oversold) + LinesSeries[0].SetMarker(0, color: Color.Red); + } + public override void OnPaintChart(PaintChartEventArgs args) { + base.OnPaintChart(args); + for (int i = firstOnScreenBarIndex; i <= lastOnScreenBarIndex; i++) { + int xLeft = (int)Math.Round(mainWindow.CoordinatesConverter.GetChartX(Time(Count - i - 1))); + int y = (int)Math.Round((mainWindow.CoordinatesConverter.GetChartY(Overbought))); + } + } +} diff --git a/Quantower/Indicators/SDEV_chart.cs b/Indicators/Charts/SDEV_chart.cs similarity index 96% rename from Quantower/Indicators/SDEV_chart.cs rename to Indicators/Charts/SDEV_chart.cs index 2e6a423d..84778581 100644 --- a/Quantower/Indicators/SDEV_chart.cs +++ b/Indicators/Charts/SDEV_chart.cs @@ -1,51 +1,51 @@ -using System.Drawing; -using TradingPlatform.BusinessLayer; -namespace QuanTAlib; - -public class SDEV_chart : Indicator -{ - #region Parameters - - [InputParameter("Smoothing period", 0, 1, 999, 1, 1)] - private 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 int DataSource = 8; - - #endregion Parameters - - private TBars bars; - - ///////dotnet - private SDEV_Series indicator; - /////// - - public SDEV_chart() - { - this.SeparateWindow = true; - this.Name = "SDEV - Standard Deviation"; - this.Description = "SDEV description"; - this.AddLineSeries("SDEV", Color.RoyalBlue, 3, LineStyle.Solid); - } - - protected override void OnInit() - { - this.bars = new(); - this.indicator = new(source: bars.Select(this.DataSource), - period: this.Period, useNaN: true); - } - 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, 0); - } -} +using System.Drawing; +using TradingPlatform.BusinessLayer; +namespace QuanTAlib; + +public class SDEV_chart : Indicator +{ + #region Parameters + + [InputParameter("Smoothing period", 0, 1, 999, 1, 1)] + private 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 int DataSource = 8; + + #endregion Parameters + + private TBars bars; + + ///////dotnet + private SDEV_Series indicator; + /////// + + public SDEV_chart() + { + this.SeparateWindow = true; + this.Name = "SDEV - Standard Deviation"; + this.Description = "SDEV description"; + this.AddLineSeries("SDEV", Color.RoyalBlue, 3, LineStyle.Solid); + } + + protected override void OnInit() + { + this.bars = new(); + this.indicator = new(source: bars.Select(this.DataSource), + period: this.Period, useNaN: true); + } + 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, 0); + } +} diff --git a/Quantower/Indicators/SMAPE_chart.cs b/Indicators/Charts/SMAPE_chart.cs similarity index 100% rename from Quantower/Indicators/SMAPE_chart.cs rename to Indicators/Charts/SMAPE_chart.cs diff --git a/Quantower/Indicators/SMA_chart.cs b/Indicators/Charts/SMA_chart.cs similarity index 100% rename from Quantower/Indicators/SMA_chart.cs rename to Indicators/Charts/SMA_chart.cs diff --git a/Quantower/Indicators/SMMA_chart.cs b/Indicators/Charts/SMMA_chart.cs similarity index 100% rename from Quantower/Indicators/SMMA_chart.cs rename to Indicators/Charts/SMMA_chart.cs diff --git a/Quantower/Indicators/TEMA_chart.cs b/Indicators/Charts/TEMA_chart.cs similarity index 100% rename from Quantower/Indicators/TEMA_chart.cs rename to Indicators/Charts/TEMA_chart.cs diff --git a/Quantower/Indicators/VAR_chart.cs b/Indicators/Charts/VAR_chart.cs similarity index 96% rename from Quantower/Indicators/VAR_chart.cs rename to Indicators/Charts/VAR_chart.cs index d16725e8..89573ee7 100644 --- a/Quantower/Indicators/VAR_chart.cs +++ b/Indicators/Charts/VAR_chart.cs @@ -1,52 +1,52 @@ -using System.Drawing; -using TradingPlatform.BusinessLayer; -namespace QuanTAlib; - -public class VAR_chart : Indicator -{ - #region Parameters - - [InputParameter("Smoothing period", 0, 1, 999, 1, 1)] - private 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 int DataSource = 8; - - #endregion Parameters - - private TBars bars; - - ///////dotnet - private VAR_Series indicator; - /////// - - public VAR_chart() - { - this.SeparateWindow = true; - this.Name = "VAR - Variance"; - this.Description = "VAR description"; - this.AddLineSeries("VAR", Color.RoyalBlue, 3, LineStyle.Solid); - } - - protected override void OnInit() - { - this.bars = new(); - this.indicator = new(source: bars.Select(this.DataSource), - period: this.Period, useNaN: true); - } - - 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, 0); - } -} +using System.Drawing; +using TradingPlatform.BusinessLayer; +namespace QuanTAlib; + +public class VAR_chart : Indicator +{ + #region Parameters + + [InputParameter("Smoothing period", 0, 1, 999, 1, 1)] + private 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 int DataSource = 8; + + #endregion Parameters + + private TBars bars; + + ///////dotnet + private VAR_Series indicator; + /////// + + public VAR_chart() + { + this.SeparateWindow = true; + this.Name = "VAR - Variance"; + this.Description = "VAR description"; + this.AddLineSeries("VAR", Color.RoyalBlue, 3, LineStyle.Solid); + } + + protected override void OnInit() + { + this.bars = new(); + this.indicator = new(source: bars.Select(this.DataSource), + period: this.Period, useNaN: true); + } + + 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, 0); + } +} diff --git a/Quantower/Indicators/WMAPE_chart.cs b/Indicators/Charts/WMAPE_chart.cs similarity index 96% rename from Quantower/Indicators/WMAPE_chart.cs rename to Indicators/Charts/WMAPE_chart.cs index e607561a..bd89c693 100644 --- a/Quantower/Indicators/WMAPE_chart.cs +++ b/Indicators/Charts/WMAPE_chart.cs @@ -1,55 +1,55 @@ -namespace QuanTAlib; -using System.Drawing; -using TradingPlatform.BusinessLayer; - -public class WMAPE_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 = 8; - - #endregion Parameters - - private TBars bars; - - ///////dotnet - private QuanTAlib.WMAPE_Series indicator; - /////// - - public WMAPE_chart() - { - this.SeparateWindow = true; - this.Name = "WMAPE - Weighted Mean Absolute Percentage Error"; - this.Description = "WMAPE description"; - this.AddLineSeries("WMAPE", Color.RoyalBlue, 3, LineStyle.Solid); - } - - protected override void OnInit() - { - this.bars = new(); - this.indicator = new(source: this.bars.Select(this.DataSource), period: this.Period, useNaN: true); - } - 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, 0); - } -} +namespace QuanTAlib; +using System.Drawing; +using TradingPlatform.BusinessLayer; + +public class WMAPE_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 = 8; + + #endregion Parameters + + private TBars bars; + + ///////dotnet + private QuanTAlib.WMAPE_Series indicator; + /////// + + public WMAPE_chart() + { + this.SeparateWindow = true; + this.Name = "WMAPE - Weighted Mean Absolute Percentage Error"; + this.Description = "WMAPE description"; + this.AddLineSeries("WMAPE", Color.RoyalBlue, 3, LineStyle.Solid); + } + + protected override void OnInit() + { + this.bars = new(); + this.indicator = new(source: this.bars.Select(this.DataSource), period: this.Period, useNaN: true); + } + 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, 0); + } +} diff --git a/Quantower/Indicators/WMA_chart.cs b/Indicators/Charts/WMA_chart.cs similarity index 100% rename from Quantower/Indicators/WMA_chart.cs rename to Indicators/Charts/WMA_chart.cs diff --git a/Quantower/Quantower.csproj b/Indicators/Indicators.csproj similarity index 75% rename from Quantower/Quantower.csproj rename to Indicators/Indicators.csproj index a1495bc3..547741b9 100644 --- a/Quantower/Quantower.csproj +++ b/Indicators/Indicators.csproj @@ -1,52 +1,47 @@ - - - - net6 - preview - false - AnyCPU - Indicator - Quantower_QTAlib - QuanTAlib - embedded - preview - AnyCPU - disable - False - ..\.sonarlint\mihakralj_quantalibcsharp.ruleset - - - True - 3 - True - anycpu - full - C:\Quantower\TradingPlatform\v1.130.7\..\..\Settings\Scripts\Indicators\Quantower - - - embedded - True - 3 - True - anycpu - C:\Quantower\TradingPlatform\v1.130.7\..\..\Settings\Scripts\Indicators\Quantower - - - - QuanTAlib\%(RecursiveDir)%(Filename)%(Extension) - - - - - - - - - C:\Quantower\TradingPlatform\v1.130.7\bin\TradingPlatform.BusinessLayer.dll - - + + + + net6 + preview + false + AnyCPU + Indicator + Quantower_QTAlib + QuanTAlib + embedded + AnyCPU + disable + False + ..\.sonarlint\mihakralj_quantalibcsharp.ruleset + + + True + 3 + True + anycpu + full + C:\Quantower\TradingPlatform\v1.130.7\..\..\Settings\Scripts\Indicators\QuanTAlib + + + embedded + True + 3 + True + anycpu + C:\Quantower\TradingPlatform\v1.130.7\..\..\Settings\Scripts\Indicators\QuanTAlib + + + + + + + + + + + + + C:\Quantower\TradingPlatform\v1.130.7\bin\TradingPlatform.BusinessLayer.dll + + \ No newline at end of file diff --git a/QuanTAlib.sln b/QuanTAlib.sln index 3242afe2..d0b6ce59 100644 --- a/QuanTAlib.sln +++ b/QuanTAlib.sln @@ -3,11 +3,44 @@ Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio Version 17 VisualStudioVersion = 17.2.32210.308 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "QuanTAlib", "Source\QuanTAlib.csproj", "{AAE21F8A-9BC2-4647-A9EB-4DC86C569080}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Calculations", "Calculations\Calculations.csproj", "{AAE21F8A-9BC2-4647-A9EB-4DC86C569080}" EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Tests", "Tests\Tests.csproj", "{283EACC9-3AF6-4DAE-9C1C-0F7F8C8CD70D}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Quantower", "Quantower\Quantower.csproj", "{693713F9-F33A-4B33-8F98-63794CA9734C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Indicators", "Indicators\Indicators.csproj", "{43AD2D78-024C-4D96-A70B-915CF519965A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Strategies", "Strategies\Strategies.csproj", "{FA526AF6-95BC-4AC0-8B46-A304FD06689D}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Docs", "Docs", "{47B6ACDB-F535-4FEB-9A0A-C427CAE8C28E}" + ProjectSection(SolutionItems) = preProject + docs\.nojekyll = docs\.nojekyll + docs\ALMA.md = docs\ALMA.md + docs\DEMA.md = docs\DEMA.md + docs\DWMA.md = docs\DWMA.md + docs\EMA.md = docs\EMA.md + docs\FMA.md = docs\FMA.md + docs\getting_started.ipynb = docs\getting_started.ipynb + docs\HEMA.md = docs\HEMA.md + docs\HMA.md = docs\HMA.md + docs\HWMA.md = docs\HWMA.md + docs\index.html = docs\index.html + docs\indicators.md = docs\indicators.md + docs\JMA.md = docs\JMA.md + docs\KAMA.md = docs\KAMA.md + docs\LICENSE = docs\LICENSE + docs\MAMA.md = docs\MAMA.md + docs\QA.md = docs\QA.md + docs\readme.md = docs\readme.md + docs\RMA.md = docs\RMA.md + docs\SMA.md = docs\SMA.md + docs\SMMA.md = docs\SMMA.md + docs\T3.md = docs\T3.md + docs\TEMA.md = docs\TEMA.md + docs\TRIMA.md = docs\TRIMA.md + docs\WMA.md = docs\WMA.md + docs\ZLEMA.md = docs\ZLEMA.md + docs\_sidebar.md = docs\_sidebar.md + EndProjectSection EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -23,10 +56,14 @@ Global {283EACC9-3AF6-4DAE-9C1C-0F7F8C8CD70D}.Debug|Any CPU.Build.0 = Debug|Any CPU {283EACC9-3AF6-4DAE-9C1C-0F7F8C8CD70D}.Release|Any CPU.ActiveCfg = Release|Any CPU {283EACC9-3AF6-4DAE-9C1C-0F7F8C8CD70D}.Release|Any CPU.Build.0 = Release|Any CPU - {693713F9-F33A-4B33-8F98-63794CA9734C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {693713F9-F33A-4B33-8F98-63794CA9734C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {693713F9-F33A-4B33-8F98-63794CA9734C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {693713F9-F33A-4B33-8F98-63794CA9734C}.Release|Any CPU.Build.0 = Release|Any CPU + {43AD2D78-024C-4D96-A70B-915CF519965A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {43AD2D78-024C-4D96-A70B-915CF519965A}.Debug|Any CPU.Build.0 = Debug|Any CPU + {43AD2D78-024C-4D96-A70B-915CF519965A}.Release|Any CPU.ActiveCfg = Release|Any CPU + {43AD2D78-024C-4D96-A70B-915CF519965A}.Release|Any CPU.Build.0 = Release|Any CPU + {FA526AF6-95BC-4AC0-8B46-A304FD06689D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {FA526AF6-95BC-4AC0-8B46-A304FD06689D}.Debug|Any CPU.Build.0 = Debug|Any CPU + {FA526AF6-95BC-4AC0-8B46-A304FD06689D}.Release|Any CPU.ActiveCfg = Release|Any CPU + {FA526AF6-95BC-4AC0-8B46-A304FD06689D}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Quantower/Indicators/ATR_chart.cs b/Quantower/Indicators/ATR_chart.cs deleted file mode 100644 index 5467c3de..00000000 --- a/Quantower/Indicators/ATR_chart.cs +++ /dev/null @@ -1,45 +0,0 @@ -using System.Drawing; -using TradingPlatform.BusinessLayer; -namespace QuanTAlib; - -public class ATR_chart : Indicator -{ - #region Parameters - - [InputParameter("Smoothing period", 0, 1, 999, 1, 1)] - private readonly int Period = 10; - - #endregion Parameters - - private TBars bars; - - /////// - private ATR_Series indicator; - /////// - - public ATR_chart() - { - this.SeparateWindow = true; - this.Name = "ATR - Average True Range"; - this.Description = "Average True Range description"; - this.AddLineSeries("ATR", Color.RoyalBlue, 3, LineStyle.Solid); - } - - protected override void OnInit() - { - 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 || - 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/Quantower/Indicators/JMA_chart.cs b/Quantower/Indicators/JMA_chart.cs deleted file mode 100644 index d6c38982..00000000 --- a/Quantower/Indicators/JMA_chart.cs +++ /dev/null @@ -1,59 +0,0 @@ -using System; -using System.Diagnostics; -using System.Drawing; -using System.Linq; -using TradingPlatform.BusinessLayer; -namespace QuanTAlib; - -public class JMA_chart : Indicator { - #region Parameters - - [InputParameter("Data source", 0, 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 int DataSource = 3; - - [InputParameter("Smoothing period", 1, 1, 999, 1, 1)] - private int Period = 10; - - [InputParameter("Volatility short", 2, 3, 50, 1, 1)] - private int Vshort = 10; - - [InputParameter("Volatility long", 3, 20, 500, 1, 1)] - private int Vlong = 65; - - [InputParameter("Phase", 4, -100, 100, 1, 2)] - private double Jphase = 0.0; - - #endregion Parameters - - private TBars bars; - - /////// - private JMA_Series indicator; - /////// - - public JMA_chart() { - this.SeparateWindow = false; - this.Name = "JMA - Jurik Moving Avg"; - this.Description = "Jurik Moving Average description"; - this.AddLineSeries("JMA", Color.Yellow, 3, LineStyle.Solid); - } - - - protected override void OnInit() { - this.bars = new(); - this.indicator = new(source: bars.Select(this.DataSource), period: this.Period, phase: Jphase, vshort: Vshort, vlong: Vlong, 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, lineIndex: 0); - } -} diff --git a/Quantower/Indicators/RSI_chart.cs b/Quantower/Indicators/RSI_chart.cs deleted file mode 100644 index ebd9d80b..00000000 --- a/Quantower/Indicators/RSI_chart.cs +++ /dev/null @@ -1,51 +0,0 @@ -using System.Drawing; -using TradingPlatform.BusinessLayer; -namespace QuanTAlib; - -public class RSI_chart : Indicator -{ - #region Parameters - - [InputParameter("Smoothing period", 0, 1, 999, 1, 1)] - private 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 int DataSource = 8; - - #endregion Parameters - - private TBars bars; - - /////// - private RSI_Series indicator; - /////// - - public RSI_chart() - { - this.SeparateWindow = true; - this.Name = "RSI - Relative Strength Index"; - this.Description = "RSI description"; - this.AddLineSeries("RSI", Color.RoyalBlue, 3, LineStyle.Solid); - } - - protected override void OnInit() - { - this.bars = new(); - this.indicator = new(source: bars.Select(this.DataSource), - period: this.Period, useNaN: true); - } - 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, 0); - } -} diff --git a/Quantower/dll/TradingPlatform.BusinessLayer.dll b/Quantower/dll/TradingPlatform.BusinessLayer.dll deleted file mode 100644 index 245e51a7e4ae47bc240a4295de90a74c3f346c31..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1205664 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
!MEJU8v1?hMMjSeO}bdQ5P!bLbr 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 z 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

-VKLu7BlCe4J_wFZrGaP0tE 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 Cwc=#} diff --git a/Strategies/SimpleMACross1.cs b/Strategies/SimpleMACross1.cs new file mode 100644 index 00000000..98e14aa2 --- /dev/null +++ b/Strategies/SimpleMACross1.cs @@ -0,0 +1,107 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using TradingPlatform.BusinessLayer; +using QuanTAlib; +using System.Drawing; + +namespace SimpleMACross { + public class SimpleMACross1 : Strategy, ICurrentAccount, ICurrentSymbol { + [InputParameter("Symbol", 0)] + public Symbol CurrentSymbol { get; set; } + + [InputParameter("Account", 1)] + public Account CurrentAccount { get; set; } + + [InputParameter("Fast MA", 2, minimum: 1, maximum: 100, increment: 1, decimalPlaces: 0)] + public int FastMA = 5; + + [InputParameter("Slow MA", 3, minimum: 1, maximum: 100, increment: 1, decimalPlaces: 0)] + public int SlowMA = 10; + + [InputParameter("Quantity", 4, 0.1, 99999, 0.1, 2)] + public double Quantity = 1.0; + + [InputParameter("Period", 5)] + public Period period = Period.MIN1; + + public override string[] MonitoringConnectionsIds => new string[] { this.CurrentSymbol?.ConnectionId, this.CurrentAccount?.ConnectionId }; + + private HistoricalData hdm; + private DateTime prev_time; + private readonly TBars bars = new(); + + public SimpleMACross1() + : base() { + this.Name = "Miha MA Cross strategy 3"; + this.Description = "Raw strategy without any additional functional"; + } + + protected override void OnRun() { + if (this.CurrentAccount != null && this.CurrentAccount.State == BusinessObjectState.Fake) this.CurrentAccount = Core.Instance.GetAccount(this.CurrentAccount.CreateInfo()); + if (this.CurrentSymbol != null && this.CurrentSymbol.State == BusinessObjectState.Fake) this.CurrentSymbol = Core.Instance.GetSymbol(this.CurrentSymbol.CreateInfo()); + if (this.CurrentSymbol == null || this.CurrentAccount == null || this.CurrentSymbol.ConnectionId != this.CurrentAccount.ConnectionId) { + this.Log("Incorrect input parameters... Symbol or Account are not specified or they have different connectionID.", StrategyLoggingLevel.Error); + return; } + + ///////////////////////////////////////////////////// + this.hdm = this.CurrentSymbol.GetHistory(Period.MIN1, this.CurrentSymbol.HistoryType, Core.TimeUtils.DateTimeUtcNow.AddDays(-1)); + //////////////////////////////////////////////////// + + + this.LogInfo($"Symbol: {CurrentSymbol.Name} period: {this.period} :-: {this.CurrentSymbol.HistoryType.ToString()} :-: {this.hdm.Count} bars loaded"); + this.hdm.HistoryItemUpdated += this.Hdm_HistoryItemUpdated; + } + + private void Hdm_HistoryItemUpdated(object sender, HistoryEventArgs e) { + this.OnUpdate(); + } + + private void OnUpdate() { + bool update = hdm.Last().TimeLeft - prev_time < this.period.Duration ? true : false; + if (!update) prev_time = hdm.Last().TimeLeft; + + bars.Add(hdm.Last().TimeLeft, hdm.Last()[PriceType.Open], hdm.Last()[PriceType.High], + hdm.Last()[PriceType.Low], hdm.Last()[PriceType.Close], hdm.Last()[PriceType.Volume], update); + + if (!update) this.LogInfo($"{bars.Close.Last().t} OHLC4:{(double)bars.OHLC4}"); + + } + + protected override List OnGetMetrics() { + var result = base.OnGetMetrics(); + + // An example of adding custom strategy metrics: + result.Add("Bars processed", this.bars.Count.ToString()); + /* + result.Add("Trades [#]", "0"); + result.Add("Long trades [#]", this.longPositionsCount.ToString()); + result.Add("Short trades [#]", this.shortPositionsCount.ToString()); + result.Add("Profitable trades [#]", "0"); + result.Add("Win Rate [%]", "0"); + result.Add("Best Trade [%]", "0"); + result.Add("Worst Trade[%]", "0"); + result.Add("Avg Winning Trade [%]", "0"); + result.Add("Avg Losing Trade [%]", "0"); + result.Add("Profit Factor", "0"); + result.Add("Sharpe Ratio", "0"); + result.Add("Sortino Ratio", "0"); + result.Add("Omega Ratio", "0"); + result.Add("Calmar Ratio", "0"); + result.Add("Beta", "0"); + result.Add("Alpha", "0"); + */ + return result; + } + + protected override void OnStop() { + if (this.hdm != null) { + this.hdm.HistoryItemUpdated -= this.Hdm_HistoryItemUpdated; + this.hdm.Dispose(); + } + + base.OnStop(); + } + } +} + diff --git a/Strategies/Strategies.csproj b/Strategies/Strategies.csproj new file mode 100644 index 00000000..f067f1fa --- /dev/null +++ b/Strategies/Strategies.csproj @@ -0,0 +1,45 @@ + + + net6.0 + preview + false + AnyCPU + Strategy + Strategy + Strategy + AnyCPU + disable + False + Program + C:\Quantower\TradingPlatform\v1.130.7\Console.StarterNew.exe + --address 127.0.0.1 --port 51113 + ..\.sonarlint\mihakralj_quantalibcsharp.ruleset + + + True + 3 + True + anycpu + full + C:\Quantower\TradingPlatform\v1.130.7\..\..\Settings\Scripts\Strategies\QuanTAlib + + + embedded + True + 3 + True + anycpu + C:\Quantower\TradingPlatform\v1.130.7\..\..\Settings\Scripts\Strategies\QuanTAlib + + + + + + + + + + C:\Quantower\TradingPlatform\v1.130.7\bin\TradingPlatform.BusinessLayer.dll + + + \ No newline at end of file diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj index 38bc8c2b..358c4d94 100644 --- a/Tests/Tests.csproj +++ b/Tests/Tests.csproj @@ -24,7 +24,7 @@ - +