mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-08-26 14:28:05 +00:00
Refactor code formatting and improve consistency across various test files
- Removed unnecessary blank lines in multiple test files to enhance readability. - Ensured consistent spacing and formatting in the `Trima`, `Usf`, `Vidya`, `Wma`, and `Atr` test classes. - Updated comments for clarity and consistency in the `Atr` and `Adl` classes. - Adjusted project files for better structure and maintainability.
This commit is contained in:
@@ -21,7 +21,7 @@ public class SkewTests
|
||||
// Variance (Sample) = 2.5
|
||||
// StdDev (Sample) = 1.58113883
|
||||
// Skewness (Sample) = 0 (Symmetric)
|
||||
|
||||
|
||||
var skew = new Skew(5, isPopulation: false);
|
||||
skew.Update(new TValue(DateTime.UtcNow, 1));
|
||||
skew.Update(new TValue(DateTime.UtcNow, 2));
|
||||
@@ -38,7 +38,7 @@ public class SkewTests
|
||||
// Test data: 1, 1, 1, 10
|
||||
// Mean = 3.25
|
||||
// Skewness should be positive (right tail)
|
||||
|
||||
|
||||
var skew = new Skew(4, isPopulation: false);
|
||||
skew.Update(new TValue(DateTime.UtcNow, 1));
|
||||
skew.Update(new TValue(DateTime.UtcNow, 1));
|
||||
@@ -54,7 +54,7 @@ public class SkewTests
|
||||
// Test data: 10, 10, 10, 1
|
||||
// Mean = 7.75
|
||||
// Skewness should be negative (left tail)
|
||||
|
||||
|
||||
var skew = new Skew(4, isPopulation: false);
|
||||
skew.Update(new TValue(DateTime.UtcNow, 10));
|
||||
skew.Update(new TValue(DateTime.UtcNow, 10));
|
||||
@@ -68,16 +68,16 @@ public class SkewTests
|
||||
public void Update_HandlesUpdates_IsNewFalse()
|
||||
{
|
||||
var skew = new Skew(5);
|
||||
|
||||
|
||||
// 1, 2, 3, 4
|
||||
skew.Update(new TValue(DateTime.UtcNow, 1));
|
||||
skew.Update(new TValue(DateTime.UtcNow, 2));
|
||||
skew.Update(new TValue(DateTime.UtcNow, 3));
|
||||
skew.Update(new TValue(DateTime.UtcNow, 4));
|
||||
|
||||
|
||||
// Add 5
|
||||
skew.Update(new TValue(DateTime.UtcNow, 5), isNew: true);
|
||||
|
||||
|
||||
// Update 5 to 10
|
||||
var res2 = skew.Update(new TValue(DateTime.UtcNow, 10), isNew: false);
|
||||
|
||||
@@ -97,10 +97,10 @@ public class SkewTests
|
||||
{
|
||||
var skew = new Skew(5);
|
||||
for (int i = 0; i < 5; i++) skew.Update(new TValue(DateTime.UtcNow, i));
|
||||
|
||||
|
||||
skew.Reset();
|
||||
Assert.False(skew.IsHot);
|
||||
|
||||
|
||||
// Should behave like new
|
||||
skew.Update(new TValue(DateTime.UtcNow, 1));
|
||||
Assert.Equal(0, skew.Last.Value); // Not enough data
|
||||
@@ -111,7 +111,7 @@ public class SkewTests
|
||||
{
|
||||
var data = new double[] { 1, 2, 3, 4, 5, 10, 1, 2, 3 };
|
||||
int period = 5;
|
||||
|
||||
|
||||
// Streaming
|
||||
var skew = new Skew(period);
|
||||
var streamingResults = new System.Collections.Generic.List<double>();
|
||||
@@ -139,7 +139,7 @@ public class SkewTests
|
||||
// StdDev (Pop) = sqrt(2/3)
|
||||
// M3 (Pop) = ((1-2)^3 + (2-2)^3 + (3-2)^3) / 3 = 0
|
||||
// Skew (Pop) = 0
|
||||
|
||||
|
||||
var skew = new Skew(3, isPopulation: true);
|
||||
skew.Update(new TValue(DateTime.UtcNow, 1));
|
||||
skew.Update(new TValue(DateTime.UtcNow, 2));
|
||||
@@ -166,7 +166,7 @@ public class SkewTests
|
||||
skew.Update(new TValue(DateTime.UtcNow, 1));
|
||||
skew.Update(new TValue(DateTime.UtcNow, 2));
|
||||
skew.Update(new TValue(DateTime.UtcNow, double.NaN)); // Should be treated as 0 or handled gracefully
|
||||
|
||||
|
||||
var result = skew.Last.Value;
|
||||
Assert.True(double.IsNaN(result) || result == 0);
|
||||
}
|
||||
@@ -177,12 +177,12 @@ public class SkewTests
|
||||
// Run for > 1000 updates to trigger Resync
|
||||
var skew = new Skew(10);
|
||||
var gbm = new GBM(startPrice: 100, mu: 0.05, sigma: 0.2, seed: 123);
|
||||
|
||||
|
||||
for (int i = 0; i < 1100; i++)
|
||||
{
|
||||
skew.Update(new TValue(DateTime.UtcNow, gbm.Next().Close));
|
||||
}
|
||||
|
||||
|
||||
Assert.True(double.IsFinite(skew.Last.Value));
|
||||
}
|
||||
|
||||
@@ -195,10 +195,10 @@ public class SkewTests
|
||||
for (int i = 0; i < count; i++) data[i] = (double)i;
|
||||
|
||||
var series = new TSeries(new System.Collections.Generic.List<long>(new long[count]), new System.Collections.Generic.List<double>(data));
|
||||
|
||||
|
||||
// Batch calculation
|
||||
var batchResult = Skew.Calculate(series, 10);
|
||||
|
||||
|
||||
// Verify last value against streaming
|
||||
var skew = new Skew(10);
|
||||
double lastStreaming = 0;
|
||||
|
||||
@@ -22,7 +22,7 @@ public sealed class SkewValidationTests : IDisposable
|
||||
int period = 20;
|
||||
var skew = new Skew(period, isPopulation: false);
|
||||
var popSkew = new Skew(period, isPopulation: true);
|
||||
|
||||
|
||||
var quotes = _data.SkenderQuotes.ToList();
|
||||
double[] input = quotes.Select(q => (double)q.Close).ToArray();
|
||||
|
||||
@@ -37,7 +37,7 @@ public sealed class SkewValidationTests : IDisposable
|
||||
var window = input[(i - period + 1)..(i + 1)];
|
||||
double expected = Statistics.Skewness(window);
|
||||
double expectedPop = Statistics.PopulationSkewness(window);
|
||||
|
||||
|
||||
Assert.Equal(expected, val.Value, 1e-6);
|
||||
Assert.Equal(expectedPop, popVal.Value, 1e-6);
|
||||
}
|
||||
|
||||
+19
-19
@@ -80,7 +80,7 @@ public sealed class Skew : AbstractBase
|
||||
{
|
||||
double oldNewest = _buffer.Newest;
|
||||
_buffer.UpdateNewest(input.Value);
|
||||
|
||||
|
||||
double val = input.Value;
|
||||
_sum = _sum - oldNewest + val;
|
||||
_sumSq = _sumSq - (oldNewest * oldNewest) + (val * val);
|
||||
@@ -92,7 +92,7 @@ public sealed class Skew : AbstractBase
|
||||
{
|
||||
double n = _buffer.Count;
|
||||
double mean = _sum / n;
|
||||
|
||||
|
||||
// Calculate 2nd moment (Variance)
|
||||
// m2 = Sum((x-mean)^2) / n = (SumSq - Sum^2/n) / n
|
||||
double m2Numerator = _sumSq - (_sum * _sum) / n;
|
||||
@@ -106,7 +106,7 @@ public sealed class Skew : AbstractBase
|
||||
// = SumCu - 3*mean*SumSq + 3*mean^2*Sum - n*mean^3
|
||||
// Since Sum = n*mean:
|
||||
// = SumCu - 3*mean*SumSq + 2*n*mean^3
|
||||
|
||||
|
||||
double m3Numerator = _sumCu - 3 * mean * _sumSq + 2 * n * mean * mean * mean;
|
||||
double m3 = m3Numerator / n;
|
||||
|
||||
@@ -232,7 +232,7 @@ public sealed class Skew : AbstractBase
|
||||
double sum = 0;
|
||||
double sumSq = 0;
|
||||
double sumCu = 0;
|
||||
|
||||
|
||||
int i = 0;
|
||||
|
||||
// Warmup phase
|
||||
@@ -259,11 +259,11 @@ public sealed class Skew : AbstractBase
|
||||
|
||||
double oldVal = source[i - period];
|
||||
if (!double.IsFinite(oldVal)) oldVal = 0;
|
||||
|
||||
|
||||
sum = sum - oldVal + val;
|
||||
sumSq = sumSq - (oldVal * oldVal) + (val * val);
|
||||
sumCu = sumCu - (oldVal * oldVal * oldVal) + (val * val * val);
|
||||
|
||||
|
||||
output[i] = CalculateSkewFromSums(sum, sumSq, sumCu, period, isPopulation);
|
||||
|
||||
tickCount++;
|
||||
@@ -293,7 +293,7 @@ public sealed class Skew : AbstractBase
|
||||
private static double CalculateSkewFromSums(double sum, double sumSq, double sumCu, double n, bool isPopulation)
|
||||
{
|
||||
double mean = sum / n;
|
||||
|
||||
|
||||
double m2Numerator = sumSq - (sum * sum) / n;
|
||||
if (m2Numerator < Epsilon) return 0;
|
||||
double m2 = m2Numerator / n;
|
||||
@@ -326,7 +326,7 @@ public sealed class Skew : AbstractBase
|
||||
sum += val;
|
||||
sumSq += val * val;
|
||||
sumCu += val * val * val;
|
||||
|
||||
|
||||
double n = i + 1;
|
||||
Unsafe.Add(ref outRef, i) = (n >= 3) ? CalculateSkewFromSums(sum, sumSq, sumCu, n, isPopulation) : 0;
|
||||
}
|
||||
@@ -383,34 +383,34 @@ public sealed class Skew : AbstractBase
|
||||
var vShift1 = Avx2.Permute4x64(vDelta.AsUInt64(), 0b_10_01_00_00).AsDouble(); // skipcq: CS-R1131
|
||||
vShift1 = Avx.Blend(vZero, vShift1, 0b_1110);
|
||||
var vP1 = Avx.Add(vDelta, vShift1);
|
||||
|
||||
|
||||
// Shift 2: [0, 0, d0, d0+d1]
|
||||
var vShift2 = Avx2.Permute4x64(vP1.AsUInt64(), 0b_01_00_00_00).AsDouble(); // skipcq: CS-R1131
|
||||
vShift2 = Avx.Blend(vZero, vShift2, 0b_1100);
|
||||
var vP2 = Avx.Add(vP1, vShift2);
|
||||
|
||||
|
||||
var vSums = Avx.Add(Vector256.Create(sum), vP2);
|
||||
|
||||
// Prefix sum for SumSq
|
||||
var vShiftSq1 = Avx2.Permute4x64(vDeltaSq.AsUInt64(), 0b_10_01_00_00).AsDouble(); // skipcq: CS-R1131
|
||||
vShiftSq1 = Avx.Blend(vZero, vShiftSq1, 0b_1110);
|
||||
var vP1Sq = Avx.Add(vDeltaSq, vShiftSq1);
|
||||
|
||||
|
||||
var vShiftSq2 = Avx2.Permute4x64(vP1Sq.AsUInt64(), 0b_01_00_00_00).AsDouble(); // skipcq: CS-R1131
|
||||
vShiftSq2 = Avx.Blend(vZero, vShiftSq2, 0b_1100);
|
||||
var vP2Sq = Avx.Add(vP1Sq, vShiftSq2);
|
||||
|
||||
|
||||
var vSumSqs = Avx.Add(Vector256.Create(sumSq), vP2Sq);
|
||||
|
||||
// Prefix sum for SumCu
|
||||
var vShiftCu1 = Avx2.Permute4x64(vDeltaCu.AsUInt64(), 0b_10_01_00_00).AsDouble(); // skipcq: CS-R1131
|
||||
vShiftCu1 = Avx.Blend(vZero, vShiftCu1, 0b_1110);
|
||||
var vP1Cu = Avx.Add(vDeltaCu, vShiftCu1);
|
||||
|
||||
|
||||
var vShiftCu2 = Avx2.Permute4x64(vP1Cu.AsUInt64(), 0b_01_00_00_00).AsDouble(); // skipcq: CS-R1131
|
||||
vShiftCu2 = Avx.Blend(vZero, vShiftCu2, 0b_1100);
|
||||
var vP2Cu = Avx.Add(vP1Cu, vShiftCu2);
|
||||
|
||||
|
||||
var vSumCus = Avx.Add(Vector256.Create(sumCu), vP2Cu);
|
||||
|
||||
// Calculate Skewness
|
||||
@@ -440,13 +440,13 @@ public sealed class Skew : AbstractBase
|
||||
// g1 = m3 / (m2 * sqrt(m2))
|
||||
var vM2Sqrt = Avx.Sqrt(vM2);
|
||||
var vDenom = Avx.Multiply(vM2, vM2Sqrt);
|
||||
|
||||
|
||||
// Check for small m2
|
||||
var vMask = Avx.Compare(vM2, vEpsilon, FloatComparisonMode.OrderedGreaterThanNonSignaling);
|
||||
|
||||
|
||||
var vG1 = Avx.Divide(vM3, vDenom);
|
||||
var vSkew = Avx.Multiply(vG1, vCorrection);
|
||||
|
||||
|
||||
// Apply mask
|
||||
vSkew = Avx.BlendVariable(vZero, vSkew, vMask);
|
||||
|
||||
@@ -481,11 +481,11 @@ public sealed class Skew : AbstractBase
|
||||
{
|
||||
double val = Unsafe.Add(ref srcRef, i);
|
||||
double oldVal = Unsafe.Add(ref srcRef, i - period);
|
||||
|
||||
|
||||
sum = sum - oldVal + val;
|
||||
sumSq = sumSq - (oldVal * oldVal) + (val * val);
|
||||
sumCu = sumCu - (oldVal * oldVal * oldVal) + (val * val * val);
|
||||
|
||||
|
||||
Unsafe.Add(ref outRef, i) = CalculateSkewFromSums(sum, sumSq, sumCu, n, isPopulation);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user