normalization of methods

This commit is contained in:
Miha Kralj
2026-02-10 21:33:16 -08:00
parent 915d7a007b
commit 6d6259a47d
527 changed files with 10525 additions and 2123 deletions
+6 -6
View File
@@ -244,7 +244,7 @@ public class IiiTests
}
// Batch
var batchResult = Iii.Calculate(bars);
var batchResult = Iii.Batch(bars);
Assert.Equal(bars.Count, batchResult.Count);
for (int i = 0; i < bars.Count; i++)
@@ -279,7 +279,7 @@ public class IiiTests
var volume = bars.Volume.Values.ToArray();
var spanValues = new double[bars.Count];
Iii.Calculate(high, low, close, volume, spanValues);
Iii.Batch(high, low, close, volume, spanValues);
for (int i = 0; i < bars.Count; i++)
{
@@ -296,7 +296,7 @@ public class IiiTests
var volume = new double[100];
var output = new double[100];
Assert.Throws<ArgumentException>(() => Iii.Calculate(high, low, close, volume, output));
Assert.Throws<ArgumentException>(() => Iii.Batch(high, low, close, volume, output));
}
[Fact]
@@ -308,7 +308,7 @@ public class IiiTests
var volume = new double[100];
var output = new double[100];
Assert.Throws<ArgumentException>(() => Iii.Calculate(high, low, close, volume, output, period: 0));
Assert.Throws<ArgumentException>(() => Iii.Batch(high, low, close, volume, output, period: 0));
}
[Fact]
@@ -330,7 +330,7 @@ public class IiiTests
}
// Should not throw
Iii.Calculate(high, low, close, volume, output);
Iii.Batch(high, low, close, volume, output);
Assert.True(double.IsFinite(output[size - 1]));
}
@@ -360,7 +360,7 @@ public class IiiTests
var volume = bars.Volume.Values.ToArray();
var spanValues = new double[bars.Count];
Iii.Calculate(high, low, close, volume, spanValues, period: 14, cumulative: true);
Iii.Batch(high, low, close, volume, spanValues, period: 14, cumulative: true);
for (int i = 0; i < bars.Count; i++)
{
+9 -9
View File
@@ -36,7 +36,7 @@ public class IiiValidationTests
}
// Batch mode
var batchResults = Iii.Calculate(bars, DefaultPeriod);
var batchResults = Iii.Batch(bars, DefaultPeriod);
// Compare results
Assert.Equal(bars.Count, batchResults.Count);
@@ -65,7 +65,7 @@ public class IiiValidationTests
var close = bars.Close.Values.ToArray();
var volume = bars.Volume.Values.ToArray();
var spanResults = new double[bars.Count];
Iii.Calculate(high, low, close, volume, spanResults, DefaultPeriod);
Iii.Batch(high, low, close, volume, spanResults, DefaultPeriod);
// Compare results
for (int i = 0; i < bars.Count; i++)
@@ -88,7 +88,7 @@ public class IiiValidationTests
}
// Batch mode
var batchResults = Iii.Calculate(bars, DefaultPeriod, cumulative: true);
var batchResults = Iii.Batch(bars, DefaultPeriod, cumulative: true);
// Compare results
Assert.Equal(bars.Count, batchResults.Count);
@@ -117,7 +117,7 @@ public class IiiValidationTests
var close = bars.Close.Values.ToArray();
var volume = bars.Volume.Values.ToArray();
var spanResults = new double[bars.Count];
Iii.Calculate(high, low, close, volume, spanResults, DefaultPeriod, cumulative: true);
Iii.Batch(high, low, close, volume, spanResults, DefaultPeriod, cumulative: true);
// Compare results
for (int i = 0; i < bars.Count; i++)
@@ -140,7 +140,7 @@ public class IiiValidationTests
}
// Batch mode
var batchResults = Iii.Calculate(bars, DefaultPeriod);
var batchResults = Iii.Batch(bars, DefaultPeriod);
// Span mode
var high = bars.High.Values.ToArray();
@@ -148,7 +148,7 @@ public class IiiValidationTests
var close = bars.Close.Values.ToArray();
var volume = bars.Volume.Values.ToArray();
var spanResults = new double[bars.Count];
Iii.Calculate(high, low, close, volume, spanResults, DefaultPeriod);
Iii.Batch(high, low, close, volume, spanResults, DefaultPeriod);
// All three should match
for (int i = 0; i < bars.Count; i++)
@@ -177,7 +177,7 @@ public class IiiValidationTests
}
// Batch mode
var batchResults = Iii.Calculate(bars, DefaultPeriod);
var batchResults = Iii.Batch(bars, DefaultPeriod);
// Span mode
var high = bars.High.Values.ToArray();
@@ -185,7 +185,7 @@ public class IiiValidationTests
var close = bars.Close.Values.ToArray();
var volume = bars.Volume.Values.ToArray();
var spanResults = new double[bars.Count];
Iii.Calculate(high, low, close, volume, spanResults, DefaultPeriod);
Iii.Batch(high, low, close, volume, spanResults, DefaultPeriod);
// Focus on last 100 values (well past warmup)
int startIdx = bars.Count - 100;
@@ -285,7 +285,7 @@ public class IiiValidationTests
}
// Batch
var batchResults = Iii.Calculate(bars, DefaultPeriod);
var batchResults = Iii.Batch(bars, DefaultPeriod);
// Should match for any seed
for (int i = bars.Count - 50; i < bars.Count; i++)
+10 -3
View File
@@ -211,7 +211,7 @@ public sealed class Iii : ITValuePublisher
/// <param name="period">The smoothing period</param>
/// <param name="cumulative">Whether to use cumulative mode</param>
/// <returns>A TSeries containing the III values</returns>
public static TSeries Calculate(TBarSeries bars, int period = 14, bool cumulative = false)
public static TSeries Batch(TBarSeries bars, int period = 14, bool cumulative = false)
{
if (bars.Count == 0)
{
@@ -221,7 +221,7 @@ public sealed class Iii : ITValuePublisher
var t = bars.Open.Times.ToArray();
var v = new double[bars.Count];
Calculate(bars.High.Values, bars.Low.Values, bars.Close.Values, bars.Volume.Values, v, period, cumulative);
Batch(bars.High.Values, bars.Low.Values, bars.Close.Values, bars.Volume.Values, v, period, cumulative);
return new TSeries(t, v);
}
@@ -238,7 +238,7 @@ public sealed class Iii : ITValuePublisher
/// <param name="cumulative">Whether to use cumulative mode</param>
/// <exception cref="ArgumentException">Thrown when spans have different lengths</exception>
[MethodImpl(MethodImplOptions.AggressiveInlining)]
public static void Calculate(ReadOnlySpan<double> high, ReadOnlySpan<double> low,
public static void Batch(ReadOnlySpan<double> high, ReadOnlySpan<double> low,
ReadOnlySpan<double> close, ReadOnlySpan<double> volume, Span<double> output,
int period = 14, bool cumulative = false)
{
@@ -337,4 +337,11 @@ public sealed class Iii : ITValuePublisher
}
}
}
public static (TSeries Results, Iii Indicator) Calculate(TBarSeries bars, int period = 14, bool cumulative = false)
{
var indicator = new Iii(period, cumulative);
TSeries results = indicator.Update(bars);
return (results, indicator);
}
}