mirror of
https://github.com/mihakralj/QuanTAlib.git
synced 2026-08-22 12:38:06 +00:00
normalization of methods
This commit is contained in:
@@ -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++)
|
||||
{
|
||||
|
||||
@@ -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
@@ -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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user