diff --git a/.gitattributes b/.gitattributes
index 903f572e..404a0314 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -32,3 +32,10 @@ bindings/r/src/Makevars.in text eol=lf
bindings/r/src/Makevars.win text eol=lf
bindings/r/src/wickra.c text eol=lf
+# Golden fixtures are replayed byte-for-byte by every binding's parity test. Pin
+# them to LF so a Windows `core.autocrlf=true` checkout doesn't rewrite them as
+# CRLF — which silently broke the Node reader (`Number('inf\r')` is NaN, and a
+# blank "no-bar" row gained a stray `\r`), failing only on Windows runners. The
+# tolerant readers (Python `splitlines`/`float`) hid the same hazard.
+testdata/golden/** text eol=lf
+
diff --git a/bindings/csharp/Wickra.Tests/GoldenAllTests.g.cs b/bindings/csharp/Wickra.Tests/GoldenAllTests.g.cs
new file mode 100644
index 00000000..3443184d
--- /dev/null
+++ b/bindings/csharp/Wickra.Tests/GoldenAllTests.g.cs
@@ -0,0 +1,6369 @@
+//
+// Generated by gen_golden_test.py. DO NOT EDIT.
+//
+// Value-parity for every one of the 514 C# indicators: the shared golden input
+// is replayed through each one and checked bit-for-bit against the Rust
+// reference fixtures testdata/golden/g_.csv. Multi-output, profile
+// and bar shapes are flattened by reflection so one comparator covers all
+// archetypes. Regenerate with: python bindings/csharp/gen_golden_test.py
+//
+#nullable enable
+using System;
+using System.Collections.Generic;
+using System.Globalization;
+using System.IO;
+using System.Linq;
+using System.Reflection;
+using Xunit;
+
+namespace Wickra.Tests;
+
+public class GoldenAllTests
+{
+ private const double Tol = 1e-6;
+
+ private static readonly double[][] Rows = LoadInput();
+
+ private static string GoldenDir([System.Runtime.CompilerServices.CallerFilePath] string file = "") =>
+ Path.GetFullPath(Path.Combine(Path.GetDirectoryName(file)!, "..", "..", "..", "testdata", "golden"));
+
+ private static double Cell(string s) =>
+ s == "nan" ? double.NaN
+ : s == "inf" ? double.PositiveInfinity
+ : s == "-inf" ? double.NegativeInfinity
+ : double.Parse(s, CultureInfo.InvariantCulture);
+
+ private static double[][] LoadInput()
+ {
+ var lines = File.ReadAllLines(Path.Combine(GoldenDir(), "input.csv"));
+ return lines.Skip(1).Where(l => l.Length > 0)
+ .Select(l => l.Split(',').Select(x => double.Parse(x, CultureInfo.InvariantCulture)).ToArray())
+ .ToArray();
+ }
+
+ // Keep blank lines (a candle on which no bar closed) so rows stay aligned.
+ private static double[]?[] ReadFixture(string name)
+ {
+ var lines = File.ReadAllLines(Path.Combine(GoldenDir(), "g_" + name + ".csv"));
+ return lines.Skip(1).Select(l => l.Length == 0 ? Array.Empty() : l.Split(',').Select(Cell).ToArray()).ToArray();
+ }
+
+ private static double[] NanRow(int n)
+ {
+ var r = new double[n];
+ for (var i = 0; i < n; i++) r[i] = double.NaN;
+ return r;
+ }
+
+ private static double[] FlattenStruct(object o)
+ {
+ var props = o.GetType()
+ .GetProperties(BindingFlags.Public | BindingFlags.Instance)
+ .OrderBy(p => p.MetadataToken);
+ var list = new List();
+ foreach (var p in props)
+ {
+ var v = p.GetValue(o);
+ switch (v)
+ {
+ case double d: list.Add(d); break;
+ case float f: list.Add(f); break;
+ case long l: list.Add(l); break;
+ case int n: list.Add(n); break;
+ case double[] arr: list.AddRange(arr); break;
+ }
+ }
+ return list.ToArray();
+ }
+
+ private static double[] FlattenNullable(T? value, int width) where T : struct =>
+ value.HasValue ? FlattenStruct(value.Value) : NanRow(width);
+
+ private static double[] FlattenBars(T[] bars)
+ {
+ var list = new List();
+ foreach (var bar in bars) list.AddRange(FlattenStruct(bar!));
+ return list.ToArray();
+ }
+
+ private static double[] DerivFields(double[] r)
+ {
+ double o = r[0], h = r[1], l = r[2], c = r[3], v = r[4];
+ return new[]
+ {
+ (c - o) / c * 0.01, c, c - 0.5, c + 1.0, v * 10.0, v * 0.6, v * 0.4,
+ v * 0.55, v * 0.45, h - c, c - l,
+ };
+ }
+
+ private static (double[], double[], bool[], bool[], bool[], bool[]) CrossLists(double[] r)
+ {
+ double o = r[0], c = r[3], v = r[4];
+ var change = new double[5];
+ var volume = new double[5];
+ var nh = new bool[5];
+ var nl = new bool[5];
+ var am = new bool[5];
+ var ob = new bool[5];
+ for (var j = 0; j < 5; j++)
+ {
+ change[j] = (c - o) + j;
+ volume[j] = v + j * 10.0;
+ nh[j] = j % 2 == 0;
+ nl[j] = j % 3 == 0;
+ am[j] = j % 2 == 0;
+ ob[j] = j % 3 == 0;
+ }
+ return (change, volume, nh, nl, am, ob);
+ }
+
+ private static (double[], double[], double[], double[]) ObLists(double[] r)
+ {
+ double c = r[3], v = r[4];
+ var bp = new double[5];
+ var bs = new double[5];
+ var ap = new double[5];
+ var asz = new double[5];
+ for (var k = 0; k < 5; k++)
+ {
+ var kf = k + 1;
+ bp[k] = c - 0.1 * kf;
+ bs[k] = v / kf;
+ ap[k] = c + 0.1 * kf;
+ asz[k] = v * 0.9 / kf;
+ }
+ return (bp, bs, ap, asz);
+ }
+
+ private static void Compare(string name, List got)
+ {
+ var exp = ReadFixture(name);
+ Assert.True(exp.Length == got.Count, $"{name}: {exp.Length} fixture rows vs {got.Count} computed");
+ for (var i = 0; i < exp.Length; i++)
+ {
+ var want = exp[i]!;
+ var g = got[i];
+ Assert.True(want.Length == g.Length, $"{name} row {i}: arity {g.Length} vs {want.Length}");
+ for (var k = 0; k < want.Length; k++)
+ {
+ var w = want[k];
+ if (double.IsNaN(w)) { Assert.True(double.IsNaN(g[k]), $"{name} row {i} col {k}: want NaN got {g[k]}"); continue; }
+ if (double.IsInfinity(w)) { Assert.True(double.IsInfinity(g[k]) && Math.Sign(g[k]) == Math.Sign(w), $"{name} row {i} col {k}: want {w} got {g[k]}"); continue; }
+ var tol = Tol * Math.Max(1.0, Math.Abs(w));
+ Assert.True(Math.Abs(g[k] - w) <= tol, $"{name} row {i} col {k}: got {g[k]} want {w}");
+ }
+ }
+ }
+
+ [Fact]
+ public void Golden_AbandonedBaby()
+ {
+ using var ind = new Wickra.AbandonedBaby();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("AbandonedBaby", got);
+ }
+ [Fact]
+ public void Golden_Abcd()
+ {
+ using var ind = new Wickra.Abcd();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Abcd", got);
+ }
+ [Fact]
+ public void Golden_AbsoluteBreadthIndex()
+ {
+ using var ind = new Wickra.AbsoluteBreadthIndex();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var (ch, vo, nh, nl, am, ob) = CrossLists(r);
+ got.Add(new[] { ind.Update(ch, vo, nh, nl, am, ob, i) });
+ }
+ Compare("AbsoluteBreadthIndex", got);
+ }
+ [Fact]
+ public void Golden_AccelerationBands()
+ {
+ using var ind = new Wickra.AccelerationBands(14, 2.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 3));
+ }
+ Compare("AccelerationBands", got);
+ }
+ [Fact]
+ public void Golden_AcceleratorOscillator()
+ {
+ using var ind = new Wickra.AcceleratorOscillator(3, 7, 14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("AcceleratorOscillator", got);
+ }
+ [Fact]
+ public void Golden_AdOscillator()
+ {
+ using var ind = new Wickra.AdOscillator();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("AdOscillator", got);
+ }
+ [Fact]
+ public void Golden_AdVolumeLine()
+ {
+ using var ind = new Wickra.AdVolumeLine();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var (ch, vo, nh, nl, am, ob) = CrossLists(r);
+ got.Add(new[] { ind.Update(ch, vo, nh, nl, am, ob, i) });
+ }
+ Compare("AdVolumeLine", got);
+ }
+ [Fact]
+ public void Golden_AdaptiveCci()
+ {
+ using var ind = new Wickra.AdaptiveCci(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("AdaptiveCci", got);
+ }
+ [Fact]
+ public void Golden_AdaptiveCycle()
+ {
+ using var ind = new Wickra.AdaptiveCycle();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("AdaptiveCycle", got);
+ }
+ [Fact]
+ public void Golden_AdaptiveLaguerreFilter()
+ {
+ using var ind = new Wickra.AdaptiveLaguerreFilter(20);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("AdaptiveLaguerreFilter", got);
+ }
+ [Fact]
+ public void Golden_AdaptiveRsi()
+ {
+ using var ind = new Wickra.AdaptiveRsi(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("AdaptiveRsi", got);
+ }
+ [Fact]
+ public void Golden_Adl()
+ {
+ using var ind = new Wickra.Adl();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Adl", got);
+ }
+ [Fact]
+ public void Golden_AdvanceBlock()
+ {
+ using var ind = new Wickra.AdvanceBlock();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("AdvanceBlock", got);
+ }
+ [Fact]
+ public void Golden_AdvanceDecline()
+ {
+ using var ind = new Wickra.AdvanceDecline();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var (ch, vo, nh, nl, am, ob) = CrossLists(r);
+ got.Add(new[] { ind.Update(ch, vo, nh, nl, am, ob, i) });
+ }
+ Compare("AdvanceDecline", got);
+ }
+ [Fact]
+ public void Golden_AdvanceDeclineRatio()
+ {
+ using var ind = new Wickra.AdvanceDeclineRatio();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var (ch, vo, nh, nl, am, ob) = CrossLists(r);
+ got.Add(new[] { ind.Update(ch, vo, nh, nl, am, ob, i) });
+ }
+ Compare("AdvanceDeclineRatio", got);
+ }
+ [Fact]
+ public void Golden_Adx()
+ {
+ using var ind = new Wickra.Adx(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 3));
+ }
+ Compare("Adx", got);
+ }
+ [Fact]
+ public void Golden_Adxr()
+ {
+ using var ind = new Wickra.Adxr(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Adxr", got);
+ }
+ [Fact]
+ public void Golden_Alligator()
+ {
+ using var ind = new Wickra.Alligator(3, 7, 14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 3));
+ }
+ Compare("Alligator", got);
+ }
+ [Fact]
+ public void Golden_Alma()
+ {
+ using var ind = new Wickra.Alma(9, 0.85, 6.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("Alma", got);
+ }
+ [Fact]
+ public void Golden_Alpha()
+ {
+ using var ind = new Wickra.Alpha(14, 2.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3], r[0]) });
+ }
+ Compare("Alpha", got);
+ }
+ [Fact]
+ public void Golden_AmihudIlliquidity()
+ {
+ using var ind = new Wickra.AmihudIlliquidity(20);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3], r[4], r[3] >= r[0], i) });
+ }
+ Compare("AmihudIlliquidity", got);
+ }
+ [Fact]
+ public void Golden_AnchoredRsi()
+ {
+ using var ind = new Wickra.AnchoredRsi();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("AnchoredRsi", got);
+ }
+ [Fact]
+ public void Golden_AnchoredVwap()
+ {
+ using var ind = new Wickra.AnchoredVwap();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("AnchoredVwap", got);
+ }
+ [Fact]
+ public void Golden_AndrewsPitchfork()
+ {
+ using var ind = new Wickra.AndrewsPitchfork(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 3));
+ }
+ Compare("AndrewsPitchfork", got);
+ }
+ [Fact]
+ public void Golden_Apo()
+ {
+ using var ind = new Wickra.Apo(3, 7);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("Apo", got);
+ }
+ [Fact]
+ public void Golden_Aroon()
+ {
+ using var ind = new Wickra.Aroon(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 2));
+ }
+ Compare("Aroon", got);
+ }
+ [Fact]
+ public void Golden_AroonOscillator()
+ {
+ using var ind = new Wickra.AroonOscillator(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("AroonOscillator", got);
+ }
+ [Fact]
+ public void Golden_Atr()
+ {
+ using var ind = new Wickra.Atr(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Atr", got);
+ }
+ [Fact]
+ public void Golden_AtrBands()
+ {
+ using var ind = new Wickra.AtrBands(14, 2.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 3));
+ }
+ Compare("AtrBands", got);
+ }
+ [Fact]
+ public void Golden_AtrRatchet()
+ {
+ using var ind = new Wickra.AtrRatchet(14, 2.0, 0.5);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 2));
+ }
+ Compare("AtrRatchet", got);
+ }
+ [Fact]
+ public void Golden_AtrTrailingStop()
+ {
+ using var ind = new Wickra.AtrTrailingStop(14, 2.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("AtrTrailingStop", got);
+ }
+ [Fact]
+ public void Golden_AutoFib()
+ {
+ using var ind = new Wickra.AutoFib();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 7));
+ }
+ Compare("AutoFib", got);
+ }
+ [Fact]
+ public void Golden_Autocorrelation()
+ {
+ using var ind = new Wickra.Autocorrelation(10, 1);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("Autocorrelation", got);
+ }
+ [Fact]
+ public void Golden_AutocorrelationPeriodogram()
+ {
+ using var ind = new Wickra.AutocorrelationPeriodogram(10, 48);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("AutocorrelationPeriodogram", got);
+ }
+ [Fact]
+ public void Golden_AverageDailyRange()
+ {
+ using var ind = new Wickra.AverageDailyRange(14, 0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("AverageDailyRange", got);
+ }
+ [Fact]
+ public void Golden_AverageDrawdown()
+ {
+ using var ind = new Wickra.AverageDrawdown(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("AverageDrawdown", got);
+ }
+ [Fact]
+ public void Golden_AvgPrice()
+ {
+ using var ind = new Wickra.AvgPrice();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("AvgPrice", got);
+ }
+ [Fact]
+ public void Golden_AwesomeOscillator()
+ {
+ using var ind = new Wickra.AwesomeOscillator(3, 7);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("AwesomeOscillator", got);
+ }
+ [Fact]
+ public void Golden_AwesomeOscillatorHistogram()
+ {
+ using var ind = new Wickra.AwesomeOscillatorHistogram(3, 7, 14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("AwesomeOscillatorHistogram", got);
+ }
+ [Fact]
+ public void Golden_BalanceOfPower()
+ {
+ using var ind = new Wickra.BalanceOfPower();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("BalanceOfPower", got);
+ }
+ [Fact]
+ public void Golden_BandpassFilter()
+ {
+ using var ind = new Wickra.BandpassFilter(20, 0.3);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("BandpassFilter", got);
+ }
+ [Fact]
+ public void Golden_Bat()
+ {
+ using var ind = new Wickra.Bat();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Bat", got);
+ }
+ [Fact]
+ public void Golden_BeltHold()
+ {
+ using var ind = new Wickra.BeltHold();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("BeltHold", got);
+ }
+ [Fact]
+ public void Golden_Beta()
+ {
+ using var ind = new Wickra.Beta(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3], r[0]) });
+ }
+ Compare("Beta", got);
+ }
+ [Fact]
+ public void Golden_BetaNeutralSpread()
+ {
+ using var ind = new Wickra.BetaNeutralSpread(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3], r[0]) });
+ }
+ Compare("BetaNeutralSpread", got);
+ }
+ [Fact]
+ public void Golden_BetterVolume()
+ {
+ using var ind = new Wickra.BetterVolume(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("BetterVolume", got);
+ }
+ [Fact]
+ public void Golden_BipowerVariation()
+ {
+ using var ind = new Wickra.BipowerVariation(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("BipowerVariation", got);
+ }
+ [Fact]
+ public void Golden_BodySizePct()
+ {
+ using var ind = new Wickra.BodySizePct();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("BodySizePct", got);
+ }
+ [Fact]
+ public void Golden_BollingerBands()
+ {
+ using var ind = new Wickra.BollingerBands(20, 2.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[3]), 4));
+ }
+ Compare("BollingerBands", got);
+ }
+ [Fact]
+ public void Golden_BollingerBandwidth()
+ {
+ using var ind = new Wickra.BollingerBandwidth(14, 2.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("BollingerBandwidth", got);
+ }
+ [Fact]
+ public void Golden_BomarBands()
+ {
+ using var ind = new Wickra.BomarBands(4, 0.85);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[3]), 3));
+ }
+ Compare("BomarBands", got);
+ }
+ [Fact]
+ public void Golden_BreadthThrust()
+ {
+ using var ind = new Wickra.BreadthThrust(10);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var (ch, vo, nh, nl, am, ob) = CrossLists(r);
+ got.Add(new[] { ind.Update(ch, vo, nh, nl, am, ob, i) });
+ }
+ Compare("BreadthThrust", got);
+ }
+ [Fact]
+ public void Golden_Breakaway()
+ {
+ using var ind = new Wickra.Breakaway();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Breakaway", got);
+ }
+ [Fact]
+ public void Golden_BullishPercentIndex()
+ {
+ using var ind = new Wickra.BullishPercentIndex();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var (ch, vo, nh, nl, am, ob) = CrossLists(r);
+ got.Add(new[] { ind.Update(ch, vo, nh, nl, am, ob, i) });
+ }
+ Compare("BullishPercentIndex", got);
+ }
+ [Fact]
+ public void Golden_BurkeRatio()
+ {
+ using var ind = new Wickra.BurkeRatio(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("BurkeRatio", got);
+ }
+ [Fact]
+ public void Golden_Butterfly()
+ {
+ using var ind = new Wickra.Butterfly();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Butterfly", got);
+ }
+ [Fact]
+ public void Golden_CalendarSpread()
+ {
+ using var ind = new Wickra.CalendarSpread();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var d = DerivFields(r);
+ got.Add(new[] { ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], i) });
+ }
+ Compare("CalendarSpread", got);
+ }
+ [Fact]
+ public void Golden_CalmarRatio()
+ {
+ using var ind = new Wickra.CalmarRatio(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("CalmarRatio", got);
+ }
+ [Fact]
+ public void Golden_Camarilla()
+ {
+ using var ind = new Wickra.Camarilla();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 9));
+ }
+ Compare("Camarilla", got);
+ }
+ [Fact]
+ public void Golden_CandleVolume()
+ {
+ using var ind = new Wickra.CandleVolume(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 2));
+ }
+ Compare("CandleVolume", got);
+ }
+ [Fact]
+ public void Golden_Cci()
+ {
+ using var ind = new Wickra.Cci(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Cci", got);
+ }
+ [Fact]
+ public void Golden_CenterOfGravity()
+ {
+ using var ind = new Wickra.CenterOfGravity(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("CenterOfGravity", got);
+ }
+ [Fact]
+ public void Golden_CentralPivotRange()
+ {
+ using var ind = new Wickra.CentralPivotRange();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 3));
+ }
+ Compare("CentralPivotRange", got);
+ }
+ [Fact]
+ public void Golden_Cfo()
+ {
+ using var ind = new Wickra.Cfo(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("Cfo", got);
+ }
+ [Fact]
+ public void Golden_ChaikinMoneyFlow()
+ {
+ using var ind = new Wickra.ChaikinMoneyFlow(20);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("ChaikinMoneyFlow", got);
+ }
+ [Fact]
+ public void Golden_ChaikinOscillator()
+ {
+ using var ind = new Wickra.ChaikinOscillator(3, 7);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("ChaikinOscillator", got);
+ }
+ [Fact]
+ public void Golden_ChaikinVolatility()
+ {
+ using var ind = new Wickra.ChaikinVolatility(3, 7);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("ChaikinVolatility", got);
+ }
+ [Fact]
+ public void Golden_ChandeKrollStop()
+ {
+ using var ind = new Wickra.ChandeKrollStop(3, 2.0, 7);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 2));
+ }
+ Compare("ChandeKrollStop", got);
+ }
+ [Fact]
+ public void Golden_ChandelierExit()
+ {
+ using var ind = new Wickra.ChandelierExit(14, 2.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 2));
+ }
+ Compare("ChandelierExit", got);
+ }
+ [Fact]
+ public void Golden_ChoppinessIndex()
+ {
+ using var ind = new Wickra.ChoppinessIndex(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("ChoppinessIndex", got);
+ }
+ [Fact]
+ public void Golden_ClassicPivots()
+ {
+ using var ind = new Wickra.ClassicPivots();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 7));
+ }
+ Compare("ClassicPivots", got);
+ }
+ [Fact]
+ public void Golden_CloseVsOpen()
+ {
+ using var ind = new Wickra.CloseVsOpen();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("CloseVsOpen", got);
+ }
+ [Fact]
+ public void Golden_ClosingMarubozu()
+ {
+ using var ind = new Wickra.ClosingMarubozu();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("ClosingMarubozu", got);
+ }
+ [Fact]
+ public void Golden_Cmo()
+ {
+ using var ind = new Wickra.Cmo(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("Cmo", got);
+ }
+ [Fact]
+ public void Golden_CoefficientOfVariation()
+ {
+ using var ind = new Wickra.CoefficientOfVariation(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("CoefficientOfVariation", got);
+ }
+ [Fact]
+ public void Golden_Cointegration()
+ {
+ using var ind = new Wickra.Cointegration(40, 1);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[3], r[0]), 3));
+ }
+ Compare("Cointegration", got);
+ }
+ [Fact]
+ public void Golden_CommonSenseRatio()
+ {
+ using var ind = new Wickra.CommonSenseRatio(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("CommonSenseRatio", got);
+ }
+ [Fact]
+ public void Golden_CompositeProfile()
+ {
+ using var ind = new Wickra.CompositeProfile(20, 24, 0.7);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 3));
+ }
+ Compare("CompositeProfile", got);
+ }
+ [Fact]
+ public void Golden_ConcealingBabySwallow()
+ {
+ using var ind = new Wickra.ConcealingBabySwallow();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("ConcealingBabySwallow", got);
+ }
+ [Fact]
+ public void Golden_ConditionalValueAtRisk()
+ {
+ using var ind = new Wickra.ConditionalValueAtRisk(20, 0.95);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("ConditionalValueAtRisk", got);
+ }
+ [Fact]
+ public void Golden_ConnorsRsi()
+ {
+ using var ind = new Wickra.ConnorsRsi(3, 7, 14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("ConnorsRsi", got);
+ }
+ [Fact]
+ public void Golden_Coppock()
+ {
+ using var ind = new Wickra.Coppock(3, 7, 14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("Coppock", got);
+ }
+ [Fact]
+ public void Golden_CorrelationTrendIndicator()
+ {
+ using var ind = new Wickra.CorrelationTrendIndicator(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("CorrelationTrendIndicator", got);
+ }
+ [Fact]
+ public void Golden_Counterattack()
+ {
+ using var ind = new Wickra.Counterattack();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Counterattack", got);
+ }
+ [Fact]
+ public void Golden_Crab()
+ {
+ using var ind = new Wickra.Crab();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Crab", got);
+ }
+ [Fact]
+ public void Golden_CumulativeVolumeDelta()
+ {
+ using var ind = new Wickra.CumulativeVolumeDelta();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3], r[4], r[3] >= r[0], i) });
+ }
+ Compare("CumulativeVolumeDelta", got);
+ }
+ [Fact]
+ public void Golden_CumulativeVolumeIndex()
+ {
+ using var ind = new Wickra.CumulativeVolumeIndex();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var (ch, vo, nh, nl, am, ob) = CrossLists(r);
+ got.Add(new[] { ind.Update(ch, vo, nh, nl, am, ob, i) });
+ }
+ Compare("CumulativeVolumeIndex", got);
+ }
+ [Fact]
+ public void Golden_CupAndHandle()
+ {
+ using var ind = new Wickra.CupAndHandle();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("CupAndHandle", got);
+ }
+ [Fact]
+ public void Golden_CyberneticCycle()
+ {
+ using var ind = new Wickra.CyberneticCycle(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("CyberneticCycle", got);
+ }
+ [Fact]
+ public void Golden_Cypher()
+ {
+ using var ind = new Wickra.Cypher();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Cypher", got);
+ }
+ [Fact]
+ public void Golden_DayOfWeekProfile()
+ {
+ using var ind = new Wickra.DayOfWeekProfile(0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var bins = ind.Update(r[0], r[1], r[2], r[3], r[4], i);
+ got.Add(bins ?? NanRow(7));
+ }
+ Compare("DayOfWeekProfile", got);
+ }
+ [Fact]
+ public void Golden_Decycler()
+ {
+ using var ind = new Wickra.Decycler(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("Decycler", got);
+ }
+ [Fact]
+ public void Golden_DecyclerOscillator()
+ {
+ using var ind = new Wickra.DecyclerOscillator(3, 7);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("DecyclerOscillator", got);
+ }
+ [Fact]
+ public void Golden_Dema()
+ {
+ using var ind = new Wickra.Dema(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("Dema", got);
+ }
+ [Fact]
+ public void Golden_DemandIndex()
+ {
+ using var ind = new Wickra.DemandIndex(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("DemandIndex", got);
+ }
+ [Fact]
+ public void Golden_DemarkPivots()
+ {
+ using var ind = new Wickra.DemarkPivots();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 3));
+ }
+ Compare("DemarkPivots", got);
+ }
+ [Fact]
+ public void Golden_DepthSlope()
+ {
+ using var ind = new Wickra.DepthSlope();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var (bp, bs, ap, asz) = ObLists(r);
+ got.Add(new[] { ind.Update(bp, bs, ap, asz) });
+ }
+ Compare("DepthSlope", got);
+ }
+ [Fact]
+ public void Golden_DerivativeOscillator()
+ {
+ using var ind = new Wickra.DerivativeOscillator(3, 7, 14, 28);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("DerivativeOscillator", got);
+ }
+ [Fact]
+ public void Golden_DetrendedStdDev()
+ {
+ using var ind = new Wickra.DetrendedStdDev(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("DetrendedStdDev", got);
+ }
+ [Fact]
+ public void Golden_DisparityIndex()
+ {
+ using var ind = new Wickra.DisparityIndex(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("DisparityIndex", got);
+ }
+ [Fact]
+ public void Golden_DistanceSsd()
+ {
+ using var ind = new Wickra.DistanceSsd(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3], r[0]) });
+ }
+ Compare("DistanceSsd", got);
+ }
+ [Fact]
+ public void Golden_Doji()
+ {
+ using var ind = new Wickra.Doji();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Doji", got);
+ }
+ [Fact]
+ public void Golden_DojiStar()
+ {
+ using var ind = new Wickra.DojiStar();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("DojiStar", got);
+ }
+ [Fact]
+ public void Golden_DollarBars()
+ {
+ using var ind = new Wickra.DollarBars(50000.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenBars(ind.Update(r[0], r[1], r[2], r[3], r[4], 0)));
+ }
+ Compare("DollarBars", got);
+ }
+ [Fact]
+ public void Golden_Donchian()
+ {
+ using var ind = new Wickra.Donchian(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 3));
+ }
+ Compare("Donchian", got);
+ }
+ [Fact]
+ public void Golden_DonchianStop()
+ {
+ using var ind = new Wickra.DonchianStop(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 2));
+ }
+ Compare("DonchianStop", got);
+ }
+ [Fact]
+ public void Golden_DoubleBollinger()
+ {
+ using var ind = new Wickra.DoubleBollinger(20, 1.0, 2.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[3]), 5));
+ }
+ Compare("DoubleBollinger", got);
+ }
+ [Fact]
+ public void Golden_DoubleTopBottom()
+ {
+ using var ind = new Wickra.DoubleTopBottom();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("DoubleTopBottom", got);
+ }
+ [Fact]
+ public void Golden_DownsideGapThreeMethods()
+ {
+ using var ind = new Wickra.DownsideGapThreeMethods();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("DownsideGapThreeMethods", got);
+ }
+ [Fact]
+ public void Golden_Dpo()
+ {
+ using var ind = new Wickra.Dpo(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("Dpo", got);
+ }
+ [Fact]
+ public void Golden_DragonflyDoji()
+ {
+ using var ind = new Wickra.DragonflyDoji();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("DragonflyDoji", got);
+ }
+ [Fact]
+ public void Golden_DrawdownDuration()
+ {
+ using var ind = new Wickra.DrawdownDuration();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("DrawdownDuration", got);
+ }
+ [Fact]
+ public void Golden_DumplingTop()
+ {
+ using var ind = new Wickra.DumplingTop(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("DumplingTop", got);
+ }
+ [Fact]
+ public void Golden_Dx()
+ {
+ using var ind = new Wickra.Dx(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Dx", got);
+ }
+ [Fact]
+ public void Golden_DynamicMomentumIndex()
+ {
+ using var ind = new Wickra.DynamicMomentumIndex(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("DynamicMomentumIndex", got);
+ }
+ [Fact]
+ public void Golden_EaseOfMovement()
+ {
+ using var ind = new Wickra.EaseOfMovement(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("EaseOfMovement", got);
+ }
+ [Fact]
+ public void Golden_EffectiveSpread()
+ {
+ using var ind = new Wickra.EffectiveSpread();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3], r[4], r[3] >= r[0], i, (r[1] + r[2]) / 2) });
+ }
+ Compare("EffectiveSpread", got);
+ }
+ [Fact]
+ public void Golden_EhlersStochastic()
+ {
+ using var ind = new Wickra.EhlersStochastic(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("EhlersStochastic", got);
+ }
+ [Fact]
+ public void Golden_Ehma()
+ {
+ using var ind = new Wickra.Ehma(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("Ehma", got);
+ }
+ [Fact]
+ public void Golden_ElderImpulse()
+ {
+ using var ind = new Wickra.ElderImpulse(3, 7, 14, 28);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("ElderImpulse", got);
+ }
+ [Fact]
+ public void Golden_ElderRay()
+ {
+ using var ind = new Wickra.ElderRay(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 2));
+ }
+ Compare("ElderRay", got);
+ }
+ [Fact]
+ public void Golden_ElderSafeZone()
+ {
+ using var ind = new Wickra.ElderSafeZone(10, 2.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 2));
+ }
+ Compare("ElderSafeZone", got);
+ }
+ [Fact]
+ public void Golden_Ema()
+ {
+ using var ind = new Wickra.Ema(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("Ema", got);
+ }
+ [Fact]
+ public void Golden_EmpiricalModeDecomposition()
+ {
+ using var ind = new Wickra.EmpiricalModeDecomposition(20, 0.1);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("EmpiricalModeDecomposition", got);
+ }
+ [Fact]
+ public void Golden_Engulfing()
+ {
+ using var ind = new Wickra.Engulfing();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Engulfing", got);
+ }
+ [Fact]
+ public void Golden_Equivolume()
+ {
+ using var ind = new Wickra.Equivolume(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 2));
+ }
+ Compare("Equivolume", got);
+ }
+ [Fact]
+ public void Golden_EstimatedLeverageRatio()
+ {
+ using var ind = new Wickra.EstimatedLeverageRatio();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var d = DerivFields(r);
+ got.Add(new[] { ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], i) });
+ }
+ Compare("EstimatedLeverageRatio", got);
+ }
+ [Fact]
+ public void Golden_EvenBetterSinewave()
+ {
+ using var ind = new Wickra.EvenBetterSinewave(40, 10);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("EvenBetterSinewave", got);
+ }
+ [Fact]
+ public void Golden_EveningDojiStar()
+ {
+ using var ind = new Wickra.EveningDojiStar();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("EveningDojiStar", got);
+ }
+ [Fact]
+ public void Golden_Evwma()
+ {
+ using var ind = new Wickra.Evwma(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Evwma", got);
+ }
+ [Fact]
+ public void Golden_EwmaVolatility()
+ {
+ using var ind = new Wickra.EwmaVolatility(0.94);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("EwmaVolatility", got);
+ }
+ [Fact]
+ public void Golden_Expectancy()
+ {
+ using var ind = new Wickra.Expectancy(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("Expectancy", got);
+ }
+ [Fact]
+ public void Golden_FallingThreeMethods()
+ {
+ using var ind = new Wickra.FallingThreeMethods();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("FallingThreeMethods", got);
+ }
+ [Fact]
+ public void Golden_Fama()
+ {
+ using var ind = new Wickra.Fama(0.5, 0.05);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("Fama", got);
+ }
+ [Fact]
+ public void Golden_FibArcs()
+ {
+ using var ind = new Wickra.FibArcs();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 3));
+ }
+ Compare("FibArcs", got);
+ }
+ [Fact]
+ public void Golden_FibChannel()
+ {
+ using var ind = new Wickra.FibChannel();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 4));
+ }
+ Compare("FibChannel", got);
+ }
+ [Fact]
+ public void Golden_FibConfluence()
+ {
+ using var ind = new Wickra.FibConfluence();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 2));
+ }
+ Compare("FibConfluence", got);
+ }
+ [Fact]
+ public void Golden_FibExtension()
+ {
+ using var ind = new Wickra.FibExtension();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 5));
+ }
+ Compare("FibExtension", got);
+ }
+ [Fact]
+ public void Golden_FibFan()
+ {
+ using var ind = new Wickra.FibFan();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 3));
+ }
+ Compare("FibFan", got);
+ }
+ [Fact]
+ public void Golden_FibProjection()
+ {
+ using var ind = new Wickra.FibProjection();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 4));
+ }
+ Compare("FibProjection", got);
+ }
+ [Fact]
+ public void Golden_FibRetracement()
+ {
+ using var ind = new Wickra.FibRetracement();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 7));
+ }
+ Compare("FibRetracement", got);
+ }
+ [Fact]
+ public void Golden_FibTimeZones()
+ {
+ using var ind = new Wickra.FibTimeZones();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 2));
+ }
+ Compare("FibTimeZones", got);
+ }
+ [Fact]
+ public void Golden_FibonacciPivots()
+ {
+ using var ind = new Wickra.FibonacciPivots();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 7));
+ }
+ Compare("FibonacciPivots", got);
+ }
+ [Fact]
+ public void Golden_FisherRsi()
+ {
+ using var ind = new Wickra.FisherRsi(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("FisherRsi", got);
+ }
+ [Fact]
+ public void Golden_FisherTransform()
+ {
+ using var ind = new Wickra.FisherTransform(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("FisherTransform", got);
+ }
+ [Fact]
+ public void Golden_FlagPennant()
+ {
+ using var ind = new Wickra.FlagPennant();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("FlagPennant", got);
+ }
+ [Fact]
+ public void Golden_Footprint()
+ {
+ using var ind = new Wickra.Footprint(1.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenBars(ind.Update(r[3], r[4], r[3] >= r[0], i)));
+ }
+ Compare("Footprint", got);
+ }
+ [Fact]
+ public void Golden_ForceIndex()
+ {
+ using var ind = new Wickra.ForceIndex(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("ForceIndex", got);
+ }
+ [Fact]
+ public void Golden_FractalChaosBands()
+ {
+ using var ind = new Wickra.FractalChaosBands(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 2));
+ }
+ Compare("FractalChaosBands", got);
+ }
+ [Fact]
+ public void Golden_Frama()
+ {
+ using var ind = new Wickra.Frama(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("Frama", got);
+ }
+ [Fact]
+ public void Golden_FryPanBottom()
+ {
+ using var ind = new Wickra.FryPanBottom(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("FryPanBottom", got);
+ }
+ [Fact]
+ public void Golden_FundingBasis()
+ {
+ using var ind = new Wickra.FundingBasis();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var d = DerivFields(r);
+ got.Add(new[] { ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], i) });
+ }
+ Compare("FundingBasis", got);
+ }
+ [Fact]
+ public void Golden_FundingImpliedApr()
+ {
+ using var ind = new Wickra.FundingImpliedApr(1095.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var d = DerivFields(r);
+ got.Add(new[] { ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], i) });
+ }
+ Compare("FundingImpliedApr", got);
+ }
+ [Fact]
+ public void Golden_FundingRate()
+ {
+ using var ind = new Wickra.FundingRate();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var d = DerivFields(r);
+ got.Add(new[] { ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], i) });
+ }
+ Compare("FundingRate", got);
+ }
+ [Fact]
+ public void Golden_FundingRateMean()
+ {
+ using var ind = new Wickra.FundingRateMean(20);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var d = DerivFields(r);
+ got.Add(new[] { ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], i) });
+ }
+ Compare("FundingRateMean", got);
+ }
+ [Fact]
+ public void Golden_FundingRateZScore()
+ {
+ using var ind = new Wickra.FundingRateZScore(20);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var d = DerivFields(r);
+ got.Add(new[] { ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], i) });
+ }
+ Compare("FundingRateZScore", got);
+ }
+ [Fact]
+ public void Golden_GainLossRatio()
+ {
+ using var ind = new Wickra.GainLossRatio(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("GainLossRatio", got);
+ }
+ [Fact]
+ public void Golden_GainToPainRatio()
+ {
+ using var ind = new Wickra.GainToPainRatio(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("GainToPainRatio", got);
+ }
+ [Fact]
+ public void Golden_GapSideBySideWhite()
+ {
+ using var ind = new Wickra.GapSideBySideWhite();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("GapSideBySideWhite", got);
+ }
+ [Fact]
+ public void Golden_Garch11()
+ {
+ using var ind = new Wickra.Garch11(2e-06, 0.1, 0.88);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("Garch11", got);
+ }
+ [Fact]
+ public void Golden_GarmanKlassVolatility()
+ {
+ using var ind = new Wickra.GarmanKlassVolatility(20, 252);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("GarmanKlassVolatility", got);
+ }
+ [Fact]
+ public void Golden_Gartley()
+ {
+ using var ind = new Wickra.Gartley();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Gartley", got);
+ }
+ [Fact]
+ public void Golden_GatorOscillator()
+ {
+ using var ind = new Wickra.GatorOscillator(3, 7, 14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 2));
+ }
+ Compare("GatorOscillator", got);
+ }
+ [Fact]
+ public void Golden_GeneralizedDema()
+ {
+ using var ind = new Wickra.GeneralizedDema(5, 0.7);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("GeneralizedDema", got);
+ }
+ [Fact]
+ public void Golden_GeometricMa()
+ {
+ using var ind = new Wickra.GeometricMa(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("GeometricMa", got);
+ }
+ [Fact]
+ public void Golden_GoldenPocket()
+ {
+ using var ind = new Wickra.GoldenPocket();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 3));
+ }
+ Compare("GoldenPocket", got);
+ }
+ [Fact]
+ public void Golden_GrangerCausality()
+ {
+ using var ind = new Wickra.GrangerCausality(60, 1);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3], r[0]) });
+ }
+ Compare("GrangerCausality", got);
+ }
+ [Fact]
+ public void Golden_GravestoneDoji()
+ {
+ using var ind = new Wickra.GravestoneDoji();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("GravestoneDoji", got);
+ }
+ [Fact]
+ public void Golden_Hammer()
+ {
+ using var ind = new Wickra.Hammer();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Hammer", got);
+ }
+ [Fact]
+ public void Golden_HangingMan()
+ {
+ using var ind = new Wickra.HangingMan();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("HangingMan", got);
+ }
+ [Fact]
+ public void Golden_Harami()
+ {
+ using var ind = new Wickra.Harami();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Harami", got);
+ }
+ [Fact]
+ public void Golden_HaramiCross()
+ {
+ using var ind = new Wickra.HaramiCross();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("HaramiCross", got);
+ }
+ [Fact]
+ public void Golden_HasbrouckInformationShare()
+ {
+ using var ind = new Wickra.HasbrouckInformationShare(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3], r[0]) });
+ }
+ Compare("HasbrouckInformationShare", got);
+ }
+ [Fact]
+ public void Golden_HeadAndShoulders()
+ {
+ using var ind = new Wickra.HeadAndShoulders();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("HeadAndShoulders", got);
+ }
+ [Fact]
+ public void Golden_HeikinAshi()
+ {
+ using var ind = new Wickra.HeikinAshi();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 4));
+ }
+ Compare("HeikinAshi", got);
+ }
+ [Fact]
+ public void Golden_HeikinAshiOscillator()
+ {
+ using var ind = new Wickra.HeikinAshiOscillator(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("HeikinAshiOscillator", got);
+ }
+ [Fact]
+ public void Golden_HiLoActivator()
+ {
+ using var ind = new Wickra.HiLoActivator(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("HiLoActivator", got);
+ }
+ [Fact]
+ public void Golden_HighLowIndex()
+ {
+ using var ind = new Wickra.HighLowIndex(10);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var (ch, vo, nh, nl, am, ob) = CrossLists(r);
+ got.Add(new[] { ind.Update(ch, vo, nh, nl, am, ob, i) });
+ }
+ Compare("HighLowIndex", got);
+ }
+ [Fact]
+ public void Golden_HighLowRange()
+ {
+ using var ind = new Wickra.HighLowRange();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("HighLowRange", got);
+ }
+ [Fact]
+ public void Golden_HighLowVolumeNodes()
+ {
+ using var ind = new Wickra.HighLowVolumeNodes(3, 7);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 2));
+ }
+ Compare("HighLowVolumeNodes", got);
+ }
+ [Fact]
+ public void Golden_HighWave()
+ {
+ using var ind = new Wickra.HighWave();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("HighWave", got);
+ }
+ [Fact]
+ public void Golden_HighpassFilter()
+ {
+ using var ind = new Wickra.HighpassFilter(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("HighpassFilter", got);
+ }
+ [Fact]
+ public void Golden_Hikkake()
+ {
+ using var ind = new Wickra.Hikkake();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Hikkake", got);
+ }
+ [Fact]
+ public void Golden_HikkakeModified()
+ {
+ using var ind = new Wickra.HikkakeModified();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("HikkakeModified", got);
+ }
+ [Fact]
+ public void Golden_HilbertDominantCycle()
+ {
+ using var ind = new Wickra.HilbertDominantCycle();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("HilbertDominantCycle", got);
+ }
+ [Fact]
+ public void Golden_HistoricalVolatility()
+ {
+ using var ind = new Wickra.HistoricalVolatility(3, 7);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("HistoricalVolatility", got);
+ }
+ [Fact]
+ public void Golden_Hma()
+ {
+ using var ind = new Wickra.Hma(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("Hma", got);
+ }
+ [Fact]
+ public void Golden_HoltWinters()
+ {
+ using var ind = new Wickra.HoltWinters(0.5, 0.1);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("HoltWinters", got);
+ }
+ [Fact]
+ public void Golden_HomingPigeon()
+ {
+ using var ind = new Wickra.HomingPigeon();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("HomingPigeon", got);
+ }
+ [Fact]
+ public void Golden_HtDcPhase()
+ {
+ using var ind = new Wickra.HtDcPhase();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("HtDcPhase", got);
+ }
+ [Fact]
+ public void Golden_HtPhasor()
+ {
+ using var ind = new Wickra.HtPhasor();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[3]), 2));
+ }
+ Compare("HtPhasor", got);
+ }
+ [Fact]
+ public void Golden_HtTrendMode()
+ {
+ using var ind = new Wickra.HtTrendMode();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("HtTrendMode", got);
+ }
+ [Fact]
+ public void Golden_HurstChannel()
+ {
+ using var ind = new Wickra.HurstChannel(14, 2.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 3));
+ }
+ Compare("HurstChannel", got);
+ }
+ [Fact]
+ public void Golden_HurstExponent()
+ {
+ using var ind = new Wickra.HurstExponent(100, 4);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("HurstExponent", got);
+ }
+ [Fact]
+ public void Golden_Ichimoku()
+ {
+ using var ind = new Wickra.Ichimoku(9, 26, 52, 26);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 5));
+ }
+ Compare("Ichimoku", got);
+ }
+ [Fact]
+ public void Golden_IdenticalThreeCrows()
+ {
+ using var ind = new Wickra.IdenticalThreeCrows();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("IdenticalThreeCrows", got);
+ }
+ [Fact]
+ public void Golden_ImbalanceBars()
+ {
+ using var ind = new Wickra.ImbalanceBars(5.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenBars(ind.Update(r[0], r[1], r[2], r[3], 1.0, 0)));
+ }
+ Compare("ImbalanceBars", got);
+ }
+ [Fact]
+ public void Golden_InNeck()
+ {
+ using var ind = new Wickra.InNeck();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("InNeck", got);
+ }
+ [Fact]
+ public void Golden_Inertia()
+ {
+ using var ind = new Wickra.Inertia(3, 7);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Inertia", got);
+ }
+ [Fact]
+ public void Golden_InformationRatio()
+ {
+ using var ind = new Wickra.InformationRatio(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3], r[0]) });
+ }
+ Compare("InformationRatio", got);
+ }
+ [Fact]
+ public void Golden_InitialBalance()
+ {
+ using var ind = new Wickra.InitialBalance(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 2));
+ }
+ Compare("InitialBalance", got);
+ }
+ [Fact]
+ public void Golden_InstantaneousTrendline()
+ {
+ using var ind = new Wickra.InstantaneousTrendline(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("InstantaneousTrendline", got);
+ }
+ [Fact]
+ public void Golden_IntradayIntensity()
+ {
+ using var ind = new Wickra.IntradayIntensity();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("IntradayIntensity", got);
+ }
+ [Fact]
+ public void Golden_IntradayMomentumIndex()
+ {
+ using var ind = new Wickra.IntradayMomentumIndex(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("IntradayMomentumIndex", got);
+ }
+ [Fact]
+ public void Golden_IntradayVolatilityProfile()
+ {
+ using var ind = new Wickra.IntradayVolatilityProfile(24, 0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var bins = ind.Update(r[0], r[1], r[2], r[3], r[4], i);
+ got.Add(bins ?? NanRow(24));
+ }
+ Compare("IntradayVolatilityProfile", got);
+ }
+ [Fact]
+ public void Golden_InverseFisherTransform()
+ {
+ using var ind = new Wickra.InverseFisherTransform(2.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("InverseFisherTransform", got);
+ }
+ [Fact]
+ public void Golden_InvertedHammer()
+ {
+ using var ind = new Wickra.InvertedHammer();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("InvertedHammer", got);
+ }
+ [Fact]
+ public void Golden_JarqueBera()
+ {
+ using var ind = new Wickra.JarqueBera(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("JarqueBera", got);
+ }
+ [Fact]
+ public void Golden_Jma()
+ {
+ using var ind = new Wickra.Jma(7, 0.0, 2u);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("Jma", got);
+ }
+ [Fact]
+ public void Golden_JumpIndicator()
+ {
+ using var ind = new Wickra.JumpIndicator(14, 2.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("JumpIndicator", got);
+ }
+ [Fact]
+ public void Golden_KRatio()
+ {
+ using var ind = new Wickra.KRatio(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("KRatio", got);
+ }
+ [Fact]
+ public void Golden_KagiBars()
+ {
+ using var ind = new Wickra.KagiBars(2.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenBars(ind.Update(r[3], r[3], r[3], r[3], 1.0, 0)));
+ }
+ Compare("KagiBars", got);
+ }
+ [Fact]
+ public void Golden_KalmanHedgeRatio()
+ {
+ using var ind = new Wickra.KalmanHedgeRatio(0.01, 0.001);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[3], r[0]), 3));
+ }
+ Compare("KalmanHedgeRatio", got);
+ }
+ [Fact]
+ public void Golden_Kama()
+ {
+ using var ind = new Wickra.Kama(3, 7, 14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("Kama", got);
+ }
+ [Fact]
+ public void Golden_KaseDevStop()
+ {
+ using var ind = new Wickra.KaseDevStop(14, 2.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 2));
+ }
+ Compare("KaseDevStop", got);
+ }
+ [Fact]
+ public void Golden_KasePermissionStochastic()
+ {
+ using var ind = new Wickra.KasePermissionStochastic(3, 7);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 2));
+ }
+ Compare("KasePermissionStochastic", got);
+ }
+ [Fact]
+ public void Golden_KellyCriterion()
+ {
+ using var ind = new Wickra.KellyCriterion(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("KellyCriterion", got);
+ }
+ [Fact]
+ public void Golden_Keltner()
+ {
+ using var ind = new Wickra.Keltner(3, 7, 2.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), 3));
+ }
+ Compare("Keltner", got);
+ }
+ [Fact]
+ public void Golden_KendallTau()
+ {
+ using var ind = new Wickra.KendallTau(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3], r[0]) });
+ }
+ Compare("KendallTau", got);
+ }
+ [Fact]
+ public void Golden_Kicking()
+ {
+ using var ind = new Wickra.Kicking();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Kicking", got);
+ }
+ [Fact]
+ public void Golden_KickingByLength()
+ {
+ using var ind = new Wickra.KickingByLength();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("KickingByLength", got);
+ }
+ [Fact]
+ public void Golden_Kst()
+ {
+ using var ind = new Wickra.Kst(3, 7, 14, 28, 35, 42, 56, 63, 70);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[3]), 2));
+ }
+ Compare("Kst", got);
+ }
+ [Fact]
+ public void Golden_Kurtosis()
+ {
+ using var ind = new Wickra.Kurtosis(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("Kurtosis", got);
+ }
+ [Fact]
+ public void Golden_Kvo()
+ {
+ using var ind = new Wickra.Kvo(3, 7);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Kvo", got);
+ }
+ [Fact]
+ public void Golden_KylesLambda()
+ {
+ using var ind = new Wickra.KylesLambda(20);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3], r[4], r[3] >= r[0], i, (r[1] + r[2]) / 2) });
+ }
+ Compare("KylesLambda", got);
+ }
+ [Fact]
+ public void Golden_LadderBottom()
+ {
+ using var ind = new Wickra.LadderBottom();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("LadderBottom", got);
+ }
+ [Fact]
+ public void Golden_LaguerreRsi()
+ {
+ using var ind = new Wickra.LaguerreRsi(0.5);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("LaguerreRsi", got);
+ }
+ [Fact]
+ public void Golden_LeadLagCrossCorrelation()
+ {
+ using var ind = new Wickra.LeadLagCrossCorrelation(20, 10);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[3], r[0]), 2));
+ }
+ Compare("LeadLagCrossCorrelation", got);
+ }
+ [Fact]
+ public void Golden_LinRegAngle()
+ {
+ using var ind = new Wickra.LinRegAngle(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("LinRegAngle", got);
+ }
+ [Fact]
+ public void Golden_LinRegChannel()
+ {
+ using var ind = new Wickra.LinRegChannel(14, 2.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[3]), 3));
+ }
+ Compare("LinRegChannel", got);
+ }
+ [Fact]
+ public void Golden_LinRegIntercept()
+ {
+ using var ind = new Wickra.LinRegIntercept(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("LinRegIntercept", got);
+ }
+ [Fact]
+ public void Golden_LinRegSlope()
+ {
+ using var ind = new Wickra.LinRegSlope(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("LinRegSlope", got);
+ }
+ [Fact]
+ public void Golden_LinearRegression()
+ {
+ using var ind = new Wickra.LinearRegression(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("LinearRegression", got);
+ }
+ [Fact]
+ public void Golden_LiquidationFeatures()
+ {
+ using var ind = new Wickra.LiquidationFeatures();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var d = DerivFields(r);
+ got.Add(FlattenNullable(ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], i), 5));
+ }
+ Compare("LiquidationFeatures", got);
+ }
+ [Fact]
+ public void Golden_LogReturn()
+ {
+ using var ind = new Wickra.LogReturn(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("LogReturn", got);
+ }
+ [Fact]
+ public void Golden_LongLeggedDoji()
+ {
+ using var ind = new Wickra.LongLeggedDoji();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("LongLeggedDoji", got);
+ }
+ [Fact]
+ public void Golden_LongLine()
+ {
+ using var ind = new Wickra.LongLine();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("LongLine", got);
+ }
+ [Fact]
+ public void Golden_LongShortRatio()
+ {
+ using var ind = new Wickra.LongShortRatio();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ var d = DerivFields(r);
+ got.Add(new[] { ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], i) });
+ }
+ Compare("LongShortRatio", got);
+ }
+ [Fact]
+ public void Golden_M2Measure()
+ {
+ using var ind = new Wickra.M2Measure(14, 2.0, 0.5);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("M2Measure", got);
+ }
+ [Fact]
+ public void Golden_MaEnvelope()
+ {
+ using var ind = new Wickra.MaEnvelope(14, 2.0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[3]), 3));
+ }
+ Compare("MaEnvelope", got);
+ }
+ [Fact]
+ public void Golden_MacdExt()
+ {
+ using var ind = new Wickra.MacdExt(12, (byte)0, 26, (byte)0, 9, (byte)0);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[3]), 3));
+ }
+ Compare("MacdExt", got);
+ }
+ [Fact]
+ public void Golden_MacdFix()
+ {
+ using var ind = new Wickra.MacdFix(9);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[3]), 3));
+ }
+ Compare("MacdFix", got);
+ }
+ [Fact]
+ public void Golden_MacdHistogram()
+ {
+ using var ind = new Wickra.MacdHistogram(3, 7, 14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("MacdHistogram", got);
+ }
+ [Fact]
+ public void Golden_MacdIndicator()
+ {
+ using var ind = new Wickra.MacdIndicator(12, 26, 9);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[3]), 3));
+ }
+ Compare("MacdIndicator", got);
+ }
+ [Fact]
+ public void Golden_Mama()
+ {
+ using var ind = new Wickra.Mama(0.5, 0.05);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(FlattenNullable(ind.Update(r[3]), 2));
+ }
+ Compare("Mama", got);
+ }
+ [Fact]
+ public void Golden_MarketFacilitationIndex()
+ {
+ using var ind = new Wickra.MarketFacilitationIndex();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("MarketFacilitationIndex", got);
+ }
+ [Fact]
+ public void Golden_MartinRatio()
+ {
+ using var ind = new Wickra.MartinRatio(14);
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[3]) });
+ }
+ Compare("MartinRatio", got);
+ }
+ [Fact]
+ public void Golden_Marubozu()
+ {
+ using var ind = new Wickra.Marubozu();
+ var got = new List();
+ for (var i = 0; i < Rows.Length; i++)
+ {
+ var r = Rows[i];
+ got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });
+ }
+ Compare("Marubozu", got);
+ }
+ [Fact]
+ public void Golden_MassIndex()
+ {
+ using var ind = new Wickra.MassIndex(3, 7);
+ var got = new List