chore: repo cleanup and code quality improvements

- Remove global.json (SDK pinning unnecessary)

- Remove nuget.config, move MyGet source to .csproj RestoreAdditionalProjectSources

- Gitignore ndepend/ entirely, move badges to docs/img/

- Update README.md and docs/ndepend.md badge paths

- Add NDepend project property to QuanTAlib.slnx

- Expand .editorconfig ReSharper/diagnostic suppressions

- Use ArgumentOutOfRangeException instead of ArgumentException

- Use discard _ for unused event sender parameters

- Remove quantalib.code-workspace and sonar-suppressions.json

- Add filter signature SVGs
This commit is contained in:
Miha Kralj
2026-03-03 09:22:55 -08:00
parent e1a6743bda
commit 1910fdca93
131 changed files with 216046 additions and 2027 deletions
-8
View File
@@ -95,8 +95,6 @@ public sealed class Bbw : AbstractBase
/// Standard deviation multiplier.
/// </summary>
public double Multiplier => _multiplier;
/// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override TValue Update(TValue input, bool isNew = true)
{
@@ -159,8 +157,6 @@ public sealed class Bbw : AbstractBase
PubEvent(Last, isNew);
return Last;
}
/// <inheritdoc/>
public override TSeries Update(TSeries source)
{
int len = source.Count;
@@ -196,8 +192,6 @@ public sealed class Bbw : AbstractBase
_state.SumSq += v * v;
}
}
/// <inheritdoc/>
public override void Prime(ReadOnlySpan<double> source, TimeSpan? step = null)
{
for (int i = 0; i < source.Length; i++)
@@ -205,8 +199,6 @@ public sealed class Bbw : AbstractBase
Update(new TValue(DateTime.UtcNow, source[i]), isNew: true);
}
}
/// <inheritdoc/>
public override void Reset()
{
_buffer.Clear();
-8
View File
@@ -107,8 +107,6 @@ public sealed class Bbwn : AbstractBase
/// Historical lookback period for normalization.
/// </summary>
public int Lookback => _lookback;
/// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override TValue Update(TValue input, bool isNew = true)
{
@@ -212,8 +210,6 @@ public sealed class Bbwn : AbstractBase
PubEvent(Last, isNew);
return Last;
}
/// <inheritdoc/>
public override TSeries Update(TSeries source)
{
int len = source.Count;
@@ -249,8 +245,6 @@ public sealed class Bbwn : AbstractBase
_state.SumSq += v * v;
}
}
/// <inheritdoc/>
public override void Prime(ReadOnlySpan<double> source, TimeSpan? step = null)
{
for (int i = 0; i < source.Length; i++)
@@ -258,8 +252,6 @@ public sealed class Bbwn : AbstractBase
Update(new TValue(DateTime.UtcNow, source[i]), isNew: true);
}
}
/// <inheritdoc/>
public override void Reset()
{
_buffer.Clear();
-8
View File
@@ -108,8 +108,6 @@ public sealed class Bbwp : AbstractBase
/// Historical lookback period for percentile calculation.
/// </summary>
public int Lookback => _lookback;
/// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override TValue Update(TValue input, bool isNew = true)
{
@@ -205,8 +203,6 @@ public sealed class Bbwp : AbstractBase
PubEvent(Last, isNew);
return Last;
}
/// <inheritdoc/>
public override TSeries Update(TSeries source)
{
int len = source.Count;
@@ -242,8 +238,6 @@ public sealed class Bbwp : AbstractBase
_state.SumSq += v * v;
}
}
/// <inheritdoc/>
public override void Prime(ReadOnlySpan<double> source, TimeSpan? step = null)
{
for (int i = 0; i < source.Length; i++)
@@ -251,8 +245,6 @@ public sealed class Bbwp : AbstractBase
Update(new TValue(DateTime.UtcNow, source[i]), isNew: true);
}
}
/// <inheritdoc/>
public override void Reset()
{
_buffer.Clear();
-8
View File
@@ -100,8 +100,6 @@ public sealed class Ccv : AbstractBase
/// Smoothing method (1=SMA, 2=EMA, 3=WMA).
/// </summary>
public int Method => _method;
/// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override TValue Update(TValue input, bool isNew = true)
{
@@ -242,8 +240,6 @@ public sealed class Ccv : AbstractBase
PubEvent(Last, isNew);
return Last;
}
/// <inheritdoc/>
public override TSeries Update(TSeries source)
{
int len = source.Count;
@@ -276,8 +272,6 @@ public sealed class Ccv : AbstractBase
_state.Sum += _returnBuffer[i];
}
}
/// <inheritdoc/>
public override void Prime(ReadOnlySpan<double> source, TimeSpan? step = null)
{
for (int i = 0; i < source.Length; i++)
@@ -285,8 +279,6 @@ public sealed class Ccv : AbstractBase
Update(new TValue(DateTime.UtcNow, source[i]), isNew: true);
}
}
/// <inheritdoc/>
public override void Reset()
{
_returnBuffer.Clear();
-8
View File
@@ -117,8 +117,6 @@ public sealed class Cv : AbstractBase
/// Beta coefficient (persistence weight).
/// </summary>
public double Beta => _beta;
/// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override TValue Update(TValue input, bool isNew = true)
{
@@ -241,8 +239,6 @@ public sealed class Cv : AbstractBase
PubEvent(Last, isNew);
return Last;
}
/// <inheritdoc/>
public override TSeries Update(TSeries source)
{
int len = source.Count;
@@ -265,8 +261,6 @@ public sealed class Cv : AbstractBase
return new TSeries(t, v);
}
/// <inheritdoc/>
public override void Prime(ReadOnlySpan<double> source, TimeSpan? step = null)
{
for (int i = 0; i < source.Length; i++)
@@ -274,8 +268,6 @@ public sealed class Cv : AbstractBase
Update(new TValue(DateTime.UtcNow, source[i]), isNew: true);
}
}
/// <inheritdoc/>
public override void Reset()
{
_s = new State(0.0, 0.0, 0.0, 0.0, double.NaN, 0.0, 0);
-6
View File
@@ -152,8 +152,6 @@ public sealed class Cvi : AbstractBase
return new TSeries(t, v);
}
/// <inheritdoc/>
public override TSeries Update(TSeries source)
{
int len = source.Count;
@@ -254,8 +252,6 @@ public sealed class Cvi : AbstractBase
PubEvent(Last, isNew);
return Last;
}
/// <inheritdoc/>
public override void Prime(ReadOnlySpan<double> source, TimeSpan? step = null)
{
for (int i = 0; i < source.Length; i++)
@@ -263,8 +259,6 @@ public sealed class Cvi : AbstractBase
Update(new TValue(DateTime.UtcNow, source[i]), isNew: true);
}
}
/// <inheritdoc/>
public override void Reset()
{
_emaBuffer.Clear();
-8
View File
@@ -103,8 +103,6 @@ public sealed class Ewma : AbstractBase
/// Number of periods per year for annualization.
/// </summary>
public int AnnualPeriods => _annualPeriods;
/// <inheritdoc/>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public override TValue Update(TValue input, bool isNew = true)
{
@@ -193,8 +191,6 @@ public sealed class Ewma : AbstractBase
PubEvent(Last, isNew);
return Last;
}
/// <inheritdoc/>
public override TSeries Update(TSeries source)
{
int len = source.Count;
@@ -217,8 +213,6 @@ public sealed class Ewma : AbstractBase
return new TSeries(t, v);
}
/// <inheritdoc/>
public override void Prime(ReadOnlySpan<double> source, TimeSpan? step = null)
{
for (int i = 0; i < source.Length; i++)
@@ -226,8 +220,6 @@ public sealed class Ewma : AbstractBase
Update(new TValue(DateTime.UtcNow, source[i]), isNew: true);
}
}
/// <inheritdoc/>
public override void Reset()
{
_s = new State(0.0, 1.0, double.NaN, 0.0, 0);
-6
View File
@@ -226,8 +226,6 @@ public sealed class Gkv : AbstractBase
return new TSeries(t, v);
}
/// <inheritdoc/>
public override TSeries Update(TSeries source)
{
int len = source.Count;
@@ -324,8 +322,6 @@ public sealed class Gkv : AbstractBase
PubEvent(Last, isNew);
return Last;
}
/// <inheritdoc/>
public override void Prime(ReadOnlySpan<double> source, TimeSpan? step = null)
{
for (int i = 0; i < source.Length; i++)
@@ -333,8 +329,6 @@ public sealed class Gkv : AbstractBase
Update(new TValue(DateTime.UtcNow, source[i]), isNew: true);
}
}
/// <inheritdoc/>
public override void Reset()
{
_s = new State(0, 1.0, 0, 0, 0);
-6
View File
@@ -211,8 +211,6 @@ public sealed class Hlv : AbstractBase
return new TSeries(t, v);
}
/// <inheritdoc/>
public override TSeries Update(TSeries source)
{
int len = source.Count;
@@ -309,8 +307,6 @@ public sealed class Hlv : AbstractBase
PubEvent(Last, isNew);
return Last;
}
/// <inheritdoc/>
public override void Prime(ReadOnlySpan<double> source, TimeSpan? step = null)
{
for (int i = 0; i < source.Length; i++)
@@ -318,8 +314,6 @@ public sealed class Hlv : AbstractBase
Update(new TValue(DateTime.UtcNow, source[i]), isNew: true);
}
}
/// <inheritdoc/>
public override void Reset()
{
_s = new State(0, 1.0, 0, 0, 0);
-8
View File
@@ -33,8 +33,6 @@ namespace QuanTAlib;
[SkipLocalsInit]
public sealed class Hv : AbstractBase
{
private const double Epsilon = 1e-10;
private readonly int _period;
private readonly bool _annualize;
private readonly int _annualPeriods;
@@ -182,8 +180,6 @@ public sealed class Hv : AbstractBase
return new TSeries(t, v);
}
/// <inheritdoc/>
public override TSeries Update(TSeries source)
{
int len = source.Count;
@@ -308,8 +304,6 @@ public sealed class Hv : AbstractBase
PubEvent(Last, isNew);
return Last;
}
/// <inheritdoc/>
public override void Prime(ReadOnlySpan<double> source, TimeSpan? step = null)
{
for (int i = 0; i < source.Length; i++)
@@ -317,8 +311,6 @@ public sealed class Hv : AbstractBase
Update(new TValue(DateTime.UtcNow, source[i]), isNew: true);
}
}
/// <inheritdoc/>
public override void Reset()
{
_s = new State(double.NaN, 0, 0, 0, 0, 0);
@@ -92,9 +92,9 @@ public class JvoltynValidationTests
// Calculate logParam manually to verify normalization
double lengthParam = (DefaultPeriod - 1.0) / 2.0;
double logParam = System.Math.Log(System.Math.Sqrt(lengthParam)) / System.Math.Log(2.0);
double logParam = Math.Log(Math.Sqrt(lengthParam)) / Math.Log(2.0);
logParam = (logParam + 2.0) < 0.0 ? 0.0 : (logParam + 2.0);
double normFactor = System.Math.Abs(logParam - 1.0) > 1e-10 ? 100.0 / (logParam - 1.0) : 0.0;
double normFactor = Math.Abs(logParam - 1.0) > 1e-10 ? 100.0 / (logParam - 1.0) : 0.0;
for (int i = 0; i < series.Count; i++)
{
-6
View File
@@ -229,8 +229,6 @@ public sealed class Rsv : AbstractBase
return new TSeries(t, v);
}
/// <inheritdoc/>
public override TSeries Update(TSeries source)
{
if (source.Count == 0)
@@ -338,8 +336,6 @@ public sealed class Rsv : AbstractBase
PubEvent(Last, isNew);
return Last;
}
/// <inheritdoc/>
public override void Prime(ReadOnlySpan<double> source, TimeSpan? step = null)
{
for (int i = 0; i < source.Length; i++)
@@ -347,8 +343,6 @@ public sealed class Rsv : AbstractBase
Update(new TValue(DateTime.UtcNow, source[i]), isNew: true);
}
}
/// <inheritdoc/>
public override void Reset()
{
_s = new State(0, 0, 0, 0, 0);
-6
View File
@@ -196,8 +196,6 @@ public sealed class Rv : AbstractBase
return new TSeries(t, v);
}
/// <inheritdoc/>
public override TSeries Update(TSeries source)
{
int len = source.Count;
@@ -320,8 +318,6 @@ public sealed class Rv : AbstractBase
PubEvent(Last, isNew);
return Last;
}
/// <inheritdoc/>
public override void Prime(ReadOnlySpan<double> source, TimeSpan? step = null)
{
for (int i = 0; i < source.Length; i++)
@@ -329,8 +325,6 @@ public sealed class Rv : AbstractBase
Update(new TValue(DateTime.UtcNow, source[i]), isNew: true);
}
}
/// <inheritdoc/>
public override void Reset()
{
_s = new State(double.NaN, 0, 0, 0);
-6
View File
@@ -177,8 +177,6 @@ public sealed class Rvi : AbstractBase
return new TSeries(t, v);
}
/// <inheritdoc/>
public override TSeries Update(TSeries source)
{
if (source.Count == 0)
@@ -344,8 +342,6 @@ public sealed class Rvi : AbstractBase
PubEvent(Last, isNew);
return Last;
}
/// <inheritdoc/>
public override void Prime(ReadOnlySpan<double> source, TimeSpan? step = null)
{
for (int i = 0; i < source.Length; i++)
@@ -353,8 +349,6 @@ public sealed class Rvi : AbstractBase
Update(new TValue(DateTime.UtcNow, source[i]), isNew: true);
}
}
/// <inheritdoc/>
public override void Reset()
{
_s = new State(double.NaN, 0, 0, 0, 1.0, 0, 1.0, 50.0, 0);
+1 -1
View File
@@ -683,7 +683,7 @@ public class TrValidationTests
Tr.Batch(high, low, close, qOutput);
// Use ValidationHelper for correct TALib index mapping
QuanTAlib.Tests.ValidationHelper.VerifyData(qOutput, output, outRange, lookback);
ValidationHelper.VerifyData(qOutput, output, outRange, lookback);
}
[Fact]
-6
View File
@@ -152,8 +152,6 @@ public sealed class Tr : AbstractBase
return new TSeries(t, v);
}
/// <inheritdoc/>
public override TSeries Update(TSeries source)
{
int len = source.Count;
@@ -258,8 +256,6 @@ public sealed class Tr : AbstractBase
PubEvent(Last, isNew);
return Last;
}
/// <inheritdoc/>
public override void Prime(ReadOnlySpan<double> source, TimeSpan? step = null)
{
for (int i = 0; i < source.Length; i++)
@@ -267,8 +263,6 @@ public sealed class Tr : AbstractBase
Update(new TValue(DateTime.UtcNow, source[i]), isNew: true);
}
}
/// <inheritdoc/>
public override void Reset()
{
_s = new State(double.NaN, 0, 0, 0, 0, 0);
-6
View File
@@ -118,8 +118,6 @@ public sealed class Ui : AbstractBase
{
return UpdateCore(bar.Time, bar.Close, isNew);
}
/// <inheritdoc/>
public override TSeries Update(TSeries source)
{
int len = source.Count;
@@ -235,8 +233,6 @@ public sealed class Ui : AbstractBase
PubEvent(Last, isNew);
return Last;
}
/// <inheritdoc/>
public override void Prime(ReadOnlySpan<double> source, TimeSpan? step = null)
{
for (int i = 0; i < source.Length; i++)
@@ -244,8 +240,6 @@ public sealed class Ui : AbstractBase
Update(new TValue(DateTime.UtcNow, source[i]), isNew: true);
}
}
/// <inheritdoc/>
public override void Reset()
{
_closeBuffer.Clear();
-6
View File
@@ -136,8 +136,6 @@ public sealed class Vov : AbstractBase
{
return UpdateCore(bar.Time, bar.Close, isNew);
}
/// <inheritdoc/>
public override TSeries Update(TSeries source)
{
int len = source.Count;
@@ -279,8 +277,6 @@ public sealed class Vov : AbstractBase
PubEvent(Last, isNew);
return Last;
}
/// <inheritdoc/>
public override void Prime(ReadOnlySpan<double> source, TimeSpan? step = null)
{
for (int i = 0; i < source.Length; i++)
@@ -288,8 +284,6 @@ public sealed class Vov : AbstractBase
Update(new TValue(DateTime.UtcNow, source[i]), isNew: true);
}
}
/// <inheritdoc/>
public override void Reset()
{
_priceBuffer.Clear();
-6
View File
@@ -227,8 +227,6 @@ public sealed class Vr : AbstractBase
return new TSeries(t, v);
}
/// <inheritdoc/>
public override TSeries Update(TSeries source)
{
// For TSeries (price-only), create synthetic bars
@@ -248,8 +246,6 @@ public sealed class Vr : AbstractBase
return new TSeries(t, v);
}
/// <inheritdoc/>
public override void Prime(ReadOnlySpan<double> source, TimeSpan? step = null)
{
for (int i = 0; i < source.Length; i++)
@@ -257,8 +253,6 @@ public sealed class Vr : AbstractBase
Update(new TValue(DateTime.UtcNow, source[i]), isNew: true);
}
}
/// <inheritdoc/>
public override void Reset()
{
_s = new State(0, 1.0, 0, 0, 0, false);
-6
View File
@@ -238,8 +238,6 @@ public sealed class Yzv : AbstractBase
return new TSeries(t, v);
}
/// <inheritdoc/>
public override TSeries Update(TSeries source)
{
// For TSeries (price-only), create synthetic bars
@@ -259,8 +257,6 @@ public sealed class Yzv : AbstractBase
return new TSeries(t, v);
}
/// <inheritdoc/>
public override void Prime(ReadOnlySpan<double> source, TimeSpan? step = null)
{
for (int i = 0; i < source.Length; i++)
@@ -268,8 +264,6 @@ public sealed class Yzv : AbstractBase
Update(new TValue(DateTime.UtcNow, source[i]), isNew: true);
}
}
/// <inheritdoc/>
public override void Reset()
{
_s = new State(0, 1.0, 0, 0, 0, false);