[CodeFactor] Apply fixes to commit 0606491

This commit is contained in:
codefactor-io
2026-03-12 19:37:50 +00:00
parent 060649192f
commit 8f79257155
384 changed files with 1197 additions and 1215 deletions
-1
View File
@@ -2,7 +2,6 @@ namespace QuanTAlib;
public class AgcTests
{
// Helper: generate a sine wave that oscillates around zero
private static TSeries MakeSineWave(int count, double amplitude = 1.0, double period = 20.0)
{
@@ -43,7 +43,7 @@ public class AgcValidationTests
double[] input = new double[T];
for (int i = 0; i < T; i++)
{
double amplitude = 1.0 + i * 0.01; // grows from 1 to 11
double amplitude = 1.0 + (i * 0.01); // grows from 1 to 11
input[i] = amplitude * Math.Sin(2.0 * Math.PI * i / 20.0);
}
@@ -92,7 +92,7 @@ public class AgcValidationTests
double[] input = new double[500];
for (int i = 0; i < input.Length; i++)
{
input[i] = Math.Sin(2.0 * Math.PI * i / 25.0) * (1.0 + 0.3 * Math.Sin(2.0 * Math.PI * i / 100.0));
input[i] = Math.Sin(2.0 * Math.PI * i / 25.0) * (1.0 + (0.3 * Math.Sin(2.0 * Math.PI * i / 100.0)));
}
double[] out1 = new double[input.Length];
@@ -561,7 +561,7 @@ public class ALaguerreTests
// Trending input: 100, 110, 120, ...
for (int i = 0; i < 30; i++)
{
alTrend.Update(new TValue(DateTime.UtcNow, 100 + i * 10.0));
alTrend.Update(new TValue(DateTime.UtcNow, 100 + (i * 10.0)));
}
// Flat input: constant 100
@@ -173,7 +173,7 @@ public sealed class ALaguerreValidationTests : IDisposable
Assert.True(filteredVariance < sourceVariance,
$"Filtered variance ({filteredVariance:F6}) should be less than source variance ({sourceVariance:F6})");
_output.WriteLine($"Variance: source={sourceVariance:F6}, filtered={filteredVariance:F6}, reduction={1 - filteredVariance / sourceVariance:P2}");
_output.WriteLine($"Variance: source={sourceVariance:F6}, filtered={filteredVariance:F6}, reduction={1 - (filteredVariance / sourceVariance):P2}");
}
[Fact]
@@ -202,7 +202,7 @@ public sealed class ALaguerreValidationTests : IDisposable
var trendSeries = new TSeries();
for (int i = 0; i < 50; i++)
{
trendSeries.Add(DateTime.UtcNow.Ticks + i, 100.0 + i * 5.0);
trendSeries.Add(DateTime.UtcNow.Ticks + i, 100.0 + (i * 5.0));
}
foreach (var item in trendSeries)
@@ -246,7 +246,7 @@ public class BaxterKingTests
var ind = new BaxterKing(6, 32, 5); // filterLen = 11
for (int i = 0; i < 10; i++)
{
double v = ind.Update(new TValue(DateTime.UtcNow, 100 + i * 0.5)).Value;
double v = ind.Update(new TValue(DateTime.UtcNow, 100 + (i * 0.5))).Value;
Assert.Equal(0.0, v, 15);
}
}
@@ -117,7 +117,7 @@ public class Butter2ValidationTests
else
{
double ssrc = src;
filt = (b0 * ssrc + b1 * src1 + b2 * src2 - a1 * filt1 - a2 * filt2) / a0;
filt = ((b0 * ssrc) + (b1 * src1) + (b2 * src2) - (a1 * filt1) - (a2 * filt2)) / a0;
}
result.Add(filt);
@@ -68,7 +68,7 @@ public class Butter3ValidationTests
double c1 = a1 * a1;
double coef2 = b1 + c1;
double coef3 = -(c1 + b1 * c1);
double coef3 = -(c1 + (b1 * c1));
double coef4 = c1 * c1;
double coef1 = (1.0 - b1 + c1) * (1.0 - c1) / 8.0;
@@ -85,8 +85,8 @@ public class Butter3ValidationTests
}
else
{
filt = coef1 * (src + 3.0 * src1 + 3.0 * src2 + src3)
+ coef2 * filt1 + coef3 * filt2 + coef4 * filt3;
filt = (coef1 * (src + (3.0 * src1) + (3.0 * src2) + src3))
+ (coef2 * filt1) + (coef3 * filt2) + (coef4 * filt3);
}
result.Add(filt);
@@ -57,7 +57,7 @@ public class CfitzValidationTests
double[] input = new double[200];
for (int i = 0; i < 200; i++)
{
input[i] = 100.0 + 0.5 * i; // linear trend
input[i] = 100.0 + (0.5 * i); // linear trend
}
double[] output = new double[200];
Cfitz.Batch(input, output, 6, 32);
@@ -30,7 +30,7 @@ public sealed class EllipticValidationTests : IDisposable
var noisySignal = new List<double>(N);
for (int i = 0; i < N; i++)
{
noisySignal.Add(100.0 + (closes[i + 1] / closes[i] - 1.0) * 1000.0); // amplified jitter around 100
noisySignal.Add(100.0 + (((closes[i + 1] / closes[i]) - 1.0) * 1000.0)); // amplified jitter around 100
}
var output = new List<double>();
+1 -1
View File
@@ -45,7 +45,7 @@ public class GaussTests
var source = new TSeries();
for (int i = 0; i < 50; i++)
{
source.Add(new TValue(DateTime.MinValue.AddSeconds(i), 100 + Math.Sin(i * 0.1) * 10));
source.Add(new TValue(DateTime.MinValue.AddSeconds(i), 100 + (Math.Sin(i * 0.1) * 10)));
}
var gauss = new Gauss(1.0);
@@ -44,7 +44,7 @@ public class GaussValidationTests : IDisposable
/// </summary>
private static double[] CalculateExpectedGauss(double[] source, double sigma)
{
int kernelSize = (int)(2 * Math.Ceiling(3.0 * sigma) + 1);
int kernelSize = (int)((2 * Math.Ceiling(3.0 * sigma)) + 1);
double[] weights = new double[kernelSize];
double sum = 0;
int center = kernelSize / 2;
+4 -4
View File
@@ -54,7 +54,7 @@ public class HpValidationTests : IDisposable
var result = new List<TValue>();
double s = Math.Sqrt(lambda);
double alpha = (s * 0.5 - 1.0) / (s * 0.5 + 1.0);
double alpha = ((s * 0.5) - 1.0) / ((s * 0.5) + 1.0);
alpha = Math.Max(alpha, 0.0001);
alpha = Math.Min(alpha, 0.9999);
@@ -75,9 +75,9 @@ public class HpValidationTests : IDisposable
}
else
{
hp_trend = (1.0 - alpha) * price +
alpha * prev_trend +
0.5 * alpha * (prev_trend - prev_prev_trend);
hp_trend = ((1.0 - alpha) * price) +
(alpha * prev_trend) +
(0.5 * alpha * (prev_trend - prev_prev_trend));
prev_prev_trend = prev_trend;
prev_trend = hp_trend;
-1
View File
@@ -20,7 +20,6 @@ public class HpfTests
Assert.StartsWith("HPF", hpf.Name, StringComparison.Ordinal);
}
[Fact]
public void Calc_ReturnsValue()
{
@@ -122,7 +122,7 @@ public class HpfValidationTests : IDisposable
{
double ssrc = src[i];
double term1 = coeff1 * (ssrc - 2.0 * src1 + src2);
double term1 = coeff1 * (ssrc - (2.0 * src1) + src2);
double term2 = coeff2 * hp1;
double term3 = coeff3 * hp2;
@@ -67,7 +67,7 @@ public class KalmanValidationTests : IDisposable
double k = p_pred / denom;
// Update
x = x + k * (input[i] - x);
x = x + (k * (input[i] - x));
// p = (1 - k) * pPred
// But implementation uses: p = (pPred * r) / denom
@@ -129,7 +129,7 @@ public sealed class LaguerreValidationTests : IDisposable
else if (i >= 4)
{
// After warmup: FIR = (input + 2*prev1 + 2*prev2 + prev3) / 6
double expectedFir = (input + 2.0 * prev0 + 2.0 * prev1 + prev2) / 6.0;
double expectedFir = (input + (2.0 * prev0) + (2.0 * prev1) + prev2) / 6.0;
Assert.Equal(expectedFir, lagResult, 1e-10);
}
@@ -326,6 +326,6 @@ public sealed class LaguerreValidationTests : IDisposable
}
double mean = sum / n;
return Math.Max(0, sumSq / n - mean * mean);
return Math.Max(0, (sumSq / n) - (mean * mean));
}
}
@@ -16,7 +16,7 @@ public class LmsValidationTests
double[] sine = new double[T];
for (int i = 0; i < T; i++)
{
sine[i] = 100.0 + 10.0 * Math.Sin(2 * Math.PI * i / 40.0);
sine[i] = 100.0 + (10.0 * Math.Sin(2 * Math.PI * i / 40.0));
}
double[] output = new double[T];
+4 -4
View File
@@ -118,14 +118,14 @@ public class ModfTests
var modf = new Modf(14);
for (int i = 0; i < 30; i++)
{
modf.Update(new TValue(DateTime.UtcNow, 100.0 + i * 0.5), isNew: true);
modf.Update(new TValue(DateTime.UtcNow, 100.0 + (i * 0.5)), isNew: true);
}
double before = modf.Last.Value;
// Correct last bar multiple times
for (int i = 0; i < 5; i++)
{
modf.Update(new TValue(DateTime.UtcNow, 100.0 + 29 * 0.5), isNew: false);
modf.Update(new TValue(DateTime.UtcNow, 100.0 + (29 * 0.5)), isNew: false);
}
Assert.Equal(before, modf.Last.Value, 10);
@@ -312,11 +312,11 @@ public class ModfTests
// Feed uptrend
for (int i = 0; i < 30; i++)
{
modf.Update(new TValue(DateTime.UtcNow, 100.0 + i * 2.0));
modf.Update(new TValue(DateTime.UtcNow, 100.0 + (i * 2.0)));
}
double upResult = modf.Last.Value;
// Output should be at or below price in uptrend (lower band tracks behind)
Assert.True(upResult <= 100.0 + 29 * 2.0);
Assert.True(upResult <= 100.0 + (29 * 2.0));
}
[Fact]
+3 -3
View File
@@ -328,7 +328,7 @@ public class NwTests
double[] dst = new double[len];
for (int i = 0; i < len; i++)
{
src[i] = 100.0 + i * 0.01;
src[i] = 100.0 + (i * 0.01);
}
Nw.Batch(src, dst, 500, 50.0); // period > StackallocThreshold
Assert.False(double.IsNaN(dst[len - 1]));
@@ -402,7 +402,7 @@ public class NwTests
}
nw.Update(new TValue(DateTime.UtcNow, 200.0), isNew: true);
// With h=100 and period=20, all weights nearly equal → nearly SMA
double expected = (100.0 * 19 + 200.0) / 20.0; // ~105
double expected = ((100.0 * 19) + 200.0) / 20.0; // ~105
Assert.True(Math.Abs(nw.Last.Value - expected) < 5.0);
}
@@ -429,7 +429,7 @@ public class NwTests
var n2 = new Nw(10, 3.0);
for (int i = 0; i < 30; i++)
{
double v = 100.0 + Math.Sin(i * 0.3) * 10.0;
double v = 100.0 + (Math.Sin(i * 0.3) * 10.0);
n1.Update(new TValue(DateTime.UtcNow, v));
n2.Update(new TValue(DateTime.UtcNow, v));
}
+2 -2
View File
@@ -167,12 +167,12 @@ public sealed class NwValidationTests : IDisposable
// Bar 1: src[1] with w0=1.0, src[0] with w1=exp(-1/(2*1))=exp(-0.5)
double w0 = 1.0;
double w1 = Math.Exp(-0.5);
double expected1 = (w0 * 20.0 + w1 * 10.0) / (w0 + w1);
double expected1 = ((w0 * 20.0) + (w1 * 10.0)) / (w0 + w1);
Assert.Equal(expected1, dst[1], 10);
// Bar 2: src[2] w0=1, src[1] w1=exp(-0.5), src[0] w2=exp(-4/2)=exp(-2)
double w2 = Math.Exp(-2.0);
double expected2 = (w0 * 30.0 + w1 * 20.0 + w2 * 10.0) / (w0 + w1 + w2);
double expected2 = ((w0 * 30.0) + (w1 * 20.0) + (w2 * 10.0)) / (w0 + w1 + w2);
Assert.Equal(expected2, dst[2], 10);
_output.WriteLine($"Manual calc: bar0={dst[0]:F6}, bar1={dst[1]:F6} (expect {expected1:F6}), bar2={dst[2]:F6} (expect {expected2:F6})");
@@ -56,7 +56,7 @@ public class OneEuroValidationTests
double[] output = new double[N];
for (int i = 0; i < N; i++)
{
src[i] = 100.0 + 10.0 * Math.Sin(2.0 * Math.PI * i / 20.0);
src[i] = 100.0 + (10.0 * Math.Sin(2.0 * Math.PI * i / 20.0));
}
// With beta=0, cutoff is always minCutoff regardless of speed
@@ -83,7 +83,7 @@ public class OneEuroValidationTests
double[] src = new double[N];
for (int i = 0; i < N; i++)
{
src[i] = 100.0 + 5.0 * Math.Sin(2.0 * Math.PI * i / 10.0);
src[i] = 100.0 + (5.0 * Math.Sin(2.0 * Math.PI * i / 10.0));
}
double[] smoothOut = new double[N];
@@ -137,7 +137,7 @@ public class OneEuroValidationTests
double[] src = new double[N];
for (int i = 0; i < N; i++)
{
src[i] = 100.0 + (closes[i + 1] / closes[i] - 1.0) * 100.0; // ±pct jitter around 100
src[i] = 100.0 + (((closes[i + 1] / closes[i]) - 1.0) * 100.0); // ±pct jitter around 100
}
double[] output = new double[N];
@@ -161,7 +161,7 @@ public class OneEuroValidationTests
double[] src = new double[N];
for (int i = 0; i < N; i++)
{
src[i] = 100.0 + 20.0 * Math.Sin(2.0 * Math.PI * i / 30.0);
src[i] = 100.0 + (20.0 * Math.Sin(2.0 * Math.PI * i / 30.0));
}
double[] output = new double[N];
@@ -187,7 +187,7 @@ public class OneEuroValidationTests
double[] src = new double[N];
for (int i = 0; i < N; i++)
{
src[i] = 100.0 + 5.0 * Math.Sin(2.0 * Math.PI * i / 20.0) + (i % 3 == 0 ? 1.0 : -1.0);
src[i] = 100.0 + (5.0 * Math.Sin(2.0 * Math.PI * i / 20.0)) + (i % 3 == 0 ? 1.0 : -1.0);
}
// Batch
@@ -252,6 +252,6 @@ public class OneEuroValidationTests
sumSq += v * v;
}
double mean = sum / data.Length;
return sumSq / data.Length - mean * mean;
return (sumSq / data.Length) - (mean * mean);
}
}
@@ -17,7 +17,7 @@ public class RlsValidationTests
double[] sine = new double[T];
for (int i = 0; i < T; i++)
{
sine[i] = 100.0 + 10.0 * Math.Sin(2 * Math.PI * i / 40.0);
sine[i] = 100.0 + (10.0 * Math.Sin(2 * Math.PI * i / 40.0));
}
double[] output = new double[T];
+1 -1
View File
@@ -386,7 +386,7 @@ public sealed class SakTests
var output = new double[size];
for (int i = 0; i < size; i++)
{
src[i] = 100.0 + i * 0.01;
src[i] = 100.0 + (i * 0.01);
}
// Should not throw StackOverflowException
@@ -83,7 +83,7 @@ public sealed class SakValidationTests
double c0 = alpha * alpha / 4.0;
double x0 = 10.0, x1 = 20.0, x2 = 30.0;
double expectedY = c0 * (x0 + 2.0 * x1 + x2); // pure FIR formula
double expectedY = c0 * (x0 + (2.0 * x1) + x2); // pure FIR formula
var sak = new Sak("Smooth", period: period);
var now = DateTime.UtcNow;
@@ -56,16 +56,16 @@ public class SgfValidationTests : IDisposable
double weight = 0;
if (polyOrder == 2)
{
weight = 3.0 * (3.0 * adjPeriod * adjPeriod - 7.0 - 20.0 * k * k);
weight = 3.0 * ((3.0 * adjPeriod * adjPeriod) - 7.0 - (20.0 * k * k));
}
else if (polyOrder == 4)
{
double k2 = k * k;
weight = 15.0 + k2 * (-20.0 + k2 * 6.0);
weight = 15.0 + (k2 * (-20.0 + (k2 * 6.0)));
}
else
{
weight = 1.0 - Math.Abs((double)k) / (double)halfWindow;
weight = 1.0 - (Math.Abs((double)k) / (double)halfWindow);
}
weights[i] = weight;
@@ -67,7 +67,7 @@ public class Ssf3ValidationTests
double c1 = a1 * a1;
double coef2 = b1 + c1;
double coef3 = -(c1 + b1 * c1);
double coef3 = -(c1 + (b1 * c1));
double coef4 = c1 * c1;
double coef1 = 1.0 - coef2 - coef3 - coef4;
@@ -84,7 +84,7 @@ public class Ssf3ValidationTests
else
{
// y = coef1*x + coef2*y[1] + coef3*y[2] + coef4*y[3]
filt = coef1 * src + coef2 * filt1 + coef3 * filt2 + coef4 * filt3;
filt = (coef1 * src) + (coef2 * filt1) + (coef3 * filt2) + (coef4 * filt3);
}
result.Add(filt);
@@ -113,7 +113,7 @@ public sealed class UsfValidationTests : IDisposable
usfLinear.Update(new TValue(DateTime.UtcNow, 100.0 + i));
}
// After warmup on a linear trend, USF should be close to the current value
double expectedLinear = 100.0 + (period * 5 - 1);
double expectedLinear = 100.0 + ((period * 5) - 1);
Assert.True(Math.Abs(usfLinear.Last.Value - expectedLinear) < period,
$"USF should track linear trend closely. Expected ~{expectedLinear}, got {usfLinear.Last.Value}");
+2 -2
View File
@@ -125,7 +125,7 @@ public class VossTests
// Feed enough bars past warmup (Count > 5) so Filt is not clamped to 0
for (int i = 0; i < 10; i++)
{
ind.Update(new TValue(DateTime.UtcNow, 100 + i * 2), isNew: true);
ind.Update(new TValue(DateTime.UtcNow, 100 + (i * 2)), isNew: true);
}
double val1 = ind.Last.Value;
@@ -141,7 +141,7 @@ public class VossTests
// Feed enough bars past warmup (Count > 5) so Filt is not clamped to 0
for (int i = 0; i < 10; i++)
{
ind.Update(new TValue(DateTime.UtcNow, 100 + i * 3), isNew: true);
ind.Update(new TValue(DateTime.UtcNow, 100 + (i * 3)), isNew: true);
}
double val1 = ind.Last.Value;
+4 -4
View File
@@ -516,8 +516,8 @@ public class WaveletTests
for (int i = 0; i < len; i++)
{
double signal = 100 + 10 * Math.Sin(2 * Math.PI * i / 40.0);
double noise = 2.0 * Math.Sin(17.3 * i) + 1.5 * Math.Cos(31.7 * i);
double signal = 100 + (10 * Math.Sin(2 * Math.PI * i / 40.0));
double noise = (2.0 * Math.Sin(17.3 * i)) + (1.5 * Math.Cos(31.7 * i));
input[i] = signal + noise;
}
@@ -563,7 +563,7 @@ public class WaveletTests
double[] input = new double[len];
for (int i = 0; i < len; i++)
{
input[i] = 100 + 10 * Math.Sin(2 * Math.PI * i / 40.0) + 5 * Math.Sin(73.1 * i);
input[i] = 100 + (10 * Math.Sin(2 * Math.PI * i / 40.0)) + (5 * Math.Sin(73.1 * i));
}
double[] lowThresh = new double[len];
@@ -596,6 +596,6 @@ public class WaveletTests
sum2 += data[i] * data[i];
}
double mean = sum / data.Length;
return sum2 / data.Length - mean * mean;
return (sum2 / data.Length) - (mean * mean);
}
}
@@ -18,9 +18,9 @@ public class WaveletValidationTests
double[] noisy = new double[T];
for (int i = 0; i < T; i++)
{
clean[i] = 100.0 + 10.0 * Math.Sin(2 * Math.PI * i / 80.0);
clean[i] = 100.0 + (10.0 * Math.Sin(2 * Math.PI * i / 80.0));
// Alternating noise with amplitude 25 — much larger than signal variation
noisy[i] = clean[i] + 25.0 * ((i % 2 == 0) ? 1.0 : -1.0);
noisy[i] = clean[i] + (25.0 * ((i % 2 == 0) ? 1.0 : -1.0));
}
double[] denoised = new double[T];
@@ -132,7 +132,7 @@ public class WaveletValidationTests
double[] output = new double[len];
for (int i = 0; i < len; i++)
{
input[i] = 100.0 + 0.5 * i;
input[i] = 100.0 + (0.5 * i);
}
Wavelet.Batch(input, output, 3, 1.0);
@@ -156,7 +156,7 @@ public class WaveletValidationTests
double[] output = new double[len];
for (int i = 0; i < len; i++)
{
input[i] = 100 + 10 * Math.Sin(2 * Math.PI * i / 50.0) + 0.5 * Math.Sin(101.1 * i);
input[i] = 100 + (10 * Math.Sin(2 * Math.PI * i / 50.0)) + (0.5 * Math.Sin(101.1 * i));
}
Wavelet.Batch(input, output, 4, 1.0);
@@ -216,6 +216,6 @@ public class WaveletValidationTests
}
int n = data.Length - 1;
double mean = sum / n;
return sum2 / n - mean * mean;
return (sum2 / n) - (mean * mean);
}
}
@@ -104,7 +104,7 @@ public class WienerValidationTests : IDisposable
kp = signalVar / (signalVar + noiseVar);
}
result[i] = mean + kp * (source[i] - mean);
result[i] = mean + (kp * (source[i] - mean));
}
return result;