refactor: Simplify TSeries and Dema constructors, and streamline benchmark methods for improved readability

This commit is contained in:
Miha Kralj
2025-12-08 18:43:23 -05:00
parent 53a2dd2c05
commit 5f57cbbe74
9 changed files with 20 additions and 67 deletions
+7 -12
View File
@@ -11,12 +11,12 @@ namespace QuanTAlib;
/// </summary> /// </summary>
public class TBarSeries : IReadOnlyList<TBar> public class TBarSeries : IReadOnlyList<TBar>
{ {
protected readonly List<long> _t = new(); protected readonly List<long> _t;
protected readonly List<double> _o = new(); protected readonly List<double> _o;
protected readonly List<double> _h = new(); protected readonly List<double> _h;
protected readonly List<double> _l = new(); protected readonly List<double> _l;
protected readonly List<double> _c = new(); protected readonly List<double> _c;
protected readonly List<double> _v = new(); protected readonly List<double> _v;
public string Name { get; set; } = "Bar"; public string Name { get; set; } = "Bar";
public event Action<TBar>? Pub; public event Action<TBar>? Pub;
@@ -34,13 +34,8 @@ public class TBarSeries : IReadOnlyList<TBar>
public TSeries C => Close; public TSeries C => Close;
public TSeries V => Volume; public TSeries V => Volume;
public TBarSeries() public TBarSeries() : this(0)
{ {
Open = new TSeries(_t, _o) { Name = "Open" };
High = new TSeries(_t, _h) { Name = "High" };
Low = new TSeries(_t, _l) { Name = "Low" };
Close = new TSeries(_t, _c) { Name = "Close" };
Volume = new TSeries(_t, _v) { Name = "Volume" };
} }
public TBarSeries(int capacity) public TBarSeries(int capacity)
+1 -3
View File
@@ -20,10 +20,8 @@ namespace QuanTAlib;
public event Action<TValue>? Pub; public event Action<TValue>? Pub;
public TSeries() public TSeries() : this(0)
{ {
_t = new List<long>();
_v = new List<double>();
} }
public TSeries(int capacity) public TSeries(int capacity)
+1 -1
View File
@@ -120,7 +120,7 @@ public sealed class Dema : ITValuePublisher
public TSeries Update(TSeries source) public TSeries Update(TSeries source)
{ {
if (source.Count == 0) return new TSeries(new List<long>(), new List<double>()); if (source.Count == 0) return new TSeries();
int len = source.Count; int len = source.Count;
var t = new List<long>(len); var t = new List<long>(len);
+2 -2
View File
@@ -149,7 +149,7 @@ public sealed class Ema : ITValuePublisher
public TSeries Update(TSeries source) public TSeries Update(TSeries source)
{ {
if (source.Count == 0) return new TSeries(new List<long>(), new List<double>()); if (source.Count == 0) return new TSeries();
int len = source.Count; int len = source.Count;
var t = new List<long>(len); var t = new List<long>(len);
@@ -291,7 +291,7 @@ public sealed class Ema : ITValuePublisher
if (source.Length == 0) return; if (source.Length == 0) return;
State state = State.New(); var state = State.New();
double lastValid = 0; double lastValid = 0;
CalculateCore(source, output, alpha, ref state, ref lastValid); CalculateCore(source, output, alpha, ref state, ref lastValid);
+1 -1
View File
@@ -137,7 +137,7 @@ public sealed class Sma : ITValuePublisher
public TSeries Update(TSeries source) public TSeries Update(TSeries source)
{ {
if (source.Count == 0) return new TSeries(new List<long>(), new List<double>()); if (source.Count == 0) return new TSeries();
int len = source.Count; int len = source.Count;
var t = new List<long>(len); var t = new List<long>(len);
+1 -1
View File
@@ -129,7 +129,7 @@ public sealed class Tema : ITValuePublisher
public TSeries Update(TSeries source) public TSeries Update(TSeries source)
{ {
if (source.Count == 0) return new TSeries(new List<long>(), new List<double>()); if (source.Count == 0) return new TSeries();
int len = source.Count; int len = source.Count;
var t = new List<long>(len); var t = new List<long>(len);
+1 -1
View File
@@ -141,7 +141,7 @@ public sealed class Trima : ITValuePublisher
public TSeries Update(TSeries source) public TSeries Update(TSeries source)
{ {
if (source.Count == 0) return new TSeries(new List<long>(), new List<double>()); if (source.Count == 0) return new TSeries();
int len = source.Count; int len = source.Count;
var t = new List<long>(len); var t = new List<long>(len);
+1 -1
View File
@@ -141,7 +141,7 @@ public sealed class Wma : ITValuePublisher
public TSeries Update(TSeries source) public TSeries Update(TSeries source)
{ {
if (source.Count == 0) return new TSeries(new List<long>(), new List<double>()); if (source.Count == 0) return new TSeries();
int len = source.Count; int len = source.Count;
var t = new List<long>(len); var t = new List<long>(len);
+5 -45
View File
@@ -176,15 +176,7 @@ public class IndicatorBenchmarks
[BenchmarkCategory("SMA")] [BenchmarkCategory("SMA")]
[Benchmark(Description = "Skender SMA")] [Benchmark(Description = "Skender SMA")]
public double Skender_Sma() public object Skender_Sma() => _quotes.GetSma(Period);
{
double sum = 0;
foreach (var r in _quotes.GetSma(Period))
{
sum += (double)(r.Sma ?? 0);
}
return sum;
}
// ==================== EMA ==================== // ==================== EMA ====================
[BenchmarkCategory("EMA")] [BenchmarkCategory("EMA")]
@@ -229,15 +221,7 @@ public class IndicatorBenchmarks
[BenchmarkCategory("EMA")] [BenchmarkCategory("EMA")]
[Benchmark(Description = "Skender EMA")] [Benchmark(Description = "Skender EMA")]
public double Skender_Ema() public object Skender_Ema() => _quotes.GetEma(Period);
{
double sum = 0;
foreach (var r in _quotes.GetEma(Period))
{
sum += (double)(r.Ema ?? 0);
}
return sum;
}
// ==================== WMA ==================== // ==================== WMA ====================
[BenchmarkCategory("WMA")] [BenchmarkCategory("WMA")]
@@ -282,15 +266,7 @@ public class IndicatorBenchmarks
[BenchmarkCategory("WMA")] [BenchmarkCategory("WMA")]
[Benchmark(Description = "Skender WMA")] [Benchmark(Description = "Skender WMA")]
public double Skender_Wma() public object Skender_Wma() => _quotes.GetWma(Period);
{
double sum = 0;
foreach (var r in _quotes.GetWma(Period))
{
sum += (double)(r.Wma ?? 0);
}
return sum;
}
// ==================== TRIMA ==================== // ==================== TRIMA ====================
[BenchmarkCategory("TRIMA")] [BenchmarkCategory("TRIMA")]
@@ -376,15 +352,7 @@ public class IndicatorBenchmarks
[BenchmarkCategory("DEMA")] [BenchmarkCategory("DEMA")]
[Benchmark(Description = "Skender DEMA")] [Benchmark(Description = "Skender DEMA")]
public double Skender_Dema() public object Skender_Dema() => _quotes.GetDema(Period);
{
double sum = 0;
foreach (var r in _quotes.GetDema(Period))
{
sum += (double)(r.Dema ?? 0);
}
return sum;
}
// ==================== TEMA ==================== // ==================== TEMA ====================
[BenchmarkCategory("TEMA")] [BenchmarkCategory("TEMA")]
@@ -429,13 +397,5 @@ public class IndicatorBenchmarks
[BenchmarkCategory("TEMA")] [BenchmarkCategory("TEMA")]
[Benchmark(Description = "Skender TEMA")] [Benchmark(Description = "Skender TEMA")]
public double Skender_Tema() public object Skender_Tema() => _quotes.GetTema(Period);
{
double sum = 0;
foreach (var r in _quotes.GetTema(Period))
{
sum += (double)(r.Tema ?? 0);
}
return sum;
}
} }