Merge branch 'dev' into main

This commit is contained in:
Miha Kralj
2022-04-24 17:30:18 -07:00
4 changed files with 56 additions and 16 deletions
+3 -3
View File
@@ -3,12 +3,12 @@ using System;
/* <summary> /* <summary>
ZL: Zero Lag ZL: Zero Lag
Data is de-lagged by removing the data from “lag” days ago, thus removing Data is de-lagged by removing the data from “lag” days ago, thus removing
(or attempting to) the cumulative effect of the moving average. (or attempting to) the cumulative effect of the moving average.
Calculation: Calculation:
Lag = (Period-1)/2 Lag = (Period-1)/2
ZL = Data + (Data - Data(Lag days ago) ) ZL = Data + (Data - Data(Lag days ago) )
Sources: Sources:
https://mudrex.com/blog/zero-lag-ema-trading-strategy/ https://mudrex.com/blog/zero-lag-ema-trading-strategy/
@@ -24,7 +24,7 @@ public class ZL_Series : Single_TSeries_Indicator
public override void Add((DateTime t, double v) TValue, bool update) public override void Add((DateTime t, double v) TValue, bool update)
{ {
int _lag = (int)((_p-1) * 0.5); int _lag = (int)((_p-1) * 0.5);
_lag = (_data.Count-_lag < 0) ? 0 : _data.Count-_lag; _lag = (this.Count-_lag < 0) ? 0 : this.Count-_lag;
double _zl = TValue.v + (TValue.v - _data[_lag].v); double _zl = TValue.v + (TValue.v - _data[_lag].v);
+45 -13
View File
@@ -21,19 +21,51 @@ Remark:
public class ZLEMA_Series : Single_TSeries_Indicator public class ZLEMA_Series : Single_TSeries_Indicator
{ {
private ZL_Series zlag; private readonly System.Collections.Generic.List<double> _buffer = new();
private EMA_Series ema; private readonly double _k, _k1m;
private double _lastema, _lastlastema;
public ZLEMA_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN) public ZLEMA_Series(TSeries source, int period, bool useNaN = false) : base(source, period, useNaN)
{ {
zlag = new(source: source, period: period, useNaN: false); this._k = 2.0 / (this._p + 1);
ema = new EMA_Series(source: source, period: period, useNaN: useNaN); this._k1m = 1.0 - this._k;
} this._lastema = this._lastlastema = double.NaN;
if (base._data.Count > 0)
{ base.Add(base._data); }
}
public override void Add((System.DateTime t, double v) TValue, bool update) public override void Add((System.DateTime t, double v) TValue, bool update)
{ {
(System.DateTime t, double v) result = ema[ema.Count-1]; int _lag = (int)((_p - 1) * 0.5);
base.Add(result, update); _lag = (this.Count - _lag < 0) ? 0 : this.Count - _lag;
double _zl = TValue.v + (TValue.v - _data[_lag].v);
double _ema = 0;
if (update)
{ this._lastema = this._lastlastema; }
if (this.Count < this._p)
{
if (update)
{ this._buffer[this._buffer.Count - 1] = _zl; }
else
{
this._buffer.Add(_zl);
}
if (this._buffer.Count > this._p)
{ this._buffer.RemoveAt(0); }
} for (int i = 0; i < this._buffer.Count; i++)
} { _ema += this._buffer[i]; }
_ema /= this._buffer.Count;
}
else
{
_ema = TValue.v * this._k + this._lastema * this._k1m;
}
this._lastlastema = this._lastema;
this._lastema = _ema;
var ret = (TValue.t, this.Count < this._p - 1 && this._NaN ? double.NaN : _ema);
base.Add(ret, update);
}
}
+8
View File
@@ -26,6 +26,14 @@
<NoWarn>1701;1702;MSB3270</NoWarn> <NoWarn>1701;1702;MSB3270</NoWarn>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<None Remove="Validations\Pandas_TA.cstemp" />
</ItemGroup>
<ItemGroup>
<Compile Include="Validations\Pandas_TA.cstemp" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="JetBrains.dotCover.CommandLineTools" Version="2022.1.0-eap10"> <PackageReference Include="JetBrains.dotCover.CommandLineTools" Version="2022.1.0-eap10">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>