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(); + 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("MassIndex", got); + } + [Fact] + public void Golden_MatHold() + { + using var ind = new Wickra.MatHold(); + 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("MatHold", got); + } + [Fact] + public void Golden_MatchingLow() + { + using var ind = new Wickra.MatchingLow(); + 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("MatchingLow", got); + } + [Fact] + public void Golden_MaxDrawdown() + { + using var ind = new Wickra.MaxDrawdown(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("MaxDrawdown", got); + } + [Fact] + public void Golden_McClellanOscillator() + { + using var ind = new Wickra.McClellanOscillator(); + 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("McClellanOscillator", got); + } + [Fact] + public void Golden_McClellanSummationIndex() + { + using var ind = new Wickra.McClellanSummationIndex(); + 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("McClellanSummationIndex", got); + } + [Fact] + public void Golden_McGinleyDynamic() + { + using var ind = new Wickra.McGinleyDynamic(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("McGinleyDynamic", got); + } + [Fact] + public void Golden_MedianAbsoluteDeviation() + { + using var ind = new Wickra.MedianAbsoluteDeviation(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("MedianAbsoluteDeviation", got); + } + [Fact] + public void Golden_MedianChannel() + { + using var ind = new Wickra.MedianChannel(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("MedianChannel", got); + } + [Fact] + public void Golden_MedianMa() + { + using var ind = new Wickra.MedianMa(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("MedianMa", got); + } + [Fact] + public void Golden_MedianPrice() + { + using var ind = new Wickra.MedianPrice(); + 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("MedianPrice", got); + } + [Fact] + public void Golden_Mfi() + { + using var ind = new Wickra.Mfi(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("Mfi", got); + } + [Fact] + public void Golden_Microprice() + { + using var ind = new Wickra.Microprice(); + 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("Microprice", got); + } + [Fact] + public void Golden_MidPoint() + { + using var ind = new Wickra.MidPoint(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("MidPoint", got); + } + [Fact] + public void Golden_MidPrice() + { + using var ind = new Wickra.MidPrice(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("MidPrice", got); + } + [Fact] + public void Golden_MinusDi() + { + using var ind = new Wickra.MinusDi(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("MinusDi", got); + } + [Fact] + public void Golden_MinusDm() + { + using var ind = new Wickra.MinusDm(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("MinusDm", got); + } + [Fact] + public void Golden_ModifiedMaStop() + { + using var ind = new Wickra.ModifiedMaStop(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("ModifiedMaStop", got); + } + [Fact] + public void Golden_Mom() + { + using var ind = new Wickra.Mom(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("Mom", got); + } + [Fact] + public void Golden_MorningDojiStar() + { + using var ind = new Wickra.MorningDojiStar(); + 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("MorningDojiStar", got); + } + [Fact] + public void Golden_MorningEveningStar() + { + using var ind = new Wickra.MorningEveningStar(); + 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("MorningEveningStar", got); + } + [Fact] + public void Golden_MurreyMathLines() + { + using var ind = new Wickra.MurreyMathLines(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), 9)); + } + Compare("MurreyMathLines", got); + } + [Fact] + public void Golden_NakedPoc() + { + using var ind = new Wickra.NakedPoc(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("NakedPoc", got); + } + [Fact] + public void Golden_Natr() + { + using var ind = new Wickra.Natr(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("Natr", got); + } + [Fact] + public void Golden_NewHighsNewLows() + { + using var ind = new Wickra.NewHighsNewLows(); + 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("NewHighsNewLows", got); + } + [Fact] + public void Golden_NewPriceLines() + { + using var ind = new Wickra.NewPriceLines(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("NewPriceLines", got); + } + [Fact] + public void Golden_Nrtr() + { + using var ind = new Wickra.Nrtr(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("Nrtr", got); + } + [Fact] + public void Golden_Nvi() + { + using var ind = new Wickra.Nvi(); + 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("Nvi", got); + } + [Fact] + public void Golden_OIPriceDivergence() + { + using var ind = new Wickra.OIPriceDivergence(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("OIPriceDivergence", got); + } + [Fact] + public void Golden_OIWeighted() + { + using var ind = new Wickra.OIWeighted(); + 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("OIWeighted", got); + } + [Fact] + public void Golden_Obv() + { + using var ind = new Wickra.Obv(); + 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("Obv", got); + } + [Fact] + public void Golden_OiToVolumeRatio() + { + using var ind = new Wickra.OiToVolumeRatio(); + 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("OiToVolumeRatio", got); + } + [Fact] + public void Golden_OmegaRatio() + { + using var ind = new Wickra.OmegaRatio(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("OmegaRatio", got); + } + [Fact] + public void Golden_OnNeck() + { + using var ind = new Wickra.OnNeck(); + 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("OnNeck", got); + } + [Fact] + public void Golden_OpenInterestDelta() + { + using var ind = new Wickra.OpenInterestDelta(); + 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("OpenInterestDelta", got); + } + [Fact] + public void Golden_OpenInterestMomentum() + { + using var ind = new Wickra.OpenInterestMomentum(10); + 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("OpenInterestMomentum", got); + } + [Fact] + public void Golden_OpeningMarubozu() + { + using var ind = new Wickra.OpeningMarubozu(); + 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("OpeningMarubozu", got); + } + [Fact] + public void Golden_OpeningRange() + { + using var ind = new Wickra.OpeningRange(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("OpeningRange", got); + } + [Fact] + public void Golden_OrderBookImbalanceFull() + { + using var ind = new Wickra.OrderBookImbalanceFull(); + 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("OrderBookImbalanceFull", got); + } + [Fact] + public void Golden_OrderBookImbalanceTop1() + { + using var ind = new Wickra.OrderBookImbalanceTop1(); + 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("OrderBookImbalanceTop1", got); + } + [Fact] + public void Golden_OrderBookImbalanceTopN() + { + using var ind = new Wickra.OrderBookImbalanceTopN(5); + 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("OrderBookImbalanceTopN", got); + } + [Fact] + public void Golden_OrderFlowImbalance() + { + using var ind = new Wickra.OrderFlowImbalance(20); + 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("OrderFlowImbalance", got); + } + [Fact] + public void Golden_OuHalfLife() + { + using var ind = new Wickra.OuHalfLife(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("OuHalfLife", got); + } + [Fact] + public void Golden_OvernightGap() + { + using var ind = new Wickra.OvernightGap(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("OvernightGap", got); + } + [Fact] + public void Golden_OvernightIntradayReturn() + { + using var ind = new Wickra.OvernightIntradayReturn(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("OvernightIntradayReturn", got); + } + [Fact] + public void Golden_PainIndex() + { + using var ind = new Wickra.PainIndex(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("PainIndex", got); + } + [Fact] + public void Golden_PairSpreadZScore() + { + using var ind = new Wickra.PairSpreadZScore(20, 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[0]) }); + } + Compare("PairSpreadZScore", got); + } + [Fact] + public void Golden_PairwiseBeta() + { + using var ind = new Wickra.PairwiseBeta(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("PairwiseBeta", got); + } + [Fact] + public void Golden_ParkinsonVolatility() + { + using var ind = new Wickra.ParkinsonVolatility(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("ParkinsonVolatility", got); + } + [Fact] + public void Golden_PearsonCorrelation() + { + using var ind = new Wickra.PearsonCorrelation(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("PearsonCorrelation", got); + } + [Fact] + public void Golden_PercentAboveMa() + { + using var ind = new Wickra.PercentAboveMa(); + 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("PercentAboveMa", got); + } + [Fact] + public void Golden_PercentB() + { + using var ind = new Wickra.PercentB(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("PercentB", got); + } + [Fact] + public void Golden_PercentageTrailingStop() + { + using var ind = new Wickra.PercentageTrailingStop(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("PercentageTrailingStop", got); + } + [Fact] + public void Golden_PerpetualPremiumIndex() + { + using var ind = new Wickra.PerpetualPremiumIndex(); + 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("PerpetualPremiumIndex", got); + } + [Fact] + public void Golden_Pgo() + { + using var ind = new Wickra.Pgo(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("Pgo", got); + } + [Fact] + public void Golden_PiercingDarkCloud() + { + using var ind = new Wickra.PiercingDarkCloud(); + 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("PiercingDarkCloud", got); + } + [Fact] + public void Golden_Pin() + { + using var ind = new Wickra.Pin(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("Pin", got); + } + [Fact] + public void Golden_PivotReversal() + { + using var ind = new Wickra.PivotReversal(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("PivotReversal", got); + } + [Fact] + public void Golden_PlusDi() + { + using var ind = new Wickra.PlusDi(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("PlusDi", got); + } + [Fact] + public void Golden_PlusDm() + { + using var ind = new Wickra.PlusDm(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("PlusDm", got); + } + [Fact] + public void Golden_Pmo() + { + using var ind = new Wickra.Pmo(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("Pmo", got); + } + [Fact] + public void Golden_PointAndFigureBars() + { + using var ind = new Wickra.PointAndFigureBars(2.0, 3); + 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("PointAndFigureBars", got); + } + [Fact] + public void Golden_PolarizedFractalEfficiency() + { + using var ind = new Wickra.PolarizedFractalEfficiency(10, 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("PolarizedFractalEfficiency", got); + } + [Fact] + public void Golden_Ppo() + { + using var ind = new Wickra.Ppo(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("Ppo", got); + } + [Fact] + public void Golden_PpoHistogram() + { + using var ind = new Wickra.PpoHistogram(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("PpoHistogram", got); + } + [Fact] + public void Golden_ProfileShape() + { + using var ind = new Wickra.ProfileShape(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("ProfileShape", got); + } + [Fact] + public void Golden_ProfitFactor() + { + using var ind = new Wickra.ProfitFactor(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("ProfitFactor", got); + } + [Fact] + public void Golden_ProjectionBands() + { + using var ind = new Wickra.ProjectionBands(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("ProjectionBands", got); + } + [Fact] + public void Golden_ProjectionOscillator() + { + using var ind = new Wickra.ProjectionOscillator(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("ProjectionOscillator", got); + } + [Fact] + public void Golden_Psar() + { + using var ind = new Wickra.Psar(0.02, 0.02, 0.2); + 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("Psar", got); + } + [Fact] + public void Golden_Pvi() + { + using var ind = new Wickra.Pvi(); + 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("Pvi", got); + } + [Fact] + public void Golden_Qqe() + { + using var ind = new Wickra.Qqe(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[3]), 2)); + } + Compare("Qqe", got); + } + [Fact] + public void Golden_Qstick() + { + using var ind = new Wickra.Qstick(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("Qstick", got); + } + [Fact] + public void Golden_QuartileBands() + { + using var ind = new Wickra.QuartileBands(14); + 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("QuartileBands", got); + } + [Fact] + public void Golden_QuotedSpread() + { + using var ind = new Wickra.QuotedSpread(); + 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("QuotedSpread", got); + } + [Fact] + public void Golden_RSquared() + { + using var ind = new Wickra.RSquared(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("RSquared", got); + } + [Fact] + public void Golden_RangeBars() + { + using var ind = new Wickra.RangeBars(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("RangeBars", got); + } + [Fact] + public void Golden_RealizedSpread() + { + using var ind = new Wickra.RealizedSpread(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("RealizedSpread", got); + } + [Fact] + public void Golden_RealizedVolatility() + { + using var ind = new Wickra.RealizedVolatility(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("RealizedVolatility", got); + } + [Fact] + public void Golden_RecoveryFactor() + { + using var ind = new Wickra.RecoveryFactor(); + var got = new List(); + for (var i = 0; i < Rows.Length; i++) + { + var r = Rows[i]; + got.Add(new[] { ind.Update(r[3]) }); + } + Compare("RecoveryFactor", got); + } + [Fact] + public void Golden_RectangleRange() + { + using var ind = new Wickra.RectangleRange(); + 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("RectangleRange", got); + } + [Fact] + public void Golden_Reflex() + { + using var ind = new Wickra.Reflex(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("Reflex", got); + } + [Fact] + public void Golden_RegimeLabel() + { + using var ind = new Wickra.RegimeLabel(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("RegimeLabel", got); + } + [Fact] + public void Golden_RelativeStrengthAB() + { + using var ind = new Wickra.RelativeStrengthAB(14, 14); + 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("RelativeStrengthAB", got); + } + [Fact] + public void Golden_RenkoBars() + { + using var ind = new Wickra.RenkoBars(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("RenkoBars", got); + } + [Fact] + public void Golden_RenkoTrailingStop() + { + using var ind = new Wickra.RenkoTrailingStop(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("RenkoTrailingStop", got); + } + [Fact] + public void Golden_RickshawMan() + { + using var ind = new Wickra.RickshawMan(); + 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("RickshawMan", got); + } + [Fact] + public void Golden_RisingThreeMethods() + { + using var ind = new Wickra.RisingThreeMethods(); + 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("RisingThreeMethods", got); + } + [Fact] + public void Golden_Rmi() + { + using var ind = new Wickra.Rmi(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("Rmi", got); + } + [Fact] + public void Golden_Roc() + { + using var ind = new Wickra.Roc(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("Roc", got); + } + [Fact] + public void Golden_Rocp() + { + using var ind = new Wickra.Rocp(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("Rocp", got); + } + [Fact] + public void Golden_Rocr() + { + using var ind = new Wickra.Rocr(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("Rocr", got); + } + [Fact] + public void Golden_Rocr100() + { + using var ind = new Wickra.Rocr100(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("Rocr100", got); + } + [Fact] + public void Golden_RogersSatchellVolatility() + { + using var ind = new Wickra.RogersSatchellVolatility(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("RogersSatchellVolatility", got); + } + [Fact] + public void Golden_RollMeasure() + { + using var ind = new Wickra.RollMeasure(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("RollMeasure", got); + } + [Fact] + public void Golden_RollingCorrelation() + { + using var ind = new Wickra.RollingCorrelation(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("RollingCorrelation", got); + } + [Fact] + public void Golden_RollingCovariance() + { + using var ind = new Wickra.RollingCovariance(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("RollingCovariance", got); + } + [Fact] + public void Golden_RollingIqr() + { + using var ind = new Wickra.RollingIqr(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("RollingIqr", got); + } + [Fact] + public void Golden_RollingMinMaxScaler() + { + using var ind = new Wickra.RollingMinMaxScaler(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("RollingMinMaxScaler", got); + } + [Fact] + public void Golden_RollingPercentileRank() + { + using var ind = new Wickra.RollingPercentileRank(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("RollingPercentileRank", got); + } + [Fact] + public void Golden_RollingQuantile() + { + using var ind = new Wickra.RollingQuantile(20, 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("RollingQuantile", got); + } + [Fact] + public void Golden_RollingVwap() + { + using var ind = new Wickra.RollingVwap(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("RollingVwap", got); + } + [Fact] + public void Golden_RoofingFilter() + { + using var ind = new Wickra.RoofingFilter(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("RoofingFilter", got); + } + [Fact] + public void Golden_Rsi() + { + using var ind = new Wickra.Rsi(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("Rsi", got); + } + [Fact] + public void Golden_Rsx() + { + using var ind = new Wickra.Rsx(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("Rsx", got); + } + [Fact] + public void Golden_RunBars() + { + using var ind = new Wickra.RunBars(3); + 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("RunBars", got); + } + [Fact] + public void Golden_Rvi() + { + using var ind = new Wickra.Rvi(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("Rvi", got); + } + [Fact] + public void Golden_RviVolatility() + { + using var ind = new Wickra.RviVolatility(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("RviVolatility", got); + } + [Fact] + public void Golden_Rwi() + { + using var ind = new Wickra.Rwi(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("Rwi", got); + } + [Fact] + public void Golden_SampleEntropy() + { + using var ind = new Wickra.SampleEntropy(20, 2, 0.2); + var got = new List(); + for (var i = 0; i < Rows.Length; i++) + { + var r = Rows[i]; + got.Add(new[] { ind.Update(r[3]) }); + } + Compare("SampleEntropy", got); + } + [Fact] + public void Golden_SarExt() + { + using var ind = new Wickra.SarExt(2.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5); + 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("SarExt", got); + } + [Fact] + public void Golden_SeasonalZScore() + { + using var ind = new Wickra.SeasonalZScore(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("SeasonalZScore", got); + } + [Fact] + public void Golden_SeparatingLines() + { + using var ind = new Wickra.SeparatingLines(); + 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("SeparatingLines", got); + } + [Fact] + public void Golden_SessionHighLow() + { + using var ind = new Wickra.SessionHighLow(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("SessionHighLow", got); + } + [Fact] + public void Golden_SessionRange() + { + using var ind = new Wickra.SessionRange(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("SessionRange", got); + } + [Fact] + public void Golden_SessionVwap() + { + using var ind = new Wickra.SessionVwap(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("SessionVwap", got); + } + [Fact] + public void Golden_ShannonEntropy() + { + using var ind = new Wickra.ShannonEntropy(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("ShannonEntropy", got); + } + [Fact] + public void Golden_Shark() + { + using var ind = new Wickra.Shark(); + 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("Shark", got); + } + [Fact] + public void Golden_SharpeRatio() + { + using var ind = new Wickra.SharpeRatio(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("SharpeRatio", got); + } + [Fact] + public void Golden_ShootingStar() + { + using var ind = new Wickra.ShootingStar(); + 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("ShootingStar", got); + } + [Fact] + public void Golden_ShortLine() + { + using var ind = new Wickra.ShortLine(); + 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("ShortLine", got); + } + [Fact] + public void Golden_SignedVolume() + { + using var ind = new Wickra.SignedVolume(); + 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("SignedVolume", got); + } + [Fact] + public void Golden_SineWave() + { + using var ind = new Wickra.SineWave(); + var got = new List(); + for (var i = 0; i < Rows.Length; i++) + { + var r = Rows[i]; + got.Add(new[] { ind.Update(r[3]) }); + } + Compare("SineWave", got); + } + [Fact] + public void Golden_SineWeightedMa() + { + using var ind = new Wickra.SineWeightedMa(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("SineWeightedMa", got); + } + [Fact] + public void Golden_SinglePrints() + { + using var ind = new Wickra.SinglePrints(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("SinglePrints", got); + } + [Fact] + public void Golden_Skewness() + { + using var ind = new Wickra.Skewness(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("Skewness", got); + } + [Fact] + public void Golden_Sma() + { + using var ind = new Wickra.Sma(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("Sma", got); + } + [Fact] + public void Golden_Smi() + { + using var ind = new Wickra.Smi(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("Smi", got); + } + [Fact] + public void Golden_Smma() + { + using var ind = new Wickra.Smma(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("Smma", got); + } + [Fact] + public void Golden_SmoothedHeikinAshi() + { + using var ind = new Wickra.SmoothedHeikinAshi(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), 4)); + } + Compare("SmoothedHeikinAshi", got); + } + [Fact] + public void Golden_SortinoRatio() + { + using var ind = new Wickra.SortinoRatio(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("SortinoRatio", got); + } + [Fact] + public void Golden_SpearmanCorrelation() + { + using var ind = new Wickra.SpearmanCorrelation(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("SpearmanCorrelation", got); + } + [Fact] + public void Golden_SpinningTop() + { + using var ind = new Wickra.SpinningTop(); + 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("SpinningTop", got); + } + [Fact] + public void Golden_SpreadAr1Coefficient() + { + using var ind = new Wickra.SpreadAr1Coefficient(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("SpreadAr1Coefficient", got); + } + [Fact] + public void Golden_SpreadBollingerBands() + { + using var ind = new Wickra.SpreadBollingerBands(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], r[0]), 4)); + } + Compare("SpreadBollingerBands", got); + } + [Fact] + public void Golden_SpreadHurst() + { + using var ind = new Wickra.SpreadHurst(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("SpreadHurst", got); + } + [Fact] + public void Golden_StalledPattern() + { + using var ind = new Wickra.StalledPattern(); + 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("StalledPattern", got); + } + [Fact] + public void Golden_StandardError() + { + using var ind = new Wickra.StandardError(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("StandardError", got); + } + [Fact] + public void Golden_StandardErrorBands() + { + using var ind = new Wickra.StandardErrorBands(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("StandardErrorBands", got); + } + [Fact] + public void Golden_StarcBands() + { + using var ind = new Wickra.StarcBands(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("StarcBands", got); + } + [Fact] + public void Golden_Stc() + { + using var ind = new Wickra.Stc(10, 23, 10, 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("Stc", got); + } + [Fact] + public void Golden_StdDev() + { + using var ind = new Wickra.StdDev(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("StdDev", got); + } + [Fact] + public void Golden_StepTrailingStop() + { + using var ind = new Wickra.StepTrailingStop(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("StepTrailingStop", got); + } + [Fact] + public void Golden_SterlingRatio() + { + using var ind = new Wickra.SterlingRatio(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("SterlingRatio", got); + } + [Fact] + public void Golden_StickSandwich() + { + using var ind = new Wickra.StickSandwich(); + 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("StickSandwich", got); + } + [Fact] + public void Golden_StochRsi() + { + using var ind = new Wickra.StochRsi(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("StochRsi", got); + } + [Fact] + public void Golden_Stochastic() + { + using var ind = new Wickra.Stochastic(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("Stochastic", got); + } + [Fact] + public void Golden_StochasticCci() + { + using var ind = new Wickra.StochasticCci(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("StochasticCci", got); + } + [Fact] + public void Golden_SuperSmoother() + { + using var ind = new Wickra.SuperSmoother(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("SuperSmoother", got); + } + [Fact] + public void Golden_SuperTrend() + { + using var ind = new Wickra.SuperTrend(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("SuperTrend", got); + } + [Fact] + public void Golden_T3() + { + using var ind = new Wickra.T3(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("T3", got); + } + [Fact] + public void Golden_TailRatio() + { + using var ind = new Wickra.TailRatio(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("TailRatio", got); + } + [Fact] + public void Golden_TakerBuySellRatio() + { + using var ind = new Wickra.TakerBuySellRatio(); + 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("TakerBuySellRatio", got); + } + [Fact] + public void Golden_Takuri() + { + using var ind = new Wickra.Takuri(); + 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("Takuri", got); + } + [Fact] + public void Golden_TasukiGap() + { + using var ind = new Wickra.TasukiGap(); + 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("TasukiGap", got); + } + [Fact] + public void Golden_TdCamouflage() + { + using var ind = new Wickra.TdCamouflage(); + 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("TdCamouflage", got); + } + [Fact] + public void Golden_TdClop() + { + using var ind = new Wickra.TdClop(); + 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("TdClop", got); + } + [Fact] + public void Golden_TdClopwin() + { + using var ind = new Wickra.TdClopwin(); + 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("TdClopwin", got); + } + [Fact] + public void Golden_TdCombo() + { + using var ind = new Wickra.TdCombo(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[0], r[1], r[2], r[3], r[4], i) }); + } + Compare("TdCombo", got); + } + [Fact] + public void Golden_TdCountdown() + { + using var ind = new Wickra.TdCountdown(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[0], r[1], r[2], r[3], r[4], i) }); + } + Compare("TdCountdown", got); + } + [Fact] + public void Golden_TdDWave() + { + using var ind = new Wickra.TdDWave(2); + 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("TdDWave", got); + } + [Fact] + public void Golden_TdDeMarker() + { + using var ind = new Wickra.TdDeMarker(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("TdDeMarker", got); + } + [Fact] + public void Golden_TdDifferential() + { + using var ind = new Wickra.TdDifferential(); + 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("TdDifferential", got); + } + [Fact] + public void Golden_TdLines() + { + using var ind = new Wickra.TdLines(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("TdLines", got); + } + [Fact] + public void Golden_TdMovingAverage() + { + using var ind = new Wickra.TdMovingAverage(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("TdMovingAverage", got); + } + [Fact] + public void Golden_TdOpen() + { + using var ind = new Wickra.TdOpen(); + 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("TdOpen", got); + } + [Fact] + public void Golden_TdPressure() + { + using var ind = new Wickra.TdPressure(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("TdPressure", got); + } + [Fact] + public void Golden_TdPropulsion() + { + using var ind = new Wickra.TdPropulsion(); + 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("TdPropulsion", got); + } + [Fact] + public void Golden_TdRangeProjection() + { + using var ind = new Wickra.TdRangeProjection(); + 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("TdRangeProjection", got); + } + [Fact] + public void Golden_TdRei() + { + using var ind = new Wickra.TdRei(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("TdRei", got); + } + [Fact] + public void Golden_TdRiskLevel() + { + using var ind = new Wickra.TdRiskLevel(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("TdRiskLevel", got); + } + [Fact] + public void Golden_TdSequential() + { + using var ind = new Wickra.TdSequential(3, 7, 14, 28); + 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("TdSequential", got); + } + [Fact] + public void Golden_TdSetup() + { + using var ind = new Wickra.TdSetup(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("TdSetup", got); + } + [Fact] + public void Golden_TdTrap() + { + using var ind = new Wickra.TdTrap(); + 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("TdTrap", got); + } + [Fact] + public void Golden_Tema() + { + using var ind = new Wickra.Tema(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("Tema", got); + } + [Fact] + public void Golden_TermStructureBasis() + { + using var ind = new Wickra.TermStructureBasis(); + 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("TermStructureBasis", got); + } + [Fact] + public void Golden_ThreeDrives() + { + using var ind = new Wickra.ThreeDrives(); + 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("ThreeDrives", got); + } + [Fact] + public void Golden_ThreeInside() + { + using var ind = new Wickra.ThreeInside(); + 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("ThreeInside", got); + } + [Fact] + public void Golden_ThreeLineBreak() + { + using var ind = new Wickra.ThreeLineBreak(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("ThreeLineBreak", got); + } + [Fact] + public void Golden_ThreeLineBreakBars() + { + using var ind = new Wickra.ThreeLineBreakBars(3); + 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("ThreeLineBreakBars", got); + } + [Fact] + public void Golden_ThreeLineStrike() + { + using var ind = new Wickra.ThreeLineStrike(); + 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("ThreeLineStrike", got); + } + [Fact] + public void Golden_ThreeOutside() + { + using var ind = new Wickra.ThreeOutside(); + 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("ThreeOutside", got); + } + [Fact] + public void Golden_ThreeSoldiersOrCrows() + { + using var ind = new Wickra.ThreeSoldiersOrCrows(); + 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("ThreeSoldiersOrCrows", got); + } + [Fact] + public void Golden_ThreeStarsInSouth() + { + using var ind = new Wickra.ThreeStarsInSouth(); + 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("ThreeStarsInSouth", got); + } + [Fact] + public void Golden_Thrusting() + { + using var ind = new Wickra.Thrusting(); + 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("Thrusting", got); + } + [Fact] + public void Golden_TickBars() + { + using var ind = new Wickra.TickBars(2); + 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("TickBars", got); + } + [Fact] + public void Golden_TickIndex() + { + using var ind = new Wickra.TickIndex(); + 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("TickIndex", got); + } + [Fact] + public void Golden_Tii() + { + using var ind = new Wickra.Tii(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("Tii", got); + } + [Fact] + public void Golden_TimeBasedStop() + { + using var ind = new Wickra.TimeBasedStop(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("TimeBasedStop", got); + } + [Fact] + public void Golden_TimeOfDayReturnProfile() + { + using var ind = new Wickra.TimeOfDayReturnProfile(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("TimeOfDayReturnProfile", got); + } + [Fact] + public void Golden_TowerTopBottom() + { + using var ind = new Wickra.TowerTopBottom(); + 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("TowerTopBottom", got); + } + [Fact] + public void Golden_TpoProfile() + { + using var ind = new Wickra.TpoProfile(30, 50); + 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), 52)); + } + Compare("TpoProfile", got); + } + [Fact] + public void Golden_TradeImbalance() + { + using var ind = new Wickra.TradeImbalance(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("TradeImbalance", got); + } + [Fact] + public void Golden_TradeSignAutocorrelation() + { + using var ind = new Wickra.TradeSignAutocorrelation(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("TradeSignAutocorrelation", got); + } + [Fact] + public void Golden_TradeVolumeIndex() + { + using var ind = new Wickra.TradeVolumeIndex(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("TradeVolumeIndex", got); + } + [Fact] + public void Golden_TrendLabel() + { + using var ind = new Wickra.TrendLabel(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("TrendLabel", got); + } + [Fact] + public void Golden_TrendStrengthIndex() + { + using var ind = new Wickra.TrendStrengthIndex(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("TrendStrengthIndex", got); + } + [Fact] + public void Golden_Trendflex() + { + using var ind = new Wickra.Trendflex(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("Trendflex", got); + } + [Fact] + public void Golden_TreynorRatio() + { + using var ind = new Wickra.TreynorRatio(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("TreynorRatio", got); + } + [Fact] + public void Golden_Triangle() + { + using var ind = new Wickra.Triangle(); + 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("Triangle", got); + } + [Fact] + public void Golden_Trima() + { + using var ind = new Wickra.Trima(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("Trima", got); + } + [Fact] + public void Golden_Trin() + { + using var ind = new Wickra.Trin(); + 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("Trin", got); + } + [Fact] + public void Golden_TripleTopBottom() + { + using var ind = new Wickra.TripleTopBottom(); + 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("TripleTopBottom", got); + } + [Fact] + public void Golden_Tristar() + { + using var ind = new Wickra.Tristar(); + 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("Tristar", got); + } + [Fact] + public void Golden_Trix() + { + using var ind = new Wickra.Trix(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("Trix", got); + } + [Fact] + public void Golden_TrueRange() + { + using var ind = new Wickra.TrueRange(); + 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("TrueRange", got); + } + [Fact] + public void Golden_Tsf() + { + using var ind = new Wickra.Tsf(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("Tsf", got); + } + [Fact] + public void Golden_TsfOscillator() + { + using var ind = new Wickra.TsfOscillator(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("TsfOscillator", got); + } + [Fact] + public void Golden_Tsi() + { + using var ind = new Wickra.Tsi(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("Tsi", got); + } + [Fact] + public void Golden_Tsv() + { + using var ind = new Wickra.Tsv(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("Tsv", got); + } + [Fact] + public void Golden_TtmSqueeze() + { + using var ind = new Wickra.TtmSqueeze(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("TtmSqueeze", got); + } + [Fact] + public void Golden_TtmTrend() + { + using var ind = new Wickra.TtmTrend(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("TtmTrend", got); + } + [Fact] + public void Golden_TurnOfMonth() + { + using var ind = new Wickra.TurnOfMonth(3u, 3u, 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("TurnOfMonth", got); + } + [Fact] + public void Golden_Tweezer() + { + using var ind = new Wickra.Tweezer(); + 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("Tweezer", got); + } + [Fact] + public void Golden_TwiggsMoneyFlow() + { + using var ind = new Wickra.TwiggsMoneyFlow(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("TwiggsMoneyFlow", got); + } + [Fact] + public void Golden_TwoCrows() + { + using var ind = new Wickra.TwoCrows(); + 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("TwoCrows", got); + } + [Fact] + public void Golden_TypicalPrice() + { + using var ind = new Wickra.TypicalPrice(); + 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("TypicalPrice", got); + } + [Fact] + public void Golden_UlcerIndex() + { + using var ind = new Wickra.UlcerIndex(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("UlcerIndex", got); + } + [Fact] + public void Golden_UltimateOscillator() + { + using var ind = new Wickra.UltimateOscillator(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("UltimateOscillator", got); + } + [Fact] + public void Golden_UniqueThreeRiver() + { + using var ind = new Wickra.UniqueThreeRiver(); + 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("UniqueThreeRiver", got); + } + [Fact] + public void Golden_UniversalOscillator() + { + using var ind = new Wickra.UniversalOscillator(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("UniversalOscillator", got); + } + [Fact] + public void Golden_UpDownVolumeRatio() + { + using var ind = new Wickra.UpDownVolumeRatio(); + 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("UpDownVolumeRatio", got); + } + [Fact] + public void Golden_UpsideGapThreeMethods() + { + using var ind = new Wickra.UpsideGapThreeMethods(); + 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("UpsideGapThreeMethods", got); + } + [Fact] + public void Golden_UpsideGapTwoCrows() + { + using var ind = new Wickra.UpsideGapTwoCrows(); + 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("UpsideGapTwoCrows", got); + } + [Fact] + public void Golden_UpsidePotentialRatio() + { + using var ind = new Wickra.UpsidePotentialRatio(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("UpsidePotentialRatio", got); + } + [Fact] + public void Golden_ValueArea() + { + using var ind = new Wickra.ValueArea(20, 50, 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("ValueArea", got); + } + [Fact] + public void Golden_ValueAtRisk() + { + using var ind = new Wickra.ValueAtRisk(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("ValueAtRisk", got); + } + [Fact] + public void Golden_Variance() + { + using var ind = new Wickra.Variance(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("Variance", got); + } + [Fact] + public void Golden_VarianceRatio() + { + using var ind = new Wickra.VarianceRatio(60, 2); + 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("VarianceRatio", got); + } + [Fact] + public void Golden_VerticalHorizontalFilter() + { + using var ind = new Wickra.VerticalHorizontalFilter(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("VerticalHorizontalFilter", got); + } + [Fact] + public void Golden_Vidya() + { + using var ind = new Wickra.Vidya(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("Vidya", got); + } + [Fact] + public void Golden_VolatilityCone() + { + using var ind = new Wickra.VolatilityCone(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), 5)); + } + Compare("VolatilityCone", got); + } + [Fact] + public void Golden_VolatilityOfVolatility() + { + using var ind = new Wickra.VolatilityOfVolatility(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("VolatilityOfVolatility", got); + } + [Fact] + public void Golden_VolatilityRatio() + { + using var ind = new Wickra.VolatilityRatio(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("VolatilityRatio", got); + } + [Fact] + public void Golden_VoltyStop() + { + using var ind = new Wickra.VoltyStop(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("VoltyStop", got); + } + [Fact] + public void Golden_VolumeBars() + { + using var ind = new Wickra.VolumeBars(500.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("VolumeBars", got); + } + [Fact] + public void Golden_VolumeByTimeProfile() + { + using var ind = new Wickra.VolumeByTimeProfile(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("VolumeByTimeProfile", got); + } + [Fact] + public void Golden_VolumeOscillator() + { + using var ind = new Wickra.VolumeOscillator(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("VolumeOscillator", got); + } + [Fact] + public void Golden_VolumePriceTrend() + { + using var ind = new Wickra.VolumePriceTrend(); + 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("VolumePriceTrend", got); + } + [Fact] + public void Golden_VolumeProfile() + { + using var ind = new Wickra.VolumeProfile(20, 50); + 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), 52)); + } + Compare("VolumeProfile", got); + } + [Fact] + public void Golden_VolumeRsi() + { + using var ind = new Wickra.VolumeRsi(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("VolumeRsi", got); + } + [Fact] + public void Golden_VolumeWeightedMacd() + { + using var ind = new Wickra.VolumeWeightedMacd(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("VolumeWeightedMacd", got); + } + [Fact] + public void Golden_VolumeWeightedSr() + { + using var ind = new Wickra.VolumeWeightedSr(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("VolumeWeightedSr", got); + } + [Fact] + public void Golden_Vortex() + { + using var ind = new Wickra.Vortex(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("Vortex", got); + } + [Fact] + public void Golden_Vpin() + { + using var ind = new Wickra.Vpin(5000.0, 10); + 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("Vpin", got); + } + [Fact] + public void Golden_Vwap() + { + using var ind = new Wickra.Vwap(); + 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("Vwap", got); + } + [Fact] + public void Golden_VwapStdDevBands() + { + using var ind = new Wickra.VwapStdDevBands(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), 4)); + } + Compare("VwapStdDevBands", got); + } + [Fact] + public void Golden_Vwma() + { + using var ind = new Wickra.Vwma(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("Vwma", got); + } + [Fact] + public void Golden_Vzo() + { + using var ind = new Wickra.Vzo(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("Vzo", got); + } + [Fact] + public void Golden_Wad() + { + using var ind = new Wickra.Wad(); + 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("Wad", got); + } + [Fact] + public void Golden_WavePm() + { + using var ind = new Wickra.WavePm(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("WavePm", got); + } + [Fact] + public void Golden_WaveTrend() + { + using var ind = new Wickra.WaveTrend(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("WaveTrend", got); + } + [Fact] + public void Golden_Wedge() + { + using var ind = new Wickra.Wedge(); + 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("Wedge", got); + } + [Fact] + public void Golden_WeightedClose() + { + using var ind = new Wickra.WeightedClose(); + 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("WeightedClose", got); + } + [Fact] + public void Golden_WickRatio() + { + using var ind = new Wickra.WickRatio(); + 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("WickRatio", got); + } + [Fact] + public void Golden_WilliamsFractals() + { + using var ind = new Wickra.WilliamsFractals(); + 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("WilliamsFractals", got); + } + [Fact] + public void Golden_WilliamsR() + { + using var ind = new Wickra.WilliamsR(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("WilliamsR", got); + } + [Fact] + public void Golden_WinRate() + { + using var ind = new Wickra.WinRate(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("WinRate", got); + } + [Fact] + public void Golden_Wma() + { + using var ind = new Wickra.Wma(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("Wma", got); + } + [Fact] + public void Golden_WoodiePivots() + { + using var ind = new Wickra.WoodiePivots(); + 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("WoodiePivots", got); + } + [Fact] + public void Golden_YangZhangVolatility() + { + using var ind = new Wickra.YangZhangVolatility(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("YangZhangVolatility", got); + } + [Fact] + public void Golden_YoyoExit() + { + using var ind = new Wickra.YoyoExit(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("YoyoExit", got); + } + [Fact] + public void Golden_ZScore() + { + using var ind = new Wickra.ZScore(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("ZScore", got); + } + [Fact] + public void Golden_ZeroLagMacd() + { + using var ind = new Wickra.ZeroLagMacd(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[3]), 3)); + } + Compare("ZeroLagMacd", got); + } + [Fact] + public void Golden_ZigZag() + { + using var ind = new Wickra.ZigZag(0.02); + 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("ZigZag", got); + } + [Fact] + public void Golden_Zlema() + { + using var ind = new Wickra.Zlema(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("Zlema", got); + } +} diff --git a/bindings/csharp/Wickra.Tests/GoldenTests.cs b/bindings/csharp/Wickra.Tests/GoldenTests.cs index e4360e6f..dd424f3c 100644 --- a/bindings/csharp/Wickra.Tests/GoldenTests.cs +++ b/bindings/csharp/Wickra.Tests/GoldenTests.cs @@ -159,4 +159,58 @@ public class GoldenTests AssertClose(got.Value.Adx, Cell(e[2]), i, "adx.adx"); } } + + // --- the four de-duplicated indicators ------------------------------------ + + [Fact] + public void Candle_AdOscillator_MatchesGolden() + { + var input = Input(); + var expected = ReadCsv("ad_oscillator"); + using var ad = new AdOscillator(); + for (var i = 0; i < input.Length; i++) + { + var (o, h, l, c, v) = (input[i][0], input[i][1], input[i][2], input[i][3], input[i][4]); + AssertClose(ad.Update(o, h, l, c, v, i), Cell(expected[i][0]), i, "ad_oscillator"); + } + } + + [Fact] + public void Candle_IntradayIntensity_MatchesGolden() + { + var input = Input(); + var expected = ReadCsv("intraday_intensity"); + using var ii = new IntradayIntensity(); + for (var i = 0; i < input.Length; i++) + { + var (o, h, l, c, v) = (input[i][0], input[i][1], input[i][2], input[i][3], input[i][4]); + AssertClose(ii.Update(o, h, l, c, v, i), Cell(expected[i][0]), i, "intraday_intensity"); + } + } + + [Fact] + public void Candle_AwesomeOscillatorHistogram_MatchesGolden() + { + var input = Input(); + var expected = ReadCsv("awesome_oscillator_histogram"); + using var aoh = new AwesomeOscillatorHistogram(5, 34, 1); + for (var i = 0; i < input.Length; i++) + { + var (o, h, l, c, v) = (input[i][0], input[i][1], input[i][2], input[i][3], input[i][4]); + AssertClose(aoh.Update(o, h, l, c, v, i), Cell(expected[i][0]), i, "awesome_oscillator_histogram"); + } + } + + [Fact] + public void Scalar_AverageDrawdown_MatchesGolden() + { + var input = Input(); + var expected = ReadCsv("average_drawdown"); + using var avg = new AverageDrawdown(20); + for (var i = 0; i < input.Length; i++) + { + // generator fed the close column as the equity-curve sample. + AssertClose(avg.Update(input[i][3]), Cell(expected[i][0]), i, "average_drawdown"); + } + } } diff --git a/bindings/csharp/Wickra/Generated/Indicators.g.cs b/bindings/csharp/Wickra/Generated/Indicators.g.cs index ed1f0e30..293a2e96 100644 --- a/bindings/csharp/Wickra/Generated/Indicators.g.cs +++ b/bindings/csharp/Wickra/Generated/Indicators.g.cs @@ -1,5 +1,6 @@ // // Generated from bindings/c/include/wickra.h. Do not edit by hand. +#nullable enable using System.Runtime.InteropServices; namespace Wickra; diff --git a/bindings/csharp/gen_golden_test.py b/bindings/csharp/gen_golden_test.py new file mode 100644 index 00000000..39564684 --- /dev/null +++ b/bindings/csharp/gen_golden_test.py @@ -0,0 +1,300 @@ +"""Generate Wickra.Tests/GoldenAllTests.g.cs: a value-parity test that replays +the shared golden input through every one of the 514 C# indicators and checks +output bit-for-bit against the Rust reference fixtures g_.csv. + +Run from repo root: python bindings/csharp/gen_golden_test.py +""" +import glob +import json +import os +import re + +ROOT = os.path.normpath(os.path.join(os.path.dirname(__file__), "..", "..")) +G = os.path.join(ROOT, "testdata", "golden") +GEN = open(os.path.join(ROOT, "bindings", "csharp", "Wickra", "Generated", "Indicators.g.cs"), encoding="utf-8").read() + +# C# constructor parameter types per class. +ctor_types = {} +cur = None +for line in GEN.splitlines(): + m = re.match(r"public sealed class (\w+)", line) + if m: + cur = m.group(1) + continue + if cur: + cm = re.match(r"\s*public %s\(([^)]*)\)" % re.escape(cur), line) + if cm: + ps = cm.group(1).strip() + types = [p.strip().rsplit(" ", 1)[0].strip() for p in ps.split(",")] if ps else [] + ctor_types[cur] = types + cur = None + +# Unified archetype + params, keyed by canonical (== C# class name). +spec = {} +for e in json.load(open(os.path.join(G, "scalar_manifest.json"))): + arch = {"f64": "scalar_f64", "Candle": "scalar_candle", "(f64, f64)": "pairwise"}[e["input"]] + spec[e["canonical"]] = {"arch": arch, "params": e["params"]} +for e in json.load(open(os.path.join(G, "multi_manifest.json"))): + arch = {"f64": "multi_f64", "Candle": "multi_candle", "(f64, f64)": "multi_pairwise"}[e["input"]] + spec[e["canonical"]] = {"arch": arch, "params": e["params"], "n": e["n"]} +ex = json.load(open(os.path.join(G, "exotic_manifest.json"))) +for e in ex["deriv"]: + spec[e["canonical"]] = {"arch": "deriv_multi" if "n" in e else "deriv", "params": e["params"], "n": e.get("n")} +for e in ex["cross"]: + spec[e["canonical"]] = {"arch": "cross", "params": e["params"]} +for e in ex["trade"]: + spec[e["canonical"]] = {"arch": "trade", "params": e["params"]} +for e in ex["trademid"]: + spec[e["canonical"]] = {"arch": "trademid", "params": e["params"]} +for e in ex["ob"]: + spec[e["canonical"]] = {"arch": "ob", "params": e["params"]} +for e in json.load(open(os.path.join(G, "profile_manifest.json"))): + spec[e["canonical"]] = {"arch": "profile_" + e["kind"], "params": e["params"], "width": e["width"]} +for e in json.load(open(os.path.join(G, "bars_manifest.json"))): + arch = "footprint" if e["canonical"] == "Footprint" else "bars_" + e["feed"] + spec[e["canonical"]] = {"arch": arch, "params": e["params"]} + +canons = sorted(os.path.basename(f)[2:-4] for f in glob.glob(os.path.join(G, "g_*.csv"))) + + +def lit(value, cstype): + if cstype == "int": + return str(int(round(value))) + if cstype == "uint": + return f"{int(round(value))}u" + if cstype == "byte": + return f"(byte){int(round(value))}" + f = float(value) + s = repr(f) + return s if ("." in s or "e" in s or "E" in s) else s + ".0" + + +def ctor_call(canon): + types = ctor_types.get(canon, []) + vals = spec[canon]["params"] + args = ", ".join(lit(v, t) for v, t in zip(vals, types)) + return f"new Wickra.{canon}({args})" + + +def block(canon): + s = spec[canon] + a = s["arch"] + L = [f" [Fact]", f" public void Golden_{canon}()", " {"] + L.append(f" using var ind = {ctor_call(canon)};") + L.append(" var got = new List();") + L.append(" for (var i = 0; i < Rows.Length; i++)") + L.append(" {") + L.append(" var r = Rows[i];") + if a == "scalar_f64": + L.append(" got.Add(new[] { ind.Update(r[3]) });") + elif a == "pairwise": + L.append(" got.Add(new[] { ind.Update(r[3], r[0]) });") + elif a == "scalar_candle": + L.append(" got.Add(new[] { ind.Update(r[0], r[1], r[2], r[3], r[4], i) });") + elif a == "trade": + L.append(" got.Add(new[] { ind.Update(r[3], r[4], r[3] >= r[0], i) });") + elif a == "trademid": + L.append(" got.Add(new[] { ind.Update(r[3], r[4], r[3] >= r[0], i, (r[1] + r[2]) / 2) });") + elif a == "ob": + L.append(" var (bp, bs, ap, asz) = ObLists(r);") + L.append(" got.Add(new[] { ind.Update(bp, bs, ap, asz) });") + elif a == "deriv": + L.append(" var d = DerivFields(r);") + L.append(" 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) });") + elif a == "deriv_multi": + L.append(" var d = DerivFields(r);") + L.append(" 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), %d));" % s["n"]) + elif a == "cross": + L.append(" var (ch, vo, nh, nl, am, ob) = CrossLists(r);") + L.append(" got.Add(new[] { ind.Update(ch, vo, nh, nl, am, ob, i) });") + elif a == "multi_f64": + L.append(" got.Add(FlattenNullable(ind.Update(r[3]), %d));" % s["n"]) + elif a == "multi_pairwise": + L.append(" got.Add(FlattenNullable(ind.Update(r[3], r[0]), %d));" % s["n"]) + elif a == "multi_candle": + L.append(" got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), %d));" % s["n"]) + elif a == "profile_bins": + L.append(" var bins = ind.Update(r[0], r[1], r[2], r[3], r[4], i);") + L.append(" got.Add(bins ?? NanRow(%d));" % s["width"]) + elif a == "profile_pricebins": + L.append(" got.Add(FlattenNullable(ind.Update(r[0], r[1], r[2], r[3], r[4], i), %d));" % s["width"]) + elif a == "bars_close": + L.append(" got.Add(FlattenBars(ind.Update(r[3], r[3], r[3], r[3], 1.0, 0)));") + elif a == "bars_candle4": + L.append(" got.Add(FlattenBars(ind.Update(r[0], r[1], r[2], r[3], 1.0, 0)));") + elif a == "bars_candle5": + L.append(" got.Add(FlattenBars(ind.Update(r[0], r[1], r[2], r[3], r[4], 0)));") + elif a == "footprint": + L.append(" got.Add(FlattenBars(ind.Update(r[3], r[4], r[3] >= r[0], i)));") + else: + raise SystemExit("arch " + a) + L.append(" }") + L.append(f' Compare("{canon}", got);') + L.append(" }") + return "\n".join(L) + + +HEADER = '''// +// 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}"); + } + } + } +''' + +out = [HEADER] +for canon in canons: + out.append(block(canon)) +out.append("}") +open(os.path.join(ROOT, "bindings", "csharp", "Wickra.Tests", "GoldenAllTests.g.cs"), "w", encoding="utf-8").write("\n".join(out) + "\n") +print("generated GoldenAllTests.g.cs with", len(canons), "indicators") diff --git a/bindings/go/gen_golden_test.py b/bindings/go/gen_golden_test.py new file mode 100644 index 00000000..6343310f --- /dev/null +++ b/bindings/go/gen_golden_test.py @@ -0,0 +1,337 @@ +"""Generate golden_all_test.go: a value-parity test that replays the shared +golden input through every one of the 514 Go indicators and checks output +bit-for-bit against the Rust-generated g_.csv fixtures. + +Run from repo root: python bindings/go/gen_golden_test.py +""" +import glob +import json +import os +import re + +ROOT = os.path.normpath(os.path.join(os.path.dirname(__file__), "..", "..")) +G = os.path.join(ROOT, "testdata", "golden") +GEN = open(os.path.join(ROOT, "bindings", "go", "indicators_gen.go"), encoding="utf-8").read() + +# Go constructor parameter types, keyed by canonical (== Go type name). +ctor_types = {} +for m in re.finditer(r"func New(\w+)\(([^)]*)\)\s*\(\*\w+, error\)", GEN): + name, ps = m.group(1), m.group(2).strip() + types = [] + if ps: + for p in ps.split(","): + p = p.strip() + _, _, ty = p.partition(" ") + types.append(ty.strip()) + ctor_types[name] = types + +# Unified archetype + params, keyed by canonical. +spec = {} # canon -> dict(arch, params, width?, n?) +scal = json.load(open(os.path.join(G, "scalar_manifest.json"))) +for e in scal: + inp = e["input"] + arch = {"f64": "scalar_f64", "Candle": "scalar_candle", "(f64, f64)": "pairwise"}[inp] + spec[e["canonical"]] = {"arch": arch, "params": e["params"]} +for e in json.load(open(os.path.join(G, "multi_manifest.json"))): + inp = e["input"] + arch = {"f64": "multi_f64", "Candle": "multi_candle", "(f64, f64)": "multi_pairwise"}[inp] + spec[e["canonical"]] = {"arch": arch, "params": e["params"], "n": e["n"]} +ex = json.load(open(os.path.join(G, "exotic_manifest.json"))) +for e in ex["deriv"]: + spec[e["canonical"]] = {"arch": "deriv_multi" if "n" in e else "deriv", "params": e["params"], "n": e.get("n")} +for e in ex["cross"]: + spec[e["canonical"]] = {"arch": "cross", "params": e["params"]} +for e in ex["trade"]: + spec[e["canonical"]] = {"arch": "trade", "params": e["params"]} +for e in ex["trademid"]: + spec[e["canonical"]] = {"arch": "trademid", "params": e["params"]} +for e in ex["ob"]: + spec[e["canonical"]] = {"arch": "ob", "params": e["params"]} +for e in json.load(open(os.path.join(G, "profile_manifest.json"))): + spec[e["canonical"]] = {"arch": "profile_" + e["kind"], "params": e["params"], "width": e["width"]} +for e in json.load(open(os.path.join(G, "bars_manifest.json"))): + arch = "footprint" if e["canonical"] == "Footprint" else "bars_" + e["feed"] + spec[e["canonical"]] = {"arch": arch, "params": e["params"]} + +canons = sorted(os.path.basename(f)[2:-4] for f in glob.glob(os.path.join(G, "g_*.csv"))) + + +def go_param(value, gotype): + intlike = gotype in ("int", "int32", "int64", "uint", "uintptr", "usize") + if intlike: + return str(int(round(value))) + # float64 + return repr(float(value)) if "." in repr(float(value)) or "e" in repr(float(value)) else f"{float(value)}" + + +def ctor_call(canon): + types = ctor_types.get(canon, []) + vals = spec[canon]["params"] + args = ", ".join(go_param(v, t) for v, t in zip(vals, types)) + return f"New{canon}({args})" + + +# Update-call expression + output handling per archetype. +def block(canon): + s = spec[canon] + a = s["arch"] + ctor = ctor_call(canon) + lines = [f'\tt.Run("{canon}", func(t *testing.T) {{'] + lines.append(f"\t\tind, err := {ctor}") + lines.append('\t\tif err != nil {') + lines.append(f'\t\t\tt.Fatalf("new {canon}: %v", err)') + lines.append("\t\t}") + lines.append("\t\tgot := make([][]float64, len(rows))") + lines.append("\t\tfor i, r := range rows {") + if a == "scalar_f64": + upd = "ind.Update(r[3])" + lines.append(f"\t\t\tgot[i] = []float64{{{upd}}}") + elif a == "pairwise": + lines.append("\t\t\tgot[i] = []float64{ind.Update(r[3], r[0])}") + elif a == "scalar_candle": + lines.append("\t\t\tgot[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))}") + elif a == "trade": + lines.append("\t\t\tgot[i] = []float64{ind.Update(r[3], r[4], r[3] >= r[0], int64(i))}") + elif a == "trademid": + lines.append("\t\t\tgot[i] = []float64{ind.Update(r[3], r[4], r[3] >= r[0], int64(i), (r[1]+r[2])/2)}") + elif a == "ob": + lines.append("\t\t\tbp, bs, ap, as_ := obLists(r)") + lines.append("\t\t\tgot[i] = []float64{ind.Update(bp, bs, ap, as_)}") + elif a == "deriv": + lines.append("\t\t\td := derivFields(r)") + lines.append("\t\t\tgot[i] = []float64{ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], int64(i))}") + elif a == "deriv_multi": + lines.append("\t\t\td := derivFields(r)") + lines.append("\t\t\tout, ok := ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], int64(i))") + lines.append(f"\t\t\tgot[i] = reflectRow(out, ok, {s['n']})") + elif a == "cross": + lines.append("\t\t\tch, vo, nh, nl, am, ob_ := crossLists(r)") + lines.append("\t\t\tgot[i] = []float64{ind.Update(ch, vo, nh, nl, am, ob_, int64(i))}") + elif a in ("multi_f64",): + lines.append("\t\t\tout, ok := ind.Update(r[3])") + lines.append(f"\t\t\tgot[i] = reflectRow(out, ok, {s['n']})") + elif a == "multi_pairwise": + lines.append("\t\t\tout, ok := ind.Update(r[3], r[0])") + lines.append(f"\t\t\tgot[i] = reflectRow(out, ok, {s['n']})") + elif a == "multi_candle": + lines.append("\t\t\tout, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))") + lines.append(f"\t\t\tgot[i] = reflectRow(out, ok, {s['n']})") + elif a == "profile_bins": + lines.append("\t\t\tbins, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))") + lines.append(f"\t\t\tif ok {{ got[i] = bins }} else {{ got[i] = nanRow({s['width']}) }}") + elif a == "profile_pricebins": + lines.append("\t\t\tout, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))") + lines.append(f"\t\t\tgot[i] = reflectRow(out, ok, {s['width']})") + elif a == "bars_close": + lines.append("\t\t\tgot[i] = flattenBars(ind.Update(r[3], r[3], r[3], r[3], 1.0, 0))") + elif a == "bars_candle4": + lines.append("\t\t\tgot[i] = flattenBars(ind.Update(r[0], r[1], r[2], r[3], 1.0, 0))") + elif a == "bars_candle5": + lines.append("\t\t\tgot[i] = flattenBars(ind.Update(r[0], r[1], r[2], r[3], r[4], 0))") + elif a == "footprint": + lines.append("\t\t\tgot[i] = flattenBars(ind.Update(r[3], r[4], r[3] >= r[0], int64(i)))") + else: + raise SystemExit("unknown arch " + a) + lines.append("\t\t}") + lines.append(f'\t\tcompareGolden(t, "{canon}", got)') + lines.append("\t})") + return "\n".join(lines) + + +HEADER = '''// Code generated by gen_golden_test.py. DO NOT EDIT. +// +// Value-parity for every one of the 514 Go 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 a single comparator covers all +// archetypes. Regenerate with: python bindings/go/gen_golden_test.py + +package wickra + +import ( +\t"bufio" +\t"math" +\t"os" +\t"reflect" +\t"strings" +\t"testing" +) + +// readGoldenRaw keeps blank lines (a candle on which no bar closed) so bar rows +// stay aligned to the input; non-bar fixtures contain no blank lines. +func readGoldenRaw(t *testing.T, name string) [][]string { +\tt.Helper() +\tf, err := os.Open("../../testdata/golden/" + name + ".csv") +\tif err != nil { +\t\tt.Fatalf("open %s: %v", name, err) +\t} +\tdefer f.Close() +\tvar rows [][]string +\tsc := bufio.NewScanner(f) +\tsc.Buffer(make([]byte, 0, 1024*1024), 1024*1024) +\tfirst := true +\tfor sc.Scan() { +\t\tline := sc.Text() +\t\tif first { +\t\t\tfirst = false +\t\t\tcontinue +\t\t} +\t\tif line == "" { +\t\t\trows = append(rows, []string{}) +\t\t\tcontinue +\t\t} +\t\trows = append(rows, strings.Split(line, ",")) +\t} +\treturn rows +} + +func nanRow(n int) []float64 { +\tr := make([]float64, n) +\tfor i := range r { +\t\tr[i] = math.NaN() +\t} +\treturn r +} + +func reflectRow(out any, ok bool, width int) []float64 { +\tif !ok { +\t\treturn nanRow(width) +\t} +\tv := reflect.ValueOf(out) +\trow := make([]float64, 0, width) +\tfor k := 0; k < v.NumField(); k++ { +\t\trow = appendField(row, v.Field(k)) +\t} +\treturn row +} + +func appendField(row []float64, f reflect.Value) []float64 { +\tswitch f.Kind() { +\tcase reflect.Float64, reflect.Float32: +\t\treturn append(row, f.Float()) +\tcase reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: +\t\treturn append(row, float64(f.Int())) +\tcase reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: +\t\treturn append(row, float64(f.Uint())) +\tcase reflect.Slice: +\t\tfor j := 0; j < f.Len(); j++ { +\t\t\trow = appendField(row, f.Index(j)) +\t\t} +\t\treturn row +\tdefault: +\t\treturn row +\t} +} + +func flattenBars(bars any) []float64 { +\tv := reflect.ValueOf(bars) +\trow := []float64{} +\tfor i := 0; i < v.Len(); i++ { +\t\tbar := v.Index(i) +\t\tfor k := 0; k < bar.NumField(); k++ { +\t\t\trow = appendField(row, bar.Field(k)) +\t\t} +\t} +\treturn row +} + +// Synthetic feeds derived from one OHLCV row, identical to gen_golden's Rust +// construction (DerivativesTick / CrossSection / OrderBook). +func derivFields(r []float64) [11]float64 { +\to, h, l, c, v := r[0], r[1], r[2], r[3], r[4] +\treturn [11]float64{ +\t\t(c - o) / c * 0.01, // funding_rate +\t\tc, // mark_price +\t\tc - 0.5, // index_price +\t\tc + 1.0, // futures_price +\t\tv * 10.0, // open_interest +\t\tv * 0.6, // long_size +\t\tv * 0.4, // short_size +\t\tv * 0.55, // taker_buy_volume +\t\tv * 0.45, // taker_sell_volume +\t\th - c, // long_liquidation +\t\tc - l, // short_liquidation +\t} +} + +func crossLists(r []float64) ([]float64, []float64, []bool, []bool, []bool, []bool) { +\to, c, v := r[0], r[3], r[4] +\tchange := make([]float64, 5) +\tvolume := make([]float64, 5) +\tnewHigh := make([]bool, 5) +\tnewLow := make([]bool, 5) +\taboveMa := make([]bool, 5) +\tonBuy := make([]bool, 5) +\tfor j := 0; j < 5; j++ { +\t\tjf := float64(j) +\t\tchange[j] = (c - o) + jf +\t\tvolume[j] = v + jf*10.0 +\t\tnewHigh[j] = j%2 == 0 +\t\tnewLow[j] = j%3 == 0 +\t\taboveMa[j] = j%2 == 0 +\t\tonBuy[j] = j%3 == 0 +\t} +\treturn change, volume, newHigh, newLow, aboveMa, onBuy +} + +func obLists(r []float64) ([]float64, []float64, []float64, []float64) { +\tc, v := r[3], r[4] +\tbidPx := make([]float64, 5) +\tbidSz := make([]float64, 5) +\taskPx := make([]float64, 5) +\taskSz := make([]float64, 5) +\tfor k := 0; k < 5; k++ { +\t\tkf := float64(k + 1) +\t\tbidPx[k] = c - 0.1*kf +\t\tbidSz[k] = v / kf +\t\taskPx[k] = c + 0.1*kf +\t\taskSz[k] = v * 0.9 / kf +\t} +\treturn bidPx, bidSz, askPx, askSz +} + +func compareGolden(t *testing.T, name string, got [][]float64) { +\tt.Helper() +\texp := readGoldenRaw(t, "g_"+name) +\tif len(exp) != len(got) { +\t\tt.Fatalf("%s: %d fixture rows vs %d computed", name, len(exp), len(got)) +\t} +\tfor i := range exp { +\t\tif len(exp[i]) != len(got[i]) { +\t\t\tt.Fatalf("%s row %d: arity %d vs %d", name, i, len(got[i]), len(exp[i])) +\t\t} +\t\tfor k := range exp[i] { +\t\t\twant := goldenCell(exp[i][k]) +\t\t\tg := got[i][k] +\t\t\tif math.IsNaN(want) { +\t\t\t\tif !math.IsNaN(g) { +\t\t\t\t\tt.Fatalf("%s row %d col %d: want NaN got %v", name, i, k, g) +\t\t\t\t} +\t\t\t\tcontinue +\t\t\t} +\t\t\tif math.IsInf(want, 0) { +\t\t\t\tif !math.IsInf(g, 0) || (g > 0) != (want > 0) { +\t\t\t\t\tt.Fatalf("%s row %d col %d: want %v got %v", name, i, k, want, g) +\t\t\t\t} +\t\t\t\tcontinue +\t\t\t} +\t\t\ttol := goldenTol * math.Max(1.0, math.Abs(want)) +\t\t\tif math.Abs(g-want) > tol { +\t\t\t\tt.Fatalf("%s row %d col %d: got %v want %v", name, i, k, g, want) +\t\t\t} +\t\t} +\t} +} + +func TestGoldenAll(t *testing.T) { +\trows := goldenInput(t) +''' + +# bars need blank-line-preserving fixture reads; reuse readGolden but it skips +# blanks. We need a raw reader for bars and input. +out = [HEADER] +for canon in canons: + out.append(block(canon)) +out.append("}") +open(os.path.join(ROOT, "bindings", "go", "golden_all_test.go"), "w", encoding="utf-8").write("\n".join(out) + "\n") +print("generated golden_all_test.go with", len(canons), "indicators") diff --git a/bindings/go/golden_all_test.go b/bindings/go/golden_all_test.go new file mode 100644 index 00000000..91f83286 --- /dev/null +++ b/bindings/go/golden_all_test.go @@ -0,0 +1,5996 @@ +// Code generated by gen_golden_test.py. DO NOT EDIT. +// +// Value-parity for every one of the 514 Go 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 a single comparator covers all +// archetypes. Regenerate with: python bindings/go/gen_golden_test.py + +package wickra + +import ( + "bufio" + "math" + "os" + "reflect" + "strings" + "testing" +) + +// readGoldenRaw keeps blank lines (a candle on which no bar closed) so bar rows +// stay aligned to the input; non-bar fixtures contain no blank lines. +func readGoldenRaw(t *testing.T, name string) [][]string { + t.Helper() + f, err := os.Open("../../testdata/golden/" + name + ".csv") + if err != nil { + t.Fatalf("open %s: %v", name, err) + } + defer f.Close() + var rows [][]string + sc := bufio.NewScanner(f) + sc.Buffer(make([]byte, 0, 1024*1024), 1024*1024) + first := true + for sc.Scan() { + line := sc.Text() + if first { + first = false + continue + } + if line == "" { + rows = append(rows, []string{}) + continue + } + rows = append(rows, strings.Split(line, ",")) + } + return rows +} + +func nanRow(n int) []float64 { + r := make([]float64, n) + for i := range r { + r[i] = math.NaN() + } + return r +} + +func reflectRow(out any, ok bool, width int) []float64 { + if !ok { + return nanRow(width) + } + v := reflect.ValueOf(out) + row := make([]float64, 0, width) + for k := 0; k < v.NumField(); k++ { + row = appendField(row, v.Field(k)) + } + return row +} + +func appendField(row []float64, f reflect.Value) []float64 { + switch f.Kind() { + case reflect.Float64, reflect.Float32: + return append(row, f.Float()) + case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64: + return append(row, float64(f.Int())) + case reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64, reflect.Uintptr: + return append(row, float64(f.Uint())) + case reflect.Slice: + for j := 0; j < f.Len(); j++ { + row = appendField(row, f.Index(j)) + } + return row + default: + return row + } +} + +func flattenBars(bars any) []float64 { + v := reflect.ValueOf(bars) + row := []float64{} + for i := 0; i < v.Len(); i++ { + bar := v.Index(i) + for k := 0; k < bar.NumField(); k++ { + row = appendField(row, bar.Field(k)) + } + } + return row +} + +// Synthetic feeds derived from one OHLCV row, identical to gen_golden's Rust +// construction (DerivativesTick / CrossSection / OrderBook). +func derivFields(r []float64) [11]float64 { + o, h, l, c, v := r[0], r[1], r[2], r[3], r[4] + return [11]float64{ + (c - o) / c * 0.01, // funding_rate + c, // mark_price + c - 0.5, // index_price + c + 1.0, // futures_price + v * 10.0, // open_interest + v * 0.6, // long_size + v * 0.4, // short_size + v * 0.55, // taker_buy_volume + v * 0.45, // taker_sell_volume + h - c, // long_liquidation + c - l, // short_liquidation + } +} + +func crossLists(r []float64) ([]float64, []float64, []bool, []bool, []bool, []bool) { + o, c, v := r[0], r[3], r[4] + change := make([]float64, 5) + volume := make([]float64, 5) + newHigh := make([]bool, 5) + newLow := make([]bool, 5) + aboveMa := make([]bool, 5) + onBuy := make([]bool, 5) + for j := 0; j < 5; j++ { + jf := float64(j) + change[j] = (c - o) + jf + volume[j] = v + jf*10.0 + newHigh[j] = j%2 == 0 + newLow[j] = j%3 == 0 + aboveMa[j] = j%2 == 0 + onBuy[j] = j%3 == 0 + } + return change, volume, newHigh, newLow, aboveMa, onBuy +} + +func obLists(r []float64) ([]float64, []float64, []float64, []float64) { + c, v := r[3], r[4] + bidPx := make([]float64, 5) + bidSz := make([]float64, 5) + askPx := make([]float64, 5) + askSz := make([]float64, 5) + for k := 0; k < 5; k++ { + kf := float64(k + 1) + bidPx[k] = c - 0.1*kf + bidSz[k] = v / kf + askPx[k] = c + 0.1*kf + askSz[k] = v * 0.9 / kf + } + return bidPx, bidSz, askPx, askSz +} + +func compareGolden(t *testing.T, name string, got [][]float64) { + t.Helper() + exp := readGoldenRaw(t, "g_"+name) + if len(exp) != len(got) { + t.Fatalf("%s: %d fixture rows vs %d computed", name, len(exp), len(got)) + } + for i := range exp { + if len(exp[i]) != len(got[i]) { + t.Fatalf("%s row %d: arity %d vs %d", name, i, len(got[i]), len(exp[i])) + } + for k := range exp[i] { + want := goldenCell(exp[i][k]) + g := got[i][k] + if math.IsNaN(want) { + if !math.IsNaN(g) { + t.Fatalf("%s row %d col %d: want NaN got %v", name, i, k, g) + } + continue + } + if math.IsInf(want, 0) { + if !math.IsInf(g, 0) || (g > 0) != (want > 0) { + t.Fatalf("%s row %d col %d: want %v got %v", name, i, k, want, g) + } + continue + } + tol := goldenTol * math.Max(1.0, math.Abs(want)) + if math.Abs(g-want) > tol { + t.Fatalf("%s row %d col %d: got %v want %v", name, i, k, g, want) + } + } + } +} + +func TestGoldenAll(t *testing.T) { + rows := goldenInput(t) + + t.Run("AbandonedBaby", func(t *testing.T) { + ind, err := NewAbandonedBaby() + if err != nil { + t.Fatalf("new AbandonedBaby: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "AbandonedBaby", got) + }) + t.Run("Abcd", func(t *testing.T) { + ind, err := NewAbcd() + if err != nil { + t.Fatalf("new Abcd: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Abcd", got) + }) + t.Run("AbsoluteBreadthIndex", func(t *testing.T) { + ind, err := NewAbsoluteBreadthIndex() + if err != nil { + t.Fatalf("new AbsoluteBreadthIndex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + ch, vo, nh, nl, am, ob_ := crossLists(r) + got[i] = []float64{ind.Update(ch, vo, nh, nl, am, ob_, int64(i))} + } + compareGolden(t, "AbsoluteBreadthIndex", got) + }) + t.Run("AccelerationBands", func(t *testing.T) { + ind, err := NewAccelerationBands(14, 2.0) + if err != nil { + t.Fatalf("new AccelerationBands: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "AccelerationBands", got) + }) + t.Run("AcceleratorOscillator", func(t *testing.T) { + ind, err := NewAcceleratorOscillator(3, 7, 14) + if err != nil { + t.Fatalf("new AcceleratorOscillator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "AcceleratorOscillator", got) + }) + t.Run("AdOscillator", func(t *testing.T) { + ind, err := NewAdOscillator() + if err != nil { + t.Fatalf("new AdOscillator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "AdOscillator", got) + }) + t.Run("AdVolumeLine", func(t *testing.T) { + ind, err := NewAdVolumeLine() + if err != nil { + t.Fatalf("new AdVolumeLine: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + ch, vo, nh, nl, am, ob_ := crossLists(r) + got[i] = []float64{ind.Update(ch, vo, nh, nl, am, ob_, int64(i))} + } + compareGolden(t, "AdVolumeLine", got) + }) + t.Run("AdaptiveCci", func(t *testing.T) { + ind, err := NewAdaptiveCci(14) + if err != nil { + t.Fatalf("new AdaptiveCci: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "AdaptiveCci", got) + }) + t.Run("AdaptiveCycle", func(t *testing.T) { + ind, err := NewAdaptiveCycle() + if err != nil { + t.Fatalf("new AdaptiveCycle: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "AdaptiveCycle", got) + }) + t.Run("AdaptiveLaguerreFilter", func(t *testing.T) { + ind, err := NewAdaptiveLaguerreFilter(20) + if err != nil { + t.Fatalf("new AdaptiveLaguerreFilter: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "AdaptiveLaguerreFilter", got) + }) + t.Run("AdaptiveRsi", func(t *testing.T) { + ind, err := NewAdaptiveRsi(14) + if err != nil { + t.Fatalf("new AdaptiveRsi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "AdaptiveRsi", got) + }) + t.Run("Adl", func(t *testing.T) { + ind, err := NewAdl() + if err != nil { + t.Fatalf("new Adl: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Adl", got) + }) + t.Run("AdvanceBlock", func(t *testing.T) { + ind, err := NewAdvanceBlock() + if err != nil { + t.Fatalf("new AdvanceBlock: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "AdvanceBlock", got) + }) + t.Run("AdvanceDecline", func(t *testing.T) { + ind, err := NewAdvanceDecline() + if err != nil { + t.Fatalf("new AdvanceDecline: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + ch, vo, nh, nl, am, ob_ := crossLists(r) + got[i] = []float64{ind.Update(ch, vo, nh, nl, am, ob_, int64(i))} + } + compareGolden(t, "AdvanceDecline", got) + }) + t.Run("AdvanceDeclineRatio", func(t *testing.T) { + ind, err := NewAdvanceDeclineRatio() + if err != nil { + t.Fatalf("new AdvanceDeclineRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + ch, vo, nh, nl, am, ob_ := crossLists(r) + got[i] = []float64{ind.Update(ch, vo, nh, nl, am, ob_, int64(i))} + } + compareGolden(t, "AdvanceDeclineRatio", got) + }) + t.Run("Adx", func(t *testing.T) { + ind, err := NewAdx(14) + if err != nil { + t.Fatalf("new Adx: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "Adx", got) + }) + t.Run("Adxr", func(t *testing.T) { + ind, err := NewAdxr(14) + if err != nil { + t.Fatalf("new Adxr: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Adxr", got) + }) + t.Run("Alligator", func(t *testing.T) { + ind, err := NewAlligator(3, 7, 14) + if err != nil { + t.Fatalf("new Alligator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "Alligator", got) + }) + t.Run("Alma", func(t *testing.T) { + ind, err := NewAlma(9, 0.85, 6.0) + if err != nil { + t.Fatalf("new Alma: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Alma", got) + }) + t.Run("Alpha", func(t *testing.T) { + ind, err := NewAlpha(14, 2.0) + if err != nil { + t.Fatalf("new Alpha: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[0])} + } + compareGolden(t, "Alpha", got) + }) + t.Run("AmihudIlliquidity", func(t *testing.T) { + ind, err := NewAmihudIlliquidity(20) + if err != nil { + t.Fatalf("new AmihudIlliquidity: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[4], r[3] >= r[0], int64(i))} + } + compareGolden(t, "AmihudIlliquidity", got) + }) + t.Run("AnchoredRsi", func(t *testing.T) { + ind, err := NewAnchoredRsi() + if err != nil { + t.Fatalf("new AnchoredRsi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "AnchoredRsi", got) + }) + t.Run("AnchoredVwap", func(t *testing.T) { + ind, err := NewAnchoredVwap() + if err != nil { + t.Fatalf("new AnchoredVwap: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "AnchoredVwap", got) + }) + t.Run("AndrewsPitchfork", func(t *testing.T) { + ind, err := NewAndrewsPitchfork(14) + if err != nil { + t.Fatalf("new AndrewsPitchfork: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "AndrewsPitchfork", got) + }) + t.Run("Apo", func(t *testing.T) { + ind, err := NewApo(3, 7) + if err != nil { + t.Fatalf("new Apo: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Apo", got) + }) + t.Run("Aroon", func(t *testing.T) { + ind, err := NewAroon(14) + if err != nil { + t.Fatalf("new Aroon: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "Aroon", got) + }) + t.Run("AroonOscillator", func(t *testing.T) { + ind, err := NewAroonOscillator(14) + if err != nil { + t.Fatalf("new AroonOscillator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "AroonOscillator", got) + }) + t.Run("Atr", func(t *testing.T) { + ind, err := NewAtr(14) + if err != nil { + t.Fatalf("new Atr: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Atr", got) + }) + t.Run("AtrBands", func(t *testing.T) { + ind, err := NewAtrBands(14, 2.0) + if err != nil { + t.Fatalf("new AtrBands: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "AtrBands", got) + }) + t.Run("AtrRatchet", func(t *testing.T) { + ind, err := NewAtrRatchet(14, 2.0, 0.5) + if err != nil { + t.Fatalf("new AtrRatchet: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "AtrRatchet", got) + }) + t.Run("AtrTrailingStop", func(t *testing.T) { + ind, err := NewAtrTrailingStop(14, 2.0) + if err != nil { + t.Fatalf("new AtrTrailingStop: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "AtrTrailingStop", got) + }) + t.Run("AutoFib", func(t *testing.T) { + ind, err := NewAutoFib() + if err != nil { + t.Fatalf("new AutoFib: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 7) + } + compareGolden(t, "AutoFib", got) + }) + t.Run("Autocorrelation", func(t *testing.T) { + ind, err := NewAutocorrelation(10, 1) + if err != nil { + t.Fatalf("new Autocorrelation: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Autocorrelation", got) + }) + t.Run("AutocorrelationPeriodogram", func(t *testing.T) { + ind, err := NewAutocorrelationPeriodogram(10, 48) + if err != nil { + t.Fatalf("new AutocorrelationPeriodogram: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "AutocorrelationPeriodogram", got) + }) + t.Run("AverageDailyRange", func(t *testing.T) { + ind, err := NewAverageDailyRange(14, 0) + if err != nil { + t.Fatalf("new AverageDailyRange: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "AverageDailyRange", got) + }) + t.Run("AverageDrawdown", func(t *testing.T) { + ind, err := NewAverageDrawdown(14) + if err != nil { + t.Fatalf("new AverageDrawdown: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "AverageDrawdown", got) + }) + t.Run("AvgPrice", func(t *testing.T) { + ind, err := NewAvgPrice() + if err != nil { + t.Fatalf("new AvgPrice: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "AvgPrice", got) + }) + t.Run("AwesomeOscillator", func(t *testing.T) { + ind, err := NewAwesomeOscillator(3, 7) + if err != nil { + t.Fatalf("new AwesomeOscillator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "AwesomeOscillator", got) + }) + t.Run("AwesomeOscillatorHistogram", func(t *testing.T) { + ind, err := NewAwesomeOscillatorHistogram(3, 7, 14) + if err != nil { + t.Fatalf("new AwesomeOscillatorHistogram: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "AwesomeOscillatorHistogram", got) + }) + t.Run("BalanceOfPower", func(t *testing.T) { + ind, err := NewBalanceOfPower() + if err != nil { + t.Fatalf("new BalanceOfPower: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "BalanceOfPower", got) + }) + t.Run("BandpassFilter", func(t *testing.T) { + ind, err := NewBandpassFilter(20, 0.3) + if err != nil { + t.Fatalf("new BandpassFilter: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "BandpassFilter", got) + }) + t.Run("Bat", func(t *testing.T) { + ind, err := NewBat() + if err != nil { + t.Fatalf("new Bat: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Bat", got) + }) + t.Run("BeltHold", func(t *testing.T) { + ind, err := NewBeltHold() + if err != nil { + t.Fatalf("new BeltHold: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "BeltHold", got) + }) + t.Run("Beta", func(t *testing.T) { + ind, err := NewBeta(14) + if err != nil { + t.Fatalf("new Beta: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[0])} + } + compareGolden(t, "Beta", got) + }) + t.Run("BetaNeutralSpread", func(t *testing.T) { + ind, err := NewBetaNeutralSpread(14) + if err != nil { + t.Fatalf("new BetaNeutralSpread: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[0])} + } + compareGolden(t, "BetaNeutralSpread", got) + }) + t.Run("BetterVolume", func(t *testing.T) { + ind, err := NewBetterVolume(14) + if err != nil { + t.Fatalf("new BetterVolume: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "BetterVolume", got) + }) + t.Run("BipowerVariation", func(t *testing.T) { + ind, err := NewBipowerVariation(14) + if err != nil { + t.Fatalf("new BipowerVariation: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "BipowerVariation", got) + }) + t.Run("BodySizePct", func(t *testing.T) { + ind, err := NewBodySizePct() + if err != nil { + t.Fatalf("new BodySizePct: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "BodySizePct", got) + }) + t.Run("BollingerBands", func(t *testing.T) { + ind, err := NewBollingerBands(20, 2.0) + if err != nil { + t.Fatalf("new BollingerBands: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3]) + got[i] = reflectRow(out, ok, 4) + } + compareGolden(t, "BollingerBands", got) + }) + t.Run("BollingerBandwidth", func(t *testing.T) { + ind, err := NewBollingerBandwidth(14, 2.0) + if err != nil { + t.Fatalf("new BollingerBandwidth: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "BollingerBandwidth", got) + }) + t.Run("BomarBands", func(t *testing.T) { + ind, err := NewBomarBands(4, 0.85) + if err != nil { + t.Fatalf("new BomarBands: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3]) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "BomarBands", got) + }) + t.Run("BreadthThrust", func(t *testing.T) { + ind, err := NewBreadthThrust(10) + if err != nil { + t.Fatalf("new BreadthThrust: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + ch, vo, nh, nl, am, ob_ := crossLists(r) + got[i] = []float64{ind.Update(ch, vo, nh, nl, am, ob_, int64(i))} + } + compareGolden(t, "BreadthThrust", got) + }) + t.Run("Breakaway", func(t *testing.T) { + ind, err := NewBreakaway() + if err != nil { + t.Fatalf("new Breakaway: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Breakaway", got) + }) + t.Run("BullishPercentIndex", func(t *testing.T) { + ind, err := NewBullishPercentIndex() + if err != nil { + t.Fatalf("new BullishPercentIndex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + ch, vo, nh, nl, am, ob_ := crossLists(r) + got[i] = []float64{ind.Update(ch, vo, nh, nl, am, ob_, int64(i))} + } + compareGolden(t, "BullishPercentIndex", got) + }) + t.Run("BurkeRatio", func(t *testing.T) { + ind, err := NewBurkeRatio(14) + if err != nil { + t.Fatalf("new BurkeRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "BurkeRatio", got) + }) + t.Run("Butterfly", func(t *testing.T) { + ind, err := NewButterfly() + if err != nil { + t.Fatalf("new Butterfly: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Butterfly", got) + }) + t.Run("CalendarSpread", func(t *testing.T) { + ind, err := NewCalendarSpread() + if err != nil { + t.Fatalf("new CalendarSpread: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + d := derivFields(r) + got[i] = []float64{ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], int64(i))} + } + compareGolden(t, "CalendarSpread", got) + }) + t.Run("CalmarRatio", func(t *testing.T) { + ind, err := NewCalmarRatio(14) + if err != nil { + t.Fatalf("new CalmarRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "CalmarRatio", got) + }) + t.Run("Camarilla", func(t *testing.T) { + ind, err := NewCamarilla() + if err != nil { + t.Fatalf("new Camarilla: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 9) + } + compareGolden(t, "Camarilla", got) + }) + t.Run("CandleVolume", func(t *testing.T) { + ind, err := NewCandleVolume(14) + if err != nil { + t.Fatalf("new CandleVolume: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "CandleVolume", got) + }) + t.Run("Cci", func(t *testing.T) { + ind, err := NewCci(14) + if err != nil { + t.Fatalf("new Cci: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Cci", got) + }) + t.Run("CenterOfGravity", func(t *testing.T) { + ind, err := NewCenterOfGravity(14) + if err != nil { + t.Fatalf("new CenterOfGravity: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "CenterOfGravity", got) + }) + t.Run("CentralPivotRange", func(t *testing.T) { + ind, err := NewCentralPivotRange() + if err != nil { + t.Fatalf("new CentralPivotRange: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "CentralPivotRange", got) + }) + t.Run("Cfo", func(t *testing.T) { + ind, err := NewCfo(14) + if err != nil { + t.Fatalf("new Cfo: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Cfo", got) + }) + t.Run("ChaikinMoneyFlow", func(t *testing.T) { + ind, err := NewChaikinMoneyFlow(20) + if err != nil { + t.Fatalf("new ChaikinMoneyFlow: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "ChaikinMoneyFlow", got) + }) + t.Run("ChaikinOscillator", func(t *testing.T) { + ind, err := NewChaikinOscillator(3, 7) + if err != nil { + t.Fatalf("new ChaikinOscillator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "ChaikinOscillator", got) + }) + t.Run("ChaikinVolatility", func(t *testing.T) { + ind, err := NewChaikinVolatility(3, 7) + if err != nil { + t.Fatalf("new ChaikinVolatility: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "ChaikinVolatility", got) + }) + t.Run("ChandeKrollStop", func(t *testing.T) { + ind, err := NewChandeKrollStop(3, 2.0, 7) + if err != nil { + t.Fatalf("new ChandeKrollStop: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "ChandeKrollStop", got) + }) + t.Run("ChandelierExit", func(t *testing.T) { + ind, err := NewChandelierExit(14, 2.0) + if err != nil { + t.Fatalf("new ChandelierExit: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "ChandelierExit", got) + }) + t.Run("ChoppinessIndex", func(t *testing.T) { + ind, err := NewChoppinessIndex(14) + if err != nil { + t.Fatalf("new ChoppinessIndex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "ChoppinessIndex", got) + }) + t.Run("ClassicPivots", func(t *testing.T) { + ind, err := NewClassicPivots() + if err != nil { + t.Fatalf("new ClassicPivots: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 7) + } + compareGolden(t, "ClassicPivots", got) + }) + t.Run("CloseVsOpen", func(t *testing.T) { + ind, err := NewCloseVsOpen() + if err != nil { + t.Fatalf("new CloseVsOpen: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "CloseVsOpen", got) + }) + t.Run("ClosingMarubozu", func(t *testing.T) { + ind, err := NewClosingMarubozu() + if err != nil { + t.Fatalf("new ClosingMarubozu: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "ClosingMarubozu", got) + }) + t.Run("Cmo", func(t *testing.T) { + ind, err := NewCmo(14) + if err != nil { + t.Fatalf("new Cmo: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Cmo", got) + }) + t.Run("CoefficientOfVariation", func(t *testing.T) { + ind, err := NewCoefficientOfVariation(14) + if err != nil { + t.Fatalf("new CoefficientOfVariation: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "CoefficientOfVariation", got) + }) + t.Run("Cointegration", func(t *testing.T) { + ind, err := NewCointegration(40, 1) + if err != nil { + t.Fatalf("new Cointegration: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3], r[0]) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "Cointegration", got) + }) + t.Run("CommonSenseRatio", func(t *testing.T) { + ind, err := NewCommonSenseRatio(14) + if err != nil { + t.Fatalf("new CommonSenseRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "CommonSenseRatio", got) + }) + t.Run("CompositeProfile", func(t *testing.T) { + ind, err := NewCompositeProfile(20, 24, 0.7) + if err != nil { + t.Fatalf("new CompositeProfile: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "CompositeProfile", got) + }) + t.Run("ConcealingBabySwallow", func(t *testing.T) { + ind, err := NewConcealingBabySwallow() + if err != nil { + t.Fatalf("new ConcealingBabySwallow: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "ConcealingBabySwallow", got) + }) + t.Run("ConditionalValueAtRisk", func(t *testing.T) { + ind, err := NewConditionalValueAtRisk(20, 0.95) + if err != nil { + t.Fatalf("new ConditionalValueAtRisk: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "ConditionalValueAtRisk", got) + }) + t.Run("ConnorsRsi", func(t *testing.T) { + ind, err := NewConnorsRsi(3, 7, 14) + if err != nil { + t.Fatalf("new ConnorsRsi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "ConnorsRsi", got) + }) + t.Run("Coppock", func(t *testing.T) { + ind, err := NewCoppock(3, 7, 14) + if err != nil { + t.Fatalf("new Coppock: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Coppock", got) + }) + t.Run("CorrelationTrendIndicator", func(t *testing.T) { + ind, err := NewCorrelationTrendIndicator(14) + if err != nil { + t.Fatalf("new CorrelationTrendIndicator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "CorrelationTrendIndicator", got) + }) + t.Run("Counterattack", func(t *testing.T) { + ind, err := NewCounterattack() + if err != nil { + t.Fatalf("new Counterattack: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Counterattack", got) + }) + t.Run("Crab", func(t *testing.T) { + ind, err := NewCrab() + if err != nil { + t.Fatalf("new Crab: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Crab", got) + }) + t.Run("CumulativeVolumeDelta", func(t *testing.T) { + ind, err := NewCumulativeVolumeDelta() + if err != nil { + t.Fatalf("new CumulativeVolumeDelta: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[4], r[3] >= r[0], int64(i))} + } + compareGolden(t, "CumulativeVolumeDelta", got) + }) + t.Run("CumulativeVolumeIndex", func(t *testing.T) { + ind, err := NewCumulativeVolumeIndex() + if err != nil { + t.Fatalf("new CumulativeVolumeIndex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + ch, vo, nh, nl, am, ob_ := crossLists(r) + got[i] = []float64{ind.Update(ch, vo, nh, nl, am, ob_, int64(i))} + } + compareGolden(t, "CumulativeVolumeIndex", got) + }) + t.Run("CupAndHandle", func(t *testing.T) { + ind, err := NewCupAndHandle() + if err != nil { + t.Fatalf("new CupAndHandle: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "CupAndHandle", got) + }) + t.Run("CyberneticCycle", func(t *testing.T) { + ind, err := NewCyberneticCycle(14) + if err != nil { + t.Fatalf("new CyberneticCycle: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "CyberneticCycle", got) + }) + t.Run("Cypher", func(t *testing.T) { + ind, err := NewCypher() + if err != nil { + t.Fatalf("new Cypher: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Cypher", got) + }) + t.Run("DayOfWeekProfile", func(t *testing.T) { + ind, err := NewDayOfWeekProfile(0) + if err != nil { + t.Fatalf("new DayOfWeekProfile: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + bins, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + if ok { + got[i] = bins + } else { + got[i] = nanRow(7) + } + } + compareGolden(t, "DayOfWeekProfile", got) + }) + t.Run("Decycler", func(t *testing.T) { + ind, err := NewDecycler(14) + if err != nil { + t.Fatalf("new Decycler: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Decycler", got) + }) + t.Run("DecyclerOscillator", func(t *testing.T) { + ind, err := NewDecyclerOscillator(3, 7) + if err != nil { + t.Fatalf("new DecyclerOscillator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "DecyclerOscillator", got) + }) + t.Run("Dema", func(t *testing.T) { + ind, err := NewDema(14) + if err != nil { + t.Fatalf("new Dema: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Dema", got) + }) + t.Run("DemandIndex", func(t *testing.T) { + ind, err := NewDemandIndex(14) + if err != nil { + t.Fatalf("new DemandIndex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "DemandIndex", got) + }) + t.Run("DemarkPivots", func(t *testing.T) { + ind, err := NewDemarkPivots() + if err != nil { + t.Fatalf("new DemarkPivots: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "DemarkPivots", got) + }) + t.Run("DepthSlope", func(t *testing.T) { + ind, err := NewDepthSlope() + if err != nil { + t.Fatalf("new DepthSlope: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + bp, bs, ap, as_ := obLists(r) + got[i] = []float64{ind.Update(bp, bs, ap, as_)} + } + compareGolden(t, "DepthSlope", got) + }) + t.Run("DerivativeOscillator", func(t *testing.T) { + ind, err := NewDerivativeOscillator(3, 7, 14, 28) + if err != nil { + t.Fatalf("new DerivativeOscillator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "DerivativeOscillator", got) + }) + t.Run("DetrendedStdDev", func(t *testing.T) { + ind, err := NewDetrendedStdDev(14) + if err != nil { + t.Fatalf("new DetrendedStdDev: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "DetrendedStdDev", got) + }) + t.Run("DisparityIndex", func(t *testing.T) { + ind, err := NewDisparityIndex(14) + if err != nil { + t.Fatalf("new DisparityIndex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "DisparityIndex", got) + }) + t.Run("DistanceSsd", func(t *testing.T) { + ind, err := NewDistanceSsd(14) + if err != nil { + t.Fatalf("new DistanceSsd: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[0])} + } + compareGolden(t, "DistanceSsd", got) + }) + t.Run("Doji", func(t *testing.T) { + ind, err := NewDoji() + if err != nil { + t.Fatalf("new Doji: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Doji", got) + }) + t.Run("DojiStar", func(t *testing.T) { + ind, err := NewDojiStar() + if err != nil { + t.Fatalf("new DojiStar: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "DojiStar", got) + }) + t.Run("DollarBars", func(t *testing.T) { + ind, err := NewDollarBars(50000.0) + if err != nil { + t.Fatalf("new DollarBars: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = flattenBars(ind.Update(r[0], r[1], r[2], r[3], r[4], 0)) + } + compareGolden(t, "DollarBars", got) + }) + t.Run("Donchian", func(t *testing.T) { + ind, err := NewDonchian(14) + if err != nil { + t.Fatalf("new Donchian: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "Donchian", got) + }) + t.Run("DonchianStop", func(t *testing.T) { + ind, err := NewDonchianStop(14) + if err != nil { + t.Fatalf("new DonchianStop: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "DonchianStop", got) + }) + t.Run("DoubleBollinger", func(t *testing.T) { + ind, err := NewDoubleBollinger(20, 1.0, 2.0) + if err != nil { + t.Fatalf("new DoubleBollinger: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3]) + got[i] = reflectRow(out, ok, 5) + } + compareGolden(t, "DoubleBollinger", got) + }) + t.Run("DoubleTopBottom", func(t *testing.T) { + ind, err := NewDoubleTopBottom() + if err != nil { + t.Fatalf("new DoubleTopBottom: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "DoubleTopBottom", got) + }) + t.Run("DownsideGapThreeMethods", func(t *testing.T) { + ind, err := NewDownsideGapThreeMethods() + if err != nil { + t.Fatalf("new DownsideGapThreeMethods: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "DownsideGapThreeMethods", got) + }) + t.Run("Dpo", func(t *testing.T) { + ind, err := NewDpo(14) + if err != nil { + t.Fatalf("new Dpo: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Dpo", got) + }) + t.Run("DragonflyDoji", func(t *testing.T) { + ind, err := NewDragonflyDoji() + if err != nil { + t.Fatalf("new DragonflyDoji: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "DragonflyDoji", got) + }) + t.Run("DrawdownDuration", func(t *testing.T) { + ind, err := NewDrawdownDuration() + if err != nil { + t.Fatalf("new DrawdownDuration: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "DrawdownDuration", got) + }) + t.Run("DumplingTop", func(t *testing.T) { + ind, err := NewDumplingTop(14) + if err != nil { + t.Fatalf("new DumplingTop: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "DumplingTop", got) + }) + t.Run("Dx", func(t *testing.T) { + ind, err := NewDx(14) + if err != nil { + t.Fatalf("new Dx: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Dx", got) + }) + t.Run("DynamicMomentumIndex", func(t *testing.T) { + ind, err := NewDynamicMomentumIndex(14) + if err != nil { + t.Fatalf("new DynamicMomentumIndex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "DynamicMomentumIndex", got) + }) + t.Run("EaseOfMovement", func(t *testing.T) { + ind, err := NewEaseOfMovement(14) + if err != nil { + t.Fatalf("new EaseOfMovement: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "EaseOfMovement", got) + }) + t.Run("EffectiveSpread", func(t *testing.T) { + ind, err := NewEffectiveSpread() + if err != nil { + t.Fatalf("new EffectiveSpread: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[4], r[3] >= r[0], int64(i), (r[1]+r[2])/2)} + } + compareGolden(t, "EffectiveSpread", got) + }) + t.Run("EhlersStochastic", func(t *testing.T) { + ind, err := NewEhlersStochastic(14) + if err != nil { + t.Fatalf("new EhlersStochastic: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "EhlersStochastic", got) + }) + t.Run("Ehma", func(t *testing.T) { + ind, err := NewEhma(14) + if err != nil { + t.Fatalf("new Ehma: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Ehma", got) + }) + t.Run("ElderImpulse", func(t *testing.T) { + ind, err := NewElderImpulse(3, 7, 14, 28) + if err != nil { + t.Fatalf("new ElderImpulse: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "ElderImpulse", got) + }) + t.Run("ElderRay", func(t *testing.T) { + ind, err := NewElderRay(14) + if err != nil { + t.Fatalf("new ElderRay: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "ElderRay", got) + }) + t.Run("ElderSafeZone", func(t *testing.T) { + ind, err := NewElderSafeZone(10, 2.0) + if err != nil { + t.Fatalf("new ElderSafeZone: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "ElderSafeZone", got) + }) + t.Run("Ema", func(t *testing.T) { + ind, err := NewEma(14) + if err != nil { + t.Fatalf("new Ema: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Ema", got) + }) + t.Run("EmpiricalModeDecomposition", func(t *testing.T) { + ind, err := NewEmpiricalModeDecomposition(20, 0.1) + if err != nil { + t.Fatalf("new EmpiricalModeDecomposition: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "EmpiricalModeDecomposition", got) + }) + t.Run("Engulfing", func(t *testing.T) { + ind, err := NewEngulfing() + if err != nil { + t.Fatalf("new Engulfing: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Engulfing", got) + }) + t.Run("Equivolume", func(t *testing.T) { + ind, err := NewEquivolume(14) + if err != nil { + t.Fatalf("new Equivolume: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "Equivolume", got) + }) + t.Run("EstimatedLeverageRatio", func(t *testing.T) { + ind, err := NewEstimatedLeverageRatio() + if err != nil { + t.Fatalf("new EstimatedLeverageRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + d := derivFields(r) + got[i] = []float64{ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], int64(i))} + } + compareGolden(t, "EstimatedLeverageRatio", got) + }) + t.Run("EvenBetterSinewave", func(t *testing.T) { + ind, err := NewEvenBetterSinewave(40, 10) + if err != nil { + t.Fatalf("new EvenBetterSinewave: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "EvenBetterSinewave", got) + }) + t.Run("EveningDojiStar", func(t *testing.T) { + ind, err := NewEveningDojiStar() + if err != nil { + t.Fatalf("new EveningDojiStar: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "EveningDojiStar", got) + }) + t.Run("Evwma", func(t *testing.T) { + ind, err := NewEvwma(14) + if err != nil { + t.Fatalf("new Evwma: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Evwma", got) + }) + t.Run("EwmaVolatility", func(t *testing.T) { + ind, err := NewEwmaVolatility(0.94) + if err != nil { + t.Fatalf("new EwmaVolatility: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "EwmaVolatility", got) + }) + t.Run("Expectancy", func(t *testing.T) { + ind, err := NewExpectancy(14) + if err != nil { + t.Fatalf("new Expectancy: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Expectancy", got) + }) + t.Run("FallingThreeMethods", func(t *testing.T) { + ind, err := NewFallingThreeMethods() + if err != nil { + t.Fatalf("new FallingThreeMethods: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "FallingThreeMethods", got) + }) + t.Run("Fama", func(t *testing.T) { + ind, err := NewFama(0.5, 0.05) + if err != nil { + t.Fatalf("new Fama: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Fama", got) + }) + t.Run("FibArcs", func(t *testing.T) { + ind, err := NewFibArcs() + if err != nil { + t.Fatalf("new FibArcs: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "FibArcs", got) + }) + t.Run("FibChannel", func(t *testing.T) { + ind, err := NewFibChannel() + if err != nil { + t.Fatalf("new FibChannel: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 4) + } + compareGolden(t, "FibChannel", got) + }) + t.Run("FibConfluence", func(t *testing.T) { + ind, err := NewFibConfluence() + if err != nil { + t.Fatalf("new FibConfluence: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "FibConfluence", got) + }) + t.Run("FibExtension", func(t *testing.T) { + ind, err := NewFibExtension() + if err != nil { + t.Fatalf("new FibExtension: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 5) + } + compareGolden(t, "FibExtension", got) + }) + t.Run("FibFan", func(t *testing.T) { + ind, err := NewFibFan() + if err != nil { + t.Fatalf("new FibFan: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "FibFan", got) + }) + t.Run("FibProjection", func(t *testing.T) { + ind, err := NewFibProjection() + if err != nil { + t.Fatalf("new FibProjection: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 4) + } + compareGolden(t, "FibProjection", got) + }) + t.Run("FibRetracement", func(t *testing.T) { + ind, err := NewFibRetracement() + if err != nil { + t.Fatalf("new FibRetracement: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 7) + } + compareGolden(t, "FibRetracement", got) + }) + t.Run("FibTimeZones", func(t *testing.T) { + ind, err := NewFibTimeZones() + if err != nil { + t.Fatalf("new FibTimeZones: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "FibTimeZones", got) + }) + t.Run("FibonacciPivots", func(t *testing.T) { + ind, err := NewFibonacciPivots() + if err != nil { + t.Fatalf("new FibonacciPivots: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 7) + } + compareGolden(t, "FibonacciPivots", got) + }) + t.Run("FisherRsi", func(t *testing.T) { + ind, err := NewFisherRsi(14) + if err != nil { + t.Fatalf("new FisherRsi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "FisherRsi", got) + }) + t.Run("FisherTransform", func(t *testing.T) { + ind, err := NewFisherTransform(14) + if err != nil { + t.Fatalf("new FisherTransform: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "FisherTransform", got) + }) + t.Run("FlagPennant", func(t *testing.T) { + ind, err := NewFlagPennant() + if err != nil { + t.Fatalf("new FlagPennant: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "FlagPennant", got) + }) + t.Run("Footprint", func(t *testing.T) { + ind, err := NewFootprint(1.0) + if err != nil { + t.Fatalf("new Footprint: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = flattenBars(ind.Update(r[3], r[4], r[3] >= r[0], int64(i))) + } + compareGolden(t, "Footprint", got) + }) + t.Run("ForceIndex", func(t *testing.T) { + ind, err := NewForceIndex(14) + if err != nil { + t.Fatalf("new ForceIndex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "ForceIndex", got) + }) + t.Run("FractalChaosBands", func(t *testing.T) { + ind, err := NewFractalChaosBands(14) + if err != nil { + t.Fatalf("new FractalChaosBands: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "FractalChaosBands", got) + }) + t.Run("Frama", func(t *testing.T) { + ind, err := NewFrama(14) + if err != nil { + t.Fatalf("new Frama: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Frama", got) + }) + t.Run("FryPanBottom", func(t *testing.T) { + ind, err := NewFryPanBottom(14) + if err != nil { + t.Fatalf("new FryPanBottom: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "FryPanBottom", got) + }) + t.Run("FundingBasis", func(t *testing.T) { + ind, err := NewFundingBasis() + if err != nil { + t.Fatalf("new FundingBasis: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + d := derivFields(r) + got[i] = []float64{ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], int64(i))} + } + compareGolden(t, "FundingBasis", got) + }) + t.Run("FundingImpliedApr", func(t *testing.T) { + ind, err := NewFundingImpliedApr(1095.0) + if err != nil { + t.Fatalf("new FundingImpliedApr: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + d := derivFields(r) + got[i] = []float64{ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], int64(i))} + } + compareGolden(t, "FundingImpliedApr", got) + }) + t.Run("FundingRate", func(t *testing.T) { + ind, err := NewFundingRate() + if err != nil { + t.Fatalf("new FundingRate: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + d := derivFields(r) + got[i] = []float64{ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], int64(i))} + } + compareGolden(t, "FundingRate", got) + }) + t.Run("FundingRateMean", func(t *testing.T) { + ind, err := NewFundingRateMean(20) + if err != nil { + t.Fatalf("new FundingRateMean: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + d := derivFields(r) + got[i] = []float64{ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], int64(i))} + } + compareGolden(t, "FundingRateMean", got) + }) + t.Run("FundingRateZScore", func(t *testing.T) { + ind, err := NewFundingRateZScore(20) + if err != nil { + t.Fatalf("new FundingRateZScore: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + d := derivFields(r) + got[i] = []float64{ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], int64(i))} + } + compareGolden(t, "FundingRateZScore", got) + }) + t.Run("GainLossRatio", func(t *testing.T) { + ind, err := NewGainLossRatio(14) + if err != nil { + t.Fatalf("new GainLossRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "GainLossRatio", got) + }) + t.Run("GainToPainRatio", func(t *testing.T) { + ind, err := NewGainToPainRatio(14) + if err != nil { + t.Fatalf("new GainToPainRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "GainToPainRatio", got) + }) + t.Run("GapSideBySideWhite", func(t *testing.T) { + ind, err := NewGapSideBySideWhite() + if err != nil { + t.Fatalf("new GapSideBySideWhite: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "GapSideBySideWhite", got) + }) + t.Run("Garch11", func(t *testing.T) { + ind, err := NewGarch11(2e-06, 0.1, 0.88) + if err != nil { + t.Fatalf("new Garch11: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Garch11", got) + }) + t.Run("GarmanKlassVolatility", func(t *testing.T) { + ind, err := NewGarmanKlassVolatility(20, 252) + if err != nil { + t.Fatalf("new GarmanKlassVolatility: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "GarmanKlassVolatility", got) + }) + t.Run("Gartley", func(t *testing.T) { + ind, err := NewGartley() + if err != nil { + t.Fatalf("new Gartley: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Gartley", got) + }) + t.Run("GatorOscillator", func(t *testing.T) { + ind, err := NewGatorOscillator(3, 7, 14) + if err != nil { + t.Fatalf("new GatorOscillator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "GatorOscillator", got) + }) + t.Run("GeneralizedDema", func(t *testing.T) { + ind, err := NewGeneralizedDema(5, 0.7) + if err != nil { + t.Fatalf("new GeneralizedDema: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "GeneralizedDema", got) + }) + t.Run("GeometricMa", func(t *testing.T) { + ind, err := NewGeometricMa(14) + if err != nil { + t.Fatalf("new GeometricMa: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "GeometricMa", got) + }) + t.Run("GoldenPocket", func(t *testing.T) { + ind, err := NewGoldenPocket() + if err != nil { + t.Fatalf("new GoldenPocket: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "GoldenPocket", got) + }) + t.Run("GrangerCausality", func(t *testing.T) { + ind, err := NewGrangerCausality(60, 1) + if err != nil { + t.Fatalf("new GrangerCausality: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[0])} + } + compareGolden(t, "GrangerCausality", got) + }) + t.Run("GravestoneDoji", func(t *testing.T) { + ind, err := NewGravestoneDoji() + if err != nil { + t.Fatalf("new GravestoneDoji: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "GravestoneDoji", got) + }) + t.Run("Hammer", func(t *testing.T) { + ind, err := NewHammer() + if err != nil { + t.Fatalf("new Hammer: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Hammer", got) + }) + t.Run("HangingMan", func(t *testing.T) { + ind, err := NewHangingMan() + if err != nil { + t.Fatalf("new HangingMan: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "HangingMan", got) + }) + t.Run("Harami", func(t *testing.T) { + ind, err := NewHarami() + if err != nil { + t.Fatalf("new Harami: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Harami", got) + }) + t.Run("HaramiCross", func(t *testing.T) { + ind, err := NewHaramiCross() + if err != nil { + t.Fatalf("new HaramiCross: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "HaramiCross", got) + }) + t.Run("HasbrouckInformationShare", func(t *testing.T) { + ind, err := NewHasbrouckInformationShare(14) + if err != nil { + t.Fatalf("new HasbrouckInformationShare: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[0])} + } + compareGolden(t, "HasbrouckInformationShare", got) + }) + t.Run("HeadAndShoulders", func(t *testing.T) { + ind, err := NewHeadAndShoulders() + if err != nil { + t.Fatalf("new HeadAndShoulders: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "HeadAndShoulders", got) + }) + t.Run("HeikinAshi", func(t *testing.T) { + ind, err := NewHeikinAshi() + if err != nil { + t.Fatalf("new HeikinAshi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 4) + } + compareGolden(t, "HeikinAshi", got) + }) + t.Run("HeikinAshiOscillator", func(t *testing.T) { + ind, err := NewHeikinAshiOscillator(14) + if err != nil { + t.Fatalf("new HeikinAshiOscillator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "HeikinAshiOscillator", got) + }) + t.Run("HiLoActivator", func(t *testing.T) { + ind, err := NewHiLoActivator(14) + if err != nil { + t.Fatalf("new HiLoActivator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "HiLoActivator", got) + }) + t.Run("HighLowIndex", func(t *testing.T) { + ind, err := NewHighLowIndex(10) + if err != nil { + t.Fatalf("new HighLowIndex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + ch, vo, nh, nl, am, ob_ := crossLists(r) + got[i] = []float64{ind.Update(ch, vo, nh, nl, am, ob_, int64(i))} + } + compareGolden(t, "HighLowIndex", got) + }) + t.Run("HighLowRange", func(t *testing.T) { + ind, err := NewHighLowRange() + if err != nil { + t.Fatalf("new HighLowRange: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "HighLowRange", got) + }) + t.Run("HighLowVolumeNodes", func(t *testing.T) { + ind, err := NewHighLowVolumeNodes(3, 7) + if err != nil { + t.Fatalf("new HighLowVolumeNodes: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "HighLowVolumeNodes", got) + }) + t.Run("HighWave", func(t *testing.T) { + ind, err := NewHighWave() + if err != nil { + t.Fatalf("new HighWave: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "HighWave", got) + }) + t.Run("HighpassFilter", func(t *testing.T) { + ind, err := NewHighpassFilter(14) + if err != nil { + t.Fatalf("new HighpassFilter: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "HighpassFilter", got) + }) + t.Run("Hikkake", func(t *testing.T) { + ind, err := NewHikkake() + if err != nil { + t.Fatalf("new Hikkake: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Hikkake", got) + }) + t.Run("HikkakeModified", func(t *testing.T) { + ind, err := NewHikkakeModified() + if err != nil { + t.Fatalf("new HikkakeModified: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "HikkakeModified", got) + }) + t.Run("HilbertDominantCycle", func(t *testing.T) { + ind, err := NewHilbertDominantCycle() + if err != nil { + t.Fatalf("new HilbertDominantCycle: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "HilbertDominantCycle", got) + }) + t.Run("HistoricalVolatility", func(t *testing.T) { + ind, err := NewHistoricalVolatility(3, 7) + if err != nil { + t.Fatalf("new HistoricalVolatility: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "HistoricalVolatility", got) + }) + t.Run("Hma", func(t *testing.T) { + ind, err := NewHma(14) + if err != nil { + t.Fatalf("new Hma: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Hma", got) + }) + t.Run("HoltWinters", func(t *testing.T) { + ind, err := NewHoltWinters(0.5, 0.1) + if err != nil { + t.Fatalf("new HoltWinters: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "HoltWinters", got) + }) + t.Run("HomingPigeon", func(t *testing.T) { + ind, err := NewHomingPigeon() + if err != nil { + t.Fatalf("new HomingPigeon: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "HomingPigeon", got) + }) + t.Run("HtDcPhase", func(t *testing.T) { + ind, err := NewHtDcPhase() + if err != nil { + t.Fatalf("new HtDcPhase: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "HtDcPhase", got) + }) + t.Run("HtPhasor", func(t *testing.T) { + ind, err := NewHtPhasor() + if err != nil { + t.Fatalf("new HtPhasor: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3]) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "HtPhasor", got) + }) + t.Run("HtTrendMode", func(t *testing.T) { + ind, err := NewHtTrendMode() + if err != nil { + t.Fatalf("new HtTrendMode: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "HtTrendMode", got) + }) + t.Run("HurstChannel", func(t *testing.T) { + ind, err := NewHurstChannel(14, 2.0) + if err != nil { + t.Fatalf("new HurstChannel: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "HurstChannel", got) + }) + t.Run("HurstExponent", func(t *testing.T) { + ind, err := NewHurstExponent(100, 4) + if err != nil { + t.Fatalf("new HurstExponent: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "HurstExponent", got) + }) + t.Run("Ichimoku", func(t *testing.T) { + ind, err := NewIchimoku(9, 26, 52, 26) + if err != nil { + t.Fatalf("new Ichimoku: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 5) + } + compareGolden(t, "Ichimoku", got) + }) + t.Run("IdenticalThreeCrows", func(t *testing.T) { + ind, err := NewIdenticalThreeCrows() + if err != nil { + t.Fatalf("new IdenticalThreeCrows: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "IdenticalThreeCrows", got) + }) + t.Run("ImbalanceBars", func(t *testing.T) { + ind, err := NewImbalanceBars(5.0) + if err != nil { + t.Fatalf("new ImbalanceBars: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = flattenBars(ind.Update(r[0], r[1], r[2], r[3], 1.0, 0)) + } + compareGolden(t, "ImbalanceBars", got) + }) + t.Run("InNeck", func(t *testing.T) { + ind, err := NewInNeck() + if err != nil { + t.Fatalf("new InNeck: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "InNeck", got) + }) + t.Run("Inertia", func(t *testing.T) { + ind, err := NewInertia(3, 7) + if err != nil { + t.Fatalf("new Inertia: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Inertia", got) + }) + t.Run("InformationRatio", func(t *testing.T) { + ind, err := NewInformationRatio(14) + if err != nil { + t.Fatalf("new InformationRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[0])} + } + compareGolden(t, "InformationRatio", got) + }) + t.Run("InitialBalance", func(t *testing.T) { + ind, err := NewInitialBalance(14) + if err != nil { + t.Fatalf("new InitialBalance: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "InitialBalance", got) + }) + t.Run("InstantaneousTrendline", func(t *testing.T) { + ind, err := NewInstantaneousTrendline(14) + if err != nil { + t.Fatalf("new InstantaneousTrendline: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "InstantaneousTrendline", got) + }) + t.Run("IntradayIntensity", func(t *testing.T) { + ind, err := NewIntradayIntensity() + if err != nil { + t.Fatalf("new IntradayIntensity: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "IntradayIntensity", got) + }) + t.Run("IntradayMomentumIndex", func(t *testing.T) { + ind, err := NewIntradayMomentumIndex(14) + if err != nil { + t.Fatalf("new IntradayMomentumIndex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "IntradayMomentumIndex", got) + }) + t.Run("IntradayVolatilityProfile", func(t *testing.T) { + ind, err := NewIntradayVolatilityProfile(24, 0) + if err != nil { + t.Fatalf("new IntradayVolatilityProfile: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + bins, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + if ok { + got[i] = bins + } else { + got[i] = nanRow(24) + } + } + compareGolden(t, "IntradayVolatilityProfile", got) + }) + t.Run("InverseFisherTransform", func(t *testing.T) { + ind, err := NewInverseFisherTransform(2.0) + if err != nil { + t.Fatalf("new InverseFisherTransform: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "InverseFisherTransform", got) + }) + t.Run("InvertedHammer", func(t *testing.T) { + ind, err := NewInvertedHammer() + if err != nil { + t.Fatalf("new InvertedHammer: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "InvertedHammer", got) + }) + t.Run("JarqueBera", func(t *testing.T) { + ind, err := NewJarqueBera(14) + if err != nil { + t.Fatalf("new JarqueBera: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "JarqueBera", got) + }) + t.Run("Jma", func(t *testing.T) { + ind, err := NewJma(7, 0.0, 2.0) + if err != nil { + t.Fatalf("new Jma: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Jma", got) + }) + t.Run("JumpIndicator", func(t *testing.T) { + ind, err := NewJumpIndicator(14, 2.0) + if err != nil { + t.Fatalf("new JumpIndicator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "JumpIndicator", got) + }) + t.Run("KRatio", func(t *testing.T) { + ind, err := NewKRatio(14) + if err != nil { + t.Fatalf("new KRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "KRatio", got) + }) + t.Run("KagiBars", func(t *testing.T) { + ind, err := NewKagiBars(2.0) + if err != nil { + t.Fatalf("new KagiBars: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = flattenBars(ind.Update(r[3], r[3], r[3], r[3], 1.0, 0)) + } + compareGolden(t, "KagiBars", got) + }) + t.Run("KalmanHedgeRatio", func(t *testing.T) { + ind, err := NewKalmanHedgeRatio(0.01, 0.001) + if err != nil { + t.Fatalf("new KalmanHedgeRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3], r[0]) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "KalmanHedgeRatio", got) + }) + t.Run("Kama", func(t *testing.T) { + ind, err := NewKama(3, 7, 14) + if err != nil { + t.Fatalf("new Kama: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Kama", got) + }) + t.Run("KaseDevStop", func(t *testing.T) { + ind, err := NewKaseDevStop(14, 2.0) + if err != nil { + t.Fatalf("new KaseDevStop: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "KaseDevStop", got) + }) + t.Run("KasePermissionStochastic", func(t *testing.T) { + ind, err := NewKasePermissionStochastic(3, 7) + if err != nil { + t.Fatalf("new KasePermissionStochastic: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "KasePermissionStochastic", got) + }) + t.Run("KellyCriterion", func(t *testing.T) { + ind, err := NewKellyCriterion(14) + if err != nil { + t.Fatalf("new KellyCriterion: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "KellyCriterion", got) + }) + t.Run("Keltner", func(t *testing.T) { + ind, err := NewKeltner(3, 7, 2.0) + if err != nil { + t.Fatalf("new Keltner: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "Keltner", got) + }) + t.Run("KendallTau", func(t *testing.T) { + ind, err := NewKendallTau(14) + if err != nil { + t.Fatalf("new KendallTau: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[0])} + } + compareGolden(t, "KendallTau", got) + }) + t.Run("Kicking", func(t *testing.T) { + ind, err := NewKicking() + if err != nil { + t.Fatalf("new Kicking: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Kicking", got) + }) + t.Run("KickingByLength", func(t *testing.T) { + ind, err := NewKickingByLength() + if err != nil { + t.Fatalf("new KickingByLength: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "KickingByLength", got) + }) + t.Run("Kst", func(t *testing.T) { + ind, err := NewKst(3, 7, 14, 28, 35, 42, 56, 63, 70) + if err != nil { + t.Fatalf("new Kst: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3]) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "Kst", got) + }) + t.Run("Kurtosis", func(t *testing.T) { + ind, err := NewKurtosis(14) + if err != nil { + t.Fatalf("new Kurtosis: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Kurtosis", got) + }) + t.Run("Kvo", func(t *testing.T) { + ind, err := NewKvo(3, 7) + if err != nil { + t.Fatalf("new Kvo: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Kvo", got) + }) + t.Run("KylesLambda", func(t *testing.T) { + ind, err := NewKylesLambda(20) + if err != nil { + t.Fatalf("new KylesLambda: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[4], r[3] >= r[0], int64(i), (r[1]+r[2])/2)} + } + compareGolden(t, "KylesLambda", got) + }) + t.Run("LadderBottom", func(t *testing.T) { + ind, err := NewLadderBottom() + if err != nil { + t.Fatalf("new LadderBottom: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "LadderBottom", got) + }) + t.Run("LaguerreRsi", func(t *testing.T) { + ind, err := NewLaguerreRsi(0.5) + if err != nil { + t.Fatalf("new LaguerreRsi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "LaguerreRsi", got) + }) + t.Run("LeadLagCrossCorrelation", func(t *testing.T) { + ind, err := NewLeadLagCrossCorrelation(20, 10) + if err != nil { + t.Fatalf("new LeadLagCrossCorrelation: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3], r[0]) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "LeadLagCrossCorrelation", got) + }) + t.Run("LinRegAngle", func(t *testing.T) { + ind, err := NewLinRegAngle(14) + if err != nil { + t.Fatalf("new LinRegAngle: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "LinRegAngle", got) + }) + t.Run("LinRegChannel", func(t *testing.T) { + ind, err := NewLinRegChannel(14, 2.0) + if err != nil { + t.Fatalf("new LinRegChannel: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3]) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "LinRegChannel", got) + }) + t.Run("LinRegIntercept", func(t *testing.T) { + ind, err := NewLinRegIntercept(14) + if err != nil { + t.Fatalf("new LinRegIntercept: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "LinRegIntercept", got) + }) + t.Run("LinRegSlope", func(t *testing.T) { + ind, err := NewLinRegSlope(14) + if err != nil { + t.Fatalf("new LinRegSlope: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "LinRegSlope", got) + }) + t.Run("LinearRegression", func(t *testing.T) { + ind, err := NewLinearRegression(14) + if err != nil { + t.Fatalf("new LinearRegression: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "LinearRegression", got) + }) + t.Run("LiquidationFeatures", func(t *testing.T) { + ind, err := NewLiquidationFeatures() + if err != nil { + t.Fatalf("new LiquidationFeatures: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + d := derivFields(r) + out, ok := ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], int64(i)) + got[i] = reflectRow(out, ok, 5) + } + compareGolden(t, "LiquidationFeatures", got) + }) + t.Run("LogReturn", func(t *testing.T) { + ind, err := NewLogReturn(14) + if err != nil { + t.Fatalf("new LogReturn: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "LogReturn", got) + }) + t.Run("LongLeggedDoji", func(t *testing.T) { + ind, err := NewLongLeggedDoji() + if err != nil { + t.Fatalf("new LongLeggedDoji: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "LongLeggedDoji", got) + }) + t.Run("LongLine", func(t *testing.T) { + ind, err := NewLongLine() + if err != nil { + t.Fatalf("new LongLine: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "LongLine", got) + }) + t.Run("LongShortRatio", func(t *testing.T) { + ind, err := NewLongShortRatio() + if err != nil { + t.Fatalf("new LongShortRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + d := derivFields(r) + got[i] = []float64{ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], int64(i))} + } + compareGolden(t, "LongShortRatio", got) + }) + t.Run("M2Measure", func(t *testing.T) { + ind, err := NewM2Measure(14, 2.0, 0.5) + if err != nil { + t.Fatalf("new M2Measure: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "M2Measure", got) + }) + t.Run("MaEnvelope", func(t *testing.T) { + ind, err := NewMaEnvelope(14, 2.0) + if err != nil { + t.Fatalf("new MaEnvelope: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3]) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "MaEnvelope", got) + }) + t.Run("MacdExt", func(t *testing.T) { + ind, err := NewMacdExt(12, 0.0, 26, 0.0, 9, 0.0) + if err != nil { + t.Fatalf("new MacdExt: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3]) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "MacdExt", got) + }) + t.Run("MacdFix", func(t *testing.T) { + ind, err := NewMacdFix(9) + if err != nil { + t.Fatalf("new MacdFix: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3]) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "MacdFix", got) + }) + t.Run("MacdHistogram", func(t *testing.T) { + ind, err := NewMacdHistogram(3, 7, 14) + if err != nil { + t.Fatalf("new MacdHistogram: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "MacdHistogram", got) + }) + t.Run("MacdIndicator", func(t *testing.T) { + ind, err := NewMacdIndicator(12, 26, 9) + if err != nil { + t.Fatalf("new MacdIndicator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3]) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "MacdIndicator", got) + }) + t.Run("Mama", func(t *testing.T) { + ind, err := NewMama(0.5, 0.05) + if err != nil { + t.Fatalf("new Mama: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3]) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "Mama", got) + }) + t.Run("MarketFacilitationIndex", func(t *testing.T) { + ind, err := NewMarketFacilitationIndex() + if err != nil { + t.Fatalf("new MarketFacilitationIndex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "MarketFacilitationIndex", got) + }) + t.Run("MartinRatio", func(t *testing.T) { + ind, err := NewMartinRatio(14) + if err != nil { + t.Fatalf("new MartinRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "MartinRatio", got) + }) + t.Run("Marubozu", func(t *testing.T) { + ind, err := NewMarubozu() + if err != nil { + t.Fatalf("new Marubozu: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Marubozu", got) + }) + t.Run("MassIndex", func(t *testing.T) { + ind, err := NewMassIndex(3, 7) + if err != nil { + t.Fatalf("new MassIndex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "MassIndex", got) + }) + t.Run("MatHold", func(t *testing.T) { + ind, err := NewMatHold() + if err != nil { + t.Fatalf("new MatHold: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "MatHold", got) + }) + t.Run("MatchingLow", func(t *testing.T) { + ind, err := NewMatchingLow() + if err != nil { + t.Fatalf("new MatchingLow: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "MatchingLow", got) + }) + t.Run("MaxDrawdown", func(t *testing.T) { + ind, err := NewMaxDrawdown(14) + if err != nil { + t.Fatalf("new MaxDrawdown: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "MaxDrawdown", got) + }) + t.Run("McClellanOscillator", func(t *testing.T) { + ind, err := NewMcClellanOscillator() + if err != nil { + t.Fatalf("new McClellanOscillator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + ch, vo, nh, nl, am, ob_ := crossLists(r) + got[i] = []float64{ind.Update(ch, vo, nh, nl, am, ob_, int64(i))} + } + compareGolden(t, "McClellanOscillator", got) + }) + t.Run("McClellanSummationIndex", func(t *testing.T) { + ind, err := NewMcClellanSummationIndex() + if err != nil { + t.Fatalf("new McClellanSummationIndex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + ch, vo, nh, nl, am, ob_ := crossLists(r) + got[i] = []float64{ind.Update(ch, vo, nh, nl, am, ob_, int64(i))} + } + compareGolden(t, "McClellanSummationIndex", got) + }) + t.Run("McGinleyDynamic", func(t *testing.T) { + ind, err := NewMcGinleyDynamic(14) + if err != nil { + t.Fatalf("new McGinleyDynamic: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "McGinleyDynamic", got) + }) + t.Run("MedianAbsoluteDeviation", func(t *testing.T) { + ind, err := NewMedianAbsoluteDeviation(14) + if err != nil { + t.Fatalf("new MedianAbsoluteDeviation: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "MedianAbsoluteDeviation", got) + }) + t.Run("MedianChannel", func(t *testing.T) { + ind, err := NewMedianChannel(14, 2.0) + if err != nil { + t.Fatalf("new MedianChannel: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3]) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "MedianChannel", got) + }) + t.Run("MedianMa", func(t *testing.T) { + ind, err := NewMedianMa(14) + if err != nil { + t.Fatalf("new MedianMa: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "MedianMa", got) + }) + t.Run("MedianPrice", func(t *testing.T) { + ind, err := NewMedianPrice() + if err != nil { + t.Fatalf("new MedianPrice: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "MedianPrice", got) + }) + t.Run("Mfi", func(t *testing.T) { + ind, err := NewMfi(14) + if err != nil { + t.Fatalf("new Mfi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Mfi", got) + }) + t.Run("Microprice", func(t *testing.T) { + ind, err := NewMicroprice() + if err != nil { + t.Fatalf("new Microprice: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + bp, bs, ap, as_ := obLists(r) + got[i] = []float64{ind.Update(bp, bs, ap, as_)} + } + compareGolden(t, "Microprice", got) + }) + t.Run("MidPoint", func(t *testing.T) { + ind, err := NewMidPoint(14) + if err != nil { + t.Fatalf("new MidPoint: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "MidPoint", got) + }) + t.Run("MidPrice", func(t *testing.T) { + ind, err := NewMidPrice(14) + if err != nil { + t.Fatalf("new MidPrice: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "MidPrice", got) + }) + t.Run("MinusDi", func(t *testing.T) { + ind, err := NewMinusDi(14) + if err != nil { + t.Fatalf("new MinusDi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "MinusDi", got) + }) + t.Run("MinusDm", func(t *testing.T) { + ind, err := NewMinusDm(14) + if err != nil { + t.Fatalf("new MinusDm: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "MinusDm", got) + }) + t.Run("ModifiedMaStop", func(t *testing.T) { + ind, err := NewModifiedMaStop(14) + if err != nil { + t.Fatalf("new ModifiedMaStop: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "ModifiedMaStop", got) + }) + t.Run("Mom", func(t *testing.T) { + ind, err := NewMom(14) + if err != nil { + t.Fatalf("new Mom: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Mom", got) + }) + t.Run("MorningDojiStar", func(t *testing.T) { + ind, err := NewMorningDojiStar() + if err != nil { + t.Fatalf("new MorningDojiStar: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "MorningDojiStar", got) + }) + t.Run("MorningEveningStar", func(t *testing.T) { + ind, err := NewMorningEveningStar() + if err != nil { + t.Fatalf("new MorningEveningStar: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "MorningEveningStar", got) + }) + t.Run("MurreyMathLines", func(t *testing.T) { + ind, err := NewMurreyMathLines(14) + if err != nil { + t.Fatalf("new MurreyMathLines: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 9) + } + compareGolden(t, "MurreyMathLines", got) + }) + t.Run("NakedPoc", func(t *testing.T) { + ind, err := NewNakedPoc(3, 7) + if err != nil { + t.Fatalf("new NakedPoc: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "NakedPoc", got) + }) + t.Run("Natr", func(t *testing.T) { + ind, err := NewNatr(14) + if err != nil { + t.Fatalf("new Natr: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Natr", got) + }) + t.Run("NewHighsNewLows", func(t *testing.T) { + ind, err := NewNewHighsNewLows() + if err != nil { + t.Fatalf("new NewHighsNewLows: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + ch, vo, nh, nl, am, ob_ := crossLists(r) + got[i] = []float64{ind.Update(ch, vo, nh, nl, am, ob_, int64(i))} + } + compareGolden(t, "NewHighsNewLows", got) + }) + t.Run("NewPriceLines", func(t *testing.T) { + ind, err := NewNewPriceLines(14) + if err != nil { + t.Fatalf("new NewPriceLines: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "NewPriceLines", got) + }) + t.Run("Nrtr", func(t *testing.T) { + ind, err := NewNrtr(2.0) + if err != nil { + t.Fatalf("new Nrtr: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "Nrtr", got) + }) + t.Run("Nvi", func(t *testing.T) { + ind, err := NewNvi() + if err != nil { + t.Fatalf("new Nvi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Nvi", got) + }) + t.Run("OIPriceDivergence", func(t *testing.T) { + ind, err := NewOIPriceDivergence(20) + if err != nil { + t.Fatalf("new OIPriceDivergence: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + d := derivFields(r) + got[i] = []float64{ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], int64(i))} + } + compareGolden(t, "OIPriceDivergence", got) + }) + t.Run("OIWeighted", func(t *testing.T) { + ind, err := NewOIWeighted() + if err != nil { + t.Fatalf("new OIWeighted: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + d := derivFields(r) + got[i] = []float64{ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], int64(i))} + } + compareGolden(t, "OIWeighted", got) + }) + t.Run("Obv", func(t *testing.T) { + ind, err := NewObv() + if err != nil { + t.Fatalf("new Obv: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Obv", got) + }) + t.Run("OiToVolumeRatio", func(t *testing.T) { + ind, err := NewOiToVolumeRatio() + if err != nil { + t.Fatalf("new OiToVolumeRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + d := derivFields(r) + got[i] = []float64{ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], int64(i))} + } + compareGolden(t, "OiToVolumeRatio", got) + }) + t.Run("OmegaRatio", func(t *testing.T) { + ind, err := NewOmegaRatio(14, 2.0) + if err != nil { + t.Fatalf("new OmegaRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "OmegaRatio", got) + }) + t.Run("OnNeck", func(t *testing.T) { + ind, err := NewOnNeck() + if err != nil { + t.Fatalf("new OnNeck: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "OnNeck", got) + }) + t.Run("OpenInterestDelta", func(t *testing.T) { + ind, err := NewOpenInterestDelta() + if err != nil { + t.Fatalf("new OpenInterestDelta: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + d := derivFields(r) + got[i] = []float64{ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], int64(i))} + } + compareGolden(t, "OpenInterestDelta", got) + }) + t.Run("OpenInterestMomentum", func(t *testing.T) { + ind, err := NewOpenInterestMomentum(10) + if err != nil { + t.Fatalf("new OpenInterestMomentum: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + d := derivFields(r) + got[i] = []float64{ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], int64(i))} + } + compareGolden(t, "OpenInterestMomentum", got) + }) + t.Run("OpeningMarubozu", func(t *testing.T) { + ind, err := NewOpeningMarubozu() + if err != nil { + t.Fatalf("new OpeningMarubozu: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "OpeningMarubozu", got) + }) + t.Run("OpeningRange", func(t *testing.T) { + ind, err := NewOpeningRange(14) + if err != nil { + t.Fatalf("new OpeningRange: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "OpeningRange", got) + }) + t.Run("OrderBookImbalanceFull", func(t *testing.T) { + ind, err := NewOrderBookImbalanceFull() + if err != nil { + t.Fatalf("new OrderBookImbalanceFull: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + bp, bs, ap, as_ := obLists(r) + got[i] = []float64{ind.Update(bp, bs, ap, as_)} + } + compareGolden(t, "OrderBookImbalanceFull", got) + }) + t.Run("OrderBookImbalanceTop1", func(t *testing.T) { + ind, err := NewOrderBookImbalanceTop1() + if err != nil { + t.Fatalf("new OrderBookImbalanceTop1: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + bp, bs, ap, as_ := obLists(r) + got[i] = []float64{ind.Update(bp, bs, ap, as_)} + } + compareGolden(t, "OrderBookImbalanceTop1", got) + }) + t.Run("OrderBookImbalanceTopN", func(t *testing.T) { + ind, err := NewOrderBookImbalanceTopN(5) + if err != nil { + t.Fatalf("new OrderBookImbalanceTopN: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + bp, bs, ap, as_ := obLists(r) + got[i] = []float64{ind.Update(bp, bs, ap, as_)} + } + compareGolden(t, "OrderBookImbalanceTopN", got) + }) + t.Run("OrderFlowImbalance", func(t *testing.T) { + ind, err := NewOrderFlowImbalance(20) + if err != nil { + t.Fatalf("new OrderFlowImbalance: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + bp, bs, ap, as_ := obLists(r) + got[i] = []float64{ind.Update(bp, bs, ap, as_)} + } + compareGolden(t, "OrderFlowImbalance", got) + }) + t.Run("OuHalfLife", func(t *testing.T) { + ind, err := NewOuHalfLife(14) + if err != nil { + t.Fatalf("new OuHalfLife: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[0])} + } + compareGolden(t, "OuHalfLife", got) + }) + t.Run("OvernightGap", func(t *testing.T) { + ind, err := NewOvernightGap(0) + if err != nil { + t.Fatalf("new OvernightGap: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "OvernightGap", got) + }) + t.Run("OvernightIntradayReturn", func(t *testing.T) { + ind, err := NewOvernightIntradayReturn(14) + if err != nil { + t.Fatalf("new OvernightIntradayReturn: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "OvernightIntradayReturn", got) + }) + t.Run("PainIndex", func(t *testing.T) { + ind, err := NewPainIndex(14) + if err != nil { + t.Fatalf("new PainIndex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "PainIndex", got) + }) + t.Run("PairSpreadZScore", func(t *testing.T) { + ind, err := NewPairSpreadZScore(20, 20) + if err != nil { + t.Fatalf("new PairSpreadZScore: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[0])} + } + compareGolden(t, "PairSpreadZScore", got) + }) + t.Run("PairwiseBeta", func(t *testing.T) { + ind, err := NewPairwiseBeta(14) + if err != nil { + t.Fatalf("new PairwiseBeta: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[0])} + } + compareGolden(t, "PairwiseBeta", got) + }) + t.Run("ParkinsonVolatility", func(t *testing.T) { + ind, err := NewParkinsonVolatility(20, 252) + if err != nil { + t.Fatalf("new ParkinsonVolatility: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "ParkinsonVolatility", got) + }) + t.Run("PearsonCorrelation", func(t *testing.T) { + ind, err := NewPearsonCorrelation(14) + if err != nil { + t.Fatalf("new PearsonCorrelation: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[0])} + } + compareGolden(t, "PearsonCorrelation", got) + }) + t.Run("PercentAboveMa", func(t *testing.T) { + ind, err := NewPercentAboveMa() + if err != nil { + t.Fatalf("new PercentAboveMa: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + ch, vo, nh, nl, am, ob_ := crossLists(r) + got[i] = []float64{ind.Update(ch, vo, nh, nl, am, ob_, int64(i))} + } + compareGolden(t, "PercentAboveMa", got) + }) + t.Run("PercentB", func(t *testing.T) { + ind, err := NewPercentB(14, 2.0) + if err != nil { + t.Fatalf("new PercentB: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "PercentB", got) + }) + t.Run("PercentageTrailingStop", func(t *testing.T) { + ind, err := NewPercentageTrailingStop(2.0) + if err != nil { + t.Fatalf("new PercentageTrailingStop: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "PercentageTrailingStop", got) + }) + t.Run("PerpetualPremiumIndex", func(t *testing.T) { + ind, err := NewPerpetualPremiumIndex() + if err != nil { + t.Fatalf("new PerpetualPremiumIndex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + d := derivFields(r) + got[i] = []float64{ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], int64(i))} + } + compareGolden(t, "PerpetualPremiumIndex", got) + }) + t.Run("Pgo", func(t *testing.T) { + ind, err := NewPgo(14) + if err != nil { + t.Fatalf("new Pgo: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Pgo", got) + }) + t.Run("PiercingDarkCloud", func(t *testing.T) { + ind, err := NewPiercingDarkCloud() + if err != nil { + t.Fatalf("new PiercingDarkCloud: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "PiercingDarkCloud", got) + }) + t.Run("Pin", func(t *testing.T) { + ind, err := NewPin(20) + if err != nil { + t.Fatalf("new Pin: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[4], r[3] >= r[0], int64(i))} + } + compareGolden(t, "Pin", got) + }) + t.Run("PivotReversal", func(t *testing.T) { + ind, err := NewPivotReversal(3, 7) + if err != nil { + t.Fatalf("new PivotReversal: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "PivotReversal", got) + }) + t.Run("PlusDi", func(t *testing.T) { + ind, err := NewPlusDi(14) + if err != nil { + t.Fatalf("new PlusDi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "PlusDi", got) + }) + t.Run("PlusDm", func(t *testing.T) { + ind, err := NewPlusDm(14) + if err != nil { + t.Fatalf("new PlusDm: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "PlusDm", got) + }) + t.Run("Pmo", func(t *testing.T) { + ind, err := NewPmo(3, 7) + if err != nil { + t.Fatalf("new Pmo: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Pmo", got) + }) + t.Run("PointAndFigureBars", func(t *testing.T) { + ind, err := NewPointAndFigureBars(2.0, 3) + if err != nil { + t.Fatalf("new PointAndFigureBars: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = flattenBars(ind.Update(r[3], r[3], r[3], r[3], 1.0, 0)) + } + compareGolden(t, "PointAndFigureBars", got) + }) + t.Run("PolarizedFractalEfficiency", func(t *testing.T) { + ind, err := NewPolarizedFractalEfficiency(10, 5) + if err != nil { + t.Fatalf("new PolarizedFractalEfficiency: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "PolarizedFractalEfficiency", got) + }) + t.Run("Ppo", func(t *testing.T) { + ind, err := NewPpo(3, 7) + if err != nil { + t.Fatalf("new Ppo: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Ppo", got) + }) + t.Run("PpoHistogram", func(t *testing.T) { + ind, err := NewPpoHistogram(3, 7, 14) + if err != nil { + t.Fatalf("new PpoHistogram: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "PpoHistogram", got) + }) + t.Run("ProfileShape", func(t *testing.T) { + ind, err := NewProfileShape(3, 7) + if err != nil { + t.Fatalf("new ProfileShape: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "ProfileShape", got) + }) + t.Run("ProfitFactor", func(t *testing.T) { + ind, err := NewProfitFactor(14) + if err != nil { + t.Fatalf("new ProfitFactor: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "ProfitFactor", got) + }) + t.Run("ProjectionBands", func(t *testing.T) { + ind, err := NewProjectionBands(14) + if err != nil { + t.Fatalf("new ProjectionBands: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "ProjectionBands", got) + }) + t.Run("ProjectionOscillator", func(t *testing.T) { + ind, err := NewProjectionOscillator(14) + if err != nil { + t.Fatalf("new ProjectionOscillator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "ProjectionOscillator", got) + }) + t.Run("Psar", func(t *testing.T) { + ind, err := NewPsar(0.02, 0.02, 0.2) + if err != nil { + t.Fatalf("new Psar: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Psar", got) + }) + t.Run("Pvi", func(t *testing.T) { + ind, err := NewPvi() + if err != nil { + t.Fatalf("new Pvi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Pvi", got) + }) + t.Run("Qqe", func(t *testing.T) { + ind, err := NewQqe(3, 7, 2.0) + if err != nil { + t.Fatalf("new Qqe: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3]) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "Qqe", got) + }) + t.Run("Qstick", func(t *testing.T) { + ind, err := NewQstick(14) + if err != nil { + t.Fatalf("new Qstick: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Qstick", got) + }) + t.Run("QuartileBands", func(t *testing.T) { + ind, err := NewQuartileBands(14) + if err != nil { + t.Fatalf("new QuartileBands: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3]) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "QuartileBands", got) + }) + t.Run("QuotedSpread", func(t *testing.T) { + ind, err := NewQuotedSpread() + if err != nil { + t.Fatalf("new QuotedSpread: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + bp, bs, ap, as_ := obLists(r) + got[i] = []float64{ind.Update(bp, bs, ap, as_)} + } + compareGolden(t, "QuotedSpread", got) + }) + t.Run("RSquared", func(t *testing.T) { + ind, err := NewRSquared(14) + if err != nil { + t.Fatalf("new RSquared: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "RSquared", got) + }) + t.Run("RangeBars", func(t *testing.T) { + ind, err := NewRangeBars(2.0) + if err != nil { + t.Fatalf("new RangeBars: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = flattenBars(ind.Update(r[3], r[3], r[3], r[3], 1.0, 0)) + } + compareGolden(t, "RangeBars", got) + }) + t.Run("RealizedSpread", func(t *testing.T) { + ind, err := NewRealizedSpread(20) + if err != nil { + t.Fatalf("new RealizedSpread: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[4], r[3] >= r[0], int64(i), (r[1]+r[2])/2)} + } + compareGolden(t, "RealizedSpread", got) + }) + t.Run("RealizedVolatility", func(t *testing.T) { + ind, err := NewRealizedVolatility(14) + if err != nil { + t.Fatalf("new RealizedVolatility: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "RealizedVolatility", got) + }) + t.Run("RecoveryFactor", func(t *testing.T) { + ind, err := NewRecoveryFactor() + if err != nil { + t.Fatalf("new RecoveryFactor: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "RecoveryFactor", got) + }) + t.Run("RectangleRange", func(t *testing.T) { + ind, err := NewRectangleRange() + if err != nil { + t.Fatalf("new RectangleRange: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "RectangleRange", got) + }) + t.Run("Reflex", func(t *testing.T) { + ind, err := NewReflex(14) + if err != nil { + t.Fatalf("new Reflex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Reflex", got) + }) + t.Run("RegimeLabel", func(t *testing.T) { + ind, err := NewRegimeLabel(3, 7) + if err != nil { + t.Fatalf("new RegimeLabel: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "RegimeLabel", got) + }) + t.Run("RelativeStrengthAB", func(t *testing.T) { + ind, err := NewRelativeStrengthAB(14, 14) + if err != nil { + t.Fatalf("new RelativeStrengthAB: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3], r[0]) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "RelativeStrengthAB", got) + }) + t.Run("RenkoBars", func(t *testing.T) { + ind, err := NewRenkoBars(2.0) + if err != nil { + t.Fatalf("new RenkoBars: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = flattenBars(ind.Update(r[3], r[3], r[3], r[3], 1.0, 0)) + } + compareGolden(t, "RenkoBars", got) + }) + t.Run("RenkoTrailingStop", func(t *testing.T) { + ind, err := NewRenkoTrailingStop(2.0) + if err != nil { + t.Fatalf("new RenkoTrailingStop: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "RenkoTrailingStop", got) + }) + t.Run("RickshawMan", func(t *testing.T) { + ind, err := NewRickshawMan() + if err != nil { + t.Fatalf("new RickshawMan: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "RickshawMan", got) + }) + t.Run("RisingThreeMethods", func(t *testing.T) { + ind, err := NewRisingThreeMethods() + if err != nil { + t.Fatalf("new RisingThreeMethods: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "RisingThreeMethods", got) + }) + t.Run("Rmi", func(t *testing.T) { + ind, err := NewRmi(3, 7) + if err != nil { + t.Fatalf("new Rmi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Rmi", got) + }) + t.Run("Roc", func(t *testing.T) { + ind, err := NewRoc(14) + if err != nil { + t.Fatalf("new Roc: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Roc", got) + }) + t.Run("Rocp", func(t *testing.T) { + ind, err := NewRocp(14) + if err != nil { + t.Fatalf("new Rocp: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Rocp", got) + }) + t.Run("Rocr", func(t *testing.T) { + ind, err := NewRocr(14) + if err != nil { + t.Fatalf("new Rocr: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Rocr", got) + }) + t.Run("Rocr100", func(t *testing.T) { + ind, err := NewRocr100(14) + if err != nil { + t.Fatalf("new Rocr100: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Rocr100", got) + }) + t.Run("RogersSatchellVolatility", func(t *testing.T) { + ind, err := NewRogersSatchellVolatility(20, 252) + if err != nil { + t.Fatalf("new RogersSatchellVolatility: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "RogersSatchellVolatility", got) + }) + t.Run("RollMeasure", func(t *testing.T) { + ind, err := NewRollMeasure(20) + if err != nil { + t.Fatalf("new RollMeasure: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[4], r[3] >= r[0], int64(i))} + } + compareGolden(t, "RollMeasure", got) + }) + t.Run("RollingCorrelation", func(t *testing.T) { + ind, err := NewRollingCorrelation(14) + if err != nil { + t.Fatalf("new RollingCorrelation: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[0])} + } + compareGolden(t, "RollingCorrelation", got) + }) + t.Run("RollingCovariance", func(t *testing.T) { + ind, err := NewRollingCovariance(14) + if err != nil { + t.Fatalf("new RollingCovariance: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[0])} + } + compareGolden(t, "RollingCovariance", got) + }) + t.Run("RollingIqr", func(t *testing.T) { + ind, err := NewRollingIqr(14) + if err != nil { + t.Fatalf("new RollingIqr: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "RollingIqr", got) + }) + t.Run("RollingMinMaxScaler", func(t *testing.T) { + ind, err := NewRollingMinMaxScaler(14) + if err != nil { + t.Fatalf("new RollingMinMaxScaler: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "RollingMinMaxScaler", got) + }) + t.Run("RollingPercentileRank", func(t *testing.T) { + ind, err := NewRollingPercentileRank(14) + if err != nil { + t.Fatalf("new RollingPercentileRank: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "RollingPercentileRank", got) + }) + t.Run("RollingQuantile", func(t *testing.T) { + ind, err := NewRollingQuantile(20, 0.5) + if err != nil { + t.Fatalf("new RollingQuantile: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "RollingQuantile", got) + }) + t.Run("RollingVwap", func(t *testing.T) { + ind, err := NewRollingVwap(14) + if err != nil { + t.Fatalf("new RollingVwap: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "RollingVwap", got) + }) + t.Run("RoofingFilter", func(t *testing.T) { + ind, err := NewRoofingFilter(3, 7) + if err != nil { + t.Fatalf("new RoofingFilter: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "RoofingFilter", got) + }) + t.Run("Rsi", func(t *testing.T) { + ind, err := NewRsi(14) + if err != nil { + t.Fatalf("new Rsi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Rsi", got) + }) + t.Run("Rsx", func(t *testing.T) { + ind, err := NewRsx(14) + if err != nil { + t.Fatalf("new Rsx: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Rsx", got) + }) + t.Run("RunBars", func(t *testing.T) { + ind, err := NewRunBars(3) + if err != nil { + t.Fatalf("new RunBars: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = flattenBars(ind.Update(r[0], r[1], r[2], r[3], 1.0, 0)) + } + compareGolden(t, "RunBars", got) + }) + t.Run("Rvi", func(t *testing.T) { + ind, err := NewRvi(14) + if err != nil { + t.Fatalf("new Rvi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Rvi", got) + }) + t.Run("RviVolatility", func(t *testing.T) { + ind, err := NewRviVolatility(14) + if err != nil { + t.Fatalf("new RviVolatility: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "RviVolatility", got) + }) + t.Run("Rwi", func(t *testing.T) { + ind, err := NewRwi(14) + if err != nil { + t.Fatalf("new Rwi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "Rwi", got) + }) + t.Run("SampleEntropy", func(t *testing.T) { + ind, err := NewSampleEntropy(20, 2, 0.2) + if err != nil { + t.Fatalf("new SampleEntropy: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "SampleEntropy", got) + }) + t.Run("SarExt", func(t *testing.T) { + ind, err := NewSarExt(2.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5) + if err != nil { + t.Fatalf("new SarExt: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "SarExt", got) + }) + t.Run("SeasonalZScore", func(t *testing.T) { + ind, err := NewSeasonalZScore(14) + if err != nil { + t.Fatalf("new SeasonalZScore: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "SeasonalZScore", got) + }) + t.Run("SeparatingLines", func(t *testing.T) { + ind, err := NewSeparatingLines() + if err != nil { + t.Fatalf("new SeparatingLines: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "SeparatingLines", got) + }) + t.Run("SessionHighLow", func(t *testing.T) { + ind, err := NewSessionHighLow(14) + if err != nil { + t.Fatalf("new SessionHighLow: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "SessionHighLow", got) + }) + t.Run("SessionRange", func(t *testing.T) { + ind, err := NewSessionRange(14) + if err != nil { + t.Fatalf("new SessionRange: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "SessionRange", got) + }) + t.Run("SessionVwap", func(t *testing.T) { + ind, err := NewSessionVwap(14) + if err != nil { + t.Fatalf("new SessionVwap: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "SessionVwap", got) + }) + t.Run("ShannonEntropy", func(t *testing.T) { + ind, err := NewShannonEntropy(3, 7) + if err != nil { + t.Fatalf("new ShannonEntropy: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "ShannonEntropy", got) + }) + t.Run("Shark", func(t *testing.T) { + ind, err := NewShark() + if err != nil { + t.Fatalf("new Shark: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Shark", got) + }) + t.Run("SharpeRatio", func(t *testing.T) { + ind, err := NewSharpeRatio(14, 2.0) + if err != nil { + t.Fatalf("new SharpeRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "SharpeRatio", got) + }) + t.Run("ShootingStar", func(t *testing.T) { + ind, err := NewShootingStar() + if err != nil { + t.Fatalf("new ShootingStar: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "ShootingStar", got) + }) + t.Run("ShortLine", func(t *testing.T) { + ind, err := NewShortLine() + if err != nil { + t.Fatalf("new ShortLine: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "ShortLine", got) + }) + t.Run("SignedVolume", func(t *testing.T) { + ind, err := NewSignedVolume() + if err != nil { + t.Fatalf("new SignedVolume: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[4], r[3] >= r[0], int64(i))} + } + compareGolden(t, "SignedVolume", got) + }) + t.Run("SineWave", func(t *testing.T) { + ind, err := NewSineWave() + if err != nil { + t.Fatalf("new SineWave: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "SineWave", got) + }) + t.Run("SineWeightedMa", func(t *testing.T) { + ind, err := NewSineWeightedMa(14) + if err != nil { + t.Fatalf("new SineWeightedMa: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "SineWeightedMa", got) + }) + t.Run("SinglePrints", func(t *testing.T) { + ind, err := NewSinglePrints(3, 7) + if err != nil { + t.Fatalf("new SinglePrints: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "SinglePrints", got) + }) + t.Run("Skewness", func(t *testing.T) { + ind, err := NewSkewness(14) + if err != nil { + t.Fatalf("new Skewness: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Skewness", got) + }) + t.Run("Sma", func(t *testing.T) { + ind, err := NewSma(14) + if err != nil { + t.Fatalf("new Sma: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Sma", got) + }) + t.Run("Smi", func(t *testing.T) { + ind, err := NewSmi(3, 7, 14) + if err != nil { + t.Fatalf("new Smi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Smi", got) + }) + t.Run("Smma", func(t *testing.T) { + ind, err := NewSmma(14) + if err != nil { + t.Fatalf("new Smma: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Smma", got) + }) + t.Run("SmoothedHeikinAshi", func(t *testing.T) { + ind, err := NewSmoothedHeikinAshi(14) + if err != nil { + t.Fatalf("new SmoothedHeikinAshi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 4) + } + compareGolden(t, "SmoothedHeikinAshi", got) + }) + t.Run("SortinoRatio", func(t *testing.T) { + ind, err := NewSortinoRatio(14, 2.0) + if err != nil { + t.Fatalf("new SortinoRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "SortinoRatio", got) + }) + t.Run("SpearmanCorrelation", func(t *testing.T) { + ind, err := NewSpearmanCorrelation(14) + if err != nil { + t.Fatalf("new SpearmanCorrelation: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[0])} + } + compareGolden(t, "SpearmanCorrelation", got) + }) + t.Run("SpinningTop", func(t *testing.T) { + ind, err := NewSpinningTop() + if err != nil { + t.Fatalf("new SpinningTop: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "SpinningTop", got) + }) + t.Run("SpreadAr1Coefficient", func(t *testing.T) { + ind, err := NewSpreadAr1Coefficient(14) + if err != nil { + t.Fatalf("new SpreadAr1Coefficient: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[0])} + } + compareGolden(t, "SpreadAr1Coefficient", got) + }) + t.Run("SpreadBollingerBands", func(t *testing.T) { + ind, err := NewSpreadBollingerBands(14, 2.0) + if err != nil { + t.Fatalf("new SpreadBollingerBands: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3], r[0]) + got[i] = reflectRow(out, ok, 4) + } + compareGolden(t, "SpreadBollingerBands", got) + }) + t.Run("SpreadHurst", func(t *testing.T) { + ind, err := NewSpreadHurst(14) + if err != nil { + t.Fatalf("new SpreadHurst: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[0])} + } + compareGolden(t, "SpreadHurst", got) + }) + t.Run("StalledPattern", func(t *testing.T) { + ind, err := NewStalledPattern() + if err != nil { + t.Fatalf("new StalledPattern: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "StalledPattern", got) + }) + t.Run("StandardError", func(t *testing.T) { + ind, err := NewStandardError(14) + if err != nil { + t.Fatalf("new StandardError: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "StandardError", got) + }) + t.Run("StandardErrorBands", func(t *testing.T) { + ind, err := NewStandardErrorBands(14, 2.0) + if err != nil { + t.Fatalf("new StandardErrorBands: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3]) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "StandardErrorBands", got) + }) + t.Run("StarcBands", func(t *testing.T) { + ind, err := NewStarcBands(3, 7, 2.0) + if err != nil { + t.Fatalf("new StarcBands: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "StarcBands", got) + }) + t.Run("Stc", func(t *testing.T) { + ind, err := NewStc(10, 23, 10, 0.5) + if err != nil { + t.Fatalf("new Stc: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Stc", got) + }) + t.Run("StdDev", func(t *testing.T) { + ind, err := NewStdDev(14) + if err != nil { + t.Fatalf("new StdDev: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "StdDev", got) + }) + t.Run("StepTrailingStop", func(t *testing.T) { + ind, err := NewStepTrailingStop(2.0) + if err != nil { + t.Fatalf("new StepTrailingStop: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "StepTrailingStop", got) + }) + t.Run("SterlingRatio", func(t *testing.T) { + ind, err := NewSterlingRatio(14) + if err != nil { + t.Fatalf("new SterlingRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "SterlingRatio", got) + }) + t.Run("StickSandwich", func(t *testing.T) { + ind, err := NewStickSandwich() + if err != nil { + t.Fatalf("new StickSandwich: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "StickSandwich", got) + }) + t.Run("StochRsi", func(t *testing.T) { + ind, err := NewStochRsi(3, 7) + if err != nil { + t.Fatalf("new StochRsi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "StochRsi", got) + }) + t.Run("Stochastic", func(t *testing.T) { + ind, err := NewStochastic(3, 7) + if err != nil { + t.Fatalf("new Stochastic: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "Stochastic", got) + }) + t.Run("StochasticCci", func(t *testing.T) { + ind, err := NewStochasticCci(14) + if err != nil { + t.Fatalf("new StochasticCci: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "StochasticCci", got) + }) + t.Run("SuperSmoother", func(t *testing.T) { + ind, err := NewSuperSmoother(14) + if err != nil { + t.Fatalf("new SuperSmoother: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "SuperSmoother", got) + }) + t.Run("SuperTrend", func(t *testing.T) { + ind, err := NewSuperTrend(14, 2.0) + if err != nil { + t.Fatalf("new SuperTrend: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "SuperTrend", got) + }) + t.Run("T3", func(t *testing.T) { + ind, err := NewT3(5, 0.7) + if err != nil { + t.Fatalf("new T3: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "T3", got) + }) + t.Run("TailRatio", func(t *testing.T) { + ind, err := NewTailRatio(14) + if err != nil { + t.Fatalf("new TailRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "TailRatio", got) + }) + t.Run("TakerBuySellRatio", func(t *testing.T) { + ind, err := NewTakerBuySellRatio() + if err != nil { + t.Fatalf("new TakerBuySellRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + d := derivFields(r) + got[i] = []float64{ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], int64(i))} + } + compareGolden(t, "TakerBuySellRatio", got) + }) + t.Run("Takuri", func(t *testing.T) { + ind, err := NewTakuri() + if err != nil { + t.Fatalf("new Takuri: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Takuri", got) + }) + t.Run("TasukiGap", func(t *testing.T) { + ind, err := NewTasukiGap() + if err != nil { + t.Fatalf("new TasukiGap: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TasukiGap", got) + }) + t.Run("TdCamouflage", func(t *testing.T) { + ind, err := NewTdCamouflage() + if err != nil { + t.Fatalf("new TdCamouflage: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TdCamouflage", got) + }) + t.Run("TdClop", func(t *testing.T) { + ind, err := NewTdClop() + if err != nil { + t.Fatalf("new TdClop: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TdClop", got) + }) + t.Run("TdClopwin", func(t *testing.T) { + ind, err := NewTdClopwin() + if err != nil { + t.Fatalf("new TdClopwin: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TdClopwin", got) + }) + t.Run("TdCombo", func(t *testing.T) { + ind, err := NewTdCombo(3, 7, 14, 28) + if err != nil { + t.Fatalf("new TdCombo: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TdCombo", got) + }) + t.Run("TdCountdown", func(t *testing.T) { + ind, err := NewTdCountdown(3, 7, 14, 28) + if err != nil { + t.Fatalf("new TdCountdown: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TdCountdown", got) + }) + t.Run("TdDWave", func(t *testing.T) { + ind, err := NewTdDWave(2) + if err != nil { + t.Fatalf("new TdDWave: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TdDWave", got) + }) + t.Run("TdDeMarker", func(t *testing.T) { + ind, err := NewTdDeMarker(14) + if err != nil { + t.Fatalf("new TdDeMarker: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TdDeMarker", got) + }) + t.Run("TdDifferential", func(t *testing.T) { + ind, err := NewTdDifferential() + if err != nil { + t.Fatalf("new TdDifferential: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TdDifferential", got) + }) + t.Run("TdLines", func(t *testing.T) { + ind, err := NewTdLines(3, 7) + if err != nil { + t.Fatalf("new TdLines: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "TdLines", got) + }) + t.Run("TdMovingAverage", func(t *testing.T) { + ind, err := NewTdMovingAverage(3, 7) + if err != nil { + t.Fatalf("new TdMovingAverage: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "TdMovingAverage", got) + }) + t.Run("TdOpen", func(t *testing.T) { + ind, err := NewTdOpen() + if err != nil { + t.Fatalf("new TdOpen: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TdOpen", got) + }) + t.Run("TdPressure", func(t *testing.T) { + ind, err := NewTdPressure(14) + if err != nil { + t.Fatalf("new TdPressure: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TdPressure", got) + }) + t.Run("TdPropulsion", func(t *testing.T) { + ind, err := NewTdPropulsion() + if err != nil { + t.Fatalf("new TdPropulsion: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TdPropulsion", got) + }) + t.Run("TdRangeProjection", func(t *testing.T) { + ind, err := NewTdRangeProjection() + if err != nil { + t.Fatalf("new TdRangeProjection: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "TdRangeProjection", got) + }) + t.Run("TdRei", func(t *testing.T) { + ind, err := NewTdRei(14) + if err != nil { + t.Fatalf("new TdRei: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TdRei", got) + }) + t.Run("TdRiskLevel", func(t *testing.T) { + ind, err := NewTdRiskLevel(3, 7) + if err != nil { + t.Fatalf("new TdRiskLevel: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "TdRiskLevel", got) + }) + t.Run("TdSequential", func(t *testing.T) { + ind, err := NewTdSequential(3, 7, 14, 28) + if err != nil { + t.Fatalf("new TdSequential: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "TdSequential", got) + }) + t.Run("TdSetup", func(t *testing.T) { + ind, err := NewTdSetup(3, 7) + if err != nil { + t.Fatalf("new TdSetup: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TdSetup", got) + }) + t.Run("TdTrap", func(t *testing.T) { + ind, err := NewTdTrap() + if err != nil { + t.Fatalf("new TdTrap: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TdTrap", got) + }) + t.Run("Tema", func(t *testing.T) { + ind, err := NewTema(14) + if err != nil { + t.Fatalf("new Tema: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Tema", got) + }) + t.Run("TermStructureBasis", func(t *testing.T) { + ind, err := NewTermStructureBasis() + if err != nil { + t.Fatalf("new TermStructureBasis: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + d := derivFields(r) + got[i] = []float64{ind.Update(d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], int64(i))} + } + compareGolden(t, "TermStructureBasis", got) + }) + t.Run("ThreeDrives", func(t *testing.T) { + ind, err := NewThreeDrives() + if err != nil { + t.Fatalf("new ThreeDrives: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "ThreeDrives", got) + }) + t.Run("ThreeInside", func(t *testing.T) { + ind, err := NewThreeInside() + if err != nil { + t.Fatalf("new ThreeInside: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "ThreeInside", got) + }) + t.Run("ThreeLineBreak", func(t *testing.T) { + ind, err := NewThreeLineBreak(14) + if err != nil { + t.Fatalf("new ThreeLineBreak: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "ThreeLineBreak", got) + }) + t.Run("ThreeLineBreakBars", func(t *testing.T) { + ind, err := NewThreeLineBreakBars(3) + if err != nil { + t.Fatalf("new ThreeLineBreakBars: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = flattenBars(ind.Update(r[3], r[3], r[3], r[3], 1.0, 0)) + } + compareGolden(t, "ThreeLineBreakBars", got) + }) + t.Run("ThreeLineStrike", func(t *testing.T) { + ind, err := NewThreeLineStrike() + if err != nil { + t.Fatalf("new ThreeLineStrike: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "ThreeLineStrike", got) + }) + t.Run("ThreeOutside", func(t *testing.T) { + ind, err := NewThreeOutside() + if err != nil { + t.Fatalf("new ThreeOutside: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "ThreeOutside", got) + }) + t.Run("ThreeSoldiersOrCrows", func(t *testing.T) { + ind, err := NewThreeSoldiersOrCrows() + if err != nil { + t.Fatalf("new ThreeSoldiersOrCrows: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "ThreeSoldiersOrCrows", got) + }) + t.Run("ThreeStarsInSouth", func(t *testing.T) { + ind, err := NewThreeStarsInSouth() + if err != nil { + t.Fatalf("new ThreeStarsInSouth: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "ThreeStarsInSouth", got) + }) + t.Run("Thrusting", func(t *testing.T) { + ind, err := NewThrusting() + if err != nil { + t.Fatalf("new Thrusting: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Thrusting", got) + }) + t.Run("TickBars", func(t *testing.T) { + ind, err := NewTickBars(2) + if err != nil { + t.Fatalf("new TickBars: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = flattenBars(ind.Update(r[0], r[1], r[2], r[3], r[4], 0)) + } + compareGolden(t, "TickBars", got) + }) + t.Run("TickIndex", func(t *testing.T) { + ind, err := NewTickIndex() + if err != nil { + t.Fatalf("new TickIndex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + ch, vo, nh, nl, am, ob_ := crossLists(r) + got[i] = []float64{ind.Update(ch, vo, nh, nl, am, ob_, int64(i))} + } + compareGolden(t, "TickIndex", got) + }) + t.Run("Tii", func(t *testing.T) { + ind, err := NewTii(3, 7) + if err != nil { + t.Fatalf("new Tii: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Tii", got) + }) + t.Run("TimeBasedStop", func(t *testing.T) { + ind, err := NewTimeBasedStop(14) + if err != nil { + t.Fatalf("new TimeBasedStop: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TimeBasedStop", got) + }) + t.Run("TimeOfDayReturnProfile", func(t *testing.T) { + ind, err := NewTimeOfDayReturnProfile(24, 0) + if err != nil { + t.Fatalf("new TimeOfDayReturnProfile: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + bins, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + if ok { + got[i] = bins + } else { + got[i] = nanRow(24) + } + } + compareGolden(t, "TimeOfDayReturnProfile", got) + }) + t.Run("TowerTopBottom", func(t *testing.T) { + ind, err := NewTowerTopBottom() + if err != nil { + t.Fatalf("new TowerTopBottom: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TowerTopBottom", got) + }) + t.Run("TpoProfile", func(t *testing.T) { + ind, err := NewTpoProfile(30, 50) + if err != nil { + t.Fatalf("new TpoProfile: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 52) + } + compareGolden(t, "TpoProfile", got) + }) + t.Run("TradeImbalance", func(t *testing.T) { + ind, err := NewTradeImbalance(20) + if err != nil { + t.Fatalf("new TradeImbalance: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[4], r[3] >= r[0], int64(i))} + } + compareGolden(t, "TradeImbalance", got) + }) + t.Run("TradeSignAutocorrelation", func(t *testing.T) { + ind, err := NewTradeSignAutocorrelation(20) + if err != nil { + t.Fatalf("new TradeSignAutocorrelation: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[4], r[3] >= r[0], int64(i))} + } + compareGolden(t, "TradeSignAutocorrelation", got) + }) + t.Run("TradeVolumeIndex", func(t *testing.T) { + ind, err := NewTradeVolumeIndex(2.0) + if err != nil { + t.Fatalf("new TradeVolumeIndex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TradeVolumeIndex", got) + }) + t.Run("TrendLabel", func(t *testing.T) { + ind, err := NewTrendLabel(14) + if err != nil { + t.Fatalf("new TrendLabel: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "TrendLabel", got) + }) + t.Run("TrendStrengthIndex", func(t *testing.T) { + ind, err := NewTrendStrengthIndex(14) + if err != nil { + t.Fatalf("new TrendStrengthIndex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "TrendStrengthIndex", got) + }) + t.Run("Trendflex", func(t *testing.T) { + ind, err := NewTrendflex(14) + if err != nil { + t.Fatalf("new Trendflex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Trendflex", got) + }) + t.Run("TreynorRatio", func(t *testing.T) { + ind, err := NewTreynorRatio(14, 2.0) + if err != nil { + t.Fatalf("new TreynorRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[0])} + } + compareGolden(t, "TreynorRatio", got) + }) + t.Run("Triangle", func(t *testing.T) { + ind, err := NewTriangle() + if err != nil { + t.Fatalf("new Triangle: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Triangle", got) + }) + t.Run("Trima", func(t *testing.T) { + ind, err := NewTrima(14) + if err != nil { + t.Fatalf("new Trima: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Trima", got) + }) + t.Run("Trin", func(t *testing.T) { + ind, err := NewTrin() + if err != nil { + t.Fatalf("new Trin: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + ch, vo, nh, nl, am, ob_ := crossLists(r) + got[i] = []float64{ind.Update(ch, vo, nh, nl, am, ob_, int64(i))} + } + compareGolden(t, "Trin", got) + }) + t.Run("TripleTopBottom", func(t *testing.T) { + ind, err := NewTripleTopBottom() + if err != nil { + t.Fatalf("new TripleTopBottom: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TripleTopBottom", got) + }) + t.Run("Tristar", func(t *testing.T) { + ind, err := NewTristar() + if err != nil { + t.Fatalf("new Tristar: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Tristar", got) + }) + t.Run("Trix", func(t *testing.T) { + ind, err := NewTrix(14) + if err != nil { + t.Fatalf("new Trix: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Trix", got) + }) + t.Run("TrueRange", func(t *testing.T) { + ind, err := NewTrueRange() + if err != nil { + t.Fatalf("new TrueRange: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TrueRange", got) + }) + t.Run("Tsf", func(t *testing.T) { + ind, err := NewTsf(14) + if err != nil { + t.Fatalf("new Tsf: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Tsf", got) + }) + t.Run("TsfOscillator", func(t *testing.T) { + ind, err := NewTsfOscillator(14) + if err != nil { + t.Fatalf("new TsfOscillator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "TsfOscillator", got) + }) + t.Run("Tsi", func(t *testing.T) { + ind, err := NewTsi(3, 7) + if err != nil { + t.Fatalf("new Tsi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Tsi", got) + }) + t.Run("Tsv", func(t *testing.T) { + ind, err := NewTsv(14) + if err != nil { + t.Fatalf("new Tsv: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Tsv", got) + }) + t.Run("TtmSqueeze", func(t *testing.T) { + ind, err := NewTtmSqueeze(14, 2.0, 0.5) + if err != nil { + t.Fatalf("new TtmSqueeze: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "TtmSqueeze", got) + }) + t.Run("TtmTrend", func(t *testing.T) { + ind, err := NewTtmTrend(14) + if err != nil { + t.Fatalf("new TtmTrend: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TtmTrend", got) + }) + t.Run("TurnOfMonth", func(t *testing.T) { + ind, err := NewTurnOfMonth(3.0, 3.0, 0) + if err != nil { + t.Fatalf("new TurnOfMonth: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TurnOfMonth", got) + }) + t.Run("Tweezer", func(t *testing.T) { + ind, err := NewTweezer() + if err != nil { + t.Fatalf("new Tweezer: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Tweezer", got) + }) + t.Run("TwiggsMoneyFlow", func(t *testing.T) { + ind, err := NewTwiggsMoneyFlow(14) + if err != nil { + t.Fatalf("new TwiggsMoneyFlow: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TwiggsMoneyFlow", got) + }) + t.Run("TwoCrows", func(t *testing.T) { + ind, err := NewTwoCrows() + if err != nil { + t.Fatalf("new TwoCrows: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TwoCrows", got) + }) + t.Run("TypicalPrice", func(t *testing.T) { + ind, err := NewTypicalPrice() + if err != nil { + t.Fatalf("new TypicalPrice: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "TypicalPrice", got) + }) + t.Run("UlcerIndex", func(t *testing.T) { + ind, err := NewUlcerIndex(14) + if err != nil { + t.Fatalf("new UlcerIndex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "UlcerIndex", got) + }) + t.Run("UltimateOscillator", func(t *testing.T) { + ind, err := NewUltimateOscillator(3, 7, 14) + if err != nil { + t.Fatalf("new UltimateOscillator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "UltimateOscillator", got) + }) + t.Run("UniqueThreeRiver", func(t *testing.T) { + ind, err := NewUniqueThreeRiver() + if err != nil { + t.Fatalf("new UniqueThreeRiver: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "UniqueThreeRiver", got) + }) + t.Run("UniversalOscillator", func(t *testing.T) { + ind, err := NewUniversalOscillator(14) + if err != nil { + t.Fatalf("new UniversalOscillator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "UniversalOscillator", got) + }) + t.Run("UpDownVolumeRatio", func(t *testing.T) { + ind, err := NewUpDownVolumeRatio() + if err != nil { + t.Fatalf("new UpDownVolumeRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + ch, vo, nh, nl, am, ob_ := crossLists(r) + got[i] = []float64{ind.Update(ch, vo, nh, nl, am, ob_, int64(i))} + } + compareGolden(t, "UpDownVolumeRatio", got) + }) + t.Run("UpsideGapThreeMethods", func(t *testing.T) { + ind, err := NewUpsideGapThreeMethods() + if err != nil { + t.Fatalf("new UpsideGapThreeMethods: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "UpsideGapThreeMethods", got) + }) + t.Run("UpsideGapTwoCrows", func(t *testing.T) { + ind, err := NewUpsideGapTwoCrows() + if err != nil { + t.Fatalf("new UpsideGapTwoCrows: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "UpsideGapTwoCrows", got) + }) + t.Run("UpsidePotentialRatio", func(t *testing.T) { + ind, err := NewUpsidePotentialRatio(14, 2.0) + if err != nil { + t.Fatalf("new UpsidePotentialRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "UpsidePotentialRatio", got) + }) + t.Run("ValueArea", func(t *testing.T) { + ind, err := NewValueArea(20, 50, 0.7) + if err != nil { + t.Fatalf("new ValueArea: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "ValueArea", got) + }) + t.Run("ValueAtRisk", func(t *testing.T) { + ind, err := NewValueAtRisk(20, 0.95) + if err != nil { + t.Fatalf("new ValueAtRisk: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "ValueAtRisk", got) + }) + t.Run("Variance", func(t *testing.T) { + ind, err := NewVariance(14) + if err != nil { + t.Fatalf("new Variance: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Variance", got) + }) + t.Run("VarianceRatio", func(t *testing.T) { + ind, err := NewVarianceRatio(60, 2) + if err != nil { + t.Fatalf("new VarianceRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[0])} + } + compareGolden(t, "VarianceRatio", got) + }) + t.Run("VerticalHorizontalFilter", func(t *testing.T) { + ind, err := NewVerticalHorizontalFilter(14) + if err != nil { + t.Fatalf("new VerticalHorizontalFilter: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "VerticalHorizontalFilter", got) + }) + t.Run("Vidya", func(t *testing.T) { + ind, err := NewVidya(3, 7) + if err != nil { + t.Fatalf("new Vidya: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Vidya", got) + }) + t.Run("VolatilityCone", func(t *testing.T) { + ind, err := NewVolatilityCone(3, 7) + if err != nil { + t.Fatalf("new VolatilityCone: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 5) + } + compareGolden(t, "VolatilityCone", got) + }) + t.Run("VolatilityOfVolatility", func(t *testing.T) { + ind, err := NewVolatilityOfVolatility(3, 7) + if err != nil { + t.Fatalf("new VolatilityOfVolatility: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "VolatilityOfVolatility", got) + }) + t.Run("VolatilityRatio", func(t *testing.T) { + ind, err := NewVolatilityRatio(14) + if err != nil { + t.Fatalf("new VolatilityRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "VolatilityRatio", got) + }) + t.Run("VoltyStop", func(t *testing.T) { + ind, err := NewVoltyStop(14, 2.0) + if err != nil { + t.Fatalf("new VoltyStop: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "VoltyStop", got) + }) + t.Run("VolumeBars", func(t *testing.T) { + ind, err := NewVolumeBars(500.0) + if err != nil { + t.Fatalf("new VolumeBars: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = flattenBars(ind.Update(r[0], r[1], r[2], r[3], r[4], 0)) + } + compareGolden(t, "VolumeBars", got) + }) + t.Run("VolumeByTimeProfile", func(t *testing.T) { + ind, err := NewVolumeByTimeProfile(24, 0) + if err != nil { + t.Fatalf("new VolumeByTimeProfile: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + bins, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + if ok { + got[i] = bins + } else { + got[i] = nanRow(24) + } + } + compareGolden(t, "VolumeByTimeProfile", got) + }) + t.Run("VolumeOscillator", func(t *testing.T) { + ind, err := NewVolumeOscillator(3, 7) + if err != nil { + t.Fatalf("new VolumeOscillator: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "VolumeOscillator", got) + }) + t.Run("VolumePriceTrend", func(t *testing.T) { + ind, err := NewVolumePriceTrend() + if err != nil { + t.Fatalf("new VolumePriceTrend: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "VolumePriceTrend", got) + }) + t.Run("VolumeProfile", func(t *testing.T) { + ind, err := NewVolumeProfile(20, 50) + if err != nil { + t.Fatalf("new VolumeProfile: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 52) + } + compareGolden(t, "VolumeProfile", got) + }) + t.Run("VolumeRsi", func(t *testing.T) { + ind, err := NewVolumeRsi(14) + if err != nil { + t.Fatalf("new VolumeRsi: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "VolumeRsi", got) + }) + t.Run("VolumeWeightedMacd", func(t *testing.T) { + ind, err := NewVolumeWeightedMacd(3, 7, 14) + if err != nil { + t.Fatalf("new VolumeWeightedMacd: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "VolumeWeightedMacd", got) + }) + t.Run("VolumeWeightedSr", func(t *testing.T) { + ind, err := NewVolumeWeightedSr(14) + if err != nil { + t.Fatalf("new VolumeWeightedSr: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "VolumeWeightedSr", got) + }) + t.Run("Vortex", func(t *testing.T) { + ind, err := NewVortex(14) + if err != nil { + t.Fatalf("new Vortex: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "Vortex", got) + }) + t.Run("Vpin", func(t *testing.T) { + ind, err := NewVpin(5000.0, 10) + if err != nil { + t.Fatalf("new Vpin: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3], r[4], r[3] >= r[0], int64(i))} + } + compareGolden(t, "Vpin", got) + }) + t.Run("Vwap", func(t *testing.T) { + ind, err := NewVwap() + if err != nil { + t.Fatalf("new Vwap: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Vwap", got) + }) + t.Run("VwapStdDevBands", func(t *testing.T) { + ind, err := NewVwapStdDevBands(2.0) + if err != nil { + t.Fatalf("new VwapStdDevBands: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 4) + } + compareGolden(t, "VwapStdDevBands", got) + }) + t.Run("Vwma", func(t *testing.T) { + ind, err := NewVwma(14) + if err != nil { + t.Fatalf("new Vwma: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Vwma", got) + }) + t.Run("Vzo", func(t *testing.T) { + ind, err := NewVzo(14) + if err != nil { + t.Fatalf("new Vzo: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Vzo", got) + }) + t.Run("Wad", func(t *testing.T) { + ind, err := NewWad() + if err != nil { + t.Fatalf("new Wad: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Wad", got) + }) + t.Run("WavePm", func(t *testing.T) { + ind, err := NewWavePm(3, 7) + if err != nil { + t.Fatalf("new WavePm: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "WavePm", got) + }) + t.Run("WaveTrend", func(t *testing.T) { + ind, err := NewWaveTrend(3, 7, 14) + if err != nil { + t.Fatalf("new WaveTrend: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "WaveTrend", got) + }) + t.Run("Wedge", func(t *testing.T) { + ind, err := NewWedge() + if err != nil { + t.Fatalf("new Wedge: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "Wedge", got) + }) + t.Run("WeightedClose", func(t *testing.T) { + ind, err := NewWeightedClose() + if err != nil { + t.Fatalf("new WeightedClose: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "WeightedClose", got) + }) + t.Run("WickRatio", func(t *testing.T) { + ind, err := NewWickRatio() + if err != nil { + t.Fatalf("new WickRatio: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "WickRatio", got) + }) + t.Run("WilliamsFractals", func(t *testing.T) { + ind, err := NewWilliamsFractals() + if err != nil { + t.Fatalf("new WilliamsFractals: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "WilliamsFractals", got) + }) + t.Run("WilliamsR", func(t *testing.T) { + ind, err := NewWilliamsR(14) + if err != nil { + t.Fatalf("new WilliamsR: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "WilliamsR", got) + }) + t.Run("WinRate", func(t *testing.T) { + ind, err := NewWinRate(14) + if err != nil { + t.Fatalf("new WinRate: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "WinRate", got) + }) + t.Run("Wma", func(t *testing.T) { + ind, err := NewWma(14) + if err != nil { + t.Fatalf("new Wma: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Wma", got) + }) + t.Run("WoodiePivots", func(t *testing.T) { + ind, err := NewWoodiePivots() + if err != nil { + t.Fatalf("new WoodiePivots: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 5) + } + compareGolden(t, "WoodiePivots", got) + }) + t.Run("YangZhangVolatility", func(t *testing.T) { + ind, err := NewYangZhangVolatility(20, 252) + if err != nil { + t.Fatalf("new YangZhangVolatility: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "YangZhangVolatility", got) + }) + t.Run("YoyoExit", func(t *testing.T) { + ind, err := NewYoyoExit(14, 2.0) + if err != nil { + t.Fatalf("new YoyoExit: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i))} + } + compareGolden(t, "YoyoExit", got) + }) + t.Run("ZScore", func(t *testing.T) { + ind, err := NewZScore(14) + if err != nil { + t.Fatalf("new ZScore: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "ZScore", got) + }) + t.Run("ZeroLagMacd", func(t *testing.T) { + ind, err := NewZeroLagMacd(3, 7, 14) + if err != nil { + t.Fatalf("new ZeroLagMacd: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[3]) + got[i] = reflectRow(out, ok, 3) + } + compareGolden(t, "ZeroLagMacd", got) + }) + t.Run("ZigZag", func(t *testing.T) { + ind, err := NewZigZag(0.02) + if err != nil { + t.Fatalf("new ZigZag: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + out, ok := ind.Update(r[0], r[1], r[2], r[3], r[4], int64(i)) + got[i] = reflectRow(out, ok, 2) + } + compareGolden(t, "ZigZag", got) + }) + t.Run("Zlema", func(t *testing.T) { + ind, err := NewZlema(14) + if err != nil { + t.Fatalf("new Zlema: %v", err) + } + got := make([][]float64, len(rows)) + for i, r := range rows { + got[i] = []float64{ind.Update(r[3])} + } + compareGolden(t, "Zlema", got) + }) +} diff --git a/bindings/go/golden_test.go b/bindings/go/golden_test.go index b5ed3b84..2612f930 100644 --- a/bindings/go/golden_test.go +++ b/bindings/go/golden_test.go @@ -189,3 +189,62 @@ func TestGoldenAdx(t *testing.T) { assertGoldenClose(t, out.Adx, goldenCell(exp[i][2]), i, "adx.adx") } } + +// The four de-duplicated indicators: pin their corrected definitions against +// the Rust reference so the Go FFI stays bit-identical. + +func TestGoldenAdOscillator(t *testing.T) { + input := goldenInput(t) + exp := readGolden(t, "ad_oscillator") + ad, err := NewAdOscillator() + if err != nil { + t.Fatal(err) + } + defer ad.Close() + for i := range input { + got := ad.Update(input[i][0], input[i][1], input[i][2], input[i][3], input[i][4], int64(i)) + assertGoldenClose(t, got, goldenCell(exp[i][0]), i, "ad_oscillator") + } +} + +func TestGoldenIntradayIntensity(t *testing.T) { + input := goldenInput(t) + exp := readGolden(t, "intraday_intensity") + ii, err := NewIntradayIntensity() + if err != nil { + t.Fatal(err) + } + defer ii.Close() + for i := range input { + got := ii.Update(input[i][0], input[i][1], input[i][2], input[i][3], input[i][4], int64(i)) + assertGoldenClose(t, got, goldenCell(exp[i][0]), i, "intraday_intensity") + } +} + +func TestGoldenAwesomeOscillatorHistogram(t *testing.T) { + input := goldenInput(t) + exp := readGolden(t, "awesome_oscillator_histogram") + aoh, err := NewAwesomeOscillatorHistogram(5, 34, 1) + if err != nil { + t.Fatal(err) + } + defer aoh.Close() + for i := range input { + got := aoh.Update(input[i][0], input[i][1], input[i][2], input[i][3], input[i][4], int64(i)) + assertGoldenClose(t, got, goldenCell(exp[i][0]), i, "awesome_oscillator_histogram") + } +} + +func TestGoldenAverageDrawdown(t *testing.T) { + input := goldenInput(t) + exp := readGolden(t, "average_drawdown") + avg, err := NewAverageDrawdown(20) + if err != nil { + t.Fatal(err) + } + defer avg.Close() + for i := range input { + // generator fed the close column as the equity-curve sample. + assertGoldenClose(t, avg.Update(input[i][3]), goldenCell(exp[i][0]), i, "average_drawdown") + } +} diff --git a/bindings/java/gen_golden_test.py b/bindings/java/gen_golden_test.py new file mode 100644 index 00000000..0398cf83 --- /dev/null +++ b/bindings/java/gen_golden_test.py @@ -0,0 +1,279 @@ +"""Generate src/test/java/org/wickra/GoldenAllTest.java: a reflection-driven +value-parity test that replays the shared golden input through every one of the +514 Java indicators and checks output bit-for-bit against the Rust reference +fixtures g_.csv. The per-indicator spec is embedded so the test has +no JSON dependency; a single reflective runner covers all archetypes. + +Run from repo root: python bindings/java/gen_golden_test.py +""" +import json +import os + +ROOT = os.path.normpath(os.path.join(os.path.dirname(__file__), "..", "..")) +MAN = json.load(open(os.path.join(ROOT, "testdata", "golden", "golden_manifest.json"))) + + +def params_lit(ps): + if not ps: + return "new double[]{}" + return "new double[]{" + ", ".join(repr(float(p)) for p in ps) + "}" + + +specs = [] +for e in MAN: + n = e.get("n", e.get("width", 0)) + specs.append(f' new Spec("{e["canonical"]}", "{e["arch"]}", {params_lit(e["params"])}, {n}),') +specs_block = "\n".join(specs) + +TEMPLATE = '''// Code generated by gen_golden_test.py. DO NOT EDIT. +package org.wickra; + +import org.junit.jupiter.api.DynamicTest; +import org.junit.jupiter.api.TestFactory; + +import java.io.IOException; +import java.lang.reflect.Array; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.lang.reflect.RecordComponent; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.DynamicTest.dynamicTest; + +/** + * Reflection-driven value parity for the whole 514-indicator catalogue: each + * indicator is reconstructed by its class name, fed the synthetic stream derived + * from the shared golden input (identical to gen_golden's Rust construction) and + * checked bit-for-bit against testdata/golden/g_<Canonical>.csv. One runner + * flattens scalar, multi-output records, profiles and bar arrays by reflection. + */ +class GoldenAllTest { + private static final double TOL = 1e-6; + + private record Spec(String canonical, String arch, double[] params, int width) {} + + private static final Spec[] SPECS = { +%SPECS% + }; + + private static Path goldenDir() { + java.io.File d = new java.io.File("").getAbsoluteFile(); + while (d != null) { + java.io.File g = new java.io.File(d, "testdata/golden"); + if (g.isDirectory()) { + return g.toPath(); + } + d = d.getParentFile(); + } + throw new IllegalStateException("testdata/golden not found"); + } + + private static double cell(String s) { + return switch (s) { + case "nan" -> Double.NaN; + case "inf" -> Double.POSITIVE_INFINITY; + case "-inf" -> Double.NEGATIVE_INFINITY; + default -> Double.parseDouble(s); + }; + } + + private static double[][] input() throws IOException { + List lines = Files.readAllLines(goldenDir().resolve("input.csv")); + List rows = new ArrayList<>(); + for (int i = 1; i < lines.size(); i++) { + if (lines.get(i).isEmpty()) continue; + String[] p = lines.get(i).split(","); + double[] r = new double[p.length]; + for (int j = 0; j < p.length; j++) r[j] = Double.parseDouble(p[j]); + rows.add(r); + } + return rows.toArray(new double[0][]); + } + + // Keep blank lines (a candle on which no bar closed) so rows stay aligned. + private static double[][] fixture(String name) throws IOException { + List lines = Files.readAllLines(goldenDir().resolve("g_" + name + ".csv")); + List rows = new ArrayList<>(); + for (int i = 1; i < lines.size(); i++) { + String ln = lines.get(i); + if (ln.isEmpty()) { + rows.add(new double[0]); + continue; + } + String[] p = ln.split(","); + double[] r = new double[p.length]; + for (int j = 0; j < p.length; j++) r[j] = cell(p[j]); + rows.add(r); + } + return rows.toArray(new double[0][]); + } + + private static double[] nanRow(int n) { + double[] r = new double[n]; + java.util.Arrays.fill(r, Double.NaN); + return r; + } + + private static double[] derivFields(double[] r) { + double o = r[0], h = r[1], l = r[2], c = r[3], v = r[4]; + return new double[]{ + (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[] crossList(double[] r, int which) { + double o = r[0], c = r[3], v = r[4]; + double[] out = new double[5]; + for (int j = 0; j < 5; j++) { + out[j] = switch (which) { + case 0 -> (c - o) + j; + case 1 -> v + j * 10.0; + case 2 -> j % 2 == 0 ? 1.0 : 0.0; // newHigh + case 3 -> j % 3 == 0 ? 1.0 : 0.0; // newLow + case 4 -> j % 2 == 0 ? 1.0 : 0.0; // aboveMa + default -> j % 3 == 0 ? 1.0 : 0.0; // onBuySignal + }; + } + return out; + } + + private static double[] obList(double[] r, int which) { + double c = r[3], v = r[4]; + double[] out = new double[5]; + for (int k = 0; k < 5; k++) { + double kf = k + 1; + out[k] = switch (which) { + case 0 -> c - 0.1 * kf; + case 1 -> v / kf; + case 2 -> c + 0.1 * kf; + default -> v * 0.9 / kf; + }; + } + return out; + } + + private static double[] flattenRecord(Object o) throws Exception { + RecordComponent[] rc = o.getClass().getRecordComponents(); + List list = new ArrayList<>(); + for (RecordComponent c : rc) { + Object v = c.getAccessor().invoke(o); + if (v instanceof double[] arr) { + for (double d : arr) list.add(d); + } else if (v instanceof Number num) { + list.add(num.doubleValue()); + } + } + double[] out = new double[list.size()]; + for (int i = 0; i < out.length; i++) out[i] = list.get(i); + return out; + } + + private static double[] flattenArray(Object arr) throws Exception { + int len = Array.getLength(arr); + List list = new ArrayList<>(); + for (int i = 0; i < len; i++) { + for (double d : flattenRecord(Array.get(arr, i))) list.add(d); + } + double[] out = new double[list.size()]; + for (int i = 0; i < out.length; i++) out[i] = list.get(i); + return out; + } + + private static Object construct(Spec s) throws Exception { + Class cls = Class.forName("org.wickra." + s.canonical()); + Constructor ctor = cls.getConstructors()[0]; + Class[] pt = ctor.getParameterTypes(); + Object[] args = new Object[pt.length]; + for (int i = 0; i < pt.length; i++) { + double v = s.params()[i]; + if (pt[i] == int.class) args[i] = (int) Math.round(v); + else if (pt[i] == long.class) args[i] = (long) Math.round(v); + else args[i] = v; + } + return ctor.newInstance(args); + } + + private static Method updateMethod(Object ind) { + for (Method m : ind.getClass().getMethods()) { + if (m.getName().equals("update")) return m; + } + throw new IllegalStateException("no update on " + ind.getClass()); + } + + private static double[] row(Spec s, Object ind, Method upd, double[] r, int i) throws Exception { + double o = r[0], h = r[1], l = r[2], c = r[3], v = r[4]; + Object res = switch (s.arch()) { + case "scalar_f64", "multi_f64" -> upd.invoke(ind, c); + case "pairwise", "multi_pairwise" -> upd.invoke(ind, c, o); + case "scalar_candle", "multi_candle", "profile_bins", "profile_pricebins" -> + upd.invoke(ind, o, h, l, c, v, (long) i); + case "trade" -> upd.invoke(ind, c, v, c >= o, (long) i); + case "trademid" -> upd.invoke(ind, c, v, c >= o, (long) i, (h + l) / 2); + case "ob" -> upd.invoke(ind, obList(r, 0), obList(r, 1), obList(r, 2), obList(r, 3)); + case "cross" -> upd.invoke(ind, crossList(r, 0), crossList(r, 1), crossList(r, 2), + crossList(r, 3), crossList(r, 4), crossList(r, 5), (long) i); + case "deriv", "deriv_multi" -> { + double[] d = derivFields(r); + yield upd.invoke(ind, d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], (long) i); + } + case "bars_close" -> upd.invoke(ind, c, c, c, c, 1.0, 0L); + case "bars_candle4" -> upd.invoke(ind, o, h, l, c, 1.0, 0L); + case "bars_candle5" -> upd.invoke(ind, o, h, l, c, v, 0L); + case "footprint" -> upd.invoke(ind, c, v, c >= o, (long) i); + default -> throw new IllegalStateException("arch " + s.arch()); + }; + return switch (s.arch()) { + case "scalar_f64", "scalar_candle", "pairwise", "trade", "trademid", "ob", "cross", "deriv" -> + new double[]{((Number) res).doubleValue()}; + case "multi_f64", "multi_candle", "multi_pairwise", "deriv_multi", "profile_pricebins" -> + res == null ? nanRow(s.width()) : flattenRecord(res); + case "profile_bins" -> res == null ? nanRow(s.width()) : (double[]) res; + default -> flattenArray(res); // bars_*, footprint + }; + } + + @TestFactory + List golden() throws Exception { + double[][] rows = input(); + List tests = new ArrayList<>(); + for (Spec s : SPECS) { + tests.add(dynamicTest(s.canonical(), () -> { + Object ind = construct(s); + Method upd = updateMethod(ind); + double[][] exp = fixture(s.canonical()); + assertTrue(exp.length == rows.length, s.canonical() + ": row count " + exp.length + " vs " + rows.length); + for (int i = 0; i < rows.length; i++) { + double[] got = row(s, ind, upd, rows[i], i); + double[] want = exp[i]; + assertTrue(got.length == want.length, + s.canonical() + " row " + i + ": arity " + got.length + " vs " + want.length); + for (int k = 0; k < want.length; k++) { + double w = want[k], g = got[k]; + if (Double.isNaN(w)) { + assertTrue(Double.isNaN(g), s.canonical() + " row " + i + " col " + k + ": want NaN got " + g); + } else if (Double.isInfinite(w)) { + assertTrue(Double.isInfinite(g) && Math.signum(g) == Math.signum(w), + s.canonical() + " row " + i + " col " + k + ": want " + w + " got " + g); + } else { + double tol = TOL * Math.max(1.0, Math.abs(w)); + assertTrue(Math.abs(g - w) <= tol, + s.canonical() + " row " + i + " col " + k + ": got " + g + " want " + w); + } + } + } + })); + } + return tests; + } +} +''' + +out = TEMPLATE.replace("%SPECS%", specs_block) +dest = os.path.join(ROOT, "bindings", "java", "src", "test", "java", "org", "wickra", "GoldenAllTest.java") +open(dest, "w", encoding="utf-8").write(out) +print("generated GoldenAllTest.java with", len(MAN), "indicators") diff --git a/bindings/java/src/main/java/org/wickra/AbsoluteBreadthIndex.java b/bindings/java/src/main/java/org/wickra/AbsoluteBreadthIndex.java index 02929b67..211da5ae 100644 --- a/bindings/java/src/main/java/org/wickra/AbsoluteBreadthIndex.java +++ b/bindings/java/src/main/java/org/wickra/AbsoluteBreadthIndex.java @@ -47,10 +47,10 @@ public final class AbsoluteBreadthIndex implements AutoCloseable { try (Arena a = Arena.ofConfined()) { MemorySegment changeSeg = a.allocateFrom(JAVA_DOUBLE, change); MemorySegment volumeSeg = a.allocateFrom(JAVA_DOUBLE, volume); - MemorySegment newHighSeg = a.allocateFrom(JAVA_DOUBLE, newHigh); - MemorySegment newLowSeg = a.allocateFrom(JAVA_DOUBLE, newLow); - MemorySegment aboveMaSeg = a.allocateFrom(JAVA_DOUBLE, aboveMa); - MemorySegment onBuySignalSeg = a.allocateFrom(JAVA_DOUBLE, onBuySignal); + MemorySegment newHighSeg = WickraNative.boolSegment(a, newHigh); + MemorySegment newLowSeg = WickraNative.boolSegment(a, newLow); + MemorySegment aboveMaSeg = WickraNative.boolSegment(a, aboveMa); + MemorySegment onBuySignalSeg = WickraNative.boolSegment(a, onBuySignal); return (double) NativeMethods.WICKRA_ABSOLUTE_BREADTH_INDEX_UPDATE.invokeExact(handle, changeSeg, volumeSeg, newHighSeg, newLowSeg, aboveMaSeg, onBuySignalSeg, (long) change.length, timestamp); } catch (Throwable t) { throw WickraNative.rethrow(t); diff --git a/bindings/java/src/main/java/org/wickra/AdVolumeLine.java b/bindings/java/src/main/java/org/wickra/AdVolumeLine.java index a3ee9d6e..58a6ab22 100644 --- a/bindings/java/src/main/java/org/wickra/AdVolumeLine.java +++ b/bindings/java/src/main/java/org/wickra/AdVolumeLine.java @@ -47,10 +47,10 @@ public final class AdVolumeLine implements AutoCloseable { try (Arena a = Arena.ofConfined()) { MemorySegment changeSeg = a.allocateFrom(JAVA_DOUBLE, change); MemorySegment volumeSeg = a.allocateFrom(JAVA_DOUBLE, volume); - MemorySegment newHighSeg = a.allocateFrom(JAVA_DOUBLE, newHigh); - MemorySegment newLowSeg = a.allocateFrom(JAVA_DOUBLE, newLow); - MemorySegment aboveMaSeg = a.allocateFrom(JAVA_DOUBLE, aboveMa); - MemorySegment onBuySignalSeg = a.allocateFrom(JAVA_DOUBLE, onBuySignal); + MemorySegment newHighSeg = WickraNative.boolSegment(a, newHigh); + MemorySegment newLowSeg = WickraNative.boolSegment(a, newLow); + MemorySegment aboveMaSeg = WickraNative.boolSegment(a, aboveMa); + MemorySegment onBuySignalSeg = WickraNative.boolSegment(a, onBuySignal); return (double) NativeMethods.WICKRA_AD_VOLUME_LINE_UPDATE.invokeExact(handle, changeSeg, volumeSeg, newHighSeg, newLowSeg, aboveMaSeg, onBuySignalSeg, (long) change.length, timestamp); } catch (Throwable t) { throw WickraNative.rethrow(t); diff --git a/bindings/java/src/main/java/org/wickra/AdvanceDecline.java b/bindings/java/src/main/java/org/wickra/AdvanceDecline.java index f1dc639d..bc6e9974 100644 --- a/bindings/java/src/main/java/org/wickra/AdvanceDecline.java +++ b/bindings/java/src/main/java/org/wickra/AdvanceDecline.java @@ -47,10 +47,10 @@ public final class AdvanceDecline implements AutoCloseable { try (Arena a = Arena.ofConfined()) { MemorySegment changeSeg = a.allocateFrom(JAVA_DOUBLE, change); MemorySegment volumeSeg = a.allocateFrom(JAVA_DOUBLE, volume); - MemorySegment newHighSeg = a.allocateFrom(JAVA_DOUBLE, newHigh); - MemorySegment newLowSeg = a.allocateFrom(JAVA_DOUBLE, newLow); - MemorySegment aboveMaSeg = a.allocateFrom(JAVA_DOUBLE, aboveMa); - MemorySegment onBuySignalSeg = a.allocateFrom(JAVA_DOUBLE, onBuySignal); + MemorySegment newHighSeg = WickraNative.boolSegment(a, newHigh); + MemorySegment newLowSeg = WickraNative.boolSegment(a, newLow); + MemorySegment aboveMaSeg = WickraNative.boolSegment(a, aboveMa); + MemorySegment onBuySignalSeg = WickraNative.boolSegment(a, onBuySignal); return (double) NativeMethods.WICKRA_ADVANCE_DECLINE_UPDATE.invokeExact(handle, changeSeg, volumeSeg, newHighSeg, newLowSeg, aboveMaSeg, onBuySignalSeg, (long) change.length, timestamp); } catch (Throwable t) { throw WickraNative.rethrow(t); diff --git a/bindings/java/src/main/java/org/wickra/AdvanceDeclineRatio.java b/bindings/java/src/main/java/org/wickra/AdvanceDeclineRatio.java index d8b535eb..8e50d714 100644 --- a/bindings/java/src/main/java/org/wickra/AdvanceDeclineRatio.java +++ b/bindings/java/src/main/java/org/wickra/AdvanceDeclineRatio.java @@ -47,10 +47,10 @@ public final class AdvanceDeclineRatio implements AutoCloseable { try (Arena a = Arena.ofConfined()) { MemorySegment changeSeg = a.allocateFrom(JAVA_DOUBLE, change); MemorySegment volumeSeg = a.allocateFrom(JAVA_DOUBLE, volume); - MemorySegment newHighSeg = a.allocateFrom(JAVA_DOUBLE, newHigh); - MemorySegment newLowSeg = a.allocateFrom(JAVA_DOUBLE, newLow); - MemorySegment aboveMaSeg = a.allocateFrom(JAVA_DOUBLE, aboveMa); - MemorySegment onBuySignalSeg = a.allocateFrom(JAVA_DOUBLE, onBuySignal); + MemorySegment newHighSeg = WickraNative.boolSegment(a, newHigh); + MemorySegment newLowSeg = WickraNative.boolSegment(a, newLow); + MemorySegment aboveMaSeg = WickraNative.boolSegment(a, aboveMa); + MemorySegment onBuySignalSeg = WickraNative.boolSegment(a, onBuySignal); return (double) NativeMethods.WICKRA_ADVANCE_DECLINE_RATIO_UPDATE.invokeExact(handle, changeSeg, volumeSeg, newHighSeg, newLowSeg, aboveMaSeg, onBuySignalSeg, (long) change.length, timestamp); } catch (Throwable t) { throw WickraNative.rethrow(t); diff --git a/bindings/java/src/main/java/org/wickra/BreadthThrust.java b/bindings/java/src/main/java/org/wickra/BreadthThrust.java index 88c648cd..3601bd6e 100644 --- a/bindings/java/src/main/java/org/wickra/BreadthThrust.java +++ b/bindings/java/src/main/java/org/wickra/BreadthThrust.java @@ -50,10 +50,10 @@ public final class BreadthThrust implements AutoCloseable { try (Arena a = Arena.ofConfined()) { MemorySegment changeSeg = a.allocateFrom(JAVA_DOUBLE, change); MemorySegment volumeSeg = a.allocateFrom(JAVA_DOUBLE, volume); - MemorySegment newHighSeg = a.allocateFrom(JAVA_DOUBLE, newHigh); - MemorySegment newLowSeg = a.allocateFrom(JAVA_DOUBLE, newLow); - MemorySegment aboveMaSeg = a.allocateFrom(JAVA_DOUBLE, aboveMa); - MemorySegment onBuySignalSeg = a.allocateFrom(JAVA_DOUBLE, onBuySignal); + MemorySegment newHighSeg = WickraNative.boolSegment(a, newHigh); + MemorySegment newLowSeg = WickraNative.boolSegment(a, newLow); + MemorySegment aboveMaSeg = WickraNative.boolSegment(a, aboveMa); + MemorySegment onBuySignalSeg = WickraNative.boolSegment(a, onBuySignal); return (double) NativeMethods.WICKRA_BREADTH_THRUST_UPDATE.invokeExact(handle, changeSeg, volumeSeg, newHighSeg, newLowSeg, aboveMaSeg, onBuySignalSeg, (long) change.length, timestamp); } catch (Throwable t) { throw WickraNative.rethrow(t); diff --git a/bindings/java/src/main/java/org/wickra/BullishPercentIndex.java b/bindings/java/src/main/java/org/wickra/BullishPercentIndex.java index 724b5ddb..1079a5f8 100644 --- a/bindings/java/src/main/java/org/wickra/BullishPercentIndex.java +++ b/bindings/java/src/main/java/org/wickra/BullishPercentIndex.java @@ -47,10 +47,10 @@ public final class BullishPercentIndex implements AutoCloseable { try (Arena a = Arena.ofConfined()) { MemorySegment changeSeg = a.allocateFrom(JAVA_DOUBLE, change); MemorySegment volumeSeg = a.allocateFrom(JAVA_DOUBLE, volume); - MemorySegment newHighSeg = a.allocateFrom(JAVA_DOUBLE, newHigh); - MemorySegment newLowSeg = a.allocateFrom(JAVA_DOUBLE, newLow); - MemorySegment aboveMaSeg = a.allocateFrom(JAVA_DOUBLE, aboveMa); - MemorySegment onBuySignalSeg = a.allocateFrom(JAVA_DOUBLE, onBuySignal); + MemorySegment newHighSeg = WickraNative.boolSegment(a, newHigh); + MemorySegment newLowSeg = WickraNative.boolSegment(a, newLow); + MemorySegment aboveMaSeg = WickraNative.boolSegment(a, aboveMa); + MemorySegment onBuySignalSeg = WickraNative.boolSegment(a, onBuySignal); return (double) NativeMethods.WICKRA_BULLISH_PERCENT_INDEX_UPDATE.invokeExact(handle, changeSeg, volumeSeg, newHighSeg, newLowSeg, aboveMaSeg, onBuySignalSeg, (long) change.length, timestamp); } catch (Throwable t) { throw WickraNative.rethrow(t); diff --git a/bindings/java/src/main/java/org/wickra/CumulativeVolumeIndex.java b/bindings/java/src/main/java/org/wickra/CumulativeVolumeIndex.java index 31d896f1..312d97a2 100644 --- a/bindings/java/src/main/java/org/wickra/CumulativeVolumeIndex.java +++ b/bindings/java/src/main/java/org/wickra/CumulativeVolumeIndex.java @@ -47,10 +47,10 @@ public final class CumulativeVolumeIndex implements AutoCloseable { try (Arena a = Arena.ofConfined()) { MemorySegment changeSeg = a.allocateFrom(JAVA_DOUBLE, change); MemorySegment volumeSeg = a.allocateFrom(JAVA_DOUBLE, volume); - MemorySegment newHighSeg = a.allocateFrom(JAVA_DOUBLE, newHigh); - MemorySegment newLowSeg = a.allocateFrom(JAVA_DOUBLE, newLow); - MemorySegment aboveMaSeg = a.allocateFrom(JAVA_DOUBLE, aboveMa); - MemorySegment onBuySignalSeg = a.allocateFrom(JAVA_DOUBLE, onBuySignal); + MemorySegment newHighSeg = WickraNative.boolSegment(a, newHigh); + MemorySegment newLowSeg = WickraNative.boolSegment(a, newLow); + MemorySegment aboveMaSeg = WickraNative.boolSegment(a, aboveMa); + MemorySegment onBuySignalSeg = WickraNative.boolSegment(a, onBuySignal); return (double) NativeMethods.WICKRA_CUMULATIVE_VOLUME_INDEX_UPDATE.invokeExact(handle, changeSeg, volumeSeg, newHighSeg, newLowSeg, aboveMaSeg, onBuySignalSeg, (long) change.length, timestamp); } catch (Throwable t) { throw WickraNative.rethrow(t); diff --git a/bindings/java/src/main/java/org/wickra/HighLowIndex.java b/bindings/java/src/main/java/org/wickra/HighLowIndex.java index 41eb9f92..c3cbe684 100644 --- a/bindings/java/src/main/java/org/wickra/HighLowIndex.java +++ b/bindings/java/src/main/java/org/wickra/HighLowIndex.java @@ -50,10 +50,10 @@ public final class HighLowIndex implements AutoCloseable { try (Arena a = Arena.ofConfined()) { MemorySegment changeSeg = a.allocateFrom(JAVA_DOUBLE, change); MemorySegment volumeSeg = a.allocateFrom(JAVA_DOUBLE, volume); - MemorySegment newHighSeg = a.allocateFrom(JAVA_DOUBLE, newHigh); - MemorySegment newLowSeg = a.allocateFrom(JAVA_DOUBLE, newLow); - MemorySegment aboveMaSeg = a.allocateFrom(JAVA_DOUBLE, aboveMa); - MemorySegment onBuySignalSeg = a.allocateFrom(JAVA_DOUBLE, onBuySignal); + MemorySegment newHighSeg = WickraNative.boolSegment(a, newHigh); + MemorySegment newLowSeg = WickraNative.boolSegment(a, newLow); + MemorySegment aboveMaSeg = WickraNative.boolSegment(a, aboveMa); + MemorySegment onBuySignalSeg = WickraNative.boolSegment(a, onBuySignal); return (double) NativeMethods.WICKRA_HIGH_LOW_INDEX_UPDATE.invokeExact(handle, changeSeg, volumeSeg, newHighSeg, newLowSeg, aboveMaSeg, onBuySignalSeg, (long) change.length, timestamp); } catch (Throwable t) { throw WickraNative.rethrow(t); diff --git a/bindings/java/src/main/java/org/wickra/MacdExt.java b/bindings/java/src/main/java/org/wickra/MacdExt.java index d500fa8e..0188ef37 100644 --- a/bindings/java/src/main/java/org/wickra/MacdExt.java +++ b/bindings/java/src/main/java/org/wickra/MacdExt.java @@ -25,7 +25,7 @@ public final class MacdExt implements AutoCloseable { } MemorySegment h; try { - h = (MemorySegment) NativeMethods.WICKRA_MACD_EXT_NEW.invokeExact((long) fast, fastType, (long) slow, slowType, (long) signal, signalType); + h = (MemorySegment) NativeMethods.WICKRA_MACD_EXT_NEW.invokeExact((long) fast, (byte) fastType, (long) slow, (byte) slowType, (long) signal, (byte) signalType); } catch (Throwable t) { throw WickraNative.rethrow(t); } diff --git a/bindings/java/src/main/java/org/wickra/McClellanOscillator.java b/bindings/java/src/main/java/org/wickra/McClellanOscillator.java index fac00902..2f154442 100644 --- a/bindings/java/src/main/java/org/wickra/McClellanOscillator.java +++ b/bindings/java/src/main/java/org/wickra/McClellanOscillator.java @@ -47,10 +47,10 @@ public final class McClellanOscillator implements AutoCloseable { try (Arena a = Arena.ofConfined()) { MemorySegment changeSeg = a.allocateFrom(JAVA_DOUBLE, change); MemorySegment volumeSeg = a.allocateFrom(JAVA_DOUBLE, volume); - MemorySegment newHighSeg = a.allocateFrom(JAVA_DOUBLE, newHigh); - MemorySegment newLowSeg = a.allocateFrom(JAVA_DOUBLE, newLow); - MemorySegment aboveMaSeg = a.allocateFrom(JAVA_DOUBLE, aboveMa); - MemorySegment onBuySignalSeg = a.allocateFrom(JAVA_DOUBLE, onBuySignal); + MemorySegment newHighSeg = WickraNative.boolSegment(a, newHigh); + MemorySegment newLowSeg = WickraNative.boolSegment(a, newLow); + MemorySegment aboveMaSeg = WickraNative.boolSegment(a, aboveMa); + MemorySegment onBuySignalSeg = WickraNative.boolSegment(a, onBuySignal); return (double) NativeMethods.WICKRA_MC_CLELLAN_OSCILLATOR_UPDATE.invokeExact(handle, changeSeg, volumeSeg, newHighSeg, newLowSeg, aboveMaSeg, onBuySignalSeg, (long) change.length, timestamp); } catch (Throwable t) { throw WickraNative.rethrow(t); diff --git a/bindings/java/src/main/java/org/wickra/McClellanSummationIndex.java b/bindings/java/src/main/java/org/wickra/McClellanSummationIndex.java index e74f3281..2a8ef5cf 100644 --- a/bindings/java/src/main/java/org/wickra/McClellanSummationIndex.java +++ b/bindings/java/src/main/java/org/wickra/McClellanSummationIndex.java @@ -47,10 +47,10 @@ public final class McClellanSummationIndex implements AutoCloseable { try (Arena a = Arena.ofConfined()) { MemorySegment changeSeg = a.allocateFrom(JAVA_DOUBLE, change); MemorySegment volumeSeg = a.allocateFrom(JAVA_DOUBLE, volume); - MemorySegment newHighSeg = a.allocateFrom(JAVA_DOUBLE, newHigh); - MemorySegment newLowSeg = a.allocateFrom(JAVA_DOUBLE, newLow); - MemorySegment aboveMaSeg = a.allocateFrom(JAVA_DOUBLE, aboveMa); - MemorySegment onBuySignalSeg = a.allocateFrom(JAVA_DOUBLE, onBuySignal); + MemorySegment newHighSeg = WickraNative.boolSegment(a, newHigh); + MemorySegment newLowSeg = WickraNative.boolSegment(a, newLow); + MemorySegment aboveMaSeg = WickraNative.boolSegment(a, aboveMa); + MemorySegment onBuySignalSeg = WickraNative.boolSegment(a, onBuySignal); return (double) NativeMethods.WICKRA_MC_CLELLAN_SUMMATION_INDEX_UPDATE.invokeExact(handle, changeSeg, volumeSeg, newHighSeg, newLowSeg, aboveMaSeg, onBuySignalSeg, (long) change.length, timestamp); } catch (Throwable t) { throw WickraNative.rethrow(t); diff --git a/bindings/java/src/main/java/org/wickra/NewHighsNewLows.java b/bindings/java/src/main/java/org/wickra/NewHighsNewLows.java index b9039947..6c9f039a 100644 --- a/bindings/java/src/main/java/org/wickra/NewHighsNewLows.java +++ b/bindings/java/src/main/java/org/wickra/NewHighsNewLows.java @@ -47,10 +47,10 @@ public final class NewHighsNewLows implements AutoCloseable { try (Arena a = Arena.ofConfined()) { MemorySegment changeSeg = a.allocateFrom(JAVA_DOUBLE, change); MemorySegment volumeSeg = a.allocateFrom(JAVA_DOUBLE, volume); - MemorySegment newHighSeg = a.allocateFrom(JAVA_DOUBLE, newHigh); - MemorySegment newLowSeg = a.allocateFrom(JAVA_DOUBLE, newLow); - MemorySegment aboveMaSeg = a.allocateFrom(JAVA_DOUBLE, aboveMa); - MemorySegment onBuySignalSeg = a.allocateFrom(JAVA_DOUBLE, onBuySignal); + MemorySegment newHighSeg = WickraNative.boolSegment(a, newHigh); + MemorySegment newLowSeg = WickraNative.boolSegment(a, newLow); + MemorySegment aboveMaSeg = WickraNative.boolSegment(a, aboveMa); + MemorySegment onBuySignalSeg = WickraNative.boolSegment(a, onBuySignal); return (double) NativeMethods.WICKRA_NEW_HIGHS_NEW_LOWS_UPDATE.invokeExact(handle, changeSeg, volumeSeg, newHighSeg, newLowSeg, aboveMaSeg, onBuySignalSeg, (long) change.length, timestamp); } catch (Throwable t) { throw WickraNative.rethrow(t); diff --git a/bindings/java/src/main/java/org/wickra/PercentAboveMa.java b/bindings/java/src/main/java/org/wickra/PercentAboveMa.java index 83bd9177..5d763bea 100644 --- a/bindings/java/src/main/java/org/wickra/PercentAboveMa.java +++ b/bindings/java/src/main/java/org/wickra/PercentAboveMa.java @@ -47,10 +47,10 @@ public final class PercentAboveMa implements AutoCloseable { try (Arena a = Arena.ofConfined()) { MemorySegment changeSeg = a.allocateFrom(JAVA_DOUBLE, change); MemorySegment volumeSeg = a.allocateFrom(JAVA_DOUBLE, volume); - MemorySegment newHighSeg = a.allocateFrom(JAVA_DOUBLE, newHigh); - MemorySegment newLowSeg = a.allocateFrom(JAVA_DOUBLE, newLow); - MemorySegment aboveMaSeg = a.allocateFrom(JAVA_DOUBLE, aboveMa); - MemorySegment onBuySignalSeg = a.allocateFrom(JAVA_DOUBLE, onBuySignal); + MemorySegment newHighSeg = WickraNative.boolSegment(a, newHigh); + MemorySegment newLowSeg = WickraNative.boolSegment(a, newLow); + MemorySegment aboveMaSeg = WickraNative.boolSegment(a, aboveMa); + MemorySegment onBuySignalSeg = WickraNative.boolSegment(a, onBuySignal); return (double) NativeMethods.WICKRA_PERCENT_ABOVE_MA_UPDATE.invokeExact(handle, changeSeg, volumeSeg, newHighSeg, newLowSeg, aboveMaSeg, onBuySignalSeg, (long) change.length, timestamp); } catch (Throwable t) { throw WickraNative.rethrow(t); diff --git a/bindings/java/src/main/java/org/wickra/TickIndex.java b/bindings/java/src/main/java/org/wickra/TickIndex.java index 47703f15..1a3710c3 100644 --- a/bindings/java/src/main/java/org/wickra/TickIndex.java +++ b/bindings/java/src/main/java/org/wickra/TickIndex.java @@ -47,10 +47,10 @@ public final class TickIndex implements AutoCloseable { try (Arena a = Arena.ofConfined()) { MemorySegment changeSeg = a.allocateFrom(JAVA_DOUBLE, change); MemorySegment volumeSeg = a.allocateFrom(JAVA_DOUBLE, volume); - MemorySegment newHighSeg = a.allocateFrom(JAVA_DOUBLE, newHigh); - MemorySegment newLowSeg = a.allocateFrom(JAVA_DOUBLE, newLow); - MemorySegment aboveMaSeg = a.allocateFrom(JAVA_DOUBLE, aboveMa); - MemorySegment onBuySignalSeg = a.allocateFrom(JAVA_DOUBLE, onBuySignal); + MemorySegment newHighSeg = WickraNative.boolSegment(a, newHigh); + MemorySegment newLowSeg = WickraNative.boolSegment(a, newLow); + MemorySegment aboveMaSeg = WickraNative.boolSegment(a, aboveMa); + MemorySegment onBuySignalSeg = WickraNative.boolSegment(a, onBuySignal); return (double) NativeMethods.WICKRA_TICK_INDEX_UPDATE.invokeExact(handle, changeSeg, volumeSeg, newHighSeg, newLowSeg, aboveMaSeg, onBuySignalSeg, (long) change.length, timestamp); } catch (Throwable t) { throw WickraNative.rethrow(t); diff --git a/bindings/java/src/main/java/org/wickra/Trin.java b/bindings/java/src/main/java/org/wickra/Trin.java index 7c014083..3cc6b7c5 100644 --- a/bindings/java/src/main/java/org/wickra/Trin.java +++ b/bindings/java/src/main/java/org/wickra/Trin.java @@ -47,10 +47,10 @@ public final class Trin implements AutoCloseable { try (Arena a = Arena.ofConfined()) { MemorySegment changeSeg = a.allocateFrom(JAVA_DOUBLE, change); MemorySegment volumeSeg = a.allocateFrom(JAVA_DOUBLE, volume); - MemorySegment newHighSeg = a.allocateFrom(JAVA_DOUBLE, newHigh); - MemorySegment newLowSeg = a.allocateFrom(JAVA_DOUBLE, newLow); - MemorySegment aboveMaSeg = a.allocateFrom(JAVA_DOUBLE, aboveMa); - MemorySegment onBuySignalSeg = a.allocateFrom(JAVA_DOUBLE, onBuySignal); + MemorySegment newHighSeg = WickraNative.boolSegment(a, newHigh); + MemorySegment newLowSeg = WickraNative.boolSegment(a, newLow); + MemorySegment aboveMaSeg = WickraNative.boolSegment(a, aboveMa); + MemorySegment onBuySignalSeg = WickraNative.boolSegment(a, onBuySignal); return (double) NativeMethods.WICKRA_TRIN_UPDATE.invokeExact(handle, changeSeg, volumeSeg, newHighSeg, newLowSeg, aboveMaSeg, onBuySignalSeg, (long) change.length, timestamp); } catch (Throwable t) { throw WickraNative.rethrow(t); diff --git a/bindings/java/src/main/java/org/wickra/UpDownVolumeRatio.java b/bindings/java/src/main/java/org/wickra/UpDownVolumeRatio.java index 775c97c2..c62e8453 100644 --- a/bindings/java/src/main/java/org/wickra/UpDownVolumeRatio.java +++ b/bindings/java/src/main/java/org/wickra/UpDownVolumeRatio.java @@ -47,10 +47,10 @@ public final class UpDownVolumeRatio implements AutoCloseable { try (Arena a = Arena.ofConfined()) { MemorySegment changeSeg = a.allocateFrom(JAVA_DOUBLE, change); MemorySegment volumeSeg = a.allocateFrom(JAVA_DOUBLE, volume); - MemorySegment newHighSeg = a.allocateFrom(JAVA_DOUBLE, newHigh); - MemorySegment newLowSeg = a.allocateFrom(JAVA_DOUBLE, newLow); - MemorySegment aboveMaSeg = a.allocateFrom(JAVA_DOUBLE, aboveMa); - MemorySegment onBuySignalSeg = a.allocateFrom(JAVA_DOUBLE, onBuySignal); + MemorySegment newHighSeg = WickraNative.boolSegment(a, newHigh); + MemorySegment newLowSeg = WickraNative.boolSegment(a, newLow); + MemorySegment aboveMaSeg = WickraNative.boolSegment(a, aboveMa); + MemorySegment onBuySignalSeg = WickraNative.boolSegment(a, onBuySignal); return (double) NativeMethods.WICKRA_UP_DOWN_VOLUME_RATIO_UPDATE.invokeExact(handle, changeSeg, volumeSeg, newHighSeg, newLowSeg, aboveMaSeg, onBuySignalSeg, (long) change.length, timestamp); } catch (Throwable t) { throw WickraNative.rethrow(t); diff --git a/bindings/java/src/main/java/org/wickra/internal/WickraNative.java b/bindings/java/src/main/java/org/wickra/internal/WickraNative.java index 1228f8a0..a145dd42 100644 --- a/bindings/java/src/main/java/org/wickra/internal/WickraNative.java +++ b/bindings/java/src/main/java/org/wickra/internal/WickraNative.java @@ -58,6 +58,20 @@ public final class WickraNative { return CLEANER.register(owner, new FreeAction(handle, free)); } + /** + * Allocate a C {@code bool*} buffer (one byte per element) from flag values + * supplied as doubles, treating any non-zero value as {@code true}. The C + * ABI takes the cross-section state flags as {@code const bool*}, so they + * must be one byte each rather than eight-byte doubles. + */ + public static MemorySegment boolSegment(Arena arena, double[] flags) { + byte[] bytes = new byte[flags.length]; + for (int i = 0; i < flags.length; i++) { + bytes[i] = (byte) (flags[i] != 0.0 ? 1 : 0); + } + return arena.allocateFrom(java.lang.foreign.ValueLayout.JAVA_BYTE, bytes); + } + /** Re-throw a {@link MethodHandle#invokeExact} {@link Throwable} as an unchecked exception. */ public static RuntimeException rethrow(Throwable t) { if (t instanceof RuntimeException re) { diff --git a/bindings/java/src/test/java/org/wickra/GoldenAllTest.java b/bindings/java/src/test/java/org/wickra/GoldenAllTest.java new file mode 100644 index 00000000..fa395c52 --- /dev/null +++ b/bindings/java/src/test/java/org/wickra/GoldenAllTest.java @@ -0,0 +1,759 @@ +// Code generated by gen_golden_test.py. DO NOT EDIT. +package org.wickra; + +import org.junit.jupiter.api.DynamicTest; +import org.junit.jupiter.api.TestFactory; + +import java.io.IOException; +import java.lang.reflect.Array; +import java.lang.reflect.Constructor; +import java.lang.reflect.Method; +import java.lang.reflect.RecordComponent; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.DynamicTest.dynamicTest; + +/** + * Reflection-driven value parity for the whole 514-indicator catalogue: each + * indicator is reconstructed by its class name, fed the synthetic stream derived + * from the shared golden input (identical to gen_golden's Rust construction) and + * checked bit-for-bit against testdata/golden/g_<Canonical>.csv. One runner + * flattens scalar, multi-output records, profiles and bar arrays by reflection. + */ +class GoldenAllTest { + private static final double TOL = 1e-6; + + private record Spec(String canonical, String arch, double[] params, int width) {} + + private static final Spec[] SPECS = { + new Spec("AbandonedBaby", "scalar_candle", new double[]{}, 0), + new Spec("Abcd", "scalar_candle", new double[]{}, 0), + new Spec("AbsoluteBreadthIndex", "cross", new double[]{}, 0), + new Spec("AccelerationBands", "multi_candle", new double[]{14.0, 2.0}, 3), + new Spec("AcceleratorOscillator", "scalar_candle", new double[]{3.0, 7.0, 14.0}, 0), + new Spec("AdOscillator", "scalar_candle", new double[]{}, 0), + new Spec("AdVolumeLine", "cross", new double[]{}, 0), + new Spec("AdaptiveCci", "scalar_candle", new double[]{14.0}, 0), + new Spec("AdaptiveCycle", "scalar_f64", new double[]{}, 0), + new Spec("AdaptiveLaguerreFilter", "scalar_f64", new double[]{20.0}, 0), + new Spec("AdaptiveRsi", "scalar_f64", new double[]{14.0}, 0), + new Spec("Adl", "scalar_candle", new double[]{}, 0), + new Spec("AdvanceBlock", "scalar_candle", new double[]{}, 0), + new Spec("AdvanceDecline", "cross", new double[]{}, 0), + new Spec("AdvanceDeclineRatio", "cross", new double[]{}, 0), + new Spec("Adx", "multi_candle", new double[]{14.0}, 3), + new Spec("Adxr", "scalar_candle", new double[]{14.0}, 0), + new Spec("Alligator", "multi_candle", new double[]{3.0, 7.0, 14.0}, 3), + new Spec("Alma", "scalar_f64", new double[]{9.0, 0.85, 6.0}, 0), + new Spec("Alpha", "pairwise", new double[]{14.0, 2.0}, 0), + new Spec("AmihudIlliquidity", "trade", new double[]{20.0}, 0), + new Spec("AnchoredRsi", "scalar_f64", new double[]{}, 0), + new Spec("AnchoredVwap", "scalar_candle", new double[]{}, 0), + new Spec("AndrewsPitchfork", "multi_candle", new double[]{14.0}, 3), + new Spec("Apo", "scalar_f64", new double[]{3.0, 7.0}, 0), + new Spec("Aroon", "multi_candle", new double[]{14.0}, 2), + new Spec("AroonOscillator", "scalar_candle", new double[]{14.0}, 0), + new Spec("Atr", "scalar_candle", new double[]{14.0}, 0), + new Spec("AtrBands", "multi_candle", new double[]{14.0, 2.0}, 3), + new Spec("AtrRatchet", "multi_candle", new double[]{14.0, 2.0, 0.5}, 2), + new Spec("AtrTrailingStop", "scalar_candle", new double[]{14.0, 2.0}, 0), + new Spec("AutoFib", "multi_candle", new double[]{}, 7), + new Spec("Autocorrelation", "scalar_f64", new double[]{10.0, 1.0}, 0), + new Spec("AutocorrelationPeriodogram", "scalar_f64", new double[]{10.0, 48.0}, 0), + new Spec("AverageDailyRange", "scalar_candle", new double[]{14.0, 0.0}, 0), + new Spec("AverageDrawdown", "scalar_f64", new double[]{14.0}, 0), + new Spec("AvgPrice", "scalar_candle", new double[]{}, 0), + new Spec("AwesomeOscillator", "scalar_candle", new double[]{3.0, 7.0}, 0), + new Spec("AwesomeOscillatorHistogram", "scalar_candle", new double[]{3.0, 7.0, 14.0}, 0), + new Spec("BalanceOfPower", "scalar_candle", new double[]{}, 0), + new Spec("BandpassFilter", "scalar_f64", new double[]{20.0, 0.3}, 0), + new Spec("Bat", "scalar_candle", new double[]{}, 0), + new Spec("BeltHold", "scalar_candle", new double[]{}, 0), + new Spec("Beta", "pairwise", new double[]{14.0}, 0), + new Spec("BetaNeutralSpread", "pairwise", new double[]{14.0}, 0), + new Spec("BetterVolume", "scalar_candle", new double[]{14.0}, 0), + new Spec("BipowerVariation", "scalar_f64", new double[]{14.0}, 0), + new Spec("BodySizePct", "scalar_candle", new double[]{}, 0), + new Spec("BollingerBands", "multi_f64", new double[]{20.0, 2.0}, 4), + new Spec("BollingerBandwidth", "scalar_f64", new double[]{14.0, 2.0}, 0), + new Spec("BomarBands", "multi_f64", new double[]{4.0, 0.85}, 3), + new Spec("BreadthThrust", "cross", new double[]{10.0}, 0), + new Spec("Breakaway", "scalar_candle", new double[]{}, 0), + new Spec("BullishPercentIndex", "cross", new double[]{}, 0), + new Spec("BurkeRatio", "scalar_f64", new double[]{14.0}, 0), + new Spec("Butterfly", "scalar_candle", new double[]{}, 0), + new Spec("CalendarSpread", "deriv", new double[]{}, 0), + new Spec("CalmarRatio", "scalar_f64", new double[]{14.0}, 0), + new Spec("Camarilla", "multi_candle", new double[]{}, 9), + new Spec("CandleVolume", "multi_candle", new double[]{14.0}, 2), + new Spec("Cci", "scalar_candle", new double[]{14.0}, 0), + new Spec("CenterOfGravity", "scalar_f64", new double[]{14.0}, 0), + new Spec("CentralPivotRange", "multi_candle", new double[]{}, 3), + new Spec("Cfo", "scalar_f64", new double[]{14.0}, 0), + new Spec("ChaikinMoneyFlow", "scalar_candle", new double[]{20.0}, 0), + new Spec("ChaikinOscillator", "scalar_candle", new double[]{3.0, 7.0}, 0), + new Spec("ChaikinVolatility", "scalar_candle", new double[]{3.0, 7.0}, 0), + new Spec("ChandeKrollStop", "multi_candle", new double[]{3.0, 2.0, 7.0}, 2), + new Spec("ChandelierExit", "multi_candle", new double[]{14.0, 2.0}, 2), + new Spec("ChoppinessIndex", "scalar_candle", new double[]{14.0}, 0), + new Spec("ClassicPivots", "multi_candle", new double[]{}, 7), + new Spec("CloseVsOpen", "scalar_candle", new double[]{}, 0), + new Spec("ClosingMarubozu", "scalar_candle", new double[]{}, 0), + new Spec("Cmo", "scalar_f64", new double[]{14.0}, 0), + new Spec("CoefficientOfVariation", "scalar_f64", new double[]{14.0}, 0), + new Spec("Cointegration", "multi_pairwise", new double[]{40.0, 1.0}, 3), + new Spec("CommonSenseRatio", "scalar_f64", new double[]{14.0}, 0), + new Spec("CompositeProfile", "multi_candle", new double[]{20.0, 24.0, 0.7}, 3), + new Spec("ConcealingBabySwallow", "scalar_candle", new double[]{}, 0), + new Spec("ConditionalValueAtRisk", "scalar_f64", new double[]{20.0, 0.95}, 0), + new Spec("ConnorsRsi", "scalar_f64", new double[]{3.0, 7.0, 14.0}, 0), + new Spec("Coppock", "scalar_f64", new double[]{3.0, 7.0, 14.0}, 0), + new Spec("CorrelationTrendIndicator", "scalar_f64", new double[]{14.0}, 0), + new Spec("Counterattack", "scalar_candle", new double[]{}, 0), + new Spec("Crab", "scalar_candle", new double[]{}, 0), + new Spec("CumulativeVolumeDelta", "trade", new double[]{}, 0), + new Spec("CumulativeVolumeIndex", "cross", new double[]{}, 0), + new Spec("CupAndHandle", "scalar_candle", new double[]{}, 0), + new Spec("CyberneticCycle", "scalar_f64", new double[]{14.0}, 0), + new Spec("Cypher", "scalar_candle", new double[]{}, 0), + new Spec("DayOfWeekProfile", "profile_bins", new double[]{0.0}, 7), + new Spec("Decycler", "scalar_f64", new double[]{14.0}, 0), + new Spec("DecyclerOscillator", "scalar_f64", new double[]{3.0, 7.0}, 0), + new Spec("Dema", "scalar_f64", new double[]{14.0}, 0), + new Spec("DemandIndex", "scalar_candle", new double[]{14.0}, 0), + new Spec("DemarkPivots", "multi_candle", new double[]{}, 3), + new Spec("DepthSlope", "ob", new double[]{}, 0), + new Spec("DerivativeOscillator", "scalar_f64", new double[]{3.0, 7.0, 14.0, 28.0}, 0), + new Spec("DetrendedStdDev", "scalar_f64", new double[]{14.0}, 0), + new Spec("DisparityIndex", "scalar_f64", new double[]{14.0}, 0), + new Spec("DistanceSsd", "pairwise", new double[]{14.0}, 0), + new Spec("Doji", "scalar_candle", new double[]{}, 0), + new Spec("DojiStar", "scalar_candle", new double[]{}, 0), + new Spec("DollarBars", "bars_candle5", new double[]{50000.0}, 0), + new Spec("Donchian", "multi_candle", new double[]{14.0}, 3), + new Spec("DonchianStop", "multi_candle", new double[]{14.0}, 2), + new Spec("DoubleBollinger", "multi_f64", new double[]{20.0, 1.0, 2.0}, 5), + new Spec("DoubleTopBottom", "scalar_candle", new double[]{}, 0), + new Spec("DownsideGapThreeMethods", "scalar_candle", new double[]{}, 0), + new Spec("Dpo", "scalar_f64", new double[]{14.0}, 0), + new Spec("DragonflyDoji", "scalar_candle", new double[]{}, 0), + new Spec("DrawdownDuration", "scalar_f64", new double[]{}, 0), + new Spec("DumplingTop", "scalar_candle", new double[]{14.0}, 0), + new Spec("Dx", "scalar_candle", new double[]{14.0}, 0), + new Spec("DynamicMomentumIndex", "scalar_f64", new double[]{14.0}, 0), + new Spec("EaseOfMovement", "scalar_candle", new double[]{14.0}, 0), + new Spec("EffectiveSpread", "trademid", new double[]{}, 0), + new Spec("EhlersStochastic", "scalar_f64", new double[]{14.0}, 0), + new Spec("Ehma", "scalar_f64", new double[]{14.0}, 0), + new Spec("ElderImpulse", "scalar_f64", new double[]{3.0, 7.0, 14.0, 28.0}, 0), + new Spec("ElderRay", "multi_candle", new double[]{14.0}, 2), + new Spec("ElderSafeZone", "multi_candle", new double[]{10.0, 2.0}, 2), + new Spec("Ema", "scalar_f64", new double[]{14.0}, 0), + new Spec("EmpiricalModeDecomposition", "scalar_f64", new double[]{20.0, 0.1}, 0), + new Spec("Engulfing", "scalar_candle", new double[]{}, 0), + new Spec("Equivolume", "multi_candle", new double[]{14.0}, 2), + new Spec("EstimatedLeverageRatio", "deriv", new double[]{}, 0), + new Spec("EvenBetterSinewave", "scalar_f64", new double[]{40.0, 10.0}, 0), + new Spec("EveningDojiStar", "scalar_candle", new double[]{}, 0), + new Spec("Evwma", "scalar_candle", new double[]{14.0}, 0), + new Spec("EwmaVolatility", "scalar_f64", new double[]{0.94}, 0), + new Spec("Expectancy", "scalar_f64", new double[]{14.0}, 0), + new Spec("FallingThreeMethods", "scalar_candle", new double[]{}, 0), + new Spec("Fama", "scalar_f64", new double[]{0.5, 0.05}, 0), + new Spec("FibArcs", "multi_candle", new double[]{}, 3), + new Spec("FibChannel", "multi_candle", new double[]{}, 4), + new Spec("FibConfluence", "multi_candle", new double[]{}, 2), + new Spec("FibExtension", "multi_candle", new double[]{}, 5), + new Spec("FibFan", "multi_candle", new double[]{}, 3), + new Spec("FibProjection", "multi_candle", new double[]{}, 4), + new Spec("FibRetracement", "multi_candle", new double[]{}, 7), + new Spec("FibTimeZones", "multi_candle", new double[]{}, 2), + new Spec("FibonacciPivots", "multi_candle", new double[]{}, 7), + new Spec("FisherRsi", "scalar_f64", new double[]{14.0}, 0), + new Spec("FisherTransform", "scalar_f64", new double[]{14.0}, 0), + new Spec("FlagPennant", "scalar_candle", new double[]{}, 0), + new Spec("Footprint", "footprint", new double[]{1.0}, 0), + new Spec("ForceIndex", "scalar_candle", new double[]{14.0}, 0), + new Spec("FractalChaosBands", "multi_candle", new double[]{14.0}, 2), + new Spec("Frama", "scalar_f64", new double[]{14.0}, 0), + new Spec("FryPanBottom", "scalar_candle", new double[]{14.0}, 0), + new Spec("FundingBasis", "deriv", new double[]{}, 0), + new Spec("FundingImpliedApr", "deriv", new double[]{1095.0}, 0), + new Spec("FundingRate", "deriv", new double[]{}, 0), + new Spec("FundingRateMean", "deriv", new double[]{20.0}, 0), + new Spec("FundingRateZScore", "deriv", new double[]{20.0}, 0), + new Spec("GainLossRatio", "scalar_f64", new double[]{14.0}, 0), + new Spec("GainToPainRatio", "scalar_f64", new double[]{14.0}, 0), + new Spec("GapSideBySideWhite", "scalar_candle", new double[]{}, 0), + new Spec("Garch11", "scalar_f64", new double[]{2e-06, 0.1, 0.88}, 0), + new Spec("GarmanKlassVolatility", "scalar_candle", new double[]{20.0, 252.0}, 0), + new Spec("Gartley", "scalar_candle", new double[]{}, 0), + new Spec("GatorOscillator", "multi_candle", new double[]{3.0, 7.0, 14.0}, 2), + new Spec("GeneralizedDema", "scalar_f64", new double[]{5.0, 0.7}, 0), + new Spec("GeometricMa", "scalar_f64", new double[]{14.0}, 0), + new Spec("GoldenPocket", "multi_candle", new double[]{}, 3), + new Spec("GrangerCausality", "pairwise", new double[]{60.0, 1.0}, 0), + new Spec("GravestoneDoji", "scalar_candle", new double[]{}, 0), + new Spec("Hammer", "scalar_candle", new double[]{}, 0), + new Spec("HangingMan", "scalar_candle", new double[]{}, 0), + new Spec("Harami", "scalar_candle", new double[]{}, 0), + new Spec("HaramiCross", "scalar_candle", new double[]{}, 0), + new Spec("HasbrouckInformationShare", "pairwise", new double[]{14.0}, 0), + new Spec("HeadAndShoulders", "scalar_candle", new double[]{}, 0), + new Spec("HeikinAshi", "multi_candle", new double[]{}, 4), + new Spec("HeikinAshiOscillator", "scalar_candle", new double[]{14.0}, 0), + new Spec("HiLoActivator", "scalar_candle", new double[]{14.0}, 0), + new Spec("HighLowIndex", "cross", new double[]{10.0}, 0), + new Spec("HighLowRange", "scalar_candle", new double[]{}, 0), + new Spec("HighLowVolumeNodes", "multi_candle", new double[]{3.0, 7.0}, 2), + new Spec("HighWave", "scalar_candle", new double[]{}, 0), + new Spec("HighpassFilter", "scalar_f64", new double[]{14.0}, 0), + new Spec("Hikkake", "scalar_candle", new double[]{}, 0), + new Spec("HikkakeModified", "scalar_candle", new double[]{}, 0), + new Spec("HilbertDominantCycle", "scalar_f64", new double[]{}, 0), + new Spec("HistoricalVolatility", "scalar_f64", new double[]{3.0, 7.0}, 0), + new Spec("Hma", "scalar_f64", new double[]{14.0}, 0), + new Spec("HoltWinters", "scalar_f64", new double[]{0.5, 0.1}, 0), + new Spec("HomingPigeon", "scalar_candle", new double[]{}, 0), + new Spec("HtDcPhase", "scalar_f64", new double[]{}, 0), + new Spec("HtPhasor", "multi_f64", new double[]{}, 2), + new Spec("HtTrendMode", "scalar_f64", new double[]{}, 0), + new Spec("HurstChannel", "multi_candle", new double[]{14.0, 2.0}, 3), + new Spec("HurstExponent", "scalar_f64", new double[]{100.0, 4.0}, 0), + new Spec("Ichimoku", "multi_candle", new double[]{9.0, 26.0, 52.0, 26.0}, 5), + new Spec("IdenticalThreeCrows", "scalar_candle", new double[]{}, 0), + new Spec("ImbalanceBars", "bars_candle4", new double[]{5.0}, 0), + new Spec("InNeck", "scalar_candle", new double[]{}, 0), + new Spec("Inertia", "scalar_candle", new double[]{3.0, 7.0}, 0), + new Spec("InformationRatio", "pairwise", new double[]{14.0}, 0), + new Spec("InitialBalance", "multi_candle", new double[]{14.0}, 2), + new Spec("InstantaneousTrendline", "scalar_f64", new double[]{14.0}, 0), + new Spec("IntradayIntensity", "scalar_candle", new double[]{}, 0), + new Spec("IntradayMomentumIndex", "scalar_candle", new double[]{14.0}, 0), + new Spec("IntradayVolatilityProfile", "profile_bins", new double[]{24.0, 0.0}, 24), + new Spec("InverseFisherTransform", "scalar_f64", new double[]{2.0}, 0), + new Spec("InvertedHammer", "scalar_candle", new double[]{}, 0), + new Spec("JarqueBera", "scalar_f64", new double[]{14.0}, 0), + new Spec("Jma", "scalar_f64", new double[]{7.0, 0.0, 2.0}, 0), + new Spec("JumpIndicator", "scalar_f64", new double[]{14.0, 2.0}, 0), + new Spec("KRatio", "scalar_f64", new double[]{14.0}, 0), + new Spec("KagiBars", "bars_close", new double[]{2.0}, 0), + new Spec("KalmanHedgeRatio", "multi_pairwise", new double[]{0.01, 0.001}, 3), + new Spec("Kama", "scalar_f64", new double[]{3.0, 7.0, 14.0}, 0), + new Spec("KaseDevStop", "multi_candle", new double[]{14.0, 2.0}, 2), + new Spec("KasePermissionStochastic", "multi_candle", new double[]{3.0, 7.0}, 2), + new Spec("KellyCriterion", "scalar_f64", new double[]{14.0}, 0), + new Spec("Keltner", "multi_candle", new double[]{3.0, 7.0, 2.0}, 3), + new Spec("KendallTau", "pairwise", new double[]{14.0}, 0), + new Spec("Kicking", "scalar_candle", new double[]{}, 0), + new Spec("KickingByLength", "scalar_candle", new double[]{}, 0), + new Spec("Kst", "multi_f64", new double[]{3.0, 7.0, 14.0, 28.0, 35.0, 42.0, 56.0, 63.0, 70.0}, 2), + new Spec("Kurtosis", "scalar_f64", new double[]{14.0}, 0), + new Spec("Kvo", "scalar_candle", new double[]{3.0, 7.0}, 0), + new Spec("KylesLambda", "trademid", new double[]{20.0}, 0), + new Spec("LadderBottom", "scalar_candle", new double[]{}, 0), + new Spec("LaguerreRsi", "scalar_f64", new double[]{0.5}, 0), + new Spec("LeadLagCrossCorrelation", "multi_pairwise", new double[]{20.0, 10.0}, 2), + new Spec("LinRegAngle", "scalar_f64", new double[]{14.0}, 0), + new Spec("LinRegChannel", "multi_f64", new double[]{14.0, 2.0}, 3), + new Spec("LinRegIntercept", "scalar_f64", new double[]{14.0}, 0), + new Spec("LinRegSlope", "scalar_f64", new double[]{14.0}, 0), + new Spec("LinearRegression", "scalar_f64", new double[]{14.0}, 0), + new Spec("LiquidationFeatures", "deriv_multi", new double[]{}, 5), + new Spec("LogReturn", "scalar_f64", new double[]{14.0}, 0), + new Spec("LongLeggedDoji", "scalar_candle", new double[]{}, 0), + new Spec("LongLine", "scalar_candle", new double[]{}, 0), + new Spec("LongShortRatio", "deriv", new double[]{}, 0), + new Spec("M2Measure", "scalar_f64", new double[]{14.0, 2.0, 0.5}, 0), + new Spec("MaEnvelope", "multi_f64", new double[]{14.0, 2.0}, 3), + new Spec("MacdExt", "multi_f64", new double[]{12.0, 0.0, 26.0, 0.0, 9.0, 0.0}, 3), + new Spec("MacdFix", "multi_f64", new double[]{9.0}, 3), + new Spec("MacdHistogram", "scalar_f64", new double[]{3.0, 7.0, 14.0}, 0), + new Spec("MacdIndicator", "multi_f64", new double[]{12.0, 26.0, 9.0}, 3), + new Spec("Mama", "multi_f64", new double[]{0.5, 0.05}, 2), + new Spec("MarketFacilitationIndex", "scalar_candle", new double[]{}, 0), + new Spec("MartinRatio", "scalar_f64", new double[]{14.0}, 0), + new Spec("Marubozu", "scalar_candle", new double[]{}, 0), + new Spec("MassIndex", "scalar_candle", new double[]{3.0, 7.0}, 0), + new Spec("MatHold", "scalar_candle", new double[]{}, 0), + new Spec("MatchingLow", "scalar_candle", new double[]{}, 0), + new Spec("MaxDrawdown", "scalar_f64", new double[]{14.0}, 0), + new Spec("McClellanOscillator", "cross", new double[]{}, 0), + new Spec("McClellanSummationIndex", "cross", new double[]{}, 0), + new Spec("McGinleyDynamic", "scalar_f64", new double[]{14.0}, 0), + new Spec("MedianAbsoluteDeviation", "scalar_f64", new double[]{14.0}, 0), + new Spec("MedianChannel", "multi_f64", new double[]{14.0, 2.0}, 3), + new Spec("MedianMa", "scalar_f64", new double[]{14.0}, 0), + new Spec("MedianPrice", "scalar_candle", new double[]{}, 0), + new Spec("Mfi", "scalar_candle", new double[]{14.0}, 0), + new Spec("Microprice", "ob", new double[]{}, 0), + new Spec("MidPoint", "scalar_f64", new double[]{14.0}, 0), + new Spec("MidPrice", "scalar_candle", new double[]{14.0}, 0), + new Spec("MinusDi", "scalar_candle", new double[]{14.0}, 0), + new Spec("MinusDm", "scalar_candle", new double[]{14.0}, 0), + new Spec("ModifiedMaStop", "multi_candle", new double[]{14.0}, 2), + new Spec("Mom", "scalar_f64", new double[]{14.0}, 0), + new Spec("MorningDojiStar", "scalar_candle", new double[]{}, 0), + new Spec("MorningEveningStar", "scalar_candle", new double[]{}, 0), + new Spec("MurreyMathLines", "multi_candle", new double[]{14.0}, 9), + new Spec("NakedPoc", "scalar_candle", new double[]{3.0, 7.0}, 0), + new Spec("Natr", "scalar_candle", new double[]{14.0}, 0), + new Spec("NewHighsNewLows", "cross", new double[]{}, 0), + new Spec("NewPriceLines", "scalar_candle", new double[]{14.0}, 0), + new Spec("Nrtr", "multi_candle", new double[]{2.0}, 2), + new Spec("Nvi", "scalar_candle", new double[]{}, 0), + new Spec("OIPriceDivergence", "deriv", new double[]{20.0}, 0), + new Spec("OIWeighted", "deriv", new double[]{}, 0), + new Spec("Obv", "scalar_candle", new double[]{}, 0), + new Spec("OiToVolumeRatio", "deriv", new double[]{}, 0), + new Spec("OmegaRatio", "scalar_f64", new double[]{14.0, 2.0}, 0), + new Spec("OnNeck", "scalar_candle", new double[]{}, 0), + new Spec("OpenInterestDelta", "deriv", new double[]{}, 0), + new Spec("OpenInterestMomentum", "deriv", new double[]{10.0}, 0), + new Spec("OpeningMarubozu", "scalar_candle", new double[]{}, 0), + new Spec("OpeningRange", "multi_candle", new double[]{14.0}, 3), + new Spec("OrderBookImbalanceFull", "ob", new double[]{}, 0), + new Spec("OrderBookImbalanceTop1", "ob", new double[]{}, 0), + new Spec("OrderBookImbalanceTopN", "ob", new double[]{5.0}, 0), + new Spec("OrderFlowImbalance", "ob", new double[]{20.0}, 0), + new Spec("OuHalfLife", "pairwise", new double[]{14.0}, 0), + new Spec("OvernightGap", "scalar_candle", new double[]{0.0}, 0), + new Spec("OvernightIntradayReturn", "multi_candle", new double[]{14.0}, 2), + new Spec("PainIndex", "scalar_f64", new double[]{14.0}, 0), + new Spec("PairSpreadZScore", "pairwise", new double[]{20.0, 20.0}, 0), + new Spec("PairwiseBeta", "pairwise", new double[]{14.0}, 0), + new Spec("ParkinsonVolatility", "scalar_candle", new double[]{20.0, 252.0}, 0), + new Spec("PearsonCorrelation", "pairwise", new double[]{14.0}, 0), + new Spec("PercentAboveMa", "cross", new double[]{}, 0), + new Spec("PercentB", "scalar_f64", new double[]{14.0, 2.0}, 0), + new Spec("PercentageTrailingStop", "scalar_f64", new double[]{2.0}, 0), + new Spec("PerpetualPremiumIndex", "deriv", new double[]{}, 0), + new Spec("Pgo", "scalar_candle", new double[]{14.0}, 0), + new Spec("PiercingDarkCloud", "scalar_candle", new double[]{}, 0), + new Spec("Pin", "trade", new double[]{20.0}, 0), + new Spec("PivotReversal", "scalar_candle", new double[]{3.0, 7.0}, 0), + new Spec("PlusDi", "scalar_candle", new double[]{14.0}, 0), + new Spec("PlusDm", "scalar_candle", new double[]{14.0}, 0), + new Spec("Pmo", "scalar_f64", new double[]{3.0, 7.0}, 0), + new Spec("PointAndFigureBars", "bars_close", new double[]{2.0, 3.0}, 0), + new Spec("PolarizedFractalEfficiency", "scalar_f64", new double[]{10.0, 5.0}, 0), + new Spec("Ppo", "scalar_f64", new double[]{3.0, 7.0}, 0), + new Spec("PpoHistogram", "scalar_f64", new double[]{3.0, 7.0, 14.0}, 0), + new Spec("ProfileShape", "scalar_candle", new double[]{3.0, 7.0}, 0), + new Spec("ProfitFactor", "scalar_f64", new double[]{14.0}, 0), + new Spec("ProjectionBands", "multi_candle", new double[]{14.0}, 3), + new Spec("ProjectionOscillator", "scalar_candle", new double[]{14.0}, 0), + new Spec("Psar", "scalar_candle", new double[]{0.02, 0.02, 0.2}, 0), + new Spec("Pvi", "scalar_candle", new double[]{}, 0), + new Spec("Qqe", "multi_f64", new double[]{3.0, 7.0, 2.0}, 2), + new Spec("Qstick", "scalar_candle", new double[]{14.0}, 0), + new Spec("QuartileBands", "multi_f64", new double[]{14.0}, 3), + new Spec("QuotedSpread", "ob", new double[]{}, 0), + new Spec("RSquared", "scalar_f64", new double[]{14.0}, 0), + new Spec("RangeBars", "bars_close", new double[]{2.0}, 0), + new Spec("RealizedSpread", "trademid", new double[]{20.0}, 0), + new Spec("RealizedVolatility", "scalar_f64", new double[]{14.0}, 0), + new Spec("RecoveryFactor", "scalar_f64", new double[]{}, 0), + new Spec("RectangleRange", "scalar_candle", new double[]{}, 0), + new Spec("Reflex", "scalar_f64", new double[]{14.0}, 0), + new Spec("RegimeLabel", "scalar_f64", new double[]{3.0, 7.0}, 0), + new Spec("RelativeStrengthAB", "multi_pairwise", new double[]{14.0, 14.0}, 3), + new Spec("RenkoBars", "bars_close", new double[]{2.0}, 0), + new Spec("RenkoTrailingStop", "scalar_f64", new double[]{2.0}, 0), + new Spec("RickshawMan", "scalar_candle", new double[]{}, 0), + new Spec("RisingThreeMethods", "scalar_candle", new double[]{}, 0), + new Spec("Rmi", "scalar_f64", new double[]{3.0, 7.0}, 0), + new Spec("Roc", "scalar_f64", new double[]{14.0}, 0), + new Spec("Rocp", "scalar_f64", new double[]{14.0}, 0), + new Spec("Rocr", "scalar_f64", new double[]{14.0}, 0), + new Spec("Rocr100", "scalar_f64", new double[]{14.0}, 0), + new Spec("RogersSatchellVolatility", "scalar_candle", new double[]{20.0, 252.0}, 0), + new Spec("RollMeasure", "trade", new double[]{20.0}, 0), + new Spec("RollingCorrelation", "pairwise", new double[]{14.0}, 0), + new Spec("RollingCovariance", "pairwise", new double[]{14.0}, 0), + new Spec("RollingIqr", "scalar_f64", new double[]{14.0}, 0), + new Spec("RollingMinMaxScaler", "scalar_f64", new double[]{14.0}, 0), + new Spec("RollingPercentileRank", "scalar_f64", new double[]{14.0}, 0), + new Spec("RollingQuantile", "scalar_f64", new double[]{20.0, 0.5}, 0), + new Spec("RollingVwap", "scalar_candle", new double[]{14.0}, 0), + new Spec("RoofingFilter", "scalar_f64", new double[]{3.0, 7.0}, 0), + new Spec("Rsi", "scalar_f64", new double[]{14.0}, 0), + new Spec("Rsx", "scalar_f64", new double[]{14.0}, 0), + new Spec("RunBars", "bars_candle4", new double[]{3.0}, 0), + new Spec("Rvi", "scalar_candle", new double[]{14.0}, 0), + new Spec("RviVolatility", "scalar_f64", new double[]{14.0}, 0), + new Spec("Rwi", "multi_candle", new double[]{14.0}, 2), + new Spec("SampleEntropy", "scalar_f64", new double[]{20.0, 2.0, 0.2}, 0), + new Spec("SarExt", "scalar_candle", new double[]{2.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5}, 0), + new Spec("SeasonalZScore", "scalar_candle", new double[]{14.0}, 0), + new Spec("SeparatingLines", "scalar_candle", new double[]{}, 0), + new Spec("SessionHighLow", "multi_candle", new double[]{14.0}, 2), + new Spec("SessionRange", "multi_candle", new double[]{14.0}, 3), + new Spec("SessionVwap", "scalar_candle", new double[]{14.0}, 0), + new Spec("ShannonEntropy", "scalar_f64", new double[]{3.0, 7.0}, 0), + new Spec("Shark", "scalar_candle", new double[]{}, 0), + new Spec("SharpeRatio", "scalar_f64", new double[]{14.0, 2.0}, 0), + new Spec("ShootingStar", "scalar_candle", new double[]{}, 0), + new Spec("ShortLine", "scalar_candle", new double[]{}, 0), + new Spec("SignedVolume", "trade", new double[]{}, 0), + new Spec("SineWave", "scalar_f64", new double[]{}, 0), + new Spec("SineWeightedMa", "scalar_f64", new double[]{14.0}, 0), + new Spec("SinglePrints", "scalar_candle", new double[]{3.0, 7.0}, 0), + new Spec("Skewness", "scalar_f64", new double[]{14.0}, 0), + new Spec("Sma", "scalar_f64", new double[]{14.0}, 0), + new Spec("Smi", "scalar_candle", new double[]{3.0, 7.0, 14.0}, 0), + new Spec("Smma", "scalar_f64", new double[]{14.0}, 0), + new Spec("SmoothedHeikinAshi", "multi_candle", new double[]{14.0}, 4), + new Spec("SortinoRatio", "scalar_f64", new double[]{14.0, 2.0}, 0), + new Spec("SpearmanCorrelation", "pairwise", new double[]{14.0}, 0), + new Spec("SpinningTop", "scalar_candle", new double[]{}, 0), + new Spec("SpreadAr1Coefficient", "pairwise", new double[]{14.0}, 0), + new Spec("SpreadBollingerBands", "multi_pairwise", new double[]{14.0, 2.0}, 4), + new Spec("SpreadHurst", "pairwise", new double[]{14.0}, 0), + new Spec("StalledPattern", "scalar_candle", new double[]{}, 0), + new Spec("StandardError", "scalar_f64", new double[]{14.0}, 0), + new Spec("StandardErrorBands", "multi_f64", new double[]{14.0, 2.0}, 3), + new Spec("StarcBands", "multi_candle", new double[]{3.0, 7.0, 2.0}, 3), + new Spec("Stc", "scalar_f64", new double[]{10.0, 23.0, 10.0, 0.5}, 0), + new Spec("StdDev", "scalar_f64", new double[]{14.0}, 0), + new Spec("StepTrailingStop", "scalar_f64", new double[]{2.0}, 0), + new Spec("SterlingRatio", "scalar_f64", new double[]{14.0}, 0), + new Spec("StickSandwich", "scalar_candle", new double[]{}, 0), + new Spec("StochRsi", "scalar_f64", new double[]{3.0, 7.0}, 0), + new Spec("Stochastic", "multi_candle", new double[]{3.0, 7.0}, 2), + new Spec("StochasticCci", "scalar_candle", new double[]{14.0}, 0), + new Spec("SuperSmoother", "scalar_f64", new double[]{14.0}, 0), + new Spec("SuperTrend", "multi_candle", new double[]{14.0, 2.0}, 2), + new Spec("T3", "scalar_f64", new double[]{5.0, 0.7}, 0), + new Spec("TailRatio", "scalar_f64", new double[]{14.0}, 0), + new Spec("TakerBuySellRatio", "deriv", new double[]{}, 0), + new Spec("Takuri", "scalar_candle", new double[]{}, 0), + new Spec("TasukiGap", "scalar_candle", new double[]{}, 0), + new Spec("TdCamouflage", "scalar_candle", new double[]{}, 0), + new Spec("TdClop", "scalar_candle", new double[]{}, 0), + new Spec("TdClopwin", "scalar_candle", new double[]{}, 0), + new Spec("TdCombo", "scalar_candle", new double[]{3.0, 7.0, 14.0, 28.0}, 0), + new Spec("TdCountdown", "scalar_candle", new double[]{3.0, 7.0, 14.0, 28.0}, 0), + new Spec("TdDWave", "scalar_candle", new double[]{2.0}, 0), + new Spec("TdDeMarker", "scalar_candle", new double[]{14.0}, 0), + new Spec("TdDifferential", "scalar_candle", new double[]{}, 0), + new Spec("TdLines", "multi_candle", new double[]{3.0, 7.0}, 2), + new Spec("TdMovingAverage", "multi_candle", new double[]{3.0, 7.0}, 2), + new Spec("TdOpen", "scalar_candle", new double[]{}, 0), + new Spec("TdPressure", "scalar_candle", new double[]{14.0}, 0), + new Spec("TdPropulsion", "scalar_candle", new double[]{}, 0), + new Spec("TdRangeProjection", "multi_candle", new double[]{}, 2), + new Spec("TdRei", "scalar_candle", new double[]{14.0}, 0), + new Spec("TdRiskLevel", "multi_candle", new double[]{3.0, 7.0}, 2), + new Spec("TdSequential", "multi_candle", new double[]{3.0, 7.0, 14.0, 28.0}, 3), + new Spec("TdSetup", "scalar_candle", new double[]{3.0, 7.0}, 0), + new Spec("TdTrap", "scalar_candle", new double[]{}, 0), + new Spec("Tema", "scalar_f64", new double[]{14.0}, 0), + new Spec("TermStructureBasis", "deriv", new double[]{}, 0), + new Spec("ThreeDrives", "scalar_candle", new double[]{}, 0), + new Spec("ThreeInside", "scalar_candle", new double[]{}, 0), + new Spec("ThreeLineBreak", "scalar_candle", new double[]{14.0}, 0), + new Spec("ThreeLineBreakBars", "bars_close", new double[]{3.0}, 0), + new Spec("ThreeLineStrike", "scalar_candle", new double[]{}, 0), + new Spec("ThreeOutside", "scalar_candle", new double[]{}, 0), + new Spec("ThreeSoldiersOrCrows", "scalar_candle", new double[]{}, 0), + new Spec("ThreeStarsInSouth", "scalar_candle", new double[]{}, 0), + new Spec("Thrusting", "scalar_candle", new double[]{}, 0), + new Spec("TickBars", "bars_candle5", new double[]{2.0}, 0), + new Spec("TickIndex", "cross", new double[]{}, 0), + new Spec("Tii", "scalar_f64", new double[]{3.0, 7.0}, 0), + new Spec("TimeBasedStop", "scalar_candle", new double[]{14.0}, 0), + new Spec("TimeOfDayReturnProfile", "profile_bins", new double[]{24.0, 0.0}, 24), + new Spec("TowerTopBottom", "scalar_candle", new double[]{}, 0), + new Spec("TpoProfile", "profile_pricebins", new double[]{30.0, 50.0}, 52), + new Spec("TradeImbalance", "trade", new double[]{20.0}, 0), + new Spec("TradeSignAutocorrelation", "trade", new double[]{20.0}, 0), + new Spec("TradeVolumeIndex", "scalar_candle", new double[]{2.0}, 0), + new Spec("TrendLabel", "scalar_f64", new double[]{14.0}, 0), + new Spec("TrendStrengthIndex", "scalar_f64", new double[]{14.0}, 0), + new Spec("Trendflex", "scalar_f64", new double[]{14.0}, 0), + new Spec("TreynorRatio", "pairwise", new double[]{14.0, 2.0}, 0), + new Spec("Triangle", "scalar_candle", new double[]{}, 0), + new Spec("Trima", "scalar_f64", new double[]{14.0}, 0), + new Spec("Trin", "cross", new double[]{}, 0), + new Spec("TripleTopBottom", "scalar_candle", new double[]{}, 0), + new Spec("Tristar", "scalar_candle", new double[]{}, 0), + new Spec("Trix", "scalar_f64", new double[]{14.0}, 0), + new Spec("TrueRange", "scalar_candle", new double[]{}, 0), + new Spec("Tsf", "scalar_f64", new double[]{14.0}, 0), + new Spec("TsfOscillator", "scalar_f64", new double[]{14.0}, 0), + new Spec("Tsi", "scalar_f64", new double[]{3.0, 7.0}, 0), + new Spec("Tsv", "scalar_candle", new double[]{14.0}, 0), + new Spec("TtmSqueeze", "multi_candle", new double[]{14.0, 2.0, 0.5}, 2), + new Spec("TtmTrend", "scalar_candle", new double[]{14.0}, 0), + new Spec("TurnOfMonth", "scalar_candle", new double[]{3.0, 3.0, 0.0}, 0), + new Spec("Tweezer", "scalar_candle", new double[]{}, 0), + new Spec("TwiggsMoneyFlow", "scalar_candle", new double[]{14.0}, 0), + new Spec("TwoCrows", "scalar_candle", new double[]{}, 0), + new Spec("TypicalPrice", "scalar_candle", new double[]{}, 0), + new Spec("UlcerIndex", "scalar_f64", new double[]{14.0}, 0), + new Spec("UltimateOscillator", "scalar_candle", new double[]{3.0, 7.0, 14.0}, 0), + new Spec("UniqueThreeRiver", "scalar_candle", new double[]{}, 0), + new Spec("UniversalOscillator", "scalar_f64", new double[]{14.0}, 0), + new Spec("UpDownVolumeRatio", "cross", new double[]{}, 0), + new Spec("UpsideGapThreeMethods", "scalar_candle", new double[]{}, 0), + new Spec("UpsideGapTwoCrows", "scalar_candle", new double[]{}, 0), + new Spec("UpsidePotentialRatio", "scalar_f64", new double[]{14.0, 2.0}, 0), + new Spec("ValueArea", "multi_candle", new double[]{20.0, 50.0, 0.7}, 3), + new Spec("ValueAtRisk", "scalar_f64", new double[]{20.0, 0.95}, 0), + new Spec("Variance", "scalar_f64", new double[]{14.0}, 0), + new Spec("VarianceRatio", "pairwise", new double[]{60.0, 2.0}, 0), + new Spec("VerticalHorizontalFilter", "scalar_f64", new double[]{14.0}, 0), + new Spec("Vidya", "scalar_f64", new double[]{3.0, 7.0}, 0), + new Spec("VolatilityCone", "multi_candle", new double[]{3.0, 7.0}, 5), + new Spec("VolatilityOfVolatility", "scalar_f64", new double[]{3.0, 7.0}, 0), + new Spec("VolatilityRatio", "scalar_candle", new double[]{14.0}, 0), + new Spec("VoltyStop", "scalar_candle", new double[]{14.0, 2.0}, 0), + new Spec("VolumeBars", "bars_candle5", new double[]{500.0}, 0), + new Spec("VolumeByTimeProfile", "profile_bins", new double[]{24.0, 0.0}, 24), + new Spec("VolumeOscillator", "scalar_candle", new double[]{3.0, 7.0}, 0), + new Spec("VolumePriceTrend", "scalar_candle", new double[]{}, 0), + new Spec("VolumeProfile", "profile_pricebins", new double[]{20.0, 50.0}, 52), + new Spec("VolumeRsi", "scalar_candle", new double[]{14.0}, 0), + new Spec("VolumeWeightedMacd", "multi_candle", new double[]{3.0, 7.0, 14.0}, 3), + new Spec("VolumeWeightedSr", "multi_candle", new double[]{14.0}, 2), + new Spec("Vortex", "multi_candle", new double[]{14.0}, 2), + new Spec("Vpin", "trade", new double[]{5000.0, 10.0}, 0), + new Spec("Vwap", "scalar_candle", new double[]{}, 0), + new Spec("VwapStdDevBands", "multi_candle", new double[]{2.0}, 4), + new Spec("Vwma", "scalar_candle", new double[]{14.0}, 0), + new Spec("Vzo", "scalar_candle", new double[]{14.0}, 0), + new Spec("Wad", "scalar_candle", new double[]{}, 0), + new Spec("WavePm", "scalar_f64", new double[]{3.0, 7.0}, 0), + new Spec("WaveTrend", "multi_candle", new double[]{3.0, 7.0, 14.0}, 2), + new Spec("Wedge", "scalar_candle", new double[]{}, 0), + new Spec("WeightedClose", "scalar_candle", new double[]{}, 0), + new Spec("WickRatio", "scalar_candle", new double[]{}, 0), + new Spec("WilliamsFractals", "multi_candle", new double[]{}, 2), + new Spec("WilliamsR", "scalar_candle", new double[]{14.0}, 0), + new Spec("WinRate", "scalar_f64", new double[]{14.0}, 0), + new Spec("Wma", "scalar_f64", new double[]{14.0}, 0), + new Spec("WoodiePivots", "multi_candle", new double[]{}, 5), + new Spec("YangZhangVolatility", "scalar_candle", new double[]{20.0, 252.0}, 0), + new Spec("YoyoExit", "scalar_candle", new double[]{14.0, 2.0}, 0), + new Spec("ZScore", "scalar_f64", new double[]{14.0}, 0), + new Spec("ZeroLagMacd", "multi_f64", new double[]{3.0, 7.0, 14.0}, 3), + new Spec("ZigZag", "multi_candle", new double[]{0.02}, 2), + new Spec("Zlema", "scalar_f64", new double[]{14.0}, 0), + }; + + private static Path goldenDir() { + java.io.File d = new java.io.File("").getAbsoluteFile(); + while (d != null) { + java.io.File g = new java.io.File(d, "testdata/golden"); + if (g.isDirectory()) { + return g.toPath(); + } + d = d.getParentFile(); + } + throw new IllegalStateException("testdata/golden not found"); + } + + private static double cell(String s) { + return switch (s) { + case "nan" -> Double.NaN; + case "inf" -> Double.POSITIVE_INFINITY; + case "-inf" -> Double.NEGATIVE_INFINITY; + default -> Double.parseDouble(s); + }; + } + + private static double[][] input() throws IOException { + List lines = Files.readAllLines(goldenDir().resolve("input.csv")); + List rows = new ArrayList<>(); + for (int i = 1; i < lines.size(); i++) { + if (lines.get(i).isEmpty()) continue; + String[] p = lines.get(i).split(","); + double[] r = new double[p.length]; + for (int j = 0; j < p.length; j++) r[j] = Double.parseDouble(p[j]); + rows.add(r); + } + return rows.toArray(new double[0][]); + } + + // Keep blank lines (a candle on which no bar closed) so rows stay aligned. + private static double[][] fixture(String name) throws IOException { + List lines = Files.readAllLines(goldenDir().resolve("g_" + name + ".csv")); + List rows = new ArrayList<>(); + for (int i = 1; i < lines.size(); i++) { + String ln = lines.get(i); + if (ln.isEmpty()) { + rows.add(new double[0]); + continue; + } + String[] p = ln.split(","); + double[] r = new double[p.length]; + for (int j = 0; j < p.length; j++) r[j] = cell(p[j]); + rows.add(r); + } + return rows.toArray(new double[0][]); + } + + private static double[] nanRow(int n) { + double[] r = new double[n]; + java.util.Arrays.fill(r, Double.NaN); + return r; + } + + private static double[] derivFields(double[] r) { + double o = r[0], h = r[1], l = r[2], c = r[3], v = r[4]; + return new double[]{ + (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[] crossList(double[] r, int which) { + double o = r[0], c = r[3], v = r[4]; + double[] out = new double[5]; + for (int j = 0; j < 5; j++) { + out[j] = switch (which) { + case 0 -> (c - o) + j; + case 1 -> v + j * 10.0; + case 2 -> j % 2 == 0 ? 1.0 : 0.0; // newHigh + case 3 -> j % 3 == 0 ? 1.0 : 0.0; // newLow + case 4 -> j % 2 == 0 ? 1.0 : 0.0; // aboveMa + default -> j % 3 == 0 ? 1.0 : 0.0; // onBuySignal + }; + } + return out; + } + + private static double[] obList(double[] r, int which) { + double c = r[3], v = r[4]; + double[] out = new double[5]; + for (int k = 0; k < 5; k++) { + double kf = k + 1; + out[k] = switch (which) { + case 0 -> c - 0.1 * kf; + case 1 -> v / kf; + case 2 -> c + 0.1 * kf; + default -> v * 0.9 / kf; + }; + } + return out; + } + + private static double[] flattenRecord(Object o) throws Exception { + RecordComponent[] rc = o.getClass().getRecordComponents(); + List list = new ArrayList<>(); + for (RecordComponent c : rc) { + Object v = c.getAccessor().invoke(o); + if (v instanceof double[] arr) { + for (double d : arr) list.add(d); + } else if (v instanceof Number num) { + list.add(num.doubleValue()); + } + } + double[] out = new double[list.size()]; + for (int i = 0; i < out.length; i++) out[i] = list.get(i); + return out; + } + + private static double[] flattenArray(Object arr) throws Exception { + int len = Array.getLength(arr); + List list = new ArrayList<>(); + for (int i = 0; i < len; i++) { + for (double d : flattenRecord(Array.get(arr, i))) list.add(d); + } + double[] out = new double[list.size()]; + for (int i = 0; i < out.length; i++) out[i] = list.get(i); + return out; + } + + private static Object construct(Spec s) throws Exception { + Class cls = Class.forName("org.wickra." + s.canonical()); + Constructor ctor = cls.getConstructors()[0]; + Class[] pt = ctor.getParameterTypes(); + Object[] args = new Object[pt.length]; + for (int i = 0; i < pt.length; i++) { + double v = s.params()[i]; + if (pt[i] == int.class) args[i] = (int) Math.round(v); + else if (pt[i] == long.class) args[i] = (long) Math.round(v); + else args[i] = v; + } + return ctor.newInstance(args); + } + + private static Method updateMethod(Object ind) { + for (Method m : ind.getClass().getMethods()) { + if (m.getName().equals("update")) return m; + } + throw new IllegalStateException("no update on " + ind.getClass()); + } + + private static double[] row(Spec s, Object ind, Method upd, double[] r, int i) throws Exception { + double o = r[0], h = r[1], l = r[2], c = r[3], v = r[4]; + Object res = switch (s.arch()) { + case "scalar_f64", "multi_f64" -> upd.invoke(ind, c); + case "pairwise", "multi_pairwise" -> upd.invoke(ind, c, o); + case "scalar_candle", "multi_candle", "profile_bins", "profile_pricebins" -> + upd.invoke(ind, o, h, l, c, v, (long) i); + case "trade" -> upd.invoke(ind, c, v, c >= o, (long) i); + case "trademid" -> upd.invoke(ind, c, v, c >= o, (long) i, (h + l) / 2); + case "ob" -> upd.invoke(ind, obList(r, 0), obList(r, 1), obList(r, 2), obList(r, 3)); + case "cross" -> upd.invoke(ind, crossList(r, 0), crossList(r, 1), crossList(r, 2), + crossList(r, 3), crossList(r, 4), crossList(r, 5), (long) i); + case "deriv", "deriv_multi" -> { + double[] d = derivFields(r); + yield upd.invoke(ind, d[0], d[1], d[2], d[3], d[4], d[5], d[6], d[7], d[8], d[9], d[10], (long) i); + } + case "bars_close" -> upd.invoke(ind, c, c, c, c, 1.0, 0L); + case "bars_candle4" -> upd.invoke(ind, o, h, l, c, 1.0, 0L); + case "bars_candle5" -> upd.invoke(ind, o, h, l, c, v, 0L); + case "footprint" -> upd.invoke(ind, c, v, c >= o, (long) i); + default -> throw new IllegalStateException("arch " + s.arch()); + }; + return switch (s.arch()) { + case "scalar_f64", "scalar_candle", "pairwise", "trade", "trademid", "ob", "cross", "deriv" -> + new double[]{((Number) res).doubleValue()}; + case "multi_f64", "multi_candle", "multi_pairwise", "deriv_multi", "profile_pricebins" -> + res == null ? nanRow(s.width()) : flattenRecord(res); + case "profile_bins" -> res == null ? nanRow(s.width()) : (double[]) res; + default -> flattenArray(res); // bars_*, footprint + }; + } + + @TestFactory + List golden() throws Exception { + double[][] rows = input(); + List tests = new ArrayList<>(); + for (Spec s : SPECS) { + tests.add(dynamicTest(s.canonical(), () -> { + Object ind = construct(s); + Method upd = updateMethod(ind); + double[][] exp = fixture(s.canonical()); + assertTrue(exp.length == rows.length, s.canonical() + ": row count " + exp.length + " vs " + rows.length); + for (int i = 0; i < rows.length; i++) { + double[] got = row(s, ind, upd, rows[i], i); + double[] want = exp[i]; + assertTrue(got.length == want.length, + s.canonical() + " row " + i + ": arity " + got.length + " vs " + want.length); + for (int k = 0; k < want.length; k++) { + double w = want[k], g = got[k]; + if (Double.isNaN(w)) { + assertTrue(Double.isNaN(g), s.canonical() + " row " + i + " col " + k + ": want NaN got " + g); + } else if (Double.isInfinite(w)) { + assertTrue(Double.isInfinite(g) && Math.signum(g) == Math.signum(w), + s.canonical() + " row " + i + " col " + k + ": want " + w + " got " + g); + } else { + double tol = TOL * Math.max(1.0, Math.abs(w)); + assertTrue(Math.abs(g - w) <= tol, + s.canonical() + " row " + i + " col " + k + ": got " + g + " want " + w); + } + } + } + })); + } + return tests; + } +} diff --git a/bindings/java/src/test/java/org/wickra/GoldenTests.java b/bindings/java/src/test/java/org/wickra/GoldenTests.java index def1d374..75389e8b 100644 --- a/bindings/java/src/test/java/org/wickra/GoldenTests.java +++ b/bindings/java/src/test/java/org/wickra/GoldenTests.java @@ -157,4 +157,51 @@ class GoldenTests { } } } + + // The four de-duplicated indicators, pinned against the Rust reference. + + @Test + void adOscillatorMatchesGolden() throws Exception { + double[][] in = input(); + List e = readCsv("ad_oscillator"); + try (AdOscillator ad = new AdOscillator()) { + for (int i = 0; i < in.length; i++) { + close(ad.update(in[i][0], in[i][1], in[i][2], in[i][3], in[i][4], i), cell(e.get(i)[0]), i, "ad_oscillator"); + } + } + } + + @Test + void intradayIntensityMatchesGolden() throws Exception { + double[][] in = input(); + List e = readCsv("intraday_intensity"); + try (IntradayIntensity ii = new IntradayIntensity()) { + for (int i = 0; i < in.length; i++) { + close(ii.update(in[i][0], in[i][1], in[i][2], in[i][3], in[i][4], i), cell(e.get(i)[0]), i, "intraday_intensity"); + } + } + } + + @Test + void awesomeOscillatorHistogramMatchesGolden() throws Exception { + double[][] in = input(); + List e = readCsv("awesome_oscillator_histogram"); + try (AwesomeOscillatorHistogram aoh = new AwesomeOscillatorHistogram(5, 34, 1)) { + for (int i = 0; i < in.length; i++) { + close(aoh.update(in[i][0], in[i][1], in[i][2], in[i][3], in[i][4], i), cell(e.get(i)[0]), i, "awesome_oscillator_histogram"); + } + } + } + + @Test + void averageDrawdownMatchesGolden() throws Exception { + double[][] in = input(); + List e = readCsv("average_drawdown"); + try (AverageDrawdown avg = new AverageDrawdown(20)) { + for (int i = 0; i < in.length; i++) { + // generator fed the close column as the equity-curve sample. + close(avg.update(in[i][3]), cell(e.get(i)[0]), i, "average_drawdown"); + } + } + } } diff --git a/bindings/node/__tests__/_gen_node_manifest.py b/bindings/node/__tests__/_gen_node_manifest.py new file mode 100644 index 00000000..76753a0b --- /dev/null +++ b/bindings/node/__tests__/_gen_node_manifest.py @@ -0,0 +1,122 @@ +"""Build node_manifest.json: for every one of the 514 indicators, record the +native class name, constructor parameter values, the ordered update argument +names (parsed from index.d.ts, each flagged scalar/array) and how to read its +output against the shared g_.csv fixtures. Run from repo root.""" +import json +import os +import re + +ROOT = os.path.normpath(os.path.join(os.path.dirname(__file__), "..", "..", "..")) +DTS = os.path.join(ROOT, "bindings", "node", "index.d.ts") +GOLDEN = os.path.join(ROOT, "testdata", "golden") + + +def camel(snake): + head, *rest = snake.split("_") + return head + "".join(p[:1].upper() + p[1:] for p in rest) + + +def parse_args(sig): + out = [] + for p in sig.split(","): + p = p.strip() + if not p: + continue + name = p.split(":")[0].strip().rstrip("?") + typ = p.split(":", 1)[1].strip() if ":" in p else "" + out.append({"name": name, "array": "Array" in typ}) + return out + + +dts = open(DTS, encoding="utf-8").read() +node_upd = {} +for name, body in re.findall(r"export declare class (\w+) \{(.*?)\n\}", dts, re.S): + um = re.search(r"\bupdate\(([^)]*)\)", body) + node_upd[name] = parse_args(um.group(1)) if um else [] + +# constructor params: reuse the values pinned in the Python-side manifests. +params = {} +for fn in ("scalar_manifest", "multi_manifest"): + for e in json.load(open(os.path.join(GOLDEN, fn + ".json"))): + params[e["native"]] = e["params"] +for fam in json.load(open(os.path.join(GOLDEN, "exotic_manifest.json"))).values(): + for e in fam: + params[e["native"]] = e["params"] +for e in json.load(open(os.path.join(GOLDEN, "profile_manifest.json"))): + params[e["native"]] = e["params"] +for e in json.load(open(os.path.join(GOLDEN, "bars_manifest.json"))): + params[e["native"]] = e["params"] + +# the 11 hand-written archetypes (separate, non-g_ fixtures) keep their own test; +# everything else is g_.csv. Output shape per native: +multi_specs = {e["native"]: e for e in json.load(open(os.path.join(GOLDEN, "multi_manifest.json")))} +deriv_multi = {e["native"]: e for e in json.load(open(os.path.join(GOLDEN, "exotic_manifest.json")))["deriv"] if "n" in e} +profile_specs = {e["native"]: e for e in json.load(open(os.path.join(GOLDEN, "profile_manifest.json")))} +bars_specs = {e["native"]: e for e in json.load(open(os.path.join(GOLDEN, "bars_manifest.json")))} + +# bar output field order (camelCase), mirroring gen_golden's per-bar tuple. +BAR_FIELDS = { + "RenkoBars": ["open", "close", "direction"], + "KagiBars": ["start", "end", "direction"], + "PointAndFigureBars": ["direction", "high", "low"], + "RangeBars": ["open", "close", "direction"], + "ThreeLineBreakBars": ["open", "close", "direction"], + "ImbalanceBars": ["open", "high", "low", "close", "imbalance", "direction"], + "RunBars": ["open", "high", "low", "close", "length", "direction"], + "DollarBars": ["open", "high", "low", "close", "volume", "dollar"], + "TickBars": ["open", "high", "low", "close", "volume"], + "VolumeBars": ["open", "high", "low", "close", "volume"], + "Footprint": ["price", "bidVol", "askVol"], +} + + +def header_fields(canon): + with open(os.path.join(GOLDEN, "g_" + canon + ".csv"), encoding="utf-8") as f: + return f.readline().strip().split(",") + + +# canonical -> native, gathered from every Python-side manifest. The g_ fixture +# is named by canonical (the Rust struct); the Node class is the native alias. +canon_native = {} +for fn in ("scalar_manifest", "multi_manifest"): + for e in json.load(open(os.path.join(GOLDEN, fn + ".json"))): + canon_native[e["canonical"]] = e["native"] +for fam in json.load(open(os.path.join(GOLDEN, "exotic_manifest.json"))).values(): + for e in fam: + canon_native[e["canonical"]] = e["native"] +for e in json.load(open(os.path.join(GOLDEN, "profile_manifest.json"))): + canon_native[e["canonical"]] = e["native"] +for e in json.load(open(os.path.join(GOLDEN, "bars_manifest.json"))): + canon_native[e["canonical"]] = e["native"] + +out = [] +for canon in sorted(canon_native): + native = canon_native[canon] + if native not in node_upd: + raise SystemExit(f"node class for {canon} (native {native}) not found in index.d.ts") + ctor = params.get(native, []) + # EaseOfMovement's volume divisor is an optional Rust constructor argument + # (default 1e8) but a required Node constructor parameter; pass it explicitly. + if native == "EaseOfMovement": + ctor = [ctor[0], 100000000.0] + entry = {"canonical": canon, "native": native, "ctor": ctor, "args": node_upd[native]} + if native in bars_specs: + entry["out"] = "footprint" if native == "Footprint" else "bars" + entry["fields"] = BAR_FIELDS[native] + elif native in profile_specs: + ps = profile_specs[native] + entry["out"] = "profile_" + ps["kind"] + entry["width"] = ps["width"] + if ps["kind"] == "pricebins": + entry["arrayField"] = "counts" if native == "TpoProfile" else "bins" + elif native in deriv_multi or native in multi_specs: + entry["out"] = "multi" + entry["fields"] = [camel(c) for c in header_fields(canon)] + else: + entry["out"] = "scalar" + out.append(entry) + +json.dump(out, open(os.path.join(GOLDEN, "node_manifest.json"), "w"), indent=1) +print("node_manifest entries:", len(out)) +from collections import Counter +print(Counter(e["out"] for e in out)) diff --git a/bindings/node/__tests__/golden.test.js b/bindings/node/__tests__/golden.test.js new file mode 100644 index 00000000..2f50b76f --- /dev/null +++ b/bindings/node/__tests__/golden.test.js @@ -0,0 +1,195 @@ +// Generic golden-fixture parity for the Node binding. +// +// Every one of the 514 indicators is reconstructed from `node_manifest.json` +// (native class, constructor params, ordered update args), fed the synthetic +// stream derived from the shared `testdata/golden/input.csv` — the exact same +// construction the Rust `gen_golden` binary uses — and checked bit-for-bit +// against the Rust-generated `g_.csv`. This pins the Node FFI to the +// Rust reference for the whole indicator catalogue, not just a few archetypes. +// +// cd bindings/node && npm run build && npm test + +const test = require('node:test'); +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const path = require('node:path'); +const wickra = require('..'); + +const GOLDEN = path.resolve(__dirname, '..', '..', '..', 'testdata', 'golden'); + +function cell(s) { + if (s === 'nan') return NaN; + if (s === 'inf') return Infinity; + if (s === '-inf') return -Infinity; + return Number(s); +} + +function readCsv(name) { + // Split on \r?\n so a CRLF checkout (Windows core.autocrlf) parses identically + // to LF — otherwise `cell('inf\r')` falls through to Number() and becomes NaN. + const lines = fs.readFileSync(path.join(GOLDEN, name + '.csv'), 'utf8').split(/\r?\n/); + lines.shift(); // header + return lines.filter((l) => l.length > 0).map((l) => l.split(',').map(cell)); +} + +// Bars keep blank lines (one row per candle, blank == no bar closed). +function readBarRows(name) { + const lines = fs.readFileSync(path.join(GOLDEN, name + '.csv'), 'utf8').split(/\r?\n/); + lines.shift(); + // Drop only the single trailing-newline artifact, keeping legitimate blank + // rows (a candle on which no bar closed) so rows stay aligned to the input. + if (lines.length && lines[lines.length - 1] === '') lines.pop(); + return lines.map((l) => (l.length === 0 ? [] : l.split(',').map(cell))); +} + +const MANIFEST = JSON.parse(fs.readFileSync(path.join(GOLDEN, 'node_manifest.json'), 'utf8')); +const ROWS = readCsv('input'); + +function derivFields(o, h, l, c, v) { + return { + fundingRate: ((c - o) / c) * 0.01, + markPrice: c, + indexPrice: c - 0.5, + futuresPrice: c + 1.0, + openInterest: v * 10.0, + longSize: v * 0.6, + shortSize: v * 0.4, + takerBuyVolume: v * 0.55, + takerSellVolume: v * 0.45, + longLiquidation: h - c, + shortLiquidation: c - l, + }; +} + +function resolveArg(arg, o, h, l, c, v, i) { + const name = arg.name; + if (arg.array) { + switch (name) { + case 'change': + return [0, 1, 2, 3, 4].map((j) => c - o + j); + case 'volume': + return [0, 1, 2, 3, 4].map((j) => v + j * 10.0); + case 'newHigh': + return [0, 1, 2, 3, 4].map((j) => j % 2 === 0); + case 'newLow': + return [0, 1, 2, 3, 4].map((j) => j % 3 === 0); + case 'aboveMa': + return [0, 1, 2, 3, 4].map((j) => j % 2 === 0); + case 'onBuySignal': + return [0, 1, 2, 3, 4].map((j) => j % 3 === 0); + case 'bidPx': + return [0, 1, 2, 3, 4].map((k) => c - 0.1 * (k + 1)); + case 'bidSz': + return [0, 1, 2, 3, 4].map((k) => v / (k + 1)); + case 'askPx': + return [0, 1, 2, 3, 4].map((k) => c + 0.1 * (k + 1)); + case 'askSz': + return [0, 1, 2, 3, 4].map((k) => (v * 0.9) / (k + 1)); + default: + throw new Error('unknown array arg ' + name); + } + } + switch (name) { + case 'value': + case 'close': + case 'price': + case 'x': + case 'a': + case 'asset': + return c; + case 'y': + case 'b': + case 'benchmark': + case 'open': + return o; + case 'high': + return h; + case 'low': + return l; + case 'volume': + case 'size': + return v; + case 'timestamp': + return i; + case 'isBuy': + return c >= o; + case 'mid': + return (h + l) / 2.0; + default: { + const d = derivFields(o, h, l, c, v); + if (name in d) return d[name]; + throw new Error('unknown scalar arg ' + name); + } + } +} + +function closeEq(got, want, label) { + if (Number.isNaN(want)) { + assert.ok(Number.isNaN(got), `${label}: want NaN got ${got}`); + return; + } + if (!Number.isFinite(want)) { + assert.ok(got === want, `${label}: want ${want} got ${got}`); + return; + } + const tol = 1e-6 * Math.max(1.0, Math.abs(want)); + assert.ok(Math.abs(got - want) <= tol, `${label}: got ${got} want ${want}`); +} + +for (const spec of MANIFEST) { + test(`golden: ${spec.canonical}`, () => { + const Cls = wickra[spec.native]; + assert.ok(Cls, `missing Node class ${spec.native}`); + const ind = new Cls(...spec.ctor); + const isBars = spec.out === 'bars' || spec.out === 'footprint'; + const expected = isBars ? readBarRows('g_' + spec.canonical) : readCsv('g_' + spec.canonical); + + for (let i = 0; i < ROWS.length; i++) { + const [o, h, l, c, v] = ROWS[i]; + const args = spec.args.map((a) => resolveArg(a, o, h, l, c, v, i)); + const got = ind.update(...args); + const want = expected[i]; + const label = `${spec.canonical} row ${i}`; + + if (spec.out === 'scalar') { + closeEq(got === null || got === undefined ? NaN : got, want[0], label); + } else if (spec.out === 'multi') { + if (got === null || got === undefined) { + assert.ok(want.every(Number.isNaN), `${label}: want ${want} got null`); + continue; + } + // napi serialises the output struct's fields in declaration order, which + // matches the CSV column order — compare positionally to avoid relying on + // the exact camelCase of each field name. + const vals = Object.values(got); + assert.equal(vals.length, want.length, `${label}: arity ${vals.length} vs ${want.length}`); + vals.forEach((gv, k) => { + closeEq(gv === null || gv === undefined ? NaN : gv, want[k], `${label} col ${k}`); + }); + } else if (spec.out === 'profile_bins') { + if (got === null || got === undefined) { + assert.ok(want.every(Number.isNaN), `${label}: want all-NaN got null`); + continue; + } + assert.equal(got.length, want.length, `${label}: width ${got.length} vs ${want.length}`); + got.forEach((gv, k) => closeEq(gv, want[k], `${label} bin ${k}`)); + } else if (spec.out === 'profile_pricebins') { + if (got === null || got === undefined) { + assert.ok(want.every(Number.isNaN), `${label}: want all-NaN got null`); + continue; + } + const flat = [got.priceLow, got.priceHigh, ...got[spec.arrayField]]; + assert.equal(flat.length, want.length, `${label}: width ${flat.length} vs ${want.length}`); + flat.forEach((gv, k) => closeEq(gv, want[k], `${label} col ${k}`)); + } else { + // bars / footprint: flatten array-of-objects in declared field order. + const flat = []; + for (const bar of got) { + for (const f of spec.fields) flat.push(Number(bar[f])); + } + assert.equal(flat.length, want.length, `${label}: arity ${flat.length} vs ${want.length}`); + flat.forEach((gv, k) => closeEq(gv, want[k], `${label} col ${k}`)); + } + } + }); +} diff --git a/bindings/python/tests/test_golden_bars.py b/bindings/python/tests/test_golden_bars.py new file mode 100644 index 00000000..5e949394 --- /dev/null +++ b/bindings/python/tests/test_golden_bars.py @@ -0,0 +1,70 @@ +"""Generic golden replay for the alt-chart bar builders and the footprint. + +Each builder turns one candle into 0..n completed bars, so the fixture stores +one CSV line per input candle holding every bar flattened (an empty line means +no bar closed on that candle). Close-driven builders (Renko, Kagi, P&F, Range, +Three-Line-Break) receive a flat candle, mirroring the binding's `update(close)`. +Values are checked bit-for-bit against the Rust-generated `g_.csv`. +""" +import json +import math +import os + +import pytest +import wickra as ta + +HERE = os.path.dirname(__file__) +GOLDEN = os.path.normpath(os.path.join(HERE, "..", "..", "..", "testdata", "golden")) + + +def _cell(s): + return math.nan if s == "nan" else float(s) + + +def _bar_rows(name): + # Keep blank lines: one row per input candle, blank == no bar closed. + with open(os.path.join(GOLDEN, name + ".csv")) as f: + lines = f.read().splitlines()[1:] + return [[] if not ln.strip() else [_cell(x) for x in ln.split(",")] for ln in lines] + + +def _input(): + with open(os.path.join(GOLDEN, "input.csv")) as f: + return [[float(x) for x in line.split(",")] for line in f.read().splitlines()[1:] if line.strip()] + + +with open(os.path.join(GOLDEN, "bars_manifest.json")) as _mf: + MANIFEST = json.load(_mf) +ROWS = _input() + + +def _flatten(bars): + out = [] + for bar in bars: + out.extend(float(x) for x in bar) + return out + + +@pytest.mark.parametrize("spec", MANIFEST, ids=[m["canonical"] for m in MANIFEST]) +def test_bars_match_golden(spec): + ind = getattr(ta, spec["native"])(*spec["params"]) + expected = _bar_rows("g_" + spec["canonical"]) + feed = spec["feed"] + assert len(expected) == len(ROWS), f"{spec['canonical']}: {len(expected)} rows vs {len(ROWS)} inputs" + for i, (o, h, l, c, v) in enumerate(ROWS): + if feed == "close": + produced = ind.update(c) + elif feed == "candle4": + produced = ind.update(o, h, l, c) + elif feed == "candle5": + produced = ind.update(o, h, l, c, v) + else: # trade footprint + produced = ind.update(c, v, c >= o) + got = _flatten(produced) + want = expected[i] + assert len(got) == len(want), f"{spec['canonical']} row {i}: arity {len(got)} vs {len(want)}" + for gv, w in zip(got, want): + if math.isnan(w): + assert math.isnan(gv), f"{spec['canonical']} row {i}: want NaN got {gv}" + else: + assert abs(gv - w) <= 1e-6 * max(1.0, abs(w)), f"{spec['canonical']} row {i}: got {gv} want {w}" diff --git a/bindings/python/tests/test_golden_exotic.py b/bindings/python/tests/test_golden_exotic.py new file mode 100644 index 00000000..fe16645d --- /dev/null +++ b/bindings/python/tests/test_golden_exotic.py @@ -0,0 +1,128 @@ +"""Generic golden replay for the exotic-input families: DerivativesTick, +CrossSection, Trade, TradeQuote and OrderBook indicators. + +Each family feeds a synthetic stream deterministically derived from the shared +`testdata/golden/input.csv` OHLCV rows — the exact same construction the Rust +`gen_golden` binary uses — and every value is checked bit-for-bit against the +Rust-generated `g_.csv`. This pins the Python FFI for indicators +whose inputs cannot be expressed as a plain close/candle/pair stream. +""" +import json +import math +import os + +import pytest +import wickra as ta + +HERE = os.path.dirname(__file__) +GOLDEN = os.path.normpath(os.path.join(HERE, "..", "..", "..", "testdata", "golden")) + + +def _cell(s): + return math.nan if s == "nan" else float(s) + + +def _rows(name): + with open(os.path.join(GOLDEN, name + ".csv")) as f: + return [[_cell(x) for x in line.split(",")] for line in f.read().splitlines()[1:] if line.strip()] + + +def _input(): + with open(os.path.join(GOLDEN, "input.csv")) as f: + return [[float(x) for x in line.split(",")] for line in f.read().splitlines()[1:] if line.strip()] + + +with open(os.path.join(GOLDEN, "exotic_manifest.json")) as _mf: + MANIFEST = json.load(_mf) +ROWS = _input() + + +def _deriv_fields(o, h, l, c, v): + return { + "funding_rate": (c - o) / c * 0.01, + "mark_price": c, + "index_price": c - 0.5, + "futures_price": c + 1.0, + "open_interest": v * 10.0, + "long_size": v * 0.6, + "short_size": v * 0.4, + "taker_buy_volume": v * 0.55, + "taker_sell_volume": v * 0.45, + "long_liquidation": h - c, + "short_liquidation": c - l, + } + + +def _cross_lists(o, h, l, c, v): + change = [(c - o) + j for j in range(5)] + volume = [v + j * 10.0 for j in range(5)] + new_high = [j % 2 == 0 for j in range(5)] + new_low = [j % 3 == 0 for j in range(5)] + above_ma = [j % 2 == 0 for j in range(5)] + on_buy_signal = [j % 3 == 0 for j in range(5)] + return change, volume, new_high, new_low, above_ma, on_buy_signal + + +def _ob_lists(o, h, l, c, v): + bid_px = [c - 0.1 * (k + 1) for k in range(5)] + bid_sz = [v / (k + 1) for k in range(5)] + ask_px = [c + 0.1 * (k + 1) for k in range(5)] + ask_sz = [v * 0.9 / (k + 1) for k in range(5)] + return bid_px, bid_sz, ask_px, ask_sz + + +def _assert_scalar(got, want, canonical, i): + got = math.nan if got is None else got + if math.isnan(want): + assert math.isnan(got), f"{canonical} row {i}: want NaN got {got}" + elif math.isinf(want): + assert math.isinf(got) and (got > 0) == (want > 0), f"{canonical} row {i}: got {got} want {want}" + else: + assert abs(got - want) <= 1e-6 * max(1.0, abs(want)), f"{canonical} row {i}: got {got} want {want}" + + +def _specs(family): + return [(family, s) for s in MANIFEST[family]] + + +@pytest.mark.parametrize( + "family,spec", + _specs("deriv") + _specs("cross") + _specs("trade") + _specs("trademid") + _specs("ob"), + ids=[s["canonical"] for fam in ("deriv", "cross", "trade", "trademid", "ob") for s in MANIFEST[fam]], +) +def test_exotic_matches_golden(family, spec): + ind = getattr(ta, spec["native"])(*spec["params"]) + expected = _rows("g_" + spec["canonical"]) + n = spec.get("n") + for i, (o, h, l, c, v) in enumerate(ROWS): + if family == "deriv": + f = _deriv_fields(o, h, l, c, v) + got = ind.update(*[f[a] for a in spec["args"]]) + elif family == "cross": + change, volume, nh, nl, above_ma, on_buy = _cross_lists(o, h, l, c, v) + extra = spec.get("extra") + if extra == "above_ma": + got = ind.update(change, volume, nh, nl, above_ma) + elif extra == "on_buy_signal": + got = ind.update(change, volume, nh, nl, on_buy) + else: + got = ind.update(change, volume, nh, nl) + elif family == "trade": + got = ind.update(c, v, c >= o) + elif family == "trademid": + got = ind.update(c, v, c >= o, (h + l) / 2.0) + else: # ob + bid_px, bid_sz, ask_px, ask_sz = _ob_lists(o, h, l, c, v) + got = ind.update(bid_px, bid_sz, ask_px, ask_sz) + + want = expected[i] + if n: # multi-output (LiquidationFeatures) + if got is None: + assert all(math.isnan(w) for w in want), f"{spec['canonical']} row {i}: want {want} got None" + continue + vals = list(got) + assert len(vals) == len(want), f"{spec['canonical']} row {i}: arity {len(vals)} vs {len(want)}" + for gv, w in zip(vals, want): + _assert_scalar(gv, w, spec["canonical"], i) + else: + _assert_scalar(got, want[0], spec["canonical"], i) diff --git a/bindings/python/tests/test_golden_multi.py b/bindings/python/tests/test_golden_multi.py new file mode 100644 index 00000000..7a624b6d --- /dev/null +++ b/bindings/python/tests/test_golden_multi.py @@ -0,0 +1,60 @@ +"""Generic golden replay for multi-output indicators: each entry in +multi_manifest.json is reconstructed by its native name and every output field +is checked against the Rust-generated g_.csv (one column per field). +""" +import json +import math +import os + +import pytest +import wickra as ta + +HERE = os.path.dirname(__file__) +GOLDEN = os.path.normpath(os.path.join(HERE, "..", "..", "..", "testdata", "golden")) + + +def _cell(s): + return math.nan if s == "nan" else float(s) + + +def _rows(name): + with open(os.path.join(GOLDEN, name + ".csv")) as f: + return [[_cell(x) for x in line.split(",")] for line in f.read().splitlines()[1:] if line.strip()] + + +def _input(): + with open(os.path.join(GOLDEN, "input.csv")) as f: + return [[float(x) for x in line.split(",")] for line in f.read().splitlines()[1:] if line.strip()] + + +with open(os.path.join(GOLDEN, "multi_manifest.json")) as _mf: + MANIFEST = json.load(_mf) +ROWS = _input() + + +@pytest.mark.parametrize("spec", MANIFEST, ids=[m["canonical"] for m in MANIFEST]) +def test_multi_matches_golden(spec): + ind = getattr(ta, spec["native"])(*spec["params"]) + expected = _rows("g_" + spec["canonical"]) + inp = spec["input"] + for i, (o, h, l, c, v) in enumerate(ROWS): + if inp == "f64": + got = ind.update(c) + elif inp == "Candle": + got = ind.update((o, h, l, c, v, i)) + else: + got = ind.update(c, o) + want = expected[i] + if got is None: + assert all(math.isnan(w) for w in want), f"{spec['canonical']} row {i}: want {want} got None" + continue + vals = list(got) + assert len(vals) == len(want), f"{spec['canonical']} row {i}: arity {len(vals)} vs {len(want)}" + for gv, w in zip(vals, want): + gv = math.nan if gv is None else gv + if math.isnan(w): + assert math.isnan(gv), f"{spec['canonical']} row {i}: want NaN got {gv}" + elif math.isinf(w): + assert math.isinf(gv) and (gv > 0) == (w > 0) + else: + assert abs(gv - w) <= 1e-6 * max(1.0, abs(w)), f"{spec['canonical']} row {i}: got {gv} want {w}" diff --git a/bindings/python/tests/test_golden_profile.py b/bindings/python/tests/test_golden_profile.py new file mode 100644 index 00000000..908a92d6 --- /dev/null +++ b/bindings/python/tests/test_golden_profile.py @@ -0,0 +1,61 @@ +"""Generic golden replay for the profile family: time/volume seasonality +histograms (`bins`) and price-binned market profiles (`price_low, price_high, +bins`). Each profile emits a fixed-width row once warm and `NaN`s during warmup. + +The shared `testdata/golden/input.csv` candle series is replayed through the +Python FFI and the flattened histogram is checked bit-for-bit against the +Rust-generated `g_.csv`. +""" +import json +import math +import os + +import pytest +import wickra as ta + +HERE = os.path.dirname(__file__) +GOLDEN = os.path.normpath(os.path.join(HERE, "..", "..", "..", "testdata", "golden")) + + +def _cell(s): + return math.nan if s == "nan" else float(s) + + +def _rows(name): + with open(os.path.join(GOLDEN, name + ".csv")) as f: + return [[_cell(x) for x in line.split(",")] for line in f.read().splitlines()[1:] if line.strip()] + + +def _input(): + with open(os.path.join(GOLDEN, "input.csv")) as f: + return [[float(x) for x in line.split(",")] for line in f.read().splitlines()[1:] if line.strip()] + + +with open(os.path.join(GOLDEN, "profile_manifest.json")) as _mf: + MANIFEST = json.load(_mf) +ROWS = _input() + + +@pytest.mark.parametrize("spec", MANIFEST, ids=[m["canonical"] for m in MANIFEST]) +def test_profile_matches_golden(spec): + ind = getattr(ta, spec["native"])(*spec["params"]) + expected = _rows("g_" + spec["canonical"]) + width = spec["width"] + for i, (o, h, l, c, v) in enumerate(ROWS): + got = ind.update((o, h, l, c, v, i)) + want = expected[i] + assert len(want) == width, f"{spec['canonical']} row {i}: fixture width {len(want)} != {width}" + if got is None: + assert all(math.isnan(w) for w in want), f"{spec['canonical']} row {i}: want {want} got None" + continue + if spec["kind"] == "pricebins": + price_low, price_high, bins = got + vals = [price_low, price_high, *list(bins)] + else: + vals = list(got) + assert len(vals) == width, f"{spec['canonical']} row {i}: arity {len(vals)} != {width}" + for gv, w in zip(vals, want): + if math.isnan(w): + assert math.isnan(gv), f"{spec['canonical']} row {i}: want NaN got {gv}" + else: + assert abs(gv - w) <= 1e-6 * max(1.0, abs(w)), f"{spec['canonical']} row {i}: got {gv} want {w}" diff --git a/bindings/python/tests/test_golden_scalar.py b/bindings/python/tests/test_golden_scalar.py new file mode 100644 index 00000000..ade8a151 --- /dev/null +++ b/bindings/python/tests/test_golden_scalar.py @@ -0,0 +1,67 @@ +"""Generic golden replay: every scalar indicator in scalar_manifest.json is +constructed by its native name with the recorded params, fed the shared golden +input, and checked bit-for-bit against the Rust-generated g_.csv. + +This ties the Python binding to the Rust reference for the whole scalar-output +tranche (not just the seven archetype representatives). Fixtures + manifest are +produced by `cargo run -p wickra-examples --bin gen_golden`. +""" +import json +import math +import os + +import numpy as np +import pytest +import wickra as ta + +HERE = os.path.dirname(__file__) +GOLDEN = os.path.normpath(os.path.join(HERE, "..", "..", "..", "testdata", "golden")) + + +def _cell(s): + return math.nan if s == "nan" else float(s) + + +def _load(name): + with open(os.path.join(GOLDEN, name + ".csv")) as f: + return [_cell(line.strip()) for line in f.read().splitlines()[1:] if line.strip()] + + +def _input(): + rows = [] + with open(os.path.join(GOLDEN, "input.csv")) as f: + for line in f.read().splitlines()[1:]: + if line.strip(): + rows.append([float(x) for x in line.split(",")]) + return rows + + +with open(os.path.join(GOLDEN, "scalar_manifest.json")) as _mf: + MANIFEST = json.load(_mf) +ROWS = _input() + + +@pytest.mark.parametrize("spec", MANIFEST, ids=[m["canonical"] for m in MANIFEST]) +def test_scalar_matches_golden(spec): + cls = getattr(ta, spec["native"]) + ind = cls(*spec["params"]) + expected = _load("g_" + spec["canonical"]) + inp = spec["input"] + for i, (o, h, l, c, v) in enumerate(ROWS): + if inp == "f64": + got = ind.update(c) + elif inp == "Candle": + got = ind.update((o, h, l, c, v, i)) + else: # pairwise (f64, f64): generator fed (close, open) + got = ind.update(c, o) + want = expected[i] + got = math.nan if got is None else got + if math.isnan(want): + assert math.isnan(got), f"{spec['canonical']} row {i}: want NaN got {got}" + elif math.isinf(want): + assert math.isinf(got) and (got > 0) == (want > 0), ( + f"{spec['canonical']} row {i}: got {got} want {want}" + ) + else: + tol = 1e-6 * max(1.0, abs(want)) + assert abs(got - want) <= tol, f"{spec['canonical']} row {i}: got {got} want {want}" diff --git a/bindings/r/gen_golden_test.py b/bindings/r/gen_golden_test.py new file mode 100644 index 00000000..9d812d80 --- /dev/null +++ b/bindings/r/gen_golden_test.py @@ -0,0 +1,27 @@ +"""Generate tests/testthat/golden_specs.R: the per-indicator spec list (canonical +name, archetype, ctor params, output width) consumed by test-golden-all.R, which +replays all 514 indicators against the Rust reference fixtures g_.csv. + +Run from repo root: python bindings/r/gen_golden_test.py +""" +import json +import os + +ROOT = os.path.normpath(os.path.join(os.path.dirname(__file__), "..", "..")) +MAN = json.load(open(os.path.join(ROOT, "testdata", "golden", "golden_manifest.json"))) + +lines = [ + "# Code generated by gen_golden_test.py. DO NOT EDIT.", + "# Per-indicator golden spec: canonical name, archetype, ctor params, output width.", + "GOLDEN_SPECS <- list(", +] +for e in MAN: + n = e.get("n", e.get("width", 0)) + params = ",".join(repr(float(p)) for p in e["params"]) + lines.append(f' list(canon="{e["canonical"]}", arch="{e["arch"]}", params=c({params}), width={n}L),') +lines[-1] = lines[-1].rstrip(",") +lines.append(")") + +dest = os.path.join(ROOT, "bindings", "r", "tests", "testthat", "golden_specs.R") +open(dest, "w", encoding="utf-8").write("\n".join(lines) + "\n") +print("wrote golden_specs.R with", len(MAN), "specs") diff --git a/bindings/r/src/wickra.c b/bindings/r/src/wickra.c index 10033e84..ed642263 100644 --- a/bindings/r/src/wickra.c +++ b/bindings/r/src/wickra.c @@ -7,6 +7,21 @@ #include #include "wickra.h" +/* Convert an R numeric vector of flags (non-zero == TRUE) into a C `bool*` + * buffer (one byte per element). The cross-section indicators take their state + * flags as `const bool*`; casting `wk_bool_vec(x)` would reinterpret the + * 8-byte doubles as 1-byte bools and read every flag as false. The buffer is + * allocated with R_alloc, so it lives until the enclosing .Call returns. */ +static bool *wk_bool_vec(SEXP x) { + R_xlen_t n = Rf_xlength(x); + bool *out = (bool *)R_alloc(n, sizeof(bool)); + double *src = REAL(x); + for (R_xlen_t i = 0; i < n; i++) { + out[i] = src[i] != 0.0; + } + return out; +} + static void abandoned_baby_fin(SEXP e) { struct AbandonedBaby *h = (struct AbandonedBaby *)R_ExternalPtrAddr(e); if (h) wickra_abandoned_baby_free(h); @@ -104,7 +119,7 @@ SEXP wk_absolute_breadth_index_new(void) { } SEXP wk_absolute_breadth_index_update(SEXP e, SEXP a0, SEXP a1, SEXP a2, SEXP a3, SEXP a4, SEXP a5, SEXP a6) { struct AbsoluteBreadthIndex *h = (struct AbsoluteBreadthIndex *)R_ExternalPtrAddr(e); - return Rf_ScalarReal(wickra_absolute_breadth_index_update(h, (double *)REAL(a0), (double *)REAL(a1), (bool *)REAL(a2), (bool *)REAL(a3), (bool *)REAL(a4), (bool *)REAL(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); + return Rf_ScalarReal(wickra_absolute_breadth_index_update(h, (double *)REAL(a0), (double *)REAL(a1), wk_bool_vec(a2), wk_bool_vec(a3), wk_bool_vec(a4), wk_bool_vec(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); } SEXP wk_absolute_breadth_index_warmup_period(SEXP e) { struct AbsoluteBreadthIndex *h = (struct AbsoluteBreadthIndex *)R_ExternalPtrAddr(e); @@ -260,7 +275,7 @@ SEXP wk_ad_volume_line_new(void) { } SEXP wk_ad_volume_line_update(SEXP e, SEXP a0, SEXP a1, SEXP a2, SEXP a3, SEXP a4, SEXP a5, SEXP a6) { struct AdVolumeLine *h = (struct AdVolumeLine *)R_ExternalPtrAddr(e); - return Rf_ScalarReal(wickra_ad_volume_line_update(h, (double *)REAL(a0), (double *)REAL(a1), (bool *)REAL(a2), (bool *)REAL(a3), (bool *)REAL(a4), (bool *)REAL(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); + return Rf_ScalarReal(wickra_ad_volume_line_update(h, (double *)REAL(a0), (double *)REAL(a1), wk_bool_vec(a2), wk_bool_vec(a3), wk_bool_vec(a4), wk_bool_vec(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); } SEXP wk_ad_volume_line_warmup_period(SEXP e) { struct AdVolumeLine *h = (struct AdVolumeLine *)R_ExternalPtrAddr(e); @@ -531,7 +546,7 @@ SEXP wk_advance_decline_new(void) { } SEXP wk_advance_decline_update(SEXP e, SEXP a0, SEXP a1, SEXP a2, SEXP a3, SEXP a4, SEXP a5, SEXP a6) { struct AdvanceDecline *h = (struct AdvanceDecline *)R_ExternalPtrAddr(e); - return Rf_ScalarReal(wickra_advance_decline_update(h, (double *)REAL(a0), (double *)REAL(a1), (bool *)REAL(a2), (bool *)REAL(a3), (bool *)REAL(a4), (bool *)REAL(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); + return Rf_ScalarReal(wickra_advance_decline_update(h, (double *)REAL(a0), (double *)REAL(a1), wk_bool_vec(a2), wk_bool_vec(a3), wk_bool_vec(a4), wk_bool_vec(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); } SEXP wk_advance_decline_warmup_period(SEXP e) { struct AdvanceDecline *h = (struct AdvanceDecline *)R_ExternalPtrAddr(e); @@ -562,7 +577,7 @@ SEXP wk_advance_decline_ratio_new(void) { } SEXP wk_advance_decline_ratio_update(SEXP e, SEXP a0, SEXP a1, SEXP a2, SEXP a3, SEXP a4, SEXP a5, SEXP a6) { struct AdvanceDeclineRatio *h = (struct AdvanceDeclineRatio *)R_ExternalPtrAddr(e); - return Rf_ScalarReal(wickra_advance_decline_ratio_update(h, (double *)REAL(a0), (double *)REAL(a1), (bool *)REAL(a2), (bool *)REAL(a3), (bool *)REAL(a4), (bool *)REAL(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); + return Rf_ScalarReal(wickra_advance_decline_ratio_update(h, (double *)REAL(a0), (double *)REAL(a1), wk_bool_vec(a2), wk_bool_vec(a3), wk_bool_vec(a4), wk_bool_vec(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); } SEXP wk_advance_decline_ratio_warmup_period(SEXP e) { struct AdvanceDeclineRatio *h = (struct AdvanceDeclineRatio *)R_ExternalPtrAddr(e); @@ -2059,7 +2074,7 @@ SEXP wk_breadth_thrust_new(SEXP a0) { } SEXP wk_breadth_thrust_update(SEXP e, SEXP a0, SEXP a1, SEXP a2, SEXP a3, SEXP a4, SEXP a5, SEXP a6) { struct BreadthThrust *h = (struct BreadthThrust *)R_ExternalPtrAddr(e); - return Rf_ScalarReal(wickra_breadth_thrust_update(h, (double *)REAL(a0), (double *)REAL(a1), (bool *)REAL(a2), (bool *)REAL(a3), (bool *)REAL(a4), (bool *)REAL(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); + return Rf_ScalarReal(wickra_breadth_thrust_update(h, (double *)REAL(a0), (double *)REAL(a1), wk_bool_vec(a2), wk_bool_vec(a3), wk_bool_vec(a4), wk_bool_vec(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); } SEXP wk_breadth_thrust_warmup_period(SEXP e) { struct BreadthThrust *h = (struct BreadthThrust *)R_ExternalPtrAddr(e); @@ -2131,7 +2146,7 @@ SEXP wk_bullish_percent_index_new(void) { } SEXP wk_bullish_percent_index_update(SEXP e, SEXP a0, SEXP a1, SEXP a2, SEXP a3, SEXP a4, SEXP a5, SEXP a6) { struct BullishPercentIndex *h = (struct BullishPercentIndex *)R_ExternalPtrAddr(e); - return Rf_ScalarReal(wickra_bullish_percent_index_update(h, (double *)REAL(a0), (double *)REAL(a1), (bool *)REAL(a2), (bool *)REAL(a3), (bool *)REAL(a4), (bool *)REAL(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); + return Rf_ScalarReal(wickra_bullish_percent_index_update(h, (double *)REAL(a0), (double *)REAL(a1), wk_bool_vec(a2), wk_bool_vec(a3), wk_bool_vec(a4), wk_bool_vec(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); } SEXP wk_bullish_percent_index_warmup_period(SEXP e) { struct BullishPercentIndex *h = (struct BullishPercentIndex *)R_ExternalPtrAddr(e); @@ -3462,7 +3477,7 @@ SEXP wk_cumulative_volume_index_new(void) { } SEXP wk_cumulative_volume_index_update(SEXP e, SEXP a0, SEXP a1, SEXP a2, SEXP a3, SEXP a4, SEXP a5, SEXP a6) { struct CumulativeVolumeIndex *h = (struct CumulativeVolumeIndex *)R_ExternalPtrAddr(e); - return Rf_ScalarReal(wickra_cumulative_volume_index_update(h, (double *)REAL(a0), (double *)REAL(a1), (bool *)REAL(a2), (bool *)REAL(a3), (bool *)REAL(a4), (bool *)REAL(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); + return Rf_ScalarReal(wickra_cumulative_volume_index_update(h, (double *)REAL(a0), (double *)REAL(a1), wk_bool_vec(a2), wk_bool_vec(a3), wk_bool_vec(a4), wk_bool_vec(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); } SEXP wk_cumulative_volume_index_warmup_period(SEXP e) { struct CumulativeVolumeIndex *h = (struct CumulativeVolumeIndex *)R_ExternalPtrAddr(e); @@ -7104,7 +7119,7 @@ SEXP wk_high_low_index_new(SEXP a0) { } SEXP wk_high_low_index_update(SEXP e, SEXP a0, SEXP a1, SEXP a2, SEXP a3, SEXP a4, SEXP a5, SEXP a6) { struct HighLowIndex *h = (struct HighLowIndex *)R_ExternalPtrAddr(e); - return Rf_ScalarReal(wickra_high_low_index_update(h, (double *)REAL(a0), (double *)REAL(a1), (bool *)REAL(a2), (bool *)REAL(a3), (bool *)REAL(a4), (bool *)REAL(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); + return Rf_ScalarReal(wickra_high_low_index_update(h, (double *)REAL(a0), (double *)REAL(a1), wk_bool_vec(a2), wk_bool_vec(a3), wk_bool_vec(a4), wk_bool_vec(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); } SEXP wk_high_low_index_warmup_period(SEXP e) { struct HighLowIndex *h = (struct HighLowIndex *)R_ExternalPtrAddr(e); @@ -10118,7 +10133,7 @@ SEXP wk_mc_clellan_oscillator_new(void) { } SEXP wk_mc_clellan_oscillator_update(SEXP e, SEXP a0, SEXP a1, SEXP a2, SEXP a3, SEXP a4, SEXP a5, SEXP a6) { struct McClellanOscillator *h = (struct McClellanOscillator *)R_ExternalPtrAddr(e); - return Rf_ScalarReal(wickra_mc_clellan_oscillator_update(h, (double *)REAL(a0), (double *)REAL(a1), (bool *)REAL(a2), (bool *)REAL(a3), (bool *)REAL(a4), (bool *)REAL(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); + return Rf_ScalarReal(wickra_mc_clellan_oscillator_update(h, (double *)REAL(a0), (double *)REAL(a1), wk_bool_vec(a2), wk_bool_vec(a3), wk_bool_vec(a4), wk_bool_vec(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); } SEXP wk_mc_clellan_oscillator_warmup_period(SEXP e) { struct McClellanOscillator *h = (struct McClellanOscillator *)R_ExternalPtrAddr(e); @@ -10149,7 +10164,7 @@ SEXP wk_mc_clellan_summation_index_new(void) { } SEXP wk_mc_clellan_summation_index_update(SEXP e, SEXP a0, SEXP a1, SEXP a2, SEXP a3, SEXP a4, SEXP a5, SEXP a6) { struct McClellanSummationIndex *h = (struct McClellanSummationIndex *)R_ExternalPtrAddr(e); - return Rf_ScalarReal(wickra_mc_clellan_summation_index_update(h, (double *)REAL(a0), (double *)REAL(a1), (bool *)REAL(a2), (bool *)REAL(a3), (bool *)REAL(a4), (bool *)REAL(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); + return Rf_ScalarReal(wickra_mc_clellan_summation_index_update(h, (double *)REAL(a0), (double *)REAL(a1), wk_bool_vec(a2), wk_bool_vec(a3), wk_bool_vec(a4), wk_bool_vec(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); } SEXP wk_mc_clellan_summation_index_warmup_period(SEXP e) { struct McClellanSummationIndex *h = (struct McClellanSummationIndex *)R_ExternalPtrAddr(e); @@ -10914,7 +10929,7 @@ SEXP wk_new_highs_new_lows_new(void) { } SEXP wk_new_highs_new_lows_update(SEXP e, SEXP a0, SEXP a1, SEXP a2, SEXP a3, SEXP a4, SEXP a5, SEXP a6) { struct NewHighsNewLows *h = (struct NewHighsNewLows *)R_ExternalPtrAddr(e); - return Rf_ScalarReal(wickra_new_highs_new_lows_update(h, (double *)REAL(a0), (double *)REAL(a1), (bool *)REAL(a2), (bool *)REAL(a3), (bool *)REAL(a4), (bool *)REAL(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); + return Rf_ScalarReal(wickra_new_highs_new_lows_update(h, (double *)REAL(a0), (double *)REAL(a1), wk_bool_vec(a2), wk_bool_vec(a3), wk_bool_vec(a4), wk_bool_vec(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); } SEXP wk_new_highs_new_lows_warmup_period(SEXP e) { struct NewHighsNewLows *h = (struct NewHighsNewLows *)R_ExternalPtrAddr(e); @@ -11870,7 +11885,7 @@ SEXP wk_percent_above_ma_new(void) { } SEXP wk_percent_above_ma_update(SEXP e, SEXP a0, SEXP a1, SEXP a2, SEXP a3, SEXP a4, SEXP a5, SEXP a6) { struct PercentAboveMa *h = (struct PercentAboveMa *)R_ExternalPtrAddr(e); - return Rf_ScalarReal(wickra_percent_above_ma_update(h, (double *)REAL(a0), (double *)REAL(a1), (bool *)REAL(a2), (bool *)REAL(a3), (bool *)REAL(a4), (bool *)REAL(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); + return Rf_ScalarReal(wickra_percent_above_ma_update(h, (double *)REAL(a0), (double *)REAL(a1), wk_bool_vec(a2), wk_bool_vec(a3), wk_bool_vec(a4), wk_bool_vec(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); } SEXP wk_percent_above_ma_warmup_period(SEXP e) { struct PercentAboveMa *h = (struct PercentAboveMa *)R_ExternalPtrAddr(e); @@ -17276,7 +17291,7 @@ SEXP wk_tick_index_new(void) { } SEXP wk_tick_index_update(SEXP e, SEXP a0, SEXP a1, SEXP a2, SEXP a3, SEXP a4, SEXP a5, SEXP a6) { struct TickIndex *h = (struct TickIndex *)R_ExternalPtrAddr(e); - return Rf_ScalarReal(wickra_tick_index_update(h, (double *)REAL(a0), (double *)REAL(a1), (bool *)REAL(a2), (bool *)REAL(a3), (bool *)REAL(a4), (bool *)REAL(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); + return Rf_ScalarReal(wickra_tick_index_update(h, (double *)REAL(a0), (double *)REAL(a1), wk_bool_vec(a2), wk_bool_vec(a3), wk_bool_vec(a4), wk_bool_vec(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); } SEXP wk_tick_index_warmup_period(SEXP e) { struct TickIndex *h = (struct TickIndex *)R_ExternalPtrAddr(e); @@ -17853,7 +17868,7 @@ SEXP wk_trin_new(void) { } SEXP wk_trin_update(SEXP e, SEXP a0, SEXP a1, SEXP a2, SEXP a3, SEXP a4, SEXP a5, SEXP a6) { struct Trin *h = (struct Trin *)R_ExternalPtrAddr(e); - return Rf_ScalarReal(wickra_trin_update(h, (double *)REAL(a0), (double *)REAL(a1), (bool *)REAL(a2), (bool *)REAL(a3), (bool *)REAL(a4), (bool *)REAL(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); + return Rf_ScalarReal(wickra_trin_update(h, (double *)REAL(a0), (double *)REAL(a1), wk_bool_vec(a2), wk_bool_vec(a3), wk_bool_vec(a4), wk_bool_vec(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); } SEXP wk_trin_warmup_period(SEXP e) { struct Trin *h = (struct Trin *)R_ExternalPtrAddr(e); @@ -18651,7 +18666,7 @@ SEXP wk_up_down_volume_ratio_new(void) { } SEXP wk_up_down_volume_ratio_update(SEXP e, SEXP a0, SEXP a1, SEXP a2, SEXP a3, SEXP a4, SEXP a5, SEXP a6) { struct UpDownVolumeRatio *h = (struct UpDownVolumeRatio *)R_ExternalPtrAddr(e); - return Rf_ScalarReal(wickra_up_down_volume_ratio_update(h, (double *)REAL(a0), (double *)REAL(a1), (bool *)REAL(a2), (bool *)REAL(a3), (bool *)REAL(a4), (bool *)REAL(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); + return Rf_ScalarReal(wickra_up_down_volume_ratio_update(h, (double *)REAL(a0), (double *)REAL(a1), wk_bool_vec(a2), wk_bool_vec(a3), wk_bool_vec(a4), wk_bool_vec(a5), (uintptr_t)Rf_xlength(a0), (int64_t)Rf_asReal(a6))); } SEXP wk_up_down_volume_ratio_warmup_period(SEXP e) { struct UpDownVolumeRatio *h = (struct UpDownVolumeRatio *)R_ExternalPtrAddr(e); diff --git a/bindings/r/tests/testthat/golden_specs.R b/bindings/r/tests/testthat/golden_specs.R new file mode 100644 index 00000000..4bf05c8c --- /dev/null +++ b/bindings/r/tests/testthat/golden_specs.R @@ -0,0 +1,518 @@ +# Code generated by gen_golden_test.py. DO NOT EDIT. +# Per-indicator golden spec: canonical name, archetype, ctor params, output width. +GOLDEN_SPECS <- list( + list(canon="AbandonedBaby", arch="scalar_candle", params=c(), width=0L), + list(canon="Abcd", arch="scalar_candle", params=c(), width=0L), + list(canon="AbsoluteBreadthIndex", arch="cross", params=c(), width=0L), + list(canon="AccelerationBands", arch="multi_candle", params=c(14.0,2.0), width=3L), + list(canon="AcceleratorOscillator", arch="scalar_candle", params=c(3.0,7.0,14.0), width=0L), + list(canon="AdOscillator", arch="scalar_candle", params=c(), width=0L), + list(canon="AdVolumeLine", arch="cross", params=c(), width=0L), + list(canon="AdaptiveCci", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="AdaptiveCycle", arch="scalar_f64", params=c(), width=0L), + list(canon="AdaptiveLaguerreFilter", arch="scalar_f64", params=c(20.0), width=0L), + list(canon="AdaptiveRsi", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Adl", arch="scalar_candle", params=c(), width=0L), + list(canon="AdvanceBlock", arch="scalar_candle", params=c(), width=0L), + list(canon="AdvanceDecline", arch="cross", params=c(), width=0L), + list(canon="AdvanceDeclineRatio", arch="cross", params=c(), width=0L), + list(canon="Adx", arch="multi_candle", params=c(14.0), width=3L), + list(canon="Adxr", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="Alligator", arch="multi_candle", params=c(3.0,7.0,14.0), width=3L), + list(canon="Alma", arch="scalar_f64", params=c(9.0,0.85,6.0), width=0L), + list(canon="Alpha", arch="pairwise", params=c(14.0,2.0), width=0L), + list(canon="AmihudIlliquidity", arch="trade", params=c(20.0), width=0L), + list(canon="AnchoredRsi", arch="scalar_f64", params=c(), width=0L), + list(canon="AnchoredVwap", arch="scalar_candle", params=c(), width=0L), + list(canon="AndrewsPitchfork", arch="multi_candle", params=c(14.0), width=3L), + list(canon="Apo", arch="scalar_f64", params=c(3.0,7.0), width=0L), + list(canon="Aroon", arch="multi_candle", params=c(14.0), width=2L), + list(canon="AroonOscillator", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="Atr", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="AtrBands", arch="multi_candle", params=c(14.0,2.0), width=3L), + list(canon="AtrRatchet", arch="multi_candle", params=c(14.0,2.0,0.5), width=2L), + list(canon="AtrTrailingStop", arch="scalar_candle", params=c(14.0,2.0), width=0L), + list(canon="AutoFib", arch="multi_candle", params=c(), width=7L), + list(canon="Autocorrelation", arch="scalar_f64", params=c(10.0,1.0), width=0L), + list(canon="AutocorrelationPeriodogram", arch="scalar_f64", params=c(10.0,48.0), width=0L), + list(canon="AverageDailyRange", arch="scalar_candle", params=c(14.0,0.0), width=0L), + list(canon="AverageDrawdown", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="AvgPrice", arch="scalar_candle", params=c(), width=0L), + list(canon="AwesomeOscillator", arch="scalar_candle", params=c(3.0,7.0), width=0L), + list(canon="AwesomeOscillatorHistogram", arch="scalar_candle", params=c(3.0,7.0,14.0), width=0L), + list(canon="BalanceOfPower", arch="scalar_candle", params=c(), width=0L), + list(canon="BandpassFilter", arch="scalar_f64", params=c(20.0,0.3), width=0L), + list(canon="Bat", arch="scalar_candle", params=c(), width=0L), + list(canon="BeltHold", arch="scalar_candle", params=c(), width=0L), + list(canon="Beta", arch="pairwise", params=c(14.0), width=0L), + list(canon="BetaNeutralSpread", arch="pairwise", params=c(14.0), width=0L), + list(canon="BetterVolume", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="BipowerVariation", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="BodySizePct", arch="scalar_candle", params=c(), width=0L), + list(canon="BollingerBands", arch="multi_f64", params=c(20.0,2.0), width=4L), + list(canon="BollingerBandwidth", arch="scalar_f64", params=c(14.0,2.0), width=0L), + list(canon="BomarBands", arch="multi_f64", params=c(4.0,0.85), width=3L), + list(canon="BreadthThrust", arch="cross", params=c(10.0), width=0L), + list(canon="Breakaway", arch="scalar_candle", params=c(), width=0L), + list(canon="BullishPercentIndex", arch="cross", params=c(), width=0L), + list(canon="BurkeRatio", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Butterfly", arch="scalar_candle", params=c(), width=0L), + list(canon="CalendarSpread", arch="deriv", params=c(), width=0L), + list(canon="CalmarRatio", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Camarilla", arch="multi_candle", params=c(), width=9L), + list(canon="CandleVolume", arch="multi_candle", params=c(14.0), width=2L), + list(canon="Cci", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="CenterOfGravity", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="CentralPivotRange", arch="multi_candle", params=c(), width=3L), + list(canon="Cfo", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="ChaikinMoneyFlow", arch="scalar_candle", params=c(20.0), width=0L), + list(canon="ChaikinOscillator", arch="scalar_candle", params=c(3.0,7.0), width=0L), + list(canon="ChaikinVolatility", arch="scalar_candle", params=c(3.0,7.0), width=0L), + list(canon="ChandeKrollStop", arch="multi_candle", params=c(3.0,2.0,7.0), width=2L), + list(canon="ChandelierExit", arch="multi_candle", params=c(14.0,2.0), width=2L), + list(canon="ChoppinessIndex", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="ClassicPivots", arch="multi_candle", params=c(), width=7L), + list(canon="CloseVsOpen", arch="scalar_candle", params=c(), width=0L), + list(canon="ClosingMarubozu", arch="scalar_candle", params=c(), width=0L), + list(canon="Cmo", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="CoefficientOfVariation", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Cointegration", arch="multi_pairwise", params=c(40.0,1.0), width=3L), + list(canon="CommonSenseRatio", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="CompositeProfile", arch="multi_candle", params=c(20.0,24.0,0.7), width=3L), + list(canon="ConcealingBabySwallow", arch="scalar_candle", params=c(), width=0L), + list(canon="ConditionalValueAtRisk", arch="scalar_f64", params=c(20.0,0.95), width=0L), + list(canon="ConnorsRsi", arch="scalar_f64", params=c(3.0,7.0,14.0), width=0L), + list(canon="Coppock", arch="scalar_f64", params=c(3.0,7.0,14.0), width=0L), + list(canon="CorrelationTrendIndicator", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Counterattack", arch="scalar_candle", params=c(), width=0L), + list(canon="Crab", arch="scalar_candle", params=c(), width=0L), + list(canon="CumulativeVolumeDelta", arch="trade", params=c(), width=0L), + list(canon="CumulativeVolumeIndex", arch="cross", params=c(), width=0L), + list(canon="CupAndHandle", arch="scalar_candle", params=c(), width=0L), + list(canon="CyberneticCycle", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Cypher", arch="scalar_candle", params=c(), width=0L), + list(canon="DayOfWeekProfile", arch="profile_bins", params=c(0.0), width=7L), + list(canon="Decycler", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="DecyclerOscillator", arch="scalar_f64", params=c(3.0,7.0), width=0L), + list(canon="Dema", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="DemandIndex", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="DemarkPivots", arch="multi_candle", params=c(), width=3L), + list(canon="DepthSlope", arch="ob", params=c(), width=0L), + list(canon="DerivativeOscillator", arch="scalar_f64", params=c(3.0,7.0,14.0,28.0), width=0L), + list(canon="DetrendedStdDev", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="DisparityIndex", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="DistanceSsd", arch="pairwise", params=c(14.0), width=0L), + list(canon="Doji", arch="scalar_candle", params=c(), width=0L), + list(canon="DojiStar", arch="scalar_candle", params=c(), width=0L), + list(canon="DollarBars", arch="bars_candle5", params=c(50000.0), width=0L), + list(canon="Donchian", arch="multi_candle", params=c(14.0), width=3L), + list(canon="DonchianStop", arch="multi_candle", params=c(14.0), width=2L), + list(canon="DoubleBollinger", arch="multi_f64", params=c(20.0,1.0,2.0), width=5L), + list(canon="DoubleTopBottom", arch="scalar_candle", params=c(), width=0L), + list(canon="DownsideGapThreeMethods", arch="scalar_candle", params=c(), width=0L), + list(canon="Dpo", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="DragonflyDoji", arch="scalar_candle", params=c(), width=0L), + list(canon="DrawdownDuration", arch="scalar_f64", params=c(), width=0L), + list(canon="DumplingTop", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="Dx", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="DynamicMomentumIndex", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="EaseOfMovement", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="EffectiveSpread", arch="trademid", params=c(), width=0L), + list(canon="EhlersStochastic", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Ehma", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="ElderImpulse", arch="scalar_f64", params=c(3.0,7.0,14.0,28.0), width=0L), + list(canon="ElderRay", arch="multi_candle", params=c(14.0), width=2L), + list(canon="ElderSafeZone", arch="multi_candle", params=c(10.0,2.0), width=2L), + list(canon="Ema", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="EmpiricalModeDecomposition", arch="scalar_f64", params=c(20.0,0.1), width=0L), + list(canon="Engulfing", arch="scalar_candle", params=c(), width=0L), + list(canon="Equivolume", arch="multi_candle", params=c(14.0), width=2L), + list(canon="EstimatedLeverageRatio", arch="deriv", params=c(), width=0L), + list(canon="EvenBetterSinewave", arch="scalar_f64", params=c(40.0,10.0), width=0L), + list(canon="EveningDojiStar", arch="scalar_candle", params=c(), width=0L), + list(canon="Evwma", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="EwmaVolatility", arch="scalar_f64", params=c(0.94), width=0L), + list(canon="Expectancy", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="FallingThreeMethods", arch="scalar_candle", params=c(), width=0L), + list(canon="Fama", arch="scalar_f64", params=c(0.5,0.05), width=0L), + list(canon="FibArcs", arch="multi_candle", params=c(), width=3L), + list(canon="FibChannel", arch="multi_candle", params=c(), width=4L), + list(canon="FibConfluence", arch="multi_candle", params=c(), width=2L), + list(canon="FibExtension", arch="multi_candle", params=c(), width=5L), + list(canon="FibFan", arch="multi_candle", params=c(), width=3L), + list(canon="FibProjection", arch="multi_candle", params=c(), width=4L), + list(canon="FibRetracement", arch="multi_candle", params=c(), width=7L), + list(canon="FibTimeZones", arch="multi_candle", params=c(), width=2L), + list(canon="FibonacciPivots", arch="multi_candle", params=c(), width=7L), + list(canon="FisherRsi", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="FisherTransform", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="FlagPennant", arch="scalar_candle", params=c(), width=0L), + list(canon="Footprint", arch="footprint", params=c(1.0), width=0L), + list(canon="ForceIndex", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="FractalChaosBands", arch="multi_candle", params=c(14.0), width=2L), + list(canon="Frama", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="FryPanBottom", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="FundingBasis", arch="deriv", params=c(), width=0L), + list(canon="FundingImpliedApr", arch="deriv", params=c(1095.0), width=0L), + list(canon="FundingRate", arch="deriv", params=c(), width=0L), + list(canon="FundingRateMean", arch="deriv", params=c(20.0), width=0L), + list(canon="FundingRateZScore", arch="deriv", params=c(20.0), width=0L), + list(canon="GainLossRatio", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="GainToPainRatio", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="GapSideBySideWhite", arch="scalar_candle", params=c(), width=0L), + list(canon="Garch11", arch="scalar_f64", params=c(2e-06,0.1,0.88), width=0L), + list(canon="GarmanKlassVolatility", arch="scalar_candle", params=c(20.0,252.0), width=0L), + list(canon="Gartley", arch="scalar_candle", params=c(), width=0L), + list(canon="GatorOscillator", arch="multi_candle", params=c(3.0,7.0,14.0), width=2L), + list(canon="GeneralizedDema", arch="scalar_f64", params=c(5.0,0.7), width=0L), + list(canon="GeometricMa", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="GoldenPocket", arch="multi_candle", params=c(), width=3L), + list(canon="GrangerCausality", arch="pairwise", params=c(60.0,1.0), width=0L), + list(canon="GravestoneDoji", arch="scalar_candle", params=c(), width=0L), + list(canon="Hammer", arch="scalar_candle", params=c(), width=0L), + list(canon="HangingMan", arch="scalar_candle", params=c(), width=0L), + list(canon="Harami", arch="scalar_candle", params=c(), width=0L), + list(canon="HaramiCross", arch="scalar_candle", params=c(), width=0L), + list(canon="HasbrouckInformationShare", arch="pairwise", params=c(14.0), width=0L), + list(canon="HeadAndShoulders", arch="scalar_candle", params=c(), width=0L), + list(canon="HeikinAshi", arch="multi_candle", params=c(), width=4L), + list(canon="HeikinAshiOscillator", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="HiLoActivator", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="HighLowIndex", arch="cross", params=c(10.0), width=0L), + list(canon="HighLowRange", arch="scalar_candle", params=c(), width=0L), + list(canon="HighLowVolumeNodes", arch="multi_candle", params=c(3.0,7.0), width=2L), + list(canon="HighWave", arch="scalar_candle", params=c(), width=0L), + list(canon="HighpassFilter", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Hikkake", arch="scalar_candle", params=c(), width=0L), + list(canon="HikkakeModified", arch="scalar_candle", params=c(), width=0L), + list(canon="HilbertDominantCycle", arch="scalar_f64", params=c(), width=0L), + list(canon="HistoricalVolatility", arch="scalar_f64", params=c(3.0,7.0), width=0L), + list(canon="Hma", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="HoltWinters", arch="scalar_f64", params=c(0.5,0.1), width=0L), + list(canon="HomingPigeon", arch="scalar_candle", params=c(), width=0L), + list(canon="HtDcPhase", arch="scalar_f64", params=c(), width=0L), + list(canon="HtPhasor", arch="multi_f64", params=c(), width=2L), + list(canon="HtTrendMode", arch="scalar_f64", params=c(), width=0L), + list(canon="HurstChannel", arch="multi_candle", params=c(14.0,2.0), width=3L), + list(canon="HurstExponent", arch="scalar_f64", params=c(100.0,4.0), width=0L), + list(canon="Ichimoku", arch="multi_candle", params=c(9.0,26.0,52.0,26.0), width=5L), + list(canon="IdenticalThreeCrows", arch="scalar_candle", params=c(), width=0L), + list(canon="ImbalanceBars", arch="bars_candle4", params=c(5.0), width=0L), + list(canon="InNeck", arch="scalar_candle", params=c(), width=0L), + list(canon="Inertia", arch="scalar_candle", params=c(3.0,7.0), width=0L), + list(canon="InformationRatio", arch="pairwise", params=c(14.0), width=0L), + list(canon="InitialBalance", arch="multi_candle", params=c(14.0), width=2L), + list(canon="InstantaneousTrendline", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="IntradayIntensity", arch="scalar_candle", params=c(), width=0L), + list(canon="IntradayMomentumIndex", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="IntradayVolatilityProfile", arch="profile_bins", params=c(24.0,0.0), width=24L), + list(canon="InverseFisherTransform", arch="scalar_f64", params=c(2.0), width=0L), + list(canon="InvertedHammer", arch="scalar_candle", params=c(), width=0L), + list(canon="JarqueBera", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Jma", arch="scalar_f64", params=c(7.0,0.0,2.0), width=0L), + list(canon="JumpIndicator", arch="scalar_f64", params=c(14.0,2.0), width=0L), + list(canon="KRatio", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="KagiBars", arch="bars_close", params=c(2.0), width=0L), + list(canon="KalmanHedgeRatio", arch="multi_pairwise", params=c(0.01,0.001), width=3L), + list(canon="Kama", arch="scalar_f64", params=c(3.0,7.0,14.0), width=0L), + list(canon="KaseDevStop", arch="multi_candle", params=c(14.0,2.0), width=2L), + list(canon="KasePermissionStochastic", arch="multi_candle", params=c(3.0,7.0), width=2L), + list(canon="KellyCriterion", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Keltner", arch="multi_candle", params=c(3.0,7.0,2.0), width=3L), + list(canon="KendallTau", arch="pairwise", params=c(14.0), width=0L), + list(canon="Kicking", arch="scalar_candle", params=c(), width=0L), + list(canon="KickingByLength", arch="scalar_candle", params=c(), width=0L), + list(canon="Kst", arch="multi_f64", params=c(3.0,7.0,14.0,28.0,35.0,42.0,56.0,63.0,70.0), width=2L), + list(canon="Kurtosis", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Kvo", arch="scalar_candle", params=c(3.0,7.0), width=0L), + list(canon="KylesLambda", arch="trademid", params=c(20.0), width=0L), + list(canon="LadderBottom", arch="scalar_candle", params=c(), width=0L), + list(canon="LaguerreRsi", arch="scalar_f64", params=c(0.5), width=0L), + list(canon="LeadLagCrossCorrelation", arch="multi_pairwise", params=c(20.0,10.0), width=2L), + list(canon="LinRegAngle", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="LinRegChannel", arch="multi_f64", params=c(14.0,2.0), width=3L), + list(canon="LinRegIntercept", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="LinRegSlope", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="LinearRegression", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="LiquidationFeatures", arch="deriv_multi", params=c(), width=5L), + list(canon="LogReturn", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="LongLeggedDoji", arch="scalar_candle", params=c(), width=0L), + list(canon="LongLine", arch="scalar_candle", params=c(), width=0L), + list(canon="LongShortRatio", arch="deriv", params=c(), width=0L), + list(canon="M2Measure", arch="scalar_f64", params=c(14.0,2.0,0.5), width=0L), + list(canon="MaEnvelope", arch="multi_f64", params=c(14.0,2.0), width=3L), + list(canon="MacdExt", arch="multi_f64", params=c(12.0,0.0,26.0,0.0,9.0,0.0), width=3L), + list(canon="MacdFix", arch="multi_f64", params=c(9.0), width=3L), + list(canon="MacdHistogram", arch="scalar_f64", params=c(3.0,7.0,14.0), width=0L), + list(canon="MacdIndicator", arch="multi_f64", params=c(12.0,26.0,9.0), width=3L), + list(canon="Mama", arch="multi_f64", params=c(0.5,0.05), width=2L), + list(canon="MarketFacilitationIndex", arch="scalar_candle", params=c(), width=0L), + list(canon="MartinRatio", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Marubozu", arch="scalar_candle", params=c(), width=0L), + list(canon="MassIndex", arch="scalar_candle", params=c(3.0,7.0), width=0L), + list(canon="MatHold", arch="scalar_candle", params=c(), width=0L), + list(canon="MatchingLow", arch="scalar_candle", params=c(), width=0L), + list(canon="MaxDrawdown", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="McClellanOscillator", arch="cross", params=c(), width=0L), + list(canon="McClellanSummationIndex", arch="cross", params=c(), width=0L), + list(canon="McGinleyDynamic", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="MedianAbsoluteDeviation", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="MedianChannel", arch="multi_f64", params=c(14.0,2.0), width=3L), + list(canon="MedianMa", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="MedianPrice", arch="scalar_candle", params=c(), width=0L), + list(canon="Mfi", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="Microprice", arch="ob", params=c(), width=0L), + list(canon="MidPoint", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="MidPrice", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="MinusDi", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="MinusDm", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="ModifiedMaStop", arch="multi_candle", params=c(14.0), width=2L), + list(canon="Mom", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="MorningDojiStar", arch="scalar_candle", params=c(), width=0L), + list(canon="MorningEveningStar", arch="scalar_candle", params=c(), width=0L), + list(canon="MurreyMathLines", arch="multi_candle", params=c(14.0), width=9L), + list(canon="NakedPoc", arch="scalar_candle", params=c(3.0,7.0), width=0L), + list(canon="Natr", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="NewHighsNewLows", arch="cross", params=c(), width=0L), + list(canon="NewPriceLines", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="Nrtr", arch="multi_candle", params=c(2.0), width=2L), + list(canon="Nvi", arch="scalar_candle", params=c(), width=0L), + list(canon="OIPriceDivergence", arch="deriv", params=c(20.0), width=0L), + list(canon="OIWeighted", arch="deriv", params=c(), width=0L), + list(canon="Obv", arch="scalar_candle", params=c(), width=0L), + list(canon="OiToVolumeRatio", arch="deriv", params=c(), width=0L), + list(canon="OmegaRatio", arch="scalar_f64", params=c(14.0,2.0), width=0L), + list(canon="OnNeck", arch="scalar_candle", params=c(), width=0L), + list(canon="OpenInterestDelta", arch="deriv", params=c(), width=0L), + list(canon="OpenInterestMomentum", arch="deriv", params=c(10.0), width=0L), + list(canon="OpeningMarubozu", arch="scalar_candle", params=c(), width=0L), + list(canon="OpeningRange", arch="multi_candle", params=c(14.0), width=3L), + list(canon="OrderBookImbalanceFull", arch="ob", params=c(), width=0L), + list(canon="OrderBookImbalanceTop1", arch="ob", params=c(), width=0L), + list(canon="OrderBookImbalanceTopN", arch="ob", params=c(5.0), width=0L), + list(canon="OrderFlowImbalance", arch="ob", params=c(20.0), width=0L), + list(canon="OuHalfLife", arch="pairwise", params=c(14.0), width=0L), + list(canon="OvernightGap", arch="scalar_candle", params=c(0.0), width=0L), + list(canon="OvernightIntradayReturn", arch="multi_candle", params=c(14.0), width=2L), + list(canon="PainIndex", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="PairSpreadZScore", arch="pairwise", params=c(20.0,20.0), width=0L), + list(canon="PairwiseBeta", arch="pairwise", params=c(14.0), width=0L), + list(canon="ParkinsonVolatility", arch="scalar_candle", params=c(20.0,252.0), width=0L), + list(canon="PearsonCorrelation", arch="pairwise", params=c(14.0), width=0L), + list(canon="PercentAboveMa", arch="cross", params=c(), width=0L), + list(canon="PercentB", arch="scalar_f64", params=c(14.0,2.0), width=0L), + list(canon="PercentageTrailingStop", arch="scalar_f64", params=c(2.0), width=0L), + list(canon="PerpetualPremiumIndex", arch="deriv", params=c(), width=0L), + list(canon="Pgo", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="PiercingDarkCloud", arch="scalar_candle", params=c(), width=0L), + list(canon="Pin", arch="trade", params=c(20.0), width=0L), + list(canon="PivotReversal", arch="scalar_candle", params=c(3.0,7.0), width=0L), + list(canon="PlusDi", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="PlusDm", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="Pmo", arch="scalar_f64", params=c(3.0,7.0), width=0L), + list(canon="PointAndFigureBars", arch="bars_close", params=c(2.0,3.0), width=0L), + list(canon="PolarizedFractalEfficiency", arch="scalar_f64", params=c(10.0,5.0), width=0L), + list(canon="Ppo", arch="scalar_f64", params=c(3.0,7.0), width=0L), + list(canon="PpoHistogram", arch="scalar_f64", params=c(3.0,7.0,14.0), width=0L), + list(canon="ProfileShape", arch="scalar_candle", params=c(3.0,7.0), width=0L), + list(canon="ProfitFactor", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="ProjectionBands", arch="multi_candle", params=c(14.0), width=3L), + list(canon="ProjectionOscillator", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="Psar", arch="scalar_candle", params=c(0.02,0.02,0.2), width=0L), + list(canon="Pvi", arch="scalar_candle", params=c(), width=0L), + list(canon="Qqe", arch="multi_f64", params=c(3.0,7.0,2.0), width=2L), + list(canon="Qstick", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="QuartileBands", arch="multi_f64", params=c(14.0), width=3L), + list(canon="QuotedSpread", arch="ob", params=c(), width=0L), + list(canon="RSquared", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="RangeBars", arch="bars_close", params=c(2.0), width=0L), + list(canon="RealizedSpread", arch="trademid", params=c(20.0), width=0L), + list(canon="RealizedVolatility", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="RecoveryFactor", arch="scalar_f64", params=c(), width=0L), + list(canon="RectangleRange", arch="scalar_candle", params=c(), width=0L), + list(canon="Reflex", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="RegimeLabel", arch="scalar_f64", params=c(3.0,7.0), width=0L), + list(canon="RelativeStrengthAB", arch="multi_pairwise", params=c(14.0,14.0), width=3L), + list(canon="RenkoBars", arch="bars_close", params=c(2.0), width=0L), + list(canon="RenkoTrailingStop", arch="scalar_f64", params=c(2.0), width=0L), + list(canon="RickshawMan", arch="scalar_candle", params=c(), width=0L), + list(canon="RisingThreeMethods", arch="scalar_candle", params=c(), width=0L), + list(canon="Rmi", arch="scalar_f64", params=c(3.0,7.0), width=0L), + list(canon="Roc", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Rocp", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Rocr", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Rocr100", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="RogersSatchellVolatility", arch="scalar_candle", params=c(20.0,252.0), width=0L), + list(canon="RollMeasure", arch="trade", params=c(20.0), width=0L), + list(canon="RollingCorrelation", arch="pairwise", params=c(14.0), width=0L), + list(canon="RollingCovariance", arch="pairwise", params=c(14.0), width=0L), + list(canon="RollingIqr", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="RollingMinMaxScaler", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="RollingPercentileRank", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="RollingQuantile", arch="scalar_f64", params=c(20.0,0.5), width=0L), + list(canon="RollingVwap", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="RoofingFilter", arch="scalar_f64", params=c(3.0,7.0), width=0L), + list(canon="Rsi", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Rsx", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="RunBars", arch="bars_candle4", params=c(3.0), width=0L), + list(canon="Rvi", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="RviVolatility", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Rwi", arch="multi_candle", params=c(14.0), width=2L), + list(canon="SampleEntropy", arch="scalar_f64", params=c(20.0,2.0,0.2), width=0L), + list(canon="SarExt", arch="scalar_candle", params=c(2.0,0.5,0.5,0.5,0.5,0.5,0.5,0.5), width=0L), + list(canon="SeasonalZScore", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="SeparatingLines", arch="scalar_candle", params=c(), width=0L), + list(canon="SessionHighLow", arch="multi_candle", params=c(14.0), width=2L), + list(canon="SessionRange", arch="multi_candle", params=c(14.0), width=3L), + list(canon="SessionVwap", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="ShannonEntropy", arch="scalar_f64", params=c(3.0,7.0), width=0L), + list(canon="Shark", arch="scalar_candle", params=c(), width=0L), + list(canon="SharpeRatio", arch="scalar_f64", params=c(14.0,2.0), width=0L), + list(canon="ShootingStar", arch="scalar_candle", params=c(), width=0L), + list(canon="ShortLine", arch="scalar_candle", params=c(), width=0L), + list(canon="SignedVolume", arch="trade", params=c(), width=0L), + list(canon="SineWave", arch="scalar_f64", params=c(), width=0L), + list(canon="SineWeightedMa", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="SinglePrints", arch="scalar_candle", params=c(3.0,7.0), width=0L), + list(canon="Skewness", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Sma", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Smi", arch="scalar_candle", params=c(3.0,7.0,14.0), width=0L), + list(canon="Smma", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="SmoothedHeikinAshi", arch="multi_candle", params=c(14.0), width=4L), + list(canon="SortinoRatio", arch="scalar_f64", params=c(14.0,2.0), width=0L), + list(canon="SpearmanCorrelation", arch="pairwise", params=c(14.0), width=0L), + list(canon="SpinningTop", arch="scalar_candle", params=c(), width=0L), + list(canon="SpreadAr1Coefficient", arch="pairwise", params=c(14.0), width=0L), + list(canon="SpreadBollingerBands", arch="multi_pairwise", params=c(14.0,2.0), width=4L), + list(canon="SpreadHurst", arch="pairwise", params=c(14.0), width=0L), + list(canon="StalledPattern", arch="scalar_candle", params=c(), width=0L), + list(canon="StandardError", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="StandardErrorBands", arch="multi_f64", params=c(14.0,2.0), width=3L), + list(canon="StarcBands", arch="multi_candle", params=c(3.0,7.0,2.0), width=3L), + list(canon="Stc", arch="scalar_f64", params=c(10.0,23.0,10.0,0.5), width=0L), + list(canon="StdDev", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="StepTrailingStop", arch="scalar_f64", params=c(2.0), width=0L), + list(canon="SterlingRatio", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="StickSandwich", arch="scalar_candle", params=c(), width=0L), + list(canon="StochRsi", arch="scalar_f64", params=c(3.0,7.0), width=0L), + list(canon="Stochastic", arch="multi_candle", params=c(3.0,7.0), width=2L), + list(canon="StochasticCci", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="SuperSmoother", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="SuperTrend", arch="multi_candle", params=c(14.0,2.0), width=2L), + list(canon="T3", arch="scalar_f64", params=c(5.0,0.7), width=0L), + list(canon="TailRatio", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="TakerBuySellRatio", arch="deriv", params=c(), width=0L), + list(canon="Takuri", arch="scalar_candle", params=c(), width=0L), + list(canon="TasukiGap", arch="scalar_candle", params=c(), width=0L), + list(canon="TdCamouflage", arch="scalar_candle", params=c(), width=0L), + list(canon="TdClop", arch="scalar_candle", params=c(), width=0L), + list(canon="TdClopwin", arch="scalar_candle", params=c(), width=0L), + list(canon="TdCombo", arch="scalar_candle", params=c(3.0,7.0,14.0,28.0), width=0L), + list(canon="TdCountdown", arch="scalar_candle", params=c(3.0,7.0,14.0,28.0), width=0L), + list(canon="TdDWave", arch="scalar_candle", params=c(2.0), width=0L), + list(canon="TdDeMarker", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="TdDifferential", arch="scalar_candle", params=c(), width=0L), + list(canon="TdLines", arch="multi_candle", params=c(3.0,7.0), width=2L), + list(canon="TdMovingAverage", arch="multi_candle", params=c(3.0,7.0), width=2L), + list(canon="TdOpen", arch="scalar_candle", params=c(), width=0L), + list(canon="TdPressure", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="TdPropulsion", arch="scalar_candle", params=c(), width=0L), + list(canon="TdRangeProjection", arch="multi_candle", params=c(), width=2L), + list(canon="TdRei", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="TdRiskLevel", arch="multi_candle", params=c(3.0,7.0), width=2L), + list(canon="TdSequential", arch="multi_candle", params=c(3.0,7.0,14.0,28.0), width=3L), + list(canon="TdSetup", arch="scalar_candle", params=c(3.0,7.0), width=0L), + list(canon="TdTrap", arch="scalar_candle", params=c(), width=0L), + list(canon="Tema", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="TermStructureBasis", arch="deriv", params=c(), width=0L), + list(canon="ThreeDrives", arch="scalar_candle", params=c(), width=0L), + list(canon="ThreeInside", arch="scalar_candle", params=c(), width=0L), + list(canon="ThreeLineBreak", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="ThreeLineBreakBars", arch="bars_close", params=c(3.0), width=0L), + list(canon="ThreeLineStrike", arch="scalar_candle", params=c(), width=0L), + list(canon="ThreeOutside", arch="scalar_candle", params=c(), width=0L), + list(canon="ThreeSoldiersOrCrows", arch="scalar_candle", params=c(), width=0L), + list(canon="ThreeStarsInSouth", arch="scalar_candle", params=c(), width=0L), + list(canon="Thrusting", arch="scalar_candle", params=c(), width=0L), + list(canon="TickBars", arch="bars_candle5", params=c(2.0), width=0L), + list(canon="TickIndex", arch="cross", params=c(), width=0L), + list(canon="Tii", arch="scalar_f64", params=c(3.0,7.0), width=0L), + list(canon="TimeBasedStop", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="TimeOfDayReturnProfile", arch="profile_bins", params=c(24.0,0.0), width=24L), + list(canon="TowerTopBottom", arch="scalar_candle", params=c(), width=0L), + list(canon="TpoProfile", arch="profile_pricebins", params=c(30.0,50.0), width=52L), + list(canon="TradeImbalance", arch="trade", params=c(20.0), width=0L), + list(canon="TradeSignAutocorrelation", arch="trade", params=c(20.0), width=0L), + list(canon="TradeVolumeIndex", arch="scalar_candle", params=c(2.0), width=0L), + list(canon="TrendLabel", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="TrendStrengthIndex", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Trendflex", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="TreynorRatio", arch="pairwise", params=c(14.0,2.0), width=0L), + list(canon="Triangle", arch="scalar_candle", params=c(), width=0L), + list(canon="Trima", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Trin", arch="cross", params=c(), width=0L), + list(canon="TripleTopBottom", arch="scalar_candle", params=c(), width=0L), + list(canon="Tristar", arch="scalar_candle", params=c(), width=0L), + list(canon="Trix", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="TrueRange", arch="scalar_candle", params=c(), width=0L), + list(canon="Tsf", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="TsfOscillator", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Tsi", arch="scalar_f64", params=c(3.0,7.0), width=0L), + list(canon="Tsv", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="TtmSqueeze", arch="multi_candle", params=c(14.0,2.0,0.5), width=2L), + list(canon="TtmTrend", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="TurnOfMonth", arch="scalar_candle", params=c(3.0,3.0,0.0), width=0L), + list(canon="Tweezer", arch="scalar_candle", params=c(), width=0L), + list(canon="TwiggsMoneyFlow", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="TwoCrows", arch="scalar_candle", params=c(), width=0L), + list(canon="TypicalPrice", arch="scalar_candle", params=c(), width=0L), + list(canon="UlcerIndex", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="UltimateOscillator", arch="scalar_candle", params=c(3.0,7.0,14.0), width=0L), + list(canon="UniqueThreeRiver", arch="scalar_candle", params=c(), width=0L), + list(canon="UniversalOscillator", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="UpDownVolumeRatio", arch="cross", params=c(), width=0L), + list(canon="UpsideGapThreeMethods", arch="scalar_candle", params=c(), width=0L), + list(canon="UpsideGapTwoCrows", arch="scalar_candle", params=c(), width=0L), + list(canon="UpsidePotentialRatio", arch="scalar_f64", params=c(14.0,2.0), width=0L), + list(canon="ValueArea", arch="multi_candle", params=c(20.0,50.0,0.7), width=3L), + list(canon="ValueAtRisk", arch="scalar_f64", params=c(20.0,0.95), width=0L), + list(canon="Variance", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="VarianceRatio", arch="pairwise", params=c(60.0,2.0), width=0L), + list(canon="VerticalHorizontalFilter", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Vidya", arch="scalar_f64", params=c(3.0,7.0), width=0L), + list(canon="VolatilityCone", arch="multi_candle", params=c(3.0,7.0), width=5L), + list(canon="VolatilityOfVolatility", arch="scalar_f64", params=c(3.0,7.0), width=0L), + list(canon="VolatilityRatio", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="VoltyStop", arch="scalar_candle", params=c(14.0,2.0), width=0L), + list(canon="VolumeBars", arch="bars_candle5", params=c(500.0), width=0L), + list(canon="VolumeByTimeProfile", arch="profile_bins", params=c(24.0,0.0), width=24L), + list(canon="VolumeOscillator", arch="scalar_candle", params=c(3.0,7.0), width=0L), + list(canon="VolumePriceTrend", arch="scalar_candle", params=c(), width=0L), + list(canon="VolumeProfile", arch="profile_pricebins", params=c(20.0,50.0), width=52L), + list(canon="VolumeRsi", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="VolumeWeightedMacd", arch="multi_candle", params=c(3.0,7.0,14.0), width=3L), + list(canon="VolumeWeightedSr", arch="multi_candle", params=c(14.0), width=2L), + list(canon="Vortex", arch="multi_candle", params=c(14.0), width=2L), + list(canon="Vpin", arch="trade", params=c(5000.0,10.0), width=0L), + list(canon="Vwap", arch="scalar_candle", params=c(), width=0L), + list(canon="VwapStdDevBands", arch="multi_candle", params=c(2.0), width=4L), + list(canon="Vwma", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="Vzo", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="Wad", arch="scalar_candle", params=c(), width=0L), + list(canon="WavePm", arch="scalar_f64", params=c(3.0,7.0), width=0L), + list(canon="WaveTrend", arch="multi_candle", params=c(3.0,7.0,14.0), width=2L), + list(canon="Wedge", arch="scalar_candle", params=c(), width=0L), + list(canon="WeightedClose", arch="scalar_candle", params=c(), width=0L), + list(canon="WickRatio", arch="scalar_candle", params=c(), width=0L), + list(canon="WilliamsFractals", arch="multi_candle", params=c(), width=2L), + list(canon="WilliamsR", arch="scalar_candle", params=c(14.0), width=0L), + list(canon="WinRate", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="Wma", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="WoodiePivots", arch="multi_candle", params=c(), width=5L), + list(canon="YangZhangVolatility", arch="scalar_candle", params=c(20.0,252.0), width=0L), + list(canon="YoyoExit", arch="scalar_candle", params=c(14.0,2.0), width=0L), + list(canon="ZScore", arch="scalar_f64", params=c(14.0), width=0L), + list(canon="ZeroLagMacd", arch="multi_f64", params=c(3.0,7.0,14.0), width=3L), + list(canon="ZigZag", arch="multi_candle", params=c(0.02), width=2L), + list(canon="Zlema", arch="scalar_f64", params=c(14.0), width=0L) +) diff --git a/bindings/r/tests/testthat/test-golden-all.R b/bindings/r/tests/testthat/test-golden-all.R new file mode 100644 index 00000000..0576338a --- /dev/null +++ b/bindings/r/tests/testthat/test-golden-all.R @@ -0,0 +1,121 @@ +# Generic golden-fixture parity for the whole 514-indicator catalogue: every +# indicator is reconstructed by its constructor, fed the synthetic stream derived +# from the shared testdata/golden input (identical to gen_golden's Rust +# construction) and checked bit-for-bit against g_.csv. One reflective +# runner flattens scalar, multi-output, profile and bar shapes. +# +# Like test-golden.R, the fixtures live at the repo root and are not bundled into +# the standalone package, so packaged checks (r-universe / CRAN) skip; the parity +# is enforced by the monorepo CI. Specs are generated by gen_golden_test.py. + +find_golden_dir_all <- function() { + d <- normalizePath(getwd(), winslash = "/", mustWork = FALSE) + repeat { + g <- file.path(d, "testdata", "golden") + if (dir.exists(g)) return(g) + parent <- dirname(d) + if (identical(parent, d)) return(NULL) + d <- parent + } +} + +golden_dir_all <- find_golden_dir_all() + +test_that("all 514 indicators match the Rust golden fixtures", { + skip_if(is.null(golden_dir_all), "golden fixtures not bundled with the package") + source(test_path("golden_specs.R"), local = TRUE) + + gcell <- function(s) { + if (s == "nan") NA_real_ else if (s == "inf") Inf else if (s == "-inf") -Inf else as.numeric(s) + } + read_rows <- function(name) { + lines <- readLines(file.path(golden_dir_all, paste0(name, ".csv")))[-1] + lapply(lines, function(l) { + if (nchar(l) == 0) return(numeric(0)) + vapply(strsplit(l, ",", fixed = TRUE)[[1]], gcell, numeric(1), USE.NAMES = FALSE) + }) + } + input_rows <- lapply( + readLines(file.path(golden_dir_all, "input.csv"))[-1], + function(l) as.numeric(strsplit(l, ",", fixed = TRUE)[[1]]) + ) + + deriv_fields <- function(r) { + o <- r[1]; h <- r[2]; l <- r[3]; c <- r[4]; v <- r[5] + c((c - o) / c * 0.01, c, c - 0.5, c + 1.0, v * 10, v * 0.6, v * 0.4, + v * 0.55, v * 0.45, h - c, c - l) + } + cross_lists <- function(r) { + o <- r[1]; c <- r[4]; v <- r[5]; j <- 0:4 + list(change = (c - o) + j, volume = v + j * 10, + newHigh = as.numeric(j %% 2 == 0), newLow = as.numeric(j %% 3 == 0), + aboveMa = as.numeric(j %% 2 == 0), onBuy = as.numeric(j %% 3 == 0)) + } + ob_lists <- function(r) { + c <- r[4]; v <- r[5]; k <- 1:5 + list(bp = c - 0.1 * k, bs = v / k, ap = c + 0.1 * k, asz = v * 0.9 / k) + } + flatten <- function(o, arch, width) { + if (arch %in% c("profile_bins")) { + if (is.null(o) || length(o) == 0 || all(is.na(o))) return(rep(NA_real_, width)) + return(as.numeric(o)) + } + if (arch == "profile_pricebins") { + if (is.list(o)) return(c(o$price_low, o$price_high, as.numeric(o$values))) + return(rep(NA_real_, width)) + } + if (arch %in% c("bars_close", "bars_candle4", "bars_candle5", "footprint")) { + if (is.null(o) || length(o) == 0) return(numeric(0)) + if (is.matrix(o)) return(as.numeric(t(o))) + return(as.numeric(o)) + } + as.numeric(o) + } + + compute <- function(spec, ind, r, i) { + o <- r[1]; h <- r[2]; l <- r[3]; cl <- r[4]; v <- r[5]; ts <- as.integer(i - 1) + out <- switch(spec$arch, + scalar_f64 = update(ind, cl), + multi_f64 = update(ind, cl), + pairwise = , multi_pairwise = update(ind, cl, o), + scalar_candle = , multi_candle = , profile_bins = , profile_pricebins = + update(ind, o, h, l, cl, v, ts), + trade = update(ind, cl, v, cl >= o, ts), + trademid = update(ind, cl, v, cl >= o, ts, (h + l) / 2), + ob = { L <- ob_lists(r); update(ind, L$bp, L$bs, L$ap, L$asz) }, + cross = { L <- cross_lists(r) + update(ind, L$change, L$volume, L$newHigh, L$newLow, L$aboveMa, L$onBuy, ts) }, + deriv = , deriv_multi = { d <- deriv_fields(r) + do.call(update, c(list(ind), as.list(d), list(ts))) }, + bars_close = update(ind, cl, cl, cl, cl, 1, 0L), + bars_candle4 = update(ind, o, h, l, cl, 1, 0L), + bars_candle5 = update(ind, o, h, l, cl, v, 0L), + footprint = update(ind, cl, v, cl >= o, ts), + stop("arch ", spec$arch) + ) + flatten(out, spec$arch, spec$width) + } + + for (spec in GOLDEN_SPECS) { + ind <- do.call(get(spec$canon), as.list(spec$params)) + exp <- read_rows(paste0("g_", spec$canon)) + for (i in seq_along(input_rows)) { + got <- compute(spec, ind, input_rows[[i]], i) + want <- exp[[i]] + expect_equal(length(got), length(want), + info = sprintf("%s row %d arity", spec$canon, i)) + for (k in seq_along(want)) { + w <- want[k]; g <- got[k] + if (is.na(w)) { + expect_true(is.na(g), info = sprintf("%s row %d col %d: want NA", spec$canon, i, k)) + } else if (is.infinite(w)) { + expect_true(is.infinite(g) && sign(g) == sign(w), + info = sprintf("%s row %d col %d: want %g", spec$canon, i, k, w)) + } else { + expect_lte(abs(g - w), 1e-6 * max(1, abs(w)), + label = sprintf("%s row %d col %d (got %s want %g)", spec$canon, i, k, as.character(g), w)) + } + } + } + } +}) diff --git a/bindings/r/tests/testthat/test-golden.R b/bindings/r/tests/testthat/test-golden.R index 1ccb45d5..bdebdd4f 100644 --- a/bindings/r/tests/testthat/test-golden.R +++ b/bindings/r/tests/testthat/test-golden.R @@ -117,3 +117,37 @@ test_that("multi-output ADX matches golden", { } } }) + +# The four de-duplicated indicators, pinned against the Rust reference. + +test_that("de-duplicated candle indicators match golden", { + skip_if_no_golden() + golden_input <- read_golden_input() + specs <- list( + list("ad_oscillator", AdOscillator()), + list("intraday_intensity", IntradayIntensity()), + list("awesome_oscillator_histogram", AwesomeOscillatorHistogram(5, 34, 1)) + ) + for (spec in specs) { + name <- spec[[1]] + ind <- spec[[2]] + exp <- read_golden(name) + for (i in seq_len(nrow(golden_input))) { + got <- update(ind, golden_input$open[i], golden_input$high[i], golden_input$low[i], + golden_input$close[i], golden_input$volume[i], i - 1) + expect_close(got, gcell(exp[i, 1]), i, name) + } + } +}) + +test_that("AverageDrawdown matches golden", { + skip_if_no_golden() + golden_input <- read_golden_input() + avg <- AverageDrawdown(20) + exp <- read_golden("average_drawdown") + for (i in seq_len(nrow(golden_input))) { + # generator fed the close column as the equity-curve sample. + got <- update(avg, golden_input$close[i]) + expect_close(got, gcell(exp[i, 1]), i, "average_drawdown") + } +}) diff --git a/bindings/wasm/gen_golden_test.py b/bindings/wasm/gen_golden_test.py new file mode 100644 index 00000000..42032b5c --- /dev/null +++ b/bindings/wasm/gen_golden_test.py @@ -0,0 +1,89 @@ +"""Generate wasm_manifest.json for the WASM golden replay: for every one of the +514 indicators, record the JS class name, constructor params, the ordered update +argument names (parsed from pkg/wickra_wasm.d.ts, each flagged array/bigint) and +the output archetype (from golden_manifest.json). Run from repo root after +`wasm-pack build --target nodejs`: python bindings/wasm/gen_golden_test.py +""" +import json +import os +import re + +ROOT = os.path.normpath(os.path.join(os.path.dirname(__file__), "..", "..")) +G = os.path.join(ROOT, "testdata", "golden") +DTS = os.path.join(ROOT, "bindings", "wasm", "pkg", "wickra_wasm.d.ts") + +# canonical -> native (JS class) and canonical -> (arch, n/width) from the manifests. +native = {} +arch = {} +extra = {} +for e in json.load(open(os.path.join(G, "scalar_manifest.json"))): + native[e["canonical"]] = e["native"] + arch[e["canonical"]] = {"f64": "scalar_f64", "Candle": "scalar_candle", "(f64, f64)": "pairwise"}[e["input"]] +for e in json.load(open(os.path.join(G, "multi_manifest.json"))): + native[e["canonical"]] = e["native"] + arch[e["canonical"]] = {"f64": "multi_f64", "Candle": "multi_candle", "(f64, f64)": "multi_pairwise"}[e["input"]] + extra[e["canonical"]] = {"n": e["n"]} +ex = json.load(open(os.path.join(G, "exotic_manifest.json"))) +for e in ex["deriv"]: + native[e["canonical"]] = e["native"] + arch[e["canonical"]] = "deriv_multi" if "n" in e else "deriv" + if "n" in e: + extra[e["canonical"]] = {"n": e["n"]} +for fam, a in (("cross", "cross"), ("trade", "trade"), ("trademid", "trademid"), ("ob", "ob")): + for e in ex[fam]: + native[e["canonical"]] = e["native"] + arch[e["canonical"]] = a +for e in json.load(open(os.path.join(G, "profile_manifest.json"))): + native[e["canonical"]] = e["native"] + arch[e["canonical"]] = "profile_" + e["kind"] + extra[e["canonical"]] = {"width": e["width"], **({"arrayField": "counts" if e["canonical"] == "TpoProfile" else "bins"} if e["kind"] == "pricebins" else {})} +for e in json.load(open(os.path.join(G, "bars_manifest.json"))): + native[e["canonical"]] = e["native"] + arch[e["canonical"]] = "footprint" if e["canonical"] == "Footprint" else "bars" + +# params per canonical (constructor values) — same as the other bindings. +params = {} +for fn in ("scalar_manifest", "multi_manifest"): + for e in json.load(open(os.path.join(G, fn + ".json"))): + params[e["canonical"]] = e["params"] +for fam in json.load(open(os.path.join(G, "exotic_manifest.json"))).values(): + for e in fam: + params[e["canonical"]] = e["params"] +for e in json.load(open(os.path.join(G, "profile_manifest.json"))): + params[e["canonical"]] = e["params"] +for e in json.load(open(os.path.join(G, "bars_manifest.json"))): + params[e["canonical"]] = e["params"] + +# parse update args per JS class from the wasm .d.ts +dts = open(DTS, encoding="utf-8").read() +cls_args = {} +for m in re.finditer(r"export class (\w+) \{(.*?)\n\}", dts, re.S): + name, body = m.group(1), m.group(2) + um = re.search(r"\bupdate\(([^)]*)\)", body) + args = [] + if um and um.group(1).strip(): + for p in um.group(1).split(","): + p = p.strip() + nm = p.split(":")[0].strip() + typ = p.split(":", 1)[1].strip() if ":" in p else "" + args.append({"name": nm, "array": "Array" in typ, "bigint": "bigint" in typ}) + cls_args[name] = args + +out = [] +for canon in sorted(native): + js = native[canon] + if js not in cls_args: + raise SystemExit(f"WASM class {js} (for {canon}) not in d.ts") + ctor = params.get(canon, []) + # EaseOfMovement's volume divisor is an optional Rust constructor argument + # (default 1e8) but a required WASM constructor parameter; pass it explicitly. + if canon == "EaseOfMovement": + ctor = [ctor[0], 100000000.0] + e = {"canonical": canon, "js": js, "ctor": ctor, + "args": cls_args[js], "out": arch[canon]} + e.update(extra.get(canon, {})) + out.append(e) + +json.dump(out, open(os.path.join(G, "wasm_manifest.json"), "w"), indent=1) +from collections import Counter +print("wasm_manifest:", len(out), dict(Counter(e["out"] for e in out))) diff --git a/bindings/wasm/tests/golden.test.js b/bindings/wasm/tests/golden.test.js new file mode 100644 index 00000000..558a2a92 --- /dev/null +++ b/bindings/wasm/tests/golden.test.js @@ -0,0 +1,156 @@ +// Generic golden-fixture parity for the WASM (wasm-bindgen) binding, run under +// Node's test runner against the nodejs-target build in ../pkg. +// +// Every one of the 514 indicators is reconstructed from wasm_manifest.json (JS +// class, constructor params, ordered update args parsed from the generated +// .d.ts), fed the synthetic stream derived from the shared golden input — the +// same construction gen_golden uses — and checked bit-for-bit against the Rust +// reference fixtures g_.csv. +// +// wasm-pack build --target nodejs --out-dir pkg +// node --test tests/ + +const test = require('node:test'); +const assert = require('node:assert/strict'); +const fs = require('node:fs'); +const path = require('node:path'); +const W = require('../pkg/wickra_wasm.js'); + +const GOLDEN = path.resolve(__dirname, '..', '..', '..', 'testdata', 'golden'); + +function cell(s) { + if (s === 'nan') return NaN; + if (s === 'inf') return Infinity; + if (s === '-inf') return -Infinity; + return Number(s); +} + +function readCsv(name) { + const lines = fs.readFileSync(path.join(GOLDEN, name + '.csv'), 'utf8').split('\n'); + lines.shift(); + return lines.filter((l) => l.length > 0).map((l) => l.split(',').map(cell)); +} + +function readBarRows(name) { + const lines = fs.readFileSync(path.join(GOLDEN, name + '.csv'), 'utf8').split('\n'); + lines.shift(); + if (lines.length && lines[lines.length - 1] === '') lines.pop(); + return lines.map((l) => (l.length === 0 ? [] : l.split(',').map(cell))); +} + +const MANIFEST = JSON.parse(fs.readFileSync(path.join(GOLDEN, 'wasm_manifest.json'), 'utf8')); +const ROWS = readCsv('input'); + +function deriv(o, h, l, c, v) { + return { + funding_rate: ((c - o) / c) * 0.01, + mark_price: c, + index_price: c - 0.5, + futures_price: c + 1.0, + open_interest: v * 10.0, + long_size: v * 0.6, + short_size: v * 0.4, + taker_buy_volume: v * 0.55, + taker_sell_volume: v * 0.45, + long_liquidation: h - c, + short_liquidation: c - l, + }; +} + +function resolveArg(arg, o, h, l, c, v, i) { + const n = arg.name; + if (arg.array) { + const j5 = [0, 1, 2, 3, 4]; + switch (n) { + case 'change': return Float64Array.from(j5.map((j) => c - o + j)); + case 'volume': return Float64Array.from(j5.map((j) => v + j * 10.0)); + case 'new_high': return Float64Array.from(j5.map((j) => (j % 2 === 0 ? 1 : 0))); + case 'new_low': return Float64Array.from(j5.map((j) => (j % 3 === 0 ? 1 : 0))); + case 'above_ma': return Float64Array.from(j5.map((j) => (j % 2 === 0 ? 1 : 0))); + case 'on_buy_signal': return Float64Array.from(j5.map((j) => (j % 3 === 0 ? 1 : 0))); + case 'bid_px': return Float64Array.from(j5.map((k) => c - 0.1 * (k + 1))); + case 'bid_sz': return Float64Array.from(j5.map((k) => v / (k + 1))); + case 'ask_px': return Float64Array.from(j5.map((k) => c + 0.1 * (k + 1))); + case 'ask_sz': return Float64Array.from(j5.map((k) => (v * 0.9) / (k + 1))); + default: throw new Error('array arg ' + n); + } + } + if (arg.bigint) return BigInt(i); + switch (n) { + case 'value': case 'close': case 'price': case 'x': case 'a': case 'asset': return c; + case 'y': case 'b': case 'open': case 'benchmark': return o; + case 'high': return h; + case 'low': return l; + case 'volume': case 'size': return v; + case 'is_buy': return c >= o; + case 'mid': return (h + l) / 2.0; + case 'timestamp': return BigInt(i); + default: { + const d = deriv(o, h, l, c, v); + if (n in d) return d[n]; + throw new Error('scalar arg ' + n); + } + } +} + +// Recursively flatten a WASM output (number, object with field props, typed/array +// of either) into a flat number list. Returns null for warmup (null/undefined). +function flat(v) { + if (v === null || v === undefined) return null; + if (typeof v === 'number' || typeof v === 'bigint') return [Number(v)]; + if (Array.isArray(v) || ArrayBuffer.isView(v)) { + const out = []; + for (const e of v) { const f = flat(e); if (f) out.push(...f); } + return out; + } + if (typeof v === 'object') { + const out = []; + for (const val of Object.values(v)) { const f = flat(val); if (f) out.push(...f); } + return out; + } + return [Number(v)]; +} + +function nanRow(n) { + return Array.from({ length: n }, () => NaN); +} + +function widthOf(spec) { + if (spec.out.startsWith('multi') || spec.out === 'deriv_multi') return spec.n; + if (spec.out.startsWith('profile')) return spec.width; + return 1; // scalar archetypes +} + +function closeEq(got, want, label) { + if (Number.isNaN(want)) { assert.ok(Number.isNaN(got), `${label}: want NaN got ${got}`); return; } + if (!Number.isFinite(want)) { assert.ok(got === want, `${label}: want ${want} got ${got}`); return; } + const tol = 1e-6 * Math.max(1.0, Math.abs(want)); + assert.ok(Math.abs(got - want) <= tol, `${label}: got ${got} want ${want}`); +} + +for (const spec of MANIFEST) { + test(`wasm golden: ${spec.canonical}`, () => { + const Cls = W[spec.js]; + assert.ok(Cls, `missing WASM class ${spec.js}`); + const ind = new Cls(...spec.ctor); + const isBars = spec.out === 'bars' || spec.out === 'footprint'; + const expected = isBars ? readBarRows('g_' + spec.canonical) : readCsv('g_' + spec.canonical); + + for (let i = 0; i < ROWS.length; i++) { + const [o, h, l, c, v] = ROWS[i]; + const args = spec.args.map((a) => resolveArg(a, o, h, l, c, v, i)); + const raw = ind.update(...args); + const want = expected[i]; + const label = `${spec.canonical} row ${i}`; + + let got = flat(raw); + if (isBars) { + if (got === null) got = []; + } else if (got === null) { + got = nanRow(widthOf(spec)); + } + assert.equal(got.length, want.length, `${label}: arity ${got.length} vs ${want.length}`); + for (let k = 0; k < want.length; k++) closeEq(got[k], want[k], `${label} col ${k}`); + } + }); +} diff --git a/examples/c/CMakeLists.txt b/examples/c/CMakeLists.txt index 61020075..1ddfbe59 100644 --- a/examples/c/CMakeLists.txt +++ b/examples/c/CMakeLists.txt @@ -78,6 +78,33 @@ if(OpenMP_C_FOUND) target_link_libraries(parallel_assets PRIVATE OpenMP::OpenMP_C) endif() +# Golden-fixture parity over the whole 514-indicator catalogue, built and run as +# BOTH C (golden_test.c) and C++ (golden_test.cpp #includes the same source) to +# prove the C ABI header is consumable from each language. The fixtures live at +# the repo root; pass the absolute path as the test argument. +get_filename_component(WICKRA_GOLDEN_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../../testdata/golden" ABSOLUTE) +foreach(gt_pair "golden_test:golden_test.c" "golden_test_cpp:golden_test.cpp") + string(REPLACE ":" ";" gt_list "${gt_pair}") + list(GET gt_list 0 gt_name) + list(GET gt_list 1 gt_src) + add_executable(${gt_name} ${gt_src}) + target_include_directories(${gt_name} PRIVATE "${WICKRA_INCLUDE_DIR}") + target_link_libraries(${gt_name} PRIVATE "${WICKRA_LINK_LIB}") + if(UNIX AND NOT APPLE) + target_link_libraries(${gt_name} PRIVATE m) + endif() + if(WIN32) + add_custom_command(TARGET ${gt_name} POST_BUILD + COMMAND ${CMAKE_COMMAND} -E copy_if_different + "${WICKRA_RUNTIME}" "$") + endif() + add_test(NAME ${gt_name} COMMAND ${gt_name} "${WICKRA_GOLDEN_DIR}") + if(NOT WIN32) + set_tests_properties(${gt_name} PROPERTIES + ENVIRONMENT "LD_LIBRARY_PATH=${WICKRA_LIB_DIR};DYLD_LIBRARY_PATH=${WICKRA_LIB_DIR}") + endif() +endforeach() + # Network examples — built (so they stay compilable) but not run in CI. add_wickra_example(fetch_btcusdt fetch_btcusdt.c FALSE) # downloads CSVs via curl add_wickra_example(live_binance live_binance.c FALSE) # polls Binance REST via curl diff --git a/examples/c/gen_golden_test.py b/examples/c/gen_golden_test.py new file mode 100644 index 00000000..e71f168c --- /dev/null +++ b/examples/c/gen_golden_test.py @@ -0,0 +1,340 @@ +"""Generate examples/c/golden_test.c: a value-parity test that replays the shared +golden input through every one of the 514 indicators via the C ABI (wickra.h) +and checks output bit-for-bit against the Rust reference fixtures +g_.csv. The same source compiles under both a C compiler (the C +binding) and a C++ compiler (the C++ binding) — wickra.h is `extern "C"`. + +Run from repo root: python examples/c/gen_golden_test.py +""" +import json +import os +import re + +ROOT = os.path.normpath(os.path.join(os.path.dirname(__file__), "..", "..")) +G = os.path.join(ROOT, "testdata", "golden") +HDR = open(os.path.join(ROOT, "bindings", "c", "include", "wickra.h"), encoding="utf-8").read() + +# canonical -> C prefix, from the R wrappers (.wk_obj first arg == C symbol prefix). +RSRC = open(os.path.join(ROOT, "bindings", "r", "R", "indicators.R"), encoding="utf-8").read() +PREFIX = {m.group(1): m.group(2) + for m in re.finditer(r"^(\w+) <- function\([^)]*\) \{.*?\.wk_obj\(\"([^\"]+)\"", RSRC, re.S | re.M)} + +# wickra_* function signatures (return type, args), multiline-collapsed. +SIG = {} +for m in re.finditer(r"([A-Za-z_][\w ]*\*?)\s*(wickra_\w+)\(([^;]*?)\);", HDR, re.S): + SIG[m.group(2)] = (re.sub(r"\s+", " ", m.group(1)).strip(), re.sub(r"\s+", " ", m.group(3)).strip()) + +# archetype + n/width per canonical +spec = {} +for e in json.load(open(os.path.join(G, "scalar_manifest.json"))): + spec[e["canonical"]] = {"arch": {"f64": "scalar_f64", "Candle": "scalar_candle", "(f64, f64)": "pairwise"}[e["input"]], "params": e["params"]} +for e in json.load(open(os.path.join(G, "multi_manifest.json"))): + spec[e["canonical"]] = {"arch": {"f64": "multi_f64", "Candle": "multi_candle", "(f64, f64)": "multi_pairwise"}[e["input"]], "params": e["params"], "n": e["n"]} +ex = json.load(open(os.path.join(G, "exotic_manifest.json"))) +for e in ex["deriv"]: + spec[e["canonical"]] = {"arch": "deriv_multi" if "n" in e else "deriv", "params": e["params"], **({"n": e["n"]} if "n" in e else {})} +for fam, a in (("cross", "cross"), ("trade", "trade"), ("trademid", "trademid"), ("ob", "ob")): + for e in ex[fam]: + spec[e["canonical"]] = {"arch": a, "params": e["params"]} +for e in json.load(open(os.path.join(G, "profile_manifest.json"))): + spec[e["canonical"]] = {"arch": "profile_" + e["kind"], "params": e["params"], "width": e["width"]} +for e in json.load(open(os.path.join(G, "bars_manifest.json"))): + spec[e["canonical"]] = {"arch": "footprint" if e["canonical"] == "Footprint" else "bars_" + e["feed"], "params": e["params"]} + +canons = sorted(os.path.basename(f)[2:-4] for f in __import__("glob").glob(os.path.join(G, "g_*.csv"))) + +BAR_FIELDS = { + "RenkoBars": ["open", "close", "direction"], "KagiBars": ["start", "end", "direction"], + "PointAndFigureBars": ["direction", "high", "low"], "RangeBars": ["open", "close", "direction"], + "ThreeLineBreakBars": ["open", "close", "direction"], + "ImbalanceBars": ["open", "high", "low", "close", "imbalance", "direction"], + "RunBars": ["open", "high", "low", "close", "length", "direction"], + "DollarBars": ["open", "high", "low", "close", "volume", "dollar"], + "TickBars": ["open", "high", "low", "close", "volume"], + "VolumeBars": ["open", "high", "low", "close", "volume"], + "Footprint": ["price", "bid_vol", "ask_vol"], +} + + +# cbindgen appends '_' to struct fields that collide with C/C++ reserved words. +_C_RESERVED = {"long", "short", "int", "char", "float", "double", "new", "class", + "this", "delete", "register", "auto", "const", "void"} + + +def c_field(name): + return name + "_" if name in _C_RESERVED else name + + +def csv_header(canon): + with open(os.path.join(G, "g_" + canon + ".csv"), encoding="utf-8") as f: + return f.readline().strip().split(",") + + +def out_struct(prefix): + """The pointer-to-struct out param type of wickra__update, if any.""" + _, args = SIG["wickra_" + prefix + "_update"] + m = re.search(r"struct (\w+) \*out", args) + if m: + return "struct " + m.group(1) + m = re.search(r"struct (\w+) \*scalars", args) + if m: + return "struct " + m.group(1) + return None + + +def ctor_casts(prefix, params): + _, args = SIG["wickra_" + prefix + "_new"] + if not args: + return "" + types = [a.strip().rsplit(" ", 1)[0].strip() for a in args.split(",")] + out = [] + for t, v in zip(types, params): + if t in ("uintptr_t", "intptr_t", "size_t"): + out.append(f"(uintptr_t){int(round(v))}") + elif t in ("uint8_t",): + out.append(f"(uint8_t){int(round(v))}") + elif t in ("int32_t",): + out.append(f"(int32_t){int(round(v))}") + elif t in ("int64_t",): + out.append(f"(int64_t){int(round(v))}") + else: + out.append(repr(float(v))) + return ", ".join(out) + + +def gen_check(canon): + s = spec[canon] + p = PREFIX[canon] + a = s["arch"] + new = f"wickra_{p}_new({ctor_casts(p, s['params'])})" + upd = f"wickra_{p}_update" + L = [f"static int check_{canon}(void) {{", + f" struct {struct_name(p)} *h = {new};", + f' if (!h) {{ printf("FAIL {canon}: new returned NULL\\n"); return 1; }}', + f" double **exp; int rows = read_fixture(\"g_{canon}\", &exp);", + " int fails = 0;", + " for (int i = 0; i < N_INPUT; i++) {", + " double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4];", + " (void)o; (void)hi; (void)lo; (void)c; (void)v;", + " double got[128]; int gn = 0;"] + if a in ("scalar_f64", "multi_f64"): + call_args = "h, c" + elif a in ("pairwise", "multi_pairwise"): + call_args = "h, c, o" + elif a in ("scalar_candle", "multi_candle") or a.startswith("profile"): + call_args = "h, o, hi, lo, c, v, (int64_t)i" + elif a == "trade": + call_args = "h, c, v, c >= o, (int64_t)i" + elif a == "trademid": + call_args = "h, c, v, c >= o, (int64_t)i, (hi + lo) / 2.0" + elif a == "ob": + L.append(" double bp[5], bs[5], ap[5], asz[5];") + L.append(" for (int k = 0; k < 5; k++) { double 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; }") + call_args = "h, bp, bs, 5, ap, asz, 5" + elif a == "cross": + L.append(" double chg[5], vol[5]; bool nh[5], nl[5], am[5], ob[5];") + L.append(" for (int j = 0; j < 5; j++) { chg[j] = (c-o)+j; vol[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); }") + call_args = "h, chg, vol, nh, nl, am, ob, 5, (int64_t)i" + elif a in ("deriv", "deriv_multi"): + L.append(" double fr=(c-o)/c*0.01, mp=c, ip=c-0.5, fp=c+1.0, oi=v*10.0, ls=v*0.6, ss=v*0.4, tbv=v*0.55, tsv=v*0.45, ll=hi-c, sl=c-lo;") + call_args = "h, fr, mp, ip, fp, oi, ls, ss, tbv, tsv, ll, sl, (int64_t)i" + elif a == "bars_close": + call_args = "h, c, c, c, c, 1.0, 0" + elif a == "bars_candle4": + call_args = "h, o, hi, lo, c, 1.0, 0" + elif a == "bars_candle5": + call_args = "h, o, hi, lo, c, v, 0" + elif a == "footprint": + call_args = "h, c, v, c >= o, (int64_t)i" + else: + raise SystemExit("arch " + a) + + # output handling + if a in ("scalar_f64", "scalar_candle", "pairwise", "trade", "trademid", "ob", "cross", "deriv"): + L.append(f" got[gn++] = {upd}({call_args});") + elif a in ("multi_f64", "multi_candle", "multi_pairwise", "deriv_multi"): + st = out_struct(p) + fields = csv_header(canon) + L.append(f" {st} out;") + L.append(f" if ({upd}({call_args}, &out)) {{") + for f in fields: + L.append(f" got[gn++] = out.{c_field(f)};") + L.append(" } else {") + L.append(f" for (int z = 0; z < {len(fields)}; z++) got[gn++] = NANV;") + L.append(" }") + elif a == "profile_bins": + w = s["width"] + L.append(" double vbuf[256];") + L.append(f" intptr_t k = {upd}({call_args}, vbuf, 256);") + L.append(f" if (k < 0) {{ for (int z = 0; z < {w}; z++) got[gn++] = NANV; }}") + L.append(f" else {{ for (int z = 0; z < {w}; z++) got[gn++] = vbuf[z]; }}") + elif a == "profile_pricebins": + w = s["width"] + st = out_struct(p) + L.append(" double vbuf[256];") + L.append(f" {st} sc;") + L.append(f" intptr_t k = {upd}({call_args}, &sc, vbuf, 256);") + L.append(f" if (k < 0) {{ for (int z = 0; z < {w}; z++) got[gn++] = NANV; }}") + L.append(" else { got[gn++] = sc.price_low; got[gn++] = sc.price_high;") + L.append(f" for (int z = 0; z < {w - 2}; z++) got[gn++] = vbuf[z]; }}") + else: # bars_* / footprint + elem = out_struct(p) + fields = BAR_FIELDS[canon] + cap = 256 + L.append(f" {elem} bbuf[{cap}];") + if a == "footprint": + L.append(f" intptr_t k = {upd}({call_args}, bbuf, {cap});") + L.append(" if (k < 0) k = 0;") + else: + L.append(f" uintptr_t k = {upd}({call_args}, bbuf, {cap});") + L.append(" for (uintptr_t b = 0; b < (uintptr_t)k; b++) {") + for f in fields: + L.append(f" got[gn++] = (double)bbuf[b].{f};") + L.append(" }") + + L.append(" fails += cmp_row(\"" + canon + "\", i, exp[i], EXPLEN[i], got, gn);") + L.append(" }") + L.append(" free_fixture(exp, rows);") + L.append(f" wickra_{p}_free(h);") + L.append(" return fails;") + L.append("}") + return "\n".join(L) + + +def struct_name(prefix): + ret, _ = SIG["wickra_" + prefix + "_new"] + m = re.search(r"struct (\w+)", ret) + return m.group(1) + + +HEADER = r'''/* Generated by gen_golden_test.py. DO NOT EDIT. + * + * Value-parity for the whole 514-indicator catalogue through the Wickra C ABI. + * The same source compiles as C (gcc) and C++ (g++) since wickra.h is extern "C". + * Each indicator replays the shared golden input and is checked bit-for-bit + * against the Rust reference fixtures testdata/golden/g_.csv. */ +#include +#include +#include +#include +#include +#include "wickra.h" + +#define NANV (nan("")) +#define MAXROWS 512 +#define MAXCOLS 256 + +static double IN[MAXROWS][8]; +static int N_INPUT = 0; +static int EXPLEN[MAXROWS]; + +static const char *GDIR = NULL; + +static double parse_cell(const char *s) { + if (strcmp(s, "nan") == 0) return NANV; + if (strcmp(s, "inf") == 0) return INFINITY; + if (strcmp(s, "-inf") == 0) return -INFINITY; + return atof(s); +} + +static int split_line(char *line, double *out, int max) { + int n = 0; + char *p = line; + while (*p && n < max) { + char *comma = strchr(p, ','); + if (comma) *comma = '\0'; + out[n++] = parse_cell(p); + if (!comma) break; + p = comma + 1; + } + return n; +} + +static FILE *open_fixture(const char *name) { + char path[1024]; + snprintf(path, sizeof(path), "%s/%s.csv", GDIR, name); + return fopen(path, "r"); +} + +static void load_input(void) { + FILE *f = open_fixture("input"); + if (!f) { fprintf(stderr, "cannot open input.csv in %s\n", GDIR); exit(2); } + char line[8192]; + int first = 1; + while (fgets(line, sizeof(line), f)) { + line[strcspn(line, "\r\n")] = '\0'; + if (first) { first = 0; continue; } + if (line[0] == '\0') continue; + N_INPUT += (split_line(line, IN[N_INPUT], 8) > 0); + } + fclose(f); +} + +/* Read a fixture, keeping blank rows (a candle on which no bar closed). */ +static int read_fixture(const char *name, double ***outp) { + FILE *f = open_fixture(name); + if (!f) { fprintf(stderr, "cannot open %s.csv\n", name); exit(2); } + double **rows = (double **)malloc(sizeof(double *) * MAXROWS); + int n = 0, first = 1; + char line[8192]; + while (fgets(line, sizeof(line), f) && n < MAXROWS) { + line[strcspn(line, "\r\n")] = '\0'; + if (first) { first = 0; continue; } + double *vals = (double *)malloc(sizeof(double) * MAXCOLS); + int c = (line[0] == '\0') ? 0 : split_line(line, vals, MAXCOLS); + EXPLEN[n] = c; + rows[n++] = vals; + } + fclose(f); + *outp = rows; + return n; +} + +static void free_fixture(double **rows, int n) { + for (int i = 0; i < n; i++) free(rows[i]); + free(rows); +} + +static int close_to(double g, double w) { + if (isnan(w)) return isnan(g); + if (isinf(w)) return isinf(g) && ((g > 0) == (w > 0)); + double tol = 1e-6 * (fabs(w) > 1.0 ? fabs(w) : 1.0); + return fabs(g - w) <= tol; +} + +static int cmp_row(const char *name, int i, const double *want, int wn, const double *got, int gn) { + if (wn != gn) { + printf("FAIL %s row %d: arity %d vs %d\n", name, i, gn, wn); + return 1; + } + for (int k = 0; k < wn; k++) { + if (!close_to(got[k], want[k])) { + printf("FAIL %s row %d col %d: got %g want %g\n", name, i, k, got[k], want[k]); + return 1; + } + } + return 0; +} + +''' + +MAIN_HEAD = r''' +int main(int argc, char **argv) { + GDIR = (argc > 1) ? argv[1] : "testdata/golden"; + load_input(); + int total = 0, failed = 0; +''' + +out = [HEADER] +for canon in canons: + out.append(gen_check(canon)) +out.append(MAIN_HEAD) +for canon in canons: + out.append(f" total++; if (check_{canon}()) failed++;") +out.append(r''' printf("\nC/C++ golden: %d passed, %d failed (of %d)\n", total - failed, failed, total); + return failed ? 1 : 0; +}''') + +dest = os.path.join(ROOT, "examples", "c", "golden_test.c") +open(dest, "w", encoding="utf-8").write("\n".join(out) + "\n") +print("generated golden_test.c with", len(canons), "indicators") diff --git a/examples/c/golden_test.c b/examples/c/golden_test.c new file mode 100644 index 00000000..e71fbf31 --- /dev/null +++ b/examples/c/golden_test.c @@ -0,0 +1,9672 @@ +/* Generated by gen_golden_test.py. DO NOT EDIT. + * + * Value-parity for the whole 514-indicator catalogue through the Wickra C ABI. + * The same source compiles as C (gcc) and C++ (g++) since wickra.h is extern "C". + * Each indicator replays the shared golden input and is checked bit-for-bit + * against the Rust reference fixtures testdata/golden/g_.csv. */ +#include +#include +#include +#include +#include +#include "wickra.h" + +#define NANV (nan("")) +#define MAXROWS 512 +#define MAXCOLS 256 + +static double IN[MAXROWS][8]; +static int N_INPUT = 0; +static int EXPLEN[MAXROWS]; + +static const char *GDIR = NULL; + +static double parse_cell(const char *s) { + if (strcmp(s, "nan") == 0) return NANV; + if (strcmp(s, "inf") == 0) return INFINITY; + if (strcmp(s, "-inf") == 0) return -INFINITY; + return atof(s); +} + +static int split_line(char *line, double *out, int max) { + int n = 0; + char *p = line; + while (*p && n < max) { + char *comma = strchr(p, ','); + if (comma) *comma = '\0'; + out[n++] = parse_cell(p); + if (!comma) break; + p = comma + 1; + } + return n; +} + +static FILE *open_fixture(const char *name) { + char path[1024]; + snprintf(path, sizeof(path), "%s/%s.csv", GDIR, name); + return fopen(path, "r"); +} + +static void load_input(void) { + FILE *f = open_fixture("input"); + if (!f) { fprintf(stderr, "cannot open input.csv in %s\n", GDIR); exit(2); } + char line[8192]; + int first = 1; + while (fgets(line, sizeof(line), f)) { + line[strcspn(line, "\r\n")] = '\0'; + if (first) { first = 0; continue; } + if (line[0] == '\0') continue; + N_INPUT += (split_line(line, IN[N_INPUT], 8) > 0); + } + fclose(f); +} + +/* Read a fixture, keeping blank rows (a candle on which no bar closed). */ +static int read_fixture(const char *name, double ***outp) { + FILE *f = open_fixture(name); + if (!f) { fprintf(stderr, "cannot open %s.csv\n", name); exit(2); } + double **rows = (double **)malloc(sizeof(double *) * MAXROWS); + int n = 0, first = 1; + char line[8192]; + while (fgets(line, sizeof(line), f) && n < MAXROWS) { + line[strcspn(line, "\r\n")] = '\0'; + if (first) { first = 0; continue; } + double *vals = (double *)malloc(sizeof(double) * MAXCOLS); + int c = (line[0] == '\0') ? 0 : split_line(line, vals, MAXCOLS); + EXPLEN[n] = c; + rows[n++] = vals; + } + fclose(f); + *outp = rows; + return n; +} + +static void free_fixture(double **rows, int n) { + for (int i = 0; i < n; i++) free(rows[i]); + free(rows); +} + +static int close_to(double g, double w) { + if (isnan(w)) return isnan(g); + if (isinf(w)) return isinf(g) && ((g > 0) == (w > 0)); + double tol = 1e-6 * (fabs(w) > 1.0 ? fabs(w) : 1.0); + return fabs(g - w) <= tol; +} + +static int cmp_row(const char *name, int i, const double *want, int wn, const double *got, int gn) { + if (wn != gn) { + printf("FAIL %s row %d: arity %d vs %d\n", name, i, gn, wn); + return 1; + } + for (int k = 0; k < wn; k++) { + if (!close_to(got[k], want[k])) { + printf("FAIL %s row %d col %d: got %g want %g\n", name, i, k, got[k], want[k]); + return 1; + } + } + return 0; +} + + +static int check_AbandonedBaby(void) { + struct AbandonedBaby *h = wickra_abandoned_baby_new(); + if (!h) { printf("FAIL AbandonedBaby: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AbandonedBaby", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_abandoned_baby_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("AbandonedBaby", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_abandoned_baby_free(h); + return fails; +} +static int check_Abcd(void) { + struct Abcd *h = wickra_abcd_new(); + if (!h) { printf("FAIL Abcd: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Abcd", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_abcd_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Abcd", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_abcd_free(h); + return fails; +} +static int check_AbsoluteBreadthIndex(void) { + struct AbsoluteBreadthIndex *h = wickra_absolute_breadth_index_new(); + if (!h) { printf("FAIL AbsoluteBreadthIndex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AbsoluteBreadthIndex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double chg[5], vol[5]; bool nh[5], nl[5], am[5], ob[5]; + for (int j = 0; j < 5; j++) { chg[j] = (c-o)+j; vol[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); } + got[gn++] = wickra_absolute_breadth_index_update(h, chg, vol, nh, nl, am, ob, 5, (int64_t)i); + fails += cmp_row("AbsoluteBreadthIndex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_absolute_breadth_index_free(h); + return fails; +} +static int check_AccelerationBands(void) { + struct AccelerationBands *h = wickra_acceleration_bands_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL AccelerationBands: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AccelerationBands", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraAccelerationBandsOutput out; + if (wickra_acceleration_bands_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.upper; + got[gn++] = out.middle; + got[gn++] = out.lower; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("AccelerationBands", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_acceleration_bands_free(h); + return fails; +} +static int check_AcceleratorOscillator(void) { + struct AcceleratorOscillator *h = wickra_accelerator_oscillator_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14); + if (!h) { printf("FAIL AcceleratorOscillator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AcceleratorOscillator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_accelerator_oscillator_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("AcceleratorOscillator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_accelerator_oscillator_free(h); + return fails; +} +static int check_AdOscillator(void) { + struct AdOscillator *h = wickra_ad_oscillator_new(); + if (!h) { printf("FAIL AdOscillator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AdOscillator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_ad_oscillator_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("AdOscillator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ad_oscillator_free(h); + return fails; +} +static int check_AdVolumeLine(void) { + struct AdVolumeLine *h = wickra_ad_volume_line_new(); + if (!h) { printf("FAIL AdVolumeLine: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AdVolumeLine", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double chg[5], vol[5]; bool nh[5], nl[5], am[5], ob[5]; + for (int j = 0; j < 5; j++) { chg[j] = (c-o)+j; vol[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); } + got[gn++] = wickra_ad_volume_line_update(h, chg, vol, nh, nl, am, ob, 5, (int64_t)i); + fails += cmp_row("AdVolumeLine", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ad_volume_line_free(h); + return fails; +} +static int check_AdaptiveCci(void) { + struct AdaptiveCci *h = wickra_adaptive_cci_new((uintptr_t)14); + if (!h) { printf("FAIL AdaptiveCci: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AdaptiveCci", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_adaptive_cci_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("AdaptiveCci", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_adaptive_cci_free(h); + return fails; +} +static int check_AdaptiveCycle(void) { + struct AdaptiveCycle *h = wickra_adaptive_cycle_new(); + if (!h) { printf("FAIL AdaptiveCycle: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AdaptiveCycle", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_adaptive_cycle_update(h, c); + fails += cmp_row("AdaptiveCycle", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_adaptive_cycle_free(h); + return fails; +} +static int check_AdaptiveLaguerreFilter(void) { + struct AdaptiveLaguerreFilter *h = wickra_adaptive_laguerre_filter_new((uintptr_t)20); + if (!h) { printf("FAIL AdaptiveLaguerreFilter: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AdaptiveLaguerreFilter", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_adaptive_laguerre_filter_update(h, c); + fails += cmp_row("AdaptiveLaguerreFilter", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_adaptive_laguerre_filter_free(h); + return fails; +} +static int check_AdaptiveRsi(void) { + struct AdaptiveRsi *h = wickra_adaptive_rsi_new((uintptr_t)14); + if (!h) { printf("FAIL AdaptiveRsi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AdaptiveRsi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_adaptive_rsi_update(h, c); + fails += cmp_row("AdaptiveRsi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_adaptive_rsi_free(h); + return fails; +} +static int check_Adl(void) { + struct Adl *h = wickra_adl_new(); + if (!h) { printf("FAIL Adl: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Adl", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_adl_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Adl", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_adl_free(h); + return fails; +} +static int check_AdvanceBlock(void) { + struct AdvanceBlock *h = wickra_advance_block_new(); + if (!h) { printf("FAIL AdvanceBlock: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AdvanceBlock", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_advance_block_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("AdvanceBlock", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_advance_block_free(h); + return fails; +} +static int check_AdvanceDecline(void) { + struct AdvanceDecline *h = wickra_advance_decline_new(); + if (!h) { printf("FAIL AdvanceDecline: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AdvanceDecline", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double chg[5], vol[5]; bool nh[5], nl[5], am[5], ob[5]; + for (int j = 0; j < 5; j++) { chg[j] = (c-o)+j; vol[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); } + got[gn++] = wickra_advance_decline_update(h, chg, vol, nh, nl, am, ob, 5, (int64_t)i); + fails += cmp_row("AdvanceDecline", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_advance_decline_free(h); + return fails; +} +static int check_AdvanceDeclineRatio(void) { + struct AdvanceDeclineRatio *h = wickra_advance_decline_ratio_new(); + if (!h) { printf("FAIL AdvanceDeclineRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AdvanceDeclineRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double chg[5], vol[5]; bool nh[5], nl[5], am[5], ob[5]; + for (int j = 0; j < 5; j++) { chg[j] = (c-o)+j; vol[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); } + got[gn++] = wickra_advance_decline_ratio_update(h, chg, vol, nh, nl, am, ob, 5, (int64_t)i); + fails += cmp_row("AdvanceDeclineRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_advance_decline_ratio_free(h); + return fails; +} +static int check_Adx(void) { + struct Adx *h = wickra_adx_new((uintptr_t)14); + if (!h) { printf("FAIL Adx: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Adx", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraAdxOutput out; + if (wickra_adx_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.plus_di; + got[gn++] = out.minus_di; + got[gn++] = out.adx; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("Adx", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_adx_free(h); + return fails; +} +static int check_Adxr(void) { + struct Adxr *h = wickra_adxr_new((uintptr_t)14); + if (!h) { printf("FAIL Adxr: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Adxr", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_adxr_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Adxr", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_adxr_free(h); + return fails; +} +static int check_Alligator(void) { + struct Alligator *h = wickra_alligator_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14); + if (!h) { printf("FAIL Alligator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Alligator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraAlligatorOutput out; + if (wickra_alligator_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.jaw; + got[gn++] = out.teeth; + got[gn++] = out.lips; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("Alligator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_alligator_free(h); + return fails; +} +static int check_Alma(void) { + struct Alma *h = wickra_alma_new((uintptr_t)9, 0.85, 6.0); + if (!h) { printf("FAIL Alma: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Alma", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_alma_update(h, c); + fails += cmp_row("Alma", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_alma_free(h); + return fails; +} +static int check_Alpha(void) { + struct Alpha *h = wickra_alpha_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL Alpha: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Alpha", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_alpha_update(h, c, o); + fails += cmp_row("Alpha", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_alpha_free(h); + return fails; +} +static int check_AmihudIlliquidity(void) { + struct AmihudIlliquidity *h = wickra_amihud_illiquidity_new((uintptr_t)20); + if (!h) { printf("FAIL AmihudIlliquidity: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AmihudIlliquidity", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_amihud_illiquidity_update(h, c, v, c >= o, (int64_t)i); + fails += cmp_row("AmihudIlliquidity", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_amihud_illiquidity_free(h); + return fails; +} +static int check_AnchoredRsi(void) { + struct AnchoredRsi *h = wickra_anchored_rsi_new(); + if (!h) { printf("FAIL AnchoredRsi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AnchoredRsi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_anchored_rsi_update(h, c); + fails += cmp_row("AnchoredRsi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_anchored_rsi_free(h); + return fails; +} +static int check_AnchoredVwap(void) { + struct AnchoredVwap *h = wickra_anchored_vwap_new(); + if (!h) { printf("FAIL AnchoredVwap: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AnchoredVwap", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_anchored_vwap_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("AnchoredVwap", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_anchored_vwap_free(h); + return fails; +} +static int check_AndrewsPitchfork(void) { + struct AndrewsPitchfork *h = wickra_andrews_pitchfork_new((uintptr_t)14); + if (!h) { printf("FAIL AndrewsPitchfork: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AndrewsPitchfork", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraAndrewsPitchforkOutput out; + if (wickra_andrews_pitchfork_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.median; + got[gn++] = out.upper; + got[gn++] = out.lower; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("AndrewsPitchfork", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_andrews_pitchfork_free(h); + return fails; +} +static int check_Apo(void) { + struct Apo *h = wickra_apo_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL Apo: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Apo", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_apo_update(h, c); + fails += cmp_row("Apo", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_apo_free(h); + return fails; +} +static int check_Aroon(void) { + struct Aroon *h = wickra_aroon_new((uintptr_t)14); + if (!h) { printf("FAIL Aroon: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Aroon", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraAroonOutput out; + if (wickra_aroon_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.up; + got[gn++] = out.down; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("Aroon", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_aroon_free(h); + return fails; +} +static int check_AroonOscillator(void) { + struct AroonOscillator *h = wickra_aroon_oscillator_new((uintptr_t)14); + if (!h) { printf("FAIL AroonOscillator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AroonOscillator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_aroon_oscillator_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("AroonOscillator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_aroon_oscillator_free(h); + return fails; +} +static int check_Atr(void) { + struct Atr *h = wickra_atr_new((uintptr_t)14); + if (!h) { printf("FAIL Atr: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Atr", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_atr_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Atr", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_atr_free(h); + return fails; +} +static int check_AtrBands(void) { + struct AtrBands *h = wickra_atr_bands_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL AtrBands: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AtrBands", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraAtrBandsOutput out; + if (wickra_atr_bands_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.upper; + got[gn++] = out.middle; + got[gn++] = out.lower; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("AtrBands", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_atr_bands_free(h); + return fails; +} +static int check_AtrRatchet(void) { + struct AtrRatchet *h = wickra_atr_ratchet_new((uintptr_t)14, 2.0, 0.5); + if (!h) { printf("FAIL AtrRatchet: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AtrRatchet", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraAtrRatchetOutput out; + if (wickra_atr_ratchet_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.value; + got[gn++] = out.direction; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("AtrRatchet", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_atr_ratchet_free(h); + return fails; +} +static int check_AtrTrailingStop(void) { + struct AtrTrailingStop *h = wickra_atr_trailing_stop_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL AtrTrailingStop: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AtrTrailingStop", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_atr_trailing_stop_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("AtrTrailingStop", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_atr_trailing_stop_free(h); + return fails; +} +static int check_AutoFib(void) { + struct AutoFib *h = wickra_auto_fib_new(); + if (!h) { printf("FAIL AutoFib: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AutoFib", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraAutoFibOutput out; + if (wickra_auto_fib_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.level_0; + got[gn++] = out.level_236; + got[gn++] = out.level_382; + got[gn++] = out.level_500; + got[gn++] = out.level_618; + got[gn++] = out.level_786; + got[gn++] = out.level_1000; + } else { + for (int z = 0; z < 7; z++) got[gn++] = NANV; + } + fails += cmp_row("AutoFib", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_auto_fib_free(h); + return fails; +} +static int check_Autocorrelation(void) { + struct Autocorrelation *h = wickra_autocorrelation_new((uintptr_t)10, (uintptr_t)1); + if (!h) { printf("FAIL Autocorrelation: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Autocorrelation", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_autocorrelation_update(h, c); + fails += cmp_row("Autocorrelation", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_autocorrelation_free(h); + return fails; +} +static int check_AutocorrelationPeriodogram(void) { + struct AutocorrelationPeriodogram *h = wickra_autocorrelation_periodogram_new((uintptr_t)10, (uintptr_t)48); + if (!h) { printf("FAIL AutocorrelationPeriodogram: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AutocorrelationPeriodogram", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_autocorrelation_periodogram_update(h, c); + fails += cmp_row("AutocorrelationPeriodogram", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_autocorrelation_periodogram_free(h); + return fails; +} +static int check_AverageDailyRange(void) { + struct AverageDailyRange *h = wickra_average_daily_range_new((uintptr_t)14, (int32_t)0); + if (!h) { printf("FAIL AverageDailyRange: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AverageDailyRange", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_average_daily_range_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("AverageDailyRange", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_average_daily_range_free(h); + return fails; +} +static int check_AverageDrawdown(void) { + struct AverageDrawdown *h = wickra_average_drawdown_new((uintptr_t)14); + if (!h) { printf("FAIL AverageDrawdown: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AverageDrawdown", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_average_drawdown_update(h, c); + fails += cmp_row("AverageDrawdown", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_average_drawdown_free(h); + return fails; +} +static int check_AvgPrice(void) { + struct AvgPrice *h = wickra_avg_price_new(); + if (!h) { printf("FAIL AvgPrice: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AvgPrice", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_avg_price_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("AvgPrice", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_avg_price_free(h); + return fails; +} +static int check_AwesomeOscillator(void) { + struct AwesomeOscillator *h = wickra_awesome_oscillator_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL AwesomeOscillator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AwesomeOscillator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_awesome_oscillator_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("AwesomeOscillator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_awesome_oscillator_free(h); + return fails; +} +static int check_AwesomeOscillatorHistogram(void) { + struct AwesomeOscillatorHistogram *h = wickra_awesome_oscillator_histogram_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14); + if (!h) { printf("FAIL AwesomeOscillatorHistogram: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_AwesomeOscillatorHistogram", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_awesome_oscillator_histogram_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("AwesomeOscillatorHistogram", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_awesome_oscillator_histogram_free(h); + return fails; +} +static int check_BalanceOfPower(void) { + struct BalanceOfPower *h = wickra_balance_of_power_new(); + if (!h) { printf("FAIL BalanceOfPower: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_BalanceOfPower", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_balance_of_power_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("BalanceOfPower", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_balance_of_power_free(h); + return fails; +} +static int check_BandpassFilter(void) { + struct BandpassFilter *h = wickra_bandpass_filter_new((uintptr_t)20, 0.3); + if (!h) { printf("FAIL BandpassFilter: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_BandpassFilter", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_bandpass_filter_update(h, c); + fails += cmp_row("BandpassFilter", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_bandpass_filter_free(h); + return fails; +} +static int check_Bat(void) { + struct Bat *h = wickra_bat_new(); + if (!h) { printf("FAIL Bat: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Bat", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_bat_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Bat", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_bat_free(h); + return fails; +} +static int check_BeltHold(void) { + struct BeltHold *h = wickra_belt_hold_new(); + if (!h) { printf("FAIL BeltHold: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_BeltHold", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_belt_hold_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("BeltHold", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_belt_hold_free(h); + return fails; +} +static int check_Beta(void) { + struct Beta *h = wickra_beta_new((uintptr_t)14); + if (!h) { printf("FAIL Beta: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Beta", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_beta_update(h, c, o); + fails += cmp_row("Beta", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_beta_free(h); + return fails; +} +static int check_BetaNeutralSpread(void) { + struct BetaNeutralSpread *h = wickra_beta_neutral_spread_new((uintptr_t)14); + if (!h) { printf("FAIL BetaNeutralSpread: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_BetaNeutralSpread", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_beta_neutral_spread_update(h, c, o); + fails += cmp_row("BetaNeutralSpread", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_beta_neutral_spread_free(h); + return fails; +} +static int check_BetterVolume(void) { + struct BetterVolume *h = wickra_better_volume_new((uintptr_t)14); + if (!h) { printf("FAIL BetterVolume: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_BetterVolume", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_better_volume_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("BetterVolume", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_better_volume_free(h); + return fails; +} +static int check_BipowerVariation(void) { + struct BipowerVariation *h = wickra_bipower_variation_new((uintptr_t)14); + if (!h) { printf("FAIL BipowerVariation: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_BipowerVariation", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_bipower_variation_update(h, c); + fails += cmp_row("BipowerVariation", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_bipower_variation_free(h); + return fails; +} +static int check_BodySizePct(void) { + struct BodySizePct *h = wickra_body_size_pct_new(); + if (!h) { printf("FAIL BodySizePct: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_BodySizePct", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_body_size_pct_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("BodySizePct", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_body_size_pct_free(h); + return fails; +} +static int check_BollingerBands(void) { + struct BollingerBands *h = wickra_bollinger_bands_new((uintptr_t)20, 2.0); + if (!h) { printf("FAIL BollingerBands: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_BollingerBands", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraBollingerOutput out; + if (wickra_bollinger_bands_update(h, c, &out)) { + got[gn++] = out.upper; + got[gn++] = out.middle; + got[gn++] = out.lower; + got[gn++] = out.stddev; + } else { + for (int z = 0; z < 4; z++) got[gn++] = NANV; + } + fails += cmp_row("BollingerBands", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_bollinger_bands_free(h); + return fails; +} +static int check_BollingerBandwidth(void) { + struct BollingerBandwidth *h = wickra_bollinger_bandwidth_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL BollingerBandwidth: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_BollingerBandwidth", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_bollinger_bandwidth_update(h, c); + fails += cmp_row("BollingerBandwidth", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_bollinger_bandwidth_free(h); + return fails; +} +static int check_BomarBands(void) { + struct BomarBands *h = wickra_bomar_bands_new((uintptr_t)4, 0.85); + if (!h) { printf("FAIL BomarBands: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_BomarBands", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraBomarBandsOutput out; + if (wickra_bomar_bands_update(h, c, &out)) { + got[gn++] = out.upper; + got[gn++] = out.middle; + got[gn++] = out.lower; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("BomarBands", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_bomar_bands_free(h); + return fails; +} +static int check_BreadthThrust(void) { + struct BreadthThrust *h = wickra_breadth_thrust_new((uintptr_t)10); + if (!h) { printf("FAIL BreadthThrust: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_BreadthThrust", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double chg[5], vol[5]; bool nh[5], nl[5], am[5], ob[5]; + for (int j = 0; j < 5; j++) { chg[j] = (c-o)+j; vol[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); } + got[gn++] = wickra_breadth_thrust_update(h, chg, vol, nh, nl, am, ob, 5, (int64_t)i); + fails += cmp_row("BreadthThrust", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_breadth_thrust_free(h); + return fails; +} +static int check_Breakaway(void) { + struct Breakaway *h = wickra_breakaway_new(); + if (!h) { printf("FAIL Breakaway: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Breakaway", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_breakaway_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Breakaway", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_breakaway_free(h); + return fails; +} +static int check_BullishPercentIndex(void) { + struct BullishPercentIndex *h = wickra_bullish_percent_index_new(); + if (!h) { printf("FAIL BullishPercentIndex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_BullishPercentIndex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double chg[5], vol[5]; bool nh[5], nl[5], am[5], ob[5]; + for (int j = 0; j < 5; j++) { chg[j] = (c-o)+j; vol[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); } + got[gn++] = wickra_bullish_percent_index_update(h, chg, vol, nh, nl, am, ob, 5, (int64_t)i); + fails += cmp_row("BullishPercentIndex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_bullish_percent_index_free(h); + return fails; +} +static int check_BurkeRatio(void) { + struct BurkeRatio *h = wickra_burke_ratio_new((uintptr_t)14); + if (!h) { printf("FAIL BurkeRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_BurkeRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_burke_ratio_update(h, c); + fails += cmp_row("BurkeRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_burke_ratio_free(h); + return fails; +} +static int check_Butterfly(void) { + struct Butterfly *h = wickra_butterfly_new(); + if (!h) { printf("FAIL Butterfly: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Butterfly", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_butterfly_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Butterfly", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_butterfly_free(h); + return fails; +} +static int check_CalendarSpread(void) { + struct CalendarSpread *h = wickra_calendar_spread_new(); + if (!h) { printf("FAIL CalendarSpread: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_CalendarSpread", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double fr=(c-o)/c*0.01, mp=c, ip=c-0.5, fp=c+1.0, oi=v*10.0, ls=v*0.6, ss=v*0.4, tbv=v*0.55, tsv=v*0.45, ll=hi-c, sl=c-lo; + got[gn++] = wickra_calendar_spread_update(h, fr, mp, ip, fp, oi, ls, ss, tbv, tsv, ll, sl, (int64_t)i); + fails += cmp_row("CalendarSpread", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_calendar_spread_free(h); + return fails; +} +static int check_CalmarRatio(void) { + struct CalmarRatio *h = wickra_calmar_ratio_new((uintptr_t)14); + if (!h) { printf("FAIL CalmarRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_CalmarRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_calmar_ratio_update(h, c); + fails += cmp_row("CalmarRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_calmar_ratio_free(h); + return fails; +} +static int check_Camarilla(void) { + struct Camarilla *h = wickra_camarilla_new(); + if (!h) { printf("FAIL Camarilla: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Camarilla", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraCamarillaPivotsOutput out; + if (wickra_camarilla_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.pp; + got[gn++] = out.r1; + got[gn++] = out.r2; + got[gn++] = out.r3; + got[gn++] = out.r4; + got[gn++] = out.s1; + got[gn++] = out.s2; + got[gn++] = out.s3; + got[gn++] = out.s4; + } else { + for (int z = 0; z < 9; z++) got[gn++] = NANV; + } + fails += cmp_row("Camarilla", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_camarilla_free(h); + return fails; +} +static int check_CandleVolume(void) { + struct CandleVolume *h = wickra_candle_volume_new((uintptr_t)14); + if (!h) { printf("FAIL CandleVolume: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_CandleVolume", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraCandleVolumeOutput out; + if (wickra_candle_volume_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.body; + got[gn++] = out.width; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("CandleVolume", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_candle_volume_free(h); + return fails; +} +static int check_Cci(void) { + struct Cci *h = wickra_cci_new((uintptr_t)14); + if (!h) { printf("FAIL Cci: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Cci", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_cci_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Cci", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_cci_free(h); + return fails; +} +static int check_CenterOfGravity(void) { + struct CenterOfGravity *h = wickra_center_of_gravity_new((uintptr_t)14); + if (!h) { printf("FAIL CenterOfGravity: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_CenterOfGravity", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_center_of_gravity_update(h, c); + fails += cmp_row("CenterOfGravity", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_center_of_gravity_free(h); + return fails; +} +static int check_CentralPivotRange(void) { + struct CentralPivotRange *h = wickra_central_pivot_range_new(); + if (!h) { printf("FAIL CentralPivotRange: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_CentralPivotRange", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraCentralPivotRangeOutput out; + if (wickra_central_pivot_range_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.pivot; + got[gn++] = out.tc; + got[gn++] = out.bc; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("CentralPivotRange", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_central_pivot_range_free(h); + return fails; +} +static int check_Cfo(void) { + struct Cfo *h = wickra_cfo_new((uintptr_t)14); + if (!h) { printf("FAIL Cfo: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Cfo", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_cfo_update(h, c); + fails += cmp_row("Cfo", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_cfo_free(h); + return fails; +} +static int check_ChaikinMoneyFlow(void) { + struct ChaikinMoneyFlow *h = wickra_chaikin_money_flow_new((uintptr_t)20); + if (!h) { printf("FAIL ChaikinMoneyFlow: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ChaikinMoneyFlow", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_chaikin_money_flow_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("ChaikinMoneyFlow", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_chaikin_money_flow_free(h); + return fails; +} +static int check_ChaikinOscillator(void) { + struct ChaikinOscillator *h = wickra_chaikin_oscillator_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL ChaikinOscillator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ChaikinOscillator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_chaikin_oscillator_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("ChaikinOscillator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_chaikin_oscillator_free(h); + return fails; +} +static int check_ChaikinVolatility(void) { + struct ChaikinVolatility *h = wickra_chaikin_volatility_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL ChaikinVolatility: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ChaikinVolatility", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_chaikin_volatility_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("ChaikinVolatility", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_chaikin_volatility_free(h); + return fails; +} +static int check_ChandeKrollStop(void) { + struct ChandeKrollStop *h = wickra_chande_kroll_stop_new((uintptr_t)3, 2.0, (uintptr_t)7); + if (!h) { printf("FAIL ChandeKrollStop: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ChandeKrollStop", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraChandeKrollStopOutput out; + if (wickra_chande_kroll_stop_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.stop_long; + got[gn++] = out.stop_short; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("ChandeKrollStop", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_chande_kroll_stop_free(h); + return fails; +} +static int check_ChandelierExit(void) { + struct ChandelierExit *h = wickra_chandelier_exit_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL ChandelierExit: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ChandelierExit", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraChandelierExitOutput out; + if (wickra_chandelier_exit_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.long_stop; + got[gn++] = out.short_stop; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("ChandelierExit", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_chandelier_exit_free(h); + return fails; +} +static int check_ChoppinessIndex(void) { + struct ChoppinessIndex *h = wickra_choppiness_index_new((uintptr_t)14); + if (!h) { printf("FAIL ChoppinessIndex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ChoppinessIndex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_choppiness_index_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("ChoppinessIndex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_choppiness_index_free(h); + return fails; +} +static int check_ClassicPivots(void) { + struct ClassicPivots *h = wickra_classic_pivots_new(); + if (!h) { printf("FAIL ClassicPivots: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ClassicPivots", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraClassicPivotsOutput out; + if (wickra_classic_pivots_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.pp; + got[gn++] = out.r1; + got[gn++] = out.r2; + got[gn++] = out.r3; + got[gn++] = out.s1; + got[gn++] = out.s2; + got[gn++] = out.s3; + } else { + for (int z = 0; z < 7; z++) got[gn++] = NANV; + } + fails += cmp_row("ClassicPivots", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_classic_pivots_free(h); + return fails; +} +static int check_CloseVsOpen(void) { + struct CloseVsOpen *h = wickra_close_vs_open_new(); + if (!h) { printf("FAIL CloseVsOpen: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_CloseVsOpen", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_close_vs_open_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("CloseVsOpen", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_close_vs_open_free(h); + return fails; +} +static int check_ClosingMarubozu(void) { + struct ClosingMarubozu *h = wickra_closing_marubozu_new(); + if (!h) { printf("FAIL ClosingMarubozu: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ClosingMarubozu", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_closing_marubozu_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("ClosingMarubozu", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_closing_marubozu_free(h); + return fails; +} +static int check_Cmo(void) { + struct Cmo *h = wickra_cmo_new((uintptr_t)14); + if (!h) { printf("FAIL Cmo: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Cmo", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_cmo_update(h, c); + fails += cmp_row("Cmo", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_cmo_free(h); + return fails; +} +static int check_CoefficientOfVariation(void) { + struct CoefficientOfVariation *h = wickra_coefficient_of_variation_new((uintptr_t)14); + if (!h) { printf("FAIL CoefficientOfVariation: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_CoefficientOfVariation", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_coefficient_of_variation_update(h, c); + fails += cmp_row("CoefficientOfVariation", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_coefficient_of_variation_free(h); + return fails; +} +static int check_Cointegration(void) { + struct Cointegration *h = wickra_cointegration_new((uintptr_t)40, (uintptr_t)1); + if (!h) { printf("FAIL Cointegration: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Cointegration", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraCointegrationOutput out; + if (wickra_cointegration_update(h, c, o, &out)) { + got[gn++] = out.hedge_ratio; + got[gn++] = out.spread; + got[gn++] = out.adf_stat; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("Cointegration", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_cointegration_free(h); + return fails; +} +static int check_CommonSenseRatio(void) { + struct CommonSenseRatio *h = wickra_common_sense_ratio_new((uintptr_t)14); + if (!h) { printf("FAIL CommonSenseRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_CommonSenseRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_common_sense_ratio_update(h, c); + fails += cmp_row("CommonSenseRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_common_sense_ratio_free(h); + return fails; +} +static int check_CompositeProfile(void) { + struct CompositeProfile *h = wickra_composite_profile_new((uintptr_t)20, (uintptr_t)24, 0.7); + if (!h) { printf("FAIL CompositeProfile: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_CompositeProfile", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraCompositeProfileOutput out; + if (wickra_composite_profile_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.poc; + got[gn++] = out.vah; + got[gn++] = out.val; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("CompositeProfile", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_composite_profile_free(h); + return fails; +} +static int check_ConcealingBabySwallow(void) { + struct ConcealingBabySwallow *h = wickra_concealing_baby_swallow_new(); + if (!h) { printf("FAIL ConcealingBabySwallow: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ConcealingBabySwallow", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_concealing_baby_swallow_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("ConcealingBabySwallow", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_concealing_baby_swallow_free(h); + return fails; +} +static int check_ConditionalValueAtRisk(void) { + struct ConditionalValueAtRisk *h = wickra_conditional_value_at_risk_new((uintptr_t)20, 0.95); + if (!h) { printf("FAIL ConditionalValueAtRisk: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ConditionalValueAtRisk", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_conditional_value_at_risk_update(h, c); + fails += cmp_row("ConditionalValueAtRisk", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_conditional_value_at_risk_free(h); + return fails; +} +static int check_ConnorsRsi(void) { + struct ConnorsRsi *h = wickra_connors_rsi_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14); + if (!h) { printf("FAIL ConnorsRsi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ConnorsRsi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_connors_rsi_update(h, c); + fails += cmp_row("ConnorsRsi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_connors_rsi_free(h); + return fails; +} +static int check_Coppock(void) { + struct Coppock *h = wickra_coppock_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14); + if (!h) { printf("FAIL Coppock: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Coppock", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_coppock_update(h, c); + fails += cmp_row("Coppock", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_coppock_free(h); + return fails; +} +static int check_CorrelationTrendIndicator(void) { + struct CorrelationTrendIndicator *h = wickra_correlation_trend_indicator_new((uintptr_t)14); + if (!h) { printf("FAIL CorrelationTrendIndicator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_CorrelationTrendIndicator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_correlation_trend_indicator_update(h, c); + fails += cmp_row("CorrelationTrendIndicator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_correlation_trend_indicator_free(h); + return fails; +} +static int check_Counterattack(void) { + struct Counterattack *h = wickra_counterattack_new(); + if (!h) { printf("FAIL Counterattack: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Counterattack", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_counterattack_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Counterattack", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_counterattack_free(h); + return fails; +} +static int check_Crab(void) { + struct Crab *h = wickra_crab_new(); + if (!h) { printf("FAIL Crab: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Crab", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_crab_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Crab", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_crab_free(h); + return fails; +} +static int check_CumulativeVolumeDelta(void) { + struct CumulativeVolumeDelta *h = wickra_cumulative_volume_delta_new(); + if (!h) { printf("FAIL CumulativeVolumeDelta: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_CumulativeVolumeDelta", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_cumulative_volume_delta_update(h, c, v, c >= o, (int64_t)i); + fails += cmp_row("CumulativeVolumeDelta", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_cumulative_volume_delta_free(h); + return fails; +} +static int check_CumulativeVolumeIndex(void) { + struct CumulativeVolumeIndex *h = wickra_cumulative_volume_index_new(); + if (!h) { printf("FAIL CumulativeVolumeIndex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_CumulativeVolumeIndex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double chg[5], vol[5]; bool nh[5], nl[5], am[5], ob[5]; + for (int j = 0; j < 5; j++) { chg[j] = (c-o)+j; vol[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); } + got[gn++] = wickra_cumulative_volume_index_update(h, chg, vol, nh, nl, am, ob, 5, (int64_t)i); + fails += cmp_row("CumulativeVolumeIndex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_cumulative_volume_index_free(h); + return fails; +} +static int check_CupAndHandle(void) { + struct CupAndHandle *h = wickra_cup_and_handle_new(); + if (!h) { printf("FAIL CupAndHandle: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_CupAndHandle", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_cup_and_handle_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("CupAndHandle", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_cup_and_handle_free(h); + return fails; +} +static int check_CyberneticCycle(void) { + struct CyberneticCycle *h = wickra_cybernetic_cycle_new((uintptr_t)14); + if (!h) { printf("FAIL CyberneticCycle: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_CyberneticCycle", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_cybernetic_cycle_update(h, c); + fails += cmp_row("CyberneticCycle", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_cybernetic_cycle_free(h); + return fails; +} +static int check_Cypher(void) { + struct Cypher *h = wickra_cypher_new(); + if (!h) { printf("FAIL Cypher: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Cypher", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_cypher_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Cypher", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_cypher_free(h); + return fails; +} +static int check_DayOfWeekProfile(void) { + struct DayOfWeekProfile *h = wickra_day_of_week_profile_new((int32_t)0); + if (!h) { printf("FAIL DayOfWeekProfile: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_DayOfWeekProfile", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double vbuf[256]; + intptr_t k = wickra_day_of_week_profile_update(h, o, hi, lo, c, v, (int64_t)i, vbuf, 256); + if (k < 0) { for (int z = 0; z < 7; z++) got[gn++] = NANV; } + else { for (int z = 0; z < 7; z++) got[gn++] = vbuf[z]; } + fails += cmp_row("DayOfWeekProfile", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_day_of_week_profile_free(h); + return fails; +} +static int check_Decycler(void) { + struct Decycler *h = wickra_decycler_new((uintptr_t)14); + if (!h) { printf("FAIL Decycler: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Decycler", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_decycler_update(h, c); + fails += cmp_row("Decycler", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_decycler_free(h); + return fails; +} +static int check_DecyclerOscillator(void) { + struct DecyclerOscillator *h = wickra_decycler_oscillator_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL DecyclerOscillator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_DecyclerOscillator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_decycler_oscillator_update(h, c); + fails += cmp_row("DecyclerOscillator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_decycler_oscillator_free(h); + return fails; +} +static int check_Dema(void) { + struct Dema *h = wickra_dema_new((uintptr_t)14); + if (!h) { printf("FAIL Dema: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Dema", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_dema_update(h, c); + fails += cmp_row("Dema", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_dema_free(h); + return fails; +} +static int check_DemandIndex(void) { + struct DemandIndex *h = wickra_demand_index_new((uintptr_t)14); + if (!h) { printf("FAIL DemandIndex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_DemandIndex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_demand_index_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("DemandIndex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_demand_index_free(h); + return fails; +} +static int check_DemarkPivots(void) { + struct DemarkPivots *h = wickra_demark_pivots_new(); + if (!h) { printf("FAIL DemarkPivots: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_DemarkPivots", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraDemarkPivotsOutput out; + if (wickra_demark_pivots_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.pp; + got[gn++] = out.r1; + got[gn++] = out.s1; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("DemarkPivots", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_demark_pivots_free(h); + return fails; +} +static int check_DepthSlope(void) { + struct DepthSlope *h = wickra_depth_slope_new(); + if (!h) { printf("FAIL DepthSlope: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_DepthSlope", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double bp[5], bs[5], ap[5], asz[5]; + for (int k = 0; k < 5; k++) { double 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; } + got[gn++] = wickra_depth_slope_update(h, bp, bs, 5, ap, asz, 5); + fails += cmp_row("DepthSlope", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_depth_slope_free(h); + return fails; +} +static int check_DerivativeOscillator(void) { + struct DerivativeOscillator *h = wickra_derivative_oscillator_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14, (uintptr_t)28); + if (!h) { printf("FAIL DerivativeOscillator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_DerivativeOscillator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_derivative_oscillator_update(h, c); + fails += cmp_row("DerivativeOscillator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_derivative_oscillator_free(h); + return fails; +} +static int check_DetrendedStdDev(void) { + struct DetrendedStdDev *h = wickra_detrended_std_dev_new((uintptr_t)14); + if (!h) { printf("FAIL DetrendedStdDev: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_DetrendedStdDev", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_detrended_std_dev_update(h, c); + fails += cmp_row("DetrendedStdDev", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_detrended_std_dev_free(h); + return fails; +} +static int check_DisparityIndex(void) { + struct DisparityIndex *h = wickra_disparity_index_new((uintptr_t)14); + if (!h) { printf("FAIL DisparityIndex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_DisparityIndex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_disparity_index_update(h, c); + fails += cmp_row("DisparityIndex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_disparity_index_free(h); + return fails; +} +static int check_DistanceSsd(void) { + struct DistanceSsd *h = wickra_distance_ssd_new((uintptr_t)14); + if (!h) { printf("FAIL DistanceSsd: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_DistanceSsd", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_distance_ssd_update(h, c, o); + fails += cmp_row("DistanceSsd", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_distance_ssd_free(h); + return fails; +} +static int check_Doji(void) { + struct Doji *h = wickra_doji_new(); + if (!h) { printf("FAIL Doji: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Doji", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_doji_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Doji", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_doji_free(h); + return fails; +} +static int check_DojiStar(void) { + struct DojiStar *h = wickra_doji_star_new(); + if (!h) { printf("FAIL DojiStar: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_DojiStar", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_doji_star_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("DojiStar", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_doji_star_free(h); + return fails; +} +static int check_DollarBars(void) { + struct DollarBars *h = wickra_dollar_bars_new(50000.0); + if (!h) { printf("FAIL DollarBars: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_DollarBars", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraDollarBar bbuf[256]; + uintptr_t k = wickra_dollar_bars_update(h, o, hi, lo, c, v, 0, bbuf, 256); + for (uintptr_t b = 0; b < (uintptr_t)k; b++) { + got[gn++] = (double)bbuf[b].open; + got[gn++] = (double)bbuf[b].high; + got[gn++] = (double)bbuf[b].low; + got[gn++] = (double)bbuf[b].close; + got[gn++] = (double)bbuf[b].volume; + got[gn++] = (double)bbuf[b].dollar; + } + fails += cmp_row("DollarBars", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_dollar_bars_free(h); + return fails; +} +static int check_Donchian(void) { + struct Donchian *h = wickra_donchian_new((uintptr_t)14); + if (!h) { printf("FAIL Donchian: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Donchian", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraDonchianOutput out; + if (wickra_donchian_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.upper; + got[gn++] = out.middle; + got[gn++] = out.lower; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("Donchian", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_donchian_free(h); + return fails; +} +static int check_DonchianStop(void) { + struct DonchianStop *h = wickra_donchian_stop_new((uintptr_t)14); + if (!h) { printf("FAIL DonchianStop: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_DonchianStop", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraDonchianStopOutput out; + if (wickra_donchian_stop_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.stop_long; + got[gn++] = out.stop_short; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("DonchianStop", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_donchian_stop_free(h); + return fails; +} +static int check_DoubleBollinger(void) { + struct DoubleBollinger *h = wickra_double_bollinger_new((uintptr_t)20, 1.0, 2.0); + if (!h) { printf("FAIL DoubleBollinger: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_DoubleBollinger", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraDoubleBollingerOutput out; + if (wickra_double_bollinger_update(h, c, &out)) { + got[gn++] = out.upper_outer; + got[gn++] = out.upper_inner; + got[gn++] = out.middle; + got[gn++] = out.lower_inner; + got[gn++] = out.lower_outer; + } else { + for (int z = 0; z < 5; z++) got[gn++] = NANV; + } + fails += cmp_row("DoubleBollinger", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_double_bollinger_free(h); + return fails; +} +static int check_DoubleTopBottom(void) { + struct DoubleTopBottom *h = wickra_double_top_bottom_new(); + if (!h) { printf("FAIL DoubleTopBottom: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_DoubleTopBottom", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_double_top_bottom_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("DoubleTopBottom", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_double_top_bottom_free(h); + return fails; +} +static int check_DownsideGapThreeMethods(void) { + struct DownsideGapThreeMethods *h = wickra_downside_gap_three_methods_new(); + if (!h) { printf("FAIL DownsideGapThreeMethods: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_DownsideGapThreeMethods", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_downside_gap_three_methods_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("DownsideGapThreeMethods", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_downside_gap_three_methods_free(h); + return fails; +} +static int check_Dpo(void) { + struct Dpo *h = wickra_dpo_new((uintptr_t)14); + if (!h) { printf("FAIL Dpo: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Dpo", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_dpo_update(h, c); + fails += cmp_row("Dpo", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_dpo_free(h); + return fails; +} +static int check_DragonflyDoji(void) { + struct DragonflyDoji *h = wickra_dragonfly_doji_new(); + if (!h) { printf("FAIL DragonflyDoji: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_DragonflyDoji", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_dragonfly_doji_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("DragonflyDoji", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_dragonfly_doji_free(h); + return fails; +} +static int check_DrawdownDuration(void) { + struct DrawdownDuration *h = wickra_drawdown_duration_new(); + if (!h) { printf("FAIL DrawdownDuration: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_DrawdownDuration", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_drawdown_duration_update(h, c); + fails += cmp_row("DrawdownDuration", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_drawdown_duration_free(h); + return fails; +} +static int check_DumplingTop(void) { + struct DumplingTop *h = wickra_dumpling_top_new((uintptr_t)14); + if (!h) { printf("FAIL DumplingTop: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_DumplingTop", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_dumpling_top_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("DumplingTop", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_dumpling_top_free(h); + return fails; +} +static int check_Dx(void) { + struct Dx *h = wickra_dx_new((uintptr_t)14); + if (!h) { printf("FAIL Dx: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Dx", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_dx_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Dx", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_dx_free(h); + return fails; +} +static int check_DynamicMomentumIndex(void) { + struct DynamicMomentumIndex *h = wickra_dynamic_momentum_index_new((uintptr_t)14); + if (!h) { printf("FAIL DynamicMomentumIndex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_DynamicMomentumIndex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_dynamic_momentum_index_update(h, c); + fails += cmp_row("DynamicMomentumIndex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_dynamic_momentum_index_free(h); + return fails; +} +static int check_EaseOfMovement(void) { + struct EaseOfMovement *h = wickra_ease_of_movement_new((uintptr_t)14); + if (!h) { printf("FAIL EaseOfMovement: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_EaseOfMovement", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_ease_of_movement_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("EaseOfMovement", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ease_of_movement_free(h); + return fails; +} +static int check_EffectiveSpread(void) { + struct EffectiveSpread *h = wickra_effective_spread_new(); + if (!h) { printf("FAIL EffectiveSpread: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_EffectiveSpread", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_effective_spread_update(h, c, v, c >= o, (int64_t)i, (hi + lo) / 2.0); + fails += cmp_row("EffectiveSpread", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_effective_spread_free(h); + return fails; +} +static int check_EhlersStochastic(void) { + struct EhlersStochastic *h = wickra_ehlers_stochastic_new((uintptr_t)14); + if (!h) { printf("FAIL EhlersStochastic: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_EhlersStochastic", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_ehlers_stochastic_update(h, c); + fails += cmp_row("EhlersStochastic", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ehlers_stochastic_free(h); + return fails; +} +static int check_Ehma(void) { + struct Ehma *h = wickra_ehma_new((uintptr_t)14); + if (!h) { printf("FAIL Ehma: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Ehma", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_ehma_update(h, c); + fails += cmp_row("Ehma", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ehma_free(h); + return fails; +} +static int check_ElderImpulse(void) { + struct ElderImpulse *h = wickra_elder_impulse_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14, (uintptr_t)28); + if (!h) { printf("FAIL ElderImpulse: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ElderImpulse", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_elder_impulse_update(h, c); + fails += cmp_row("ElderImpulse", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_elder_impulse_free(h); + return fails; +} +static int check_ElderRay(void) { + struct ElderRay *h = wickra_elder_ray_new((uintptr_t)14); + if (!h) { printf("FAIL ElderRay: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ElderRay", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraElderRayOutput out; + if (wickra_elder_ray_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.bull_power; + got[gn++] = out.bear_power; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("ElderRay", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_elder_ray_free(h); + return fails; +} +static int check_ElderSafeZone(void) { + struct ElderSafeZone *h = wickra_elder_safe_zone_new((uintptr_t)10, 2.0); + if (!h) { printf("FAIL ElderSafeZone: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ElderSafeZone", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraElderSafeZoneOutput out; + if (wickra_elder_safe_zone_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.value; + got[gn++] = out.direction; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("ElderSafeZone", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_elder_safe_zone_free(h); + return fails; +} +static int check_Ema(void) { + struct Ema *h = wickra_ema_new((uintptr_t)14); + if (!h) { printf("FAIL Ema: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Ema", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_ema_update(h, c); + fails += cmp_row("Ema", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ema_free(h); + return fails; +} +static int check_EmpiricalModeDecomposition(void) { + struct EmpiricalModeDecomposition *h = wickra_empirical_mode_decomposition_new((uintptr_t)20, 0.1); + if (!h) { printf("FAIL EmpiricalModeDecomposition: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_EmpiricalModeDecomposition", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_empirical_mode_decomposition_update(h, c); + fails += cmp_row("EmpiricalModeDecomposition", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_empirical_mode_decomposition_free(h); + return fails; +} +static int check_Engulfing(void) { + struct Engulfing *h = wickra_engulfing_new(); + if (!h) { printf("FAIL Engulfing: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Engulfing", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_engulfing_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Engulfing", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_engulfing_free(h); + return fails; +} +static int check_Equivolume(void) { + struct Equivolume *h = wickra_equivolume_new((uintptr_t)14); + if (!h) { printf("FAIL Equivolume: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Equivolume", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraEquivolumeOutput out; + if (wickra_equivolume_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.height; + got[gn++] = out.width; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("Equivolume", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_equivolume_free(h); + return fails; +} +static int check_EstimatedLeverageRatio(void) { + struct EstimatedLeverageRatio *h = wickra_estimated_leverage_ratio_new(); + if (!h) { printf("FAIL EstimatedLeverageRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_EstimatedLeverageRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double fr=(c-o)/c*0.01, mp=c, ip=c-0.5, fp=c+1.0, oi=v*10.0, ls=v*0.6, ss=v*0.4, tbv=v*0.55, tsv=v*0.45, ll=hi-c, sl=c-lo; + got[gn++] = wickra_estimated_leverage_ratio_update(h, fr, mp, ip, fp, oi, ls, ss, tbv, tsv, ll, sl, (int64_t)i); + fails += cmp_row("EstimatedLeverageRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_estimated_leverage_ratio_free(h); + return fails; +} +static int check_EvenBetterSinewave(void) { + struct EvenBetterSinewave *h = wickra_even_better_sinewave_new((uintptr_t)40, (uintptr_t)10); + if (!h) { printf("FAIL EvenBetterSinewave: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_EvenBetterSinewave", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_even_better_sinewave_update(h, c); + fails += cmp_row("EvenBetterSinewave", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_even_better_sinewave_free(h); + return fails; +} +static int check_EveningDojiStar(void) { + struct EveningDojiStar *h = wickra_evening_doji_star_new(); + if (!h) { printf("FAIL EveningDojiStar: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_EveningDojiStar", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_evening_doji_star_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("EveningDojiStar", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_evening_doji_star_free(h); + return fails; +} +static int check_Evwma(void) { + struct Evwma *h = wickra_evwma_new((uintptr_t)14); + if (!h) { printf("FAIL Evwma: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Evwma", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_evwma_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Evwma", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_evwma_free(h); + return fails; +} +static int check_EwmaVolatility(void) { + struct EwmaVolatility *h = wickra_ewma_volatility_new(0.94); + if (!h) { printf("FAIL EwmaVolatility: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_EwmaVolatility", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_ewma_volatility_update(h, c); + fails += cmp_row("EwmaVolatility", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ewma_volatility_free(h); + return fails; +} +static int check_Expectancy(void) { + struct Expectancy *h = wickra_expectancy_new((uintptr_t)14); + if (!h) { printf("FAIL Expectancy: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Expectancy", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_expectancy_update(h, c); + fails += cmp_row("Expectancy", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_expectancy_free(h); + return fails; +} +static int check_FallingThreeMethods(void) { + struct FallingThreeMethods *h = wickra_falling_three_methods_new(); + if (!h) { printf("FAIL FallingThreeMethods: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FallingThreeMethods", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_falling_three_methods_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("FallingThreeMethods", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_falling_three_methods_free(h); + return fails; +} +static int check_Fama(void) { + struct Fama *h = wickra_fama_new(0.5, 0.05); + if (!h) { printf("FAIL Fama: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Fama", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_fama_update(h, c); + fails += cmp_row("Fama", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_fama_free(h); + return fails; +} +static int check_FibArcs(void) { + struct FibArcs *h = wickra_fib_arcs_new(); + if (!h) { printf("FAIL FibArcs: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FibArcs", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraFibArcsOutput out; + if (wickra_fib_arcs_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.arc_382; + got[gn++] = out.arc_500; + got[gn++] = out.arc_618; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("FibArcs", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_fib_arcs_free(h); + return fails; +} +static int check_FibChannel(void) { + struct FibChannel *h = wickra_fib_channel_new(); + if (!h) { printf("FAIL FibChannel: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FibChannel", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraFibChannelOutput out; + if (wickra_fib_channel_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.base; + got[gn++] = out.level_618; + got[gn++] = out.level_1000; + got[gn++] = out.level_1618; + } else { + for (int z = 0; z < 4; z++) got[gn++] = NANV; + } + fails += cmp_row("FibChannel", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_fib_channel_free(h); + return fails; +} +static int check_FibConfluence(void) { + struct FibConfluence *h = wickra_fib_confluence_new(); + if (!h) { printf("FAIL FibConfluence: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FibConfluence", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraFibConfluenceOutput out; + if (wickra_fib_confluence_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.price; + got[gn++] = out.strength; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("FibConfluence", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_fib_confluence_free(h); + return fails; +} +static int check_FibExtension(void) { + struct FibExtension *h = wickra_fib_extension_new(); + if (!h) { printf("FAIL FibExtension: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FibExtension", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraFibExtensionOutput out; + if (wickra_fib_extension_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.level_1272; + got[gn++] = out.level_1414; + got[gn++] = out.level_1618; + got[gn++] = out.level_2000; + got[gn++] = out.level_2618; + } else { + for (int z = 0; z < 5; z++) got[gn++] = NANV; + } + fails += cmp_row("FibExtension", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_fib_extension_free(h); + return fails; +} +static int check_FibFan(void) { + struct FibFan *h = wickra_fib_fan_new(); + if (!h) { printf("FAIL FibFan: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FibFan", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraFibFanOutput out; + if (wickra_fib_fan_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.fan_382; + got[gn++] = out.fan_500; + got[gn++] = out.fan_618; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("FibFan", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_fib_fan_free(h); + return fails; +} +static int check_FibProjection(void) { + struct FibProjection *h = wickra_fib_projection_new(); + if (!h) { printf("FAIL FibProjection: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FibProjection", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraFibProjectionOutput out; + if (wickra_fib_projection_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.level_618; + got[gn++] = out.level_1000; + got[gn++] = out.level_1618; + got[gn++] = out.level_2618; + } else { + for (int z = 0; z < 4; z++) got[gn++] = NANV; + } + fails += cmp_row("FibProjection", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_fib_projection_free(h); + return fails; +} +static int check_FibRetracement(void) { + struct FibRetracement *h = wickra_fib_retracement_new(); + if (!h) { printf("FAIL FibRetracement: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FibRetracement", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraFibRetracementOutput out; + if (wickra_fib_retracement_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.level_0; + got[gn++] = out.level_236; + got[gn++] = out.level_382; + got[gn++] = out.level_500; + got[gn++] = out.level_618; + got[gn++] = out.level_786; + got[gn++] = out.level_1000; + } else { + for (int z = 0; z < 7; z++) got[gn++] = NANV; + } + fails += cmp_row("FibRetracement", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_fib_retracement_free(h); + return fails; +} +static int check_FibTimeZones(void) { + struct FibTimeZones *h = wickra_fib_time_zones_new(); + if (!h) { printf("FAIL FibTimeZones: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FibTimeZones", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraFibTimeZonesOutput out; + if (wickra_fib_time_zones_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.on_zone; + got[gn++] = out.bars_to_next; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("FibTimeZones", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_fib_time_zones_free(h); + return fails; +} +static int check_FibonacciPivots(void) { + struct FibonacciPivots *h = wickra_fibonacci_pivots_new(); + if (!h) { printf("FAIL FibonacciPivots: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FibonacciPivots", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraFibonacciPivotsOutput out; + if (wickra_fibonacci_pivots_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.pp; + got[gn++] = out.r1; + got[gn++] = out.r2; + got[gn++] = out.r3; + got[gn++] = out.s1; + got[gn++] = out.s2; + got[gn++] = out.s3; + } else { + for (int z = 0; z < 7; z++) got[gn++] = NANV; + } + fails += cmp_row("FibonacciPivots", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_fibonacci_pivots_free(h); + return fails; +} +static int check_FisherRsi(void) { + struct FisherRsi *h = wickra_fisher_rsi_new((uintptr_t)14); + if (!h) { printf("FAIL FisherRsi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FisherRsi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_fisher_rsi_update(h, c); + fails += cmp_row("FisherRsi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_fisher_rsi_free(h); + return fails; +} +static int check_FisherTransform(void) { + struct FisherTransform *h = wickra_fisher_transform_new((uintptr_t)14); + if (!h) { printf("FAIL FisherTransform: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FisherTransform", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_fisher_transform_update(h, c); + fails += cmp_row("FisherTransform", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_fisher_transform_free(h); + return fails; +} +static int check_FlagPennant(void) { + struct FlagPennant *h = wickra_flag_pennant_new(); + if (!h) { printf("FAIL FlagPennant: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FlagPennant", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_flag_pennant_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("FlagPennant", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_flag_pennant_free(h); + return fails; +} +static int check_Footprint(void) { + struct Footprint *h = wickra_footprint_new(1.0); + if (!h) { printf("FAIL Footprint: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Footprint", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraFootprintLevel bbuf[256]; + intptr_t k = wickra_footprint_update(h, c, v, c >= o, (int64_t)i, bbuf, 256); + if (k < 0) k = 0; + for (uintptr_t b = 0; b < (uintptr_t)k; b++) { + got[gn++] = (double)bbuf[b].price; + got[gn++] = (double)bbuf[b].bid_vol; + got[gn++] = (double)bbuf[b].ask_vol; + } + fails += cmp_row("Footprint", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_footprint_free(h); + return fails; +} +static int check_ForceIndex(void) { + struct ForceIndex *h = wickra_force_index_new((uintptr_t)14); + if (!h) { printf("FAIL ForceIndex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ForceIndex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_force_index_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("ForceIndex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_force_index_free(h); + return fails; +} +static int check_FractalChaosBands(void) { + struct FractalChaosBands *h = wickra_fractal_chaos_bands_new((uintptr_t)14); + if (!h) { printf("FAIL FractalChaosBands: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FractalChaosBands", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraFractalChaosBandsOutput out; + if (wickra_fractal_chaos_bands_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.upper; + got[gn++] = out.lower; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("FractalChaosBands", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_fractal_chaos_bands_free(h); + return fails; +} +static int check_Frama(void) { + struct Frama *h = wickra_frama_new((uintptr_t)14); + if (!h) { printf("FAIL Frama: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Frama", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_frama_update(h, c); + fails += cmp_row("Frama", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_frama_free(h); + return fails; +} +static int check_FryPanBottom(void) { + struct FryPanBottom *h = wickra_fry_pan_bottom_new((uintptr_t)14); + if (!h) { printf("FAIL FryPanBottom: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FryPanBottom", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_fry_pan_bottom_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("FryPanBottom", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_fry_pan_bottom_free(h); + return fails; +} +static int check_FundingBasis(void) { + struct FundingBasis *h = wickra_funding_basis_new(); + if (!h) { printf("FAIL FundingBasis: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FundingBasis", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double fr=(c-o)/c*0.01, mp=c, ip=c-0.5, fp=c+1.0, oi=v*10.0, ls=v*0.6, ss=v*0.4, tbv=v*0.55, tsv=v*0.45, ll=hi-c, sl=c-lo; + got[gn++] = wickra_funding_basis_update(h, fr, mp, ip, fp, oi, ls, ss, tbv, tsv, ll, sl, (int64_t)i); + fails += cmp_row("FundingBasis", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_funding_basis_free(h); + return fails; +} +static int check_FundingImpliedApr(void) { + struct FundingImpliedApr *h = wickra_funding_implied_apr_new(1095.0); + if (!h) { printf("FAIL FundingImpliedApr: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FundingImpliedApr", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double fr=(c-o)/c*0.01, mp=c, ip=c-0.5, fp=c+1.0, oi=v*10.0, ls=v*0.6, ss=v*0.4, tbv=v*0.55, tsv=v*0.45, ll=hi-c, sl=c-lo; + got[gn++] = wickra_funding_implied_apr_update(h, fr, mp, ip, fp, oi, ls, ss, tbv, tsv, ll, sl, (int64_t)i); + fails += cmp_row("FundingImpliedApr", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_funding_implied_apr_free(h); + return fails; +} +static int check_FundingRate(void) { + struct FundingRate *h = wickra_funding_rate_new(); + if (!h) { printf("FAIL FundingRate: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FundingRate", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double fr=(c-o)/c*0.01, mp=c, ip=c-0.5, fp=c+1.0, oi=v*10.0, ls=v*0.6, ss=v*0.4, tbv=v*0.55, tsv=v*0.45, ll=hi-c, sl=c-lo; + got[gn++] = wickra_funding_rate_update(h, fr, mp, ip, fp, oi, ls, ss, tbv, tsv, ll, sl, (int64_t)i); + fails += cmp_row("FundingRate", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_funding_rate_free(h); + return fails; +} +static int check_FundingRateMean(void) { + struct FundingRateMean *h = wickra_funding_rate_mean_new((uintptr_t)20); + if (!h) { printf("FAIL FundingRateMean: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FundingRateMean", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double fr=(c-o)/c*0.01, mp=c, ip=c-0.5, fp=c+1.0, oi=v*10.0, ls=v*0.6, ss=v*0.4, tbv=v*0.55, tsv=v*0.45, ll=hi-c, sl=c-lo; + got[gn++] = wickra_funding_rate_mean_update(h, fr, mp, ip, fp, oi, ls, ss, tbv, tsv, ll, sl, (int64_t)i); + fails += cmp_row("FundingRateMean", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_funding_rate_mean_free(h); + return fails; +} +static int check_FundingRateZScore(void) { + struct FundingRateZScore *h = wickra_funding_rate_z_score_new((uintptr_t)20); + if (!h) { printf("FAIL FundingRateZScore: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_FundingRateZScore", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double fr=(c-o)/c*0.01, mp=c, ip=c-0.5, fp=c+1.0, oi=v*10.0, ls=v*0.6, ss=v*0.4, tbv=v*0.55, tsv=v*0.45, ll=hi-c, sl=c-lo; + got[gn++] = wickra_funding_rate_z_score_update(h, fr, mp, ip, fp, oi, ls, ss, tbv, tsv, ll, sl, (int64_t)i); + fails += cmp_row("FundingRateZScore", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_funding_rate_z_score_free(h); + return fails; +} +static int check_GainLossRatio(void) { + struct GainLossRatio *h = wickra_gain_loss_ratio_new((uintptr_t)14); + if (!h) { printf("FAIL GainLossRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_GainLossRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_gain_loss_ratio_update(h, c); + fails += cmp_row("GainLossRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_gain_loss_ratio_free(h); + return fails; +} +static int check_GainToPainRatio(void) { + struct GainToPainRatio *h = wickra_gain_to_pain_ratio_new((uintptr_t)14); + if (!h) { printf("FAIL GainToPainRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_GainToPainRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_gain_to_pain_ratio_update(h, c); + fails += cmp_row("GainToPainRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_gain_to_pain_ratio_free(h); + return fails; +} +static int check_GapSideBySideWhite(void) { + struct GapSideBySideWhite *h = wickra_gap_side_by_side_white_new(); + if (!h) { printf("FAIL GapSideBySideWhite: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_GapSideBySideWhite", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_gap_side_by_side_white_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("GapSideBySideWhite", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_gap_side_by_side_white_free(h); + return fails; +} +static int check_Garch11(void) { + struct Garch11 *h = wickra_garch11_new(2e-06, 0.1, 0.88); + if (!h) { printf("FAIL Garch11: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Garch11", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_garch11_update(h, c); + fails += cmp_row("Garch11", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_garch11_free(h); + return fails; +} +static int check_GarmanKlassVolatility(void) { + struct GarmanKlassVolatility *h = wickra_garman_klass_volatility_new((uintptr_t)20, (uintptr_t)252); + if (!h) { printf("FAIL GarmanKlassVolatility: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_GarmanKlassVolatility", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_garman_klass_volatility_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("GarmanKlassVolatility", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_garman_klass_volatility_free(h); + return fails; +} +static int check_Gartley(void) { + struct Gartley *h = wickra_gartley_new(); + if (!h) { printf("FAIL Gartley: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Gartley", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_gartley_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Gartley", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_gartley_free(h); + return fails; +} +static int check_GatorOscillator(void) { + struct GatorOscillator *h = wickra_gator_oscillator_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14); + if (!h) { printf("FAIL GatorOscillator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_GatorOscillator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraGatorOscillatorOutput out; + if (wickra_gator_oscillator_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.upper; + got[gn++] = out.lower; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("GatorOscillator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_gator_oscillator_free(h); + return fails; +} +static int check_GeneralizedDema(void) { + struct GeneralizedDema *h = wickra_generalized_dema_new((uintptr_t)5, 0.7); + if (!h) { printf("FAIL GeneralizedDema: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_GeneralizedDema", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_generalized_dema_update(h, c); + fails += cmp_row("GeneralizedDema", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_generalized_dema_free(h); + return fails; +} +static int check_GeometricMa(void) { + struct GeometricMa *h = wickra_geometric_ma_new((uintptr_t)14); + if (!h) { printf("FAIL GeometricMa: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_GeometricMa", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_geometric_ma_update(h, c); + fails += cmp_row("GeometricMa", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_geometric_ma_free(h); + return fails; +} +static int check_GoldenPocket(void) { + struct GoldenPocket *h = wickra_golden_pocket_new(); + if (!h) { printf("FAIL GoldenPocket: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_GoldenPocket", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraGoldenPocketOutput out; + if (wickra_golden_pocket_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.low; + got[gn++] = out.mid; + got[gn++] = out.high; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("GoldenPocket", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_golden_pocket_free(h); + return fails; +} +static int check_GrangerCausality(void) { + struct GrangerCausality *h = wickra_granger_causality_new((uintptr_t)60, (uintptr_t)1); + if (!h) { printf("FAIL GrangerCausality: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_GrangerCausality", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_granger_causality_update(h, c, o); + fails += cmp_row("GrangerCausality", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_granger_causality_free(h); + return fails; +} +static int check_GravestoneDoji(void) { + struct GravestoneDoji *h = wickra_gravestone_doji_new(); + if (!h) { printf("FAIL GravestoneDoji: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_GravestoneDoji", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_gravestone_doji_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("GravestoneDoji", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_gravestone_doji_free(h); + return fails; +} +static int check_Hammer(void) { + struct Hammer *h = wickra_hammer_new(); + if (!h) { printf("FAIL Hammer: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Hammer", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_hammer_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Hammer", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_hammer_free(h); + return fails; +} +static int check_HangingMan(void) { + struct HangingMan *h = wickra_hanging_man_new(); + if (!h) { printf("FAIL HangingMan: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HangingMan", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_hanging_man_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("HangingMan", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_hanging_man_free(h); + return fails; +} +static int check_Harami(void) { + struct Harami *h = wickra_harami_new(); + if (!h) { printf("FAIL Harami: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Harami", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_harami_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Harami", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_harami_free(h); + return fails; +} +static int check_HaramiCross(void) { + struct HaramiCross *h = wickra_harami_cross_new(); + if (!h) { printf("FAIL HaramiCross: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HaramiCross", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_harami_cross_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("HaramiCross", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_harami_cross_free(h); + return fails; +} +static int check_HasbrouckInformationShare(void) { + struct HasbrouckInformationShare *h = wickra_hasbrouck_information_share_new((uintptr_t)14); + if (!h) { printf("FAIL HasbrouckInformationShare: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HasbrouckInformationShare", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_hasbrouck_information_share_update(h, c, o); + fails += cmp_row("HasbrouckInformationShare", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_hasbrouck_information_share_free(h); + return fails; +} +static int check_HeadAndShoulders(void) { + struct HeadAndShoulders *h = wickra_head_and_shoulders_new(); + if (!h) { printf("FAIL HeadAndShoulders: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HeadAndShoulders", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_head_and_shoulders_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("HeadAndShoulders", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_head_and_shoulders_free(h); + return fails; +} +static int check_HeikinAshi(void) { + struct HeikinAshi *h = wickra_heikin_ashi_new(); + if (!h) { printf("FAIL HeikinAshi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HeikinAshi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraHeikinAshiOutput out; + if (wickra_heikin_ashi_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.open; + got[gn++] = out.high; + got[gn++] = out.low; + got[gn++] = out.close; + } else { + for (int z = 0; z < 4; z++) got[gn++] = NANV; + } + fails += cmp_row("HeikinAshi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_heikin_ashi_free(h); + return fails; +} +static int check_HeikinAshiOscillator(void) { + struct HeikinAshiOscillator *h = wickra_heikin_ashi_oscillator_new((uintptr_t)14); + if (!h) { printf("FAIL HeikinAshiOscillator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HeikinAshiOscillator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_heikin_ashi_oscillator_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("HeikinAshiOscillator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_heikin_ashi_oscillator_free(h); + return fails; +} +static int check_HiLoActivator(void) { + struct HiLoActivator *h = wickra_hi_lo_activator_new((uintptr_t)14); + if (!h) { printf("FAIL HiLoActivator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HiLoActivator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_hi_lo_activator_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("HiLoActivator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_hi_lo_activator_free(h); + return fails; +} +static int check_HighLowIndex(void) { + struct HighLowIndex *h = wickra_high_low_index_new((uintptr_t)10); + if (!h) { printf("FAIL HighLowIndex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HighLowIndex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double chg[5], vol[5]; bool nh[5], nl[5], am[5], ob[5]; + for (int j = 0; j < 5; j++) { chg[j] = (c-o)+j; vol[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); } + got[gn++] = wickra_high_low_index_update(h, chg, vol, nh, nl, am, ob, 5, (int64_t)i); + fails += cmp_row("HighLowIndex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_high_low_index_free(h); + return fails; +} +static int check_HighLowRange(void) { + struct HighLowRange *h = wickra_high_low_range_new(); + if (!h) { printf("FAIL HighLowRange: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HighLowRange", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_high_low_range_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("HighLowRange", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_high_low_range_free(h); + return fails; +} +static int check_HighLowVolumeNodes(void) { + struct HighLowVolumeNodes *h = wickra_high_low_volume_nodes_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL HighLowVolumeNodes: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HighLowVolumeNodes", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraHighLowVolumeNodesOutput out; + if (wickra_high_low_volume_nodes_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.hvn; + got[gn++] = out.lvn; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("HighLowVolumeNodes", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_high_low_volume_nodes_free(h); + return fails; +} +static int check_HighWave(void) { + struct HighWave *h = wickra_high_wave_new(); + if (!h) { printf("FAIL HighWave: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HighWave", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_high_wave_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("HighWave", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_high_wave_free(h); + return fails; +} +static int check_HighpassFilter(void) { + struct HighpassFilter *h = wickra_highpass_filter_new((uintptr_t)14); + if (!h) { printf("FAIL HighpassFilter: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HighpassFilter", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_highpass_filter_update(h, c); + fails += cmp_row("HighpassFilter", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_highpass_filter_free(h); + return fails; +} +static int check_Hikkake(void) { + struct Hikkake *h = wickra_hikkake_new(); + if (!h) { printf("FAIL Hikkake: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Hikkake", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_hikkake_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Hikkake", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_hikkake_free(h); + return fails; +} +static int check_HikkakeModified(void) { + struct HikkakeModified *h = wickra_hikkake_modified_new(); + if (!h) { printf("FAIL HikkakeModified: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HikkakeModified", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_hikkake_modified_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("HikkakeModified", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_hikkake_modified_free(h); + return fails; +} +static int check_HilbertDominantCycle(void) { + struct HilbertDominantCycle *h = wickra_hilbert_dominant_cycle_new(); + if (!h) { printf("FAIL HilbertDominantCycle: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HilbertDominantCycle", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_hilbert_dominant_cycle_update(h, c); + fails += cmp_row("HilbertDominantCycle", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_hilbert_dominant_cycle_free(h); + return fails; +} +static int check_HistoricalVolatility(void) { + struct HistoricalVolatility *h = wickra_historical_volatility_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL HistoricalVolatility: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HistoricalVolatility", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_historical_volatility_update(h, c); + fails += cmp_row("HistoricalVolatility", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_historical_volatility_free(h); + return fails; +} +static int check_Hma(void) { + struct Hma *h = wickra_hma_new((uintptr_t)14); + if (!h) { printf("FAIL Hma: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Hma", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_hma_update(h, c); + fails += cmp_row("Hma", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_hma_free(h); + return fails; +} +static int check_HoltWinters(void) { + struct HoltWinters *h = wickra_holt_winters_new(0.5, 0.1); + if (!h) { printf("FAIL HoltWinters: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HoltWinters", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_holt_winters_update(h, c); + fails += cmp_row("HoltWinters", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_holt_winters_free(h); + return fails; +} +static int check_HomingPigeon(void) { + struct HomingPigeon *h = wickra_homing_pigeon_new(); + if (!h) { printf("FAIL HomingPigeon: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HomingPigeon", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_homing_pigeon_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("HomingPigeon", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_homing_pigeon_free(h); + return fails; +} +static int check_HtDcPhase(void) { + struct HtDcPhase *h = wickra_ht_dc_phase_new(); + if (!h) { printf("FAIL HtDcPhase: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HtDcPhase", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_ht_dc_phase_update(h, c); + fails += cmp_row("HtDcPhase", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ht_dc_phase_free(h); + return fails; +} +static int check_HtPhasor(void) { + struct HtPhasor *h = wickra_ht_phasor_new(); + if (!h) { printf("FAIL HtPhasor: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HtPhasor", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraHtPhasorOutput out; + if (wickra_ht_phasor_update(h, c, &out)) { + got[gn++] = out.inphase; + got[gn++] = out.quadrature; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("HtPhasor", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ht_phasor_free(h); + return fails; +} +static int check_HtTrendMode(void) { + struct HtTrendMode *h = wickra_ht_trend_mode_new(); + if (!h) { printf("FAIL HtTrendMode: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HtTrendMode", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_ht_trend_mode_update(h, c); + fails += cmp_row("HtTrendMode", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ht_trend_mode_free(h); + return fails; +} +static int check_HurstChannel(void) { + struct HurstChannel *h = wickra_hurst_channel_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL HurstChannel: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HurstChannel", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraHurstChannelOutput out; + if (wickra_hurst_channel_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.upper; + got[gn++] = out.middle; + got[gn++] = out.lower; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("HurstChannel", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_hurst_channel_free(h); + return fails; +} +static int check_HurstExponent(void) { + struct HurstExponent *h = wickra_hurst_exponent_new((uintptr_t)100, (uintptr_t)4); + if (!h) { printf("FAIL HurstExponent: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_HurstExponent", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_hurst_exponent_update(h, c); + fails += cmp_row("HurstExponent", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_hurst_exponent_free(h); + return fails; +} +static int check_Ichimoku(void) { + struct Ichimoku *h = wickra_ichimoku_new((uintptr_t)9, (uintptr_t)26, (uintptr_t)52, (uintptr_t)26); + if (!h) { printf("FAIL Ichimoku: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Ichimoku", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraIchimokuOutput out; + if (wickra_ichimoku_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.tenkan; + got[gn++] = out.kijun; + got[gn++] = out.senkou_a; + got[gn++] = out.senkou_b; + got[gn++] = out.chikou; + } else { + for (int z = 0; z < 5; z++) got[gn++] = NANV; + } + fails += cmp_row("Ichimoku", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ichimoku_free(h); + return fails; +} +static int check_IdenticalThreeCrows(void) { + struct IdenticalThreeCrows *h = wickra_identical_three_crows_new(); + if (!h) { printf("FAIL IdenticalThreeCrows: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_IdenticalThreeCrows", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_identical_three_crows_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("IdenticalThreeCrows", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_identical_three_crows_free(h); + return fails; +} +static int check_ImbalanceBars(void) { + struct ImbalanceBars *h = wickra_imbalance_bars_new(5.0); + if (!h) { printf("FAIL ImbalanceBars: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ImbalanceBars", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraImbalanceBar bbuf[256]; + uintptr_t k = wickra_imbalance_bars_update(h, o, hi, lo, c, 1.0, 0, bbuf, 256); + for (uintptr_t b = 0; b < (uintptr_t)k; b++) { + got[gn++] = (double)bbuf[b].open; + got[gn++] = (double)bbuf[b].high; + got[gn++] = (double)bbuf[b].low; + got[gn++] = (double)bbuf[b].close; + got[gn++] = (double)bbuf[b].imbalance; + got[gn++] = (double)bbuf[b].direction; + } + fails += cmp_row("ImbalanceBars", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_imbalance_bars_free(h); + return fails; +} +static int check_InNeck(void) { + struct InNeck *h = wickra_in_neck_new(); + if (!h) { printf("FAIL InNeck: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_InNeck", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_in_neck_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("InNeck", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_in_neck_free(h); + return fails; +} +static int check_Inertia(void) { + struct Inertia *h = wickra_inertia_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL Inertia: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Inertia", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_inertia_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Inertia", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_inertia_free(h); + return fails; +} +static int check_InformationRatio(void) { + struct InformationRatio *h = wickra_information_ratio_new((uintptr_t)14); + if (!h) { printf("FAIL InformationRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_InformationRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_information_ratio_update(h, c, o); + fails += cmp_row("InformationRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_information_ratio_free(h); + return fails; +} +static int check_InitialBalance(void) { + struct InitialBalance *h = wickra_initial_balance_new((uintptr_t)14); + if (!h) { printf("FAIL InitialBalance: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_InitialBalance", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraInitialBalanceOutput out; + if (wickra_initial_balance_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.high; + got[gn++] = out.low; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("InitialBalance", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_initial_balance_free(h); + return fails; +} +static int check_InstantaneousTrendline(void) { + struct InstantaneousTrendline *h = wickra_instantaneous_trendline_new((uintptr_t)14); + if (!h) { printf("FAIL InstantaneousTrendline: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_InstantaneousTrendline", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_instantaneous_trendline_update(h, c); + fails += cmp_row("InstantaneousTrendline", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_instantaneous_trendline_free(h); + return fails; +} +static int check_IntradayIntensity(void) { + struct IntradayIntensity *h = wickra_intraday_intensity_new(); + if (!h) { printf("FAIL IntradayIntensity: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_IntradayIntensity", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_intraday_intensity_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("IntradayIntensity", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_intraday_intensity_free(h); + return fails; +} +static int check_IntradayMomentumIndex(void) { + struct IntradayMomentumIndex *h = wickra_intraday_momentum_index_new((uintptr_t)14); + if (!h) { printf("FAIL IntradayMomentumIndex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_IntradayMomentumIndex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_intraday_momentum_index_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("IntradayMomentumIndex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_intraday_momentum_index_free(h); + return fails; +} +static int check_IntradayVolatilityProfile(void) { + struct IntradayVolatilityProfile *h = wickra_intraday_volatility_profile_new((uintptr_t)24, (int32_t)0); + if (!h) { printf("FAIL IntradayVolatilityProfile: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_IntradayVolatilityProfile", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double vbuf[256]; + intptr_t k = wickra_intraday_volatility_profile_update(h, o, hi, lo, c, v, (int64_t)i, vbuf, 256); + if (k < 0) { for (int z = 0; z < 24; z++) got[gn++] = NANV; } + else { for (int z = 0; z < 24; z++) got[gn++] = vbuf[z]; } + fails += cmp_row("IntradayVolatilityProfile", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_intraday_volatility_profile_free(h); + return fails; +} +static int check_InverseFisherTransform(void) { + struct InverseFisherTransform *h = wickra_inverse_fisher_transform_new(2.0); + if (!h) { printf("FAIL InverseFisherTransform: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_InverseFisherTransform", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_inverse_fisher_transform_update(h, c); + fails += cmp_row("InverseFisherTransform", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_inverse_fisher_transform_free(h); + return fails; +} +static int check_InvertedHammer(void) { + struct InvertedHammer *h = wickra_inverted_hammer_new(); + if (!h) { printf("FAIL InvertedHammer: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_InvertedHammer", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_inverted_hammer_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("InvertedHammer", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_inverted_hammer_free(h); + return fails; +} +static int check_JarqueBera(void) { + struct JarqueBera *h = wickra_jarque_bera_new((uintptr_t)14); + if (!h) { printf("FAIL JarqueBera: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_JarqueBera", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_jarque_bera_update(h, c); + fails += cmp_row("JarqueBera", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_jarque_bera_free(h); + return fails; +} +static int check_Jma(void) { + struct Jma *h = wickra_jma_new((uintptr_t)7, 0.0, 2.0); + if (!h) { printf("FAIL Jma: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Jma", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_jma_update(h, c); + fails += cmp_row("Jma", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_jma_free(h); + return fails; +} +static int check_JumpIndicator(void) { + struct JumpIndicator *h = wickra_jump_indicator_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL JumpIndicator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_JumpIndicator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_jump_indicator_update(h, c); + fails += cmp_row("JumpIndicator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_jump_indicator_free(h); + return fails; +} +static int check_KRatio(void) { + struct KRatio *h = wickra_k_ratio_new((uintptr_t)14); + if (!h) { printf("FAIL KRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_KRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_k_ratio_update(h, c); + fails += cmp_row("KRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_k_ratio_free(h); + return fails; +} +static int check_KagiBars(void) { + struct KagiBars *h = wickra_kagi_bars_new(2.0); + if (!h) { printf("FAIL KagiBars: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_KagiBars", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraKagiBar bbuf[256]; + uintptr_t k = wickra_kagi_bars_update(h, c, c, c, c, 1.0, 0, bbuf, 256); + for (uintptr_t b = 0; b < (uintptr_t)k; b++) { + got[gn++] = (double)bbuf[b].start; + got[gn++] = (double)bbuf[b].end; + got[gn++] = (double)bbuf[b].direction; + } + fails += cmp_row("KagiBars", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_kagi_bars_free(h); + return fails; +} +static int check_KalmanHedgeRatio(void) { + struct KalmanHedgeRatio *h = wickra_kalman_hedge_ratio_new(0.01, 0.001); + if (!h) { printf("FAIL KalmanHedgeRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_KalmanHedgeRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraKalmanHedgeRatioOutput out; + if (wickra_kalman_hedge_ratio_update(h, c, o, &out)) { + got[gn++] = out.hedge_ratio; + got[gn++] = out.intercept; + got[gn++] = out.spread; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("KalmanHedgeRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_kalman_hedge_ratio_free(h); + return fails; +} +static int check_Kama(void) { + struct Kama *h = wickra_kama_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14); + if (!h) { printf("FAIL Kama: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Kama", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_kama_update(h, c); + fails += cmp_row("Kama", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_kama_free(h); + return fails; +} +static int check_KaseDevStop(void) { + struct KaseDevStop *h = wickra_kase_dev_stop_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL KaseDevStop: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_KaseDevStop", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraKaseDevStopOutput out; + if (wickra_kase_dev_stop_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.value; + got[gn++] = out.direction; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("KaseDevStop", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_kase_dev_stop_free(h); + return fails; +} +static int check_KasePermissionStochastic(void) { + struct KasePermissionStochastic *h = wickra_kase_permission_stochastic_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL KasePermissionStochastic: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_KasePermissionStochastic", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraKasePermissionStochasticOutput out; + if (wickra_kase_permission_stochastic_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.fast; + got[gn++] = out.slow; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("KasePermissionStochastic", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_kase_permission_stochastic_free(h); + return fails; +} +static int check_KellyCriterion(void) { + struct KellyCriterion *h = wickra_kelly_criterion_new((uintptr_t)14); + if (!h) { printf("FAIL KellyCriterion: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_KellyCriterion", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_kelly_criterion_update(h, c); + fails += cmp_row("KellyCriterion", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_kelly_criterion_free(h); + return fails; +} +static int check_Keltner(void) { + struct Keltner *h = wickra_keltner_new((uintptr_t)3, (uintptr_t)7, 2.0); + if (!h) { printf("FAIL Keltner: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Keltner", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraKeltnerOutput out; + if (wickra_keltner_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.upper; + got[gn++] = out.middle; + got[gn++] = out.lower; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("Keltner", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_keltner_free(h); + return fails; +} +static int check_KendallTau(void) { + struct KendallTau *h = wickra_kendall_tau_new((uintptr_t)14); + if (!h) { printf("FAIL KendallTau: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_KendallTau", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_kendall_tau_update(h, c, o); + fails += cmp_row("KendallTau", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_kendall_tau_free(h); + return fails; +} +static int check_Kicking(void) { + struct Kicking *h = wickra_kicking_new(); + if (!h) { printf("FAIL Kicking: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Kicking", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_kicking_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Kicking", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_kicking_free(h); + return fails; +} +static int check_KickingByLength(void) { + struct KickingByLength *h = wickra_kicking_by_length_new(); + if (!h) { printf("FAIL KickingByLength: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_KickingByLength", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_kicking_by_length_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("KickingByLength", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_kicking_by_length_free(h); + return fails; +} +static int check_Kst(void) { + struct Kst *h = wickra_kst_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14, (uintptr_t)28, (uintptr_t)35, (uintptr_t)42, (uintptr_t)56, (uintptr_t)63, (uintptr_t)70); + if (!h) { printf("FAIL Kst: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Kst", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraKstOutput out; + if (wickra_kst_update(h, c, &out)) { + got[gn++] = out.kst; + got[gn++] = out.signal; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("Kst", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_kst_free(h); + return fails; +} +static int check_Kurtosis(void) { + struct Kurtosis *h = wickra_kurtosis_new((uintptr_t)14); + if (!h) { printf("FAIL Kurtosis: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Kurtosis", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_kurtosis_update(h, c); + fails += cmp_row("Kurtosis", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_kurtosis_free(h); + return fails; +} +static int check_Kvo(void) { + struct Kvo *h = wickra_kvo_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL Kvo: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Kvo", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_kvo_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Kvo", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_kvo_free(h); + return fails; +} +static int check_KylesLambda(void) { + struct KylesLambda *h = wickra_kyles_lambda_new((uintptr_t)20); + if (!h) { printf("FAIL KylesLambda: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_KylesLambda", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_kyles_lambda_update(h, c, v, c >= o, (int64_t)i, (hi + lo) / 2.0); + fails += cmp_row("KylesLambda", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_kyles_lambda_free(h); + return fails; +} +static int check_LadderBottom(void) { + struct LadderBottom *h = wickra_ladder_bottom_new(); + if (!h) { printf("FAIL LadderBottom: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_LadderBottom", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_ladder_bottom_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("LadderBottom", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ladder_bottom_free(h); + return fails; +} +static int check_LaguerreRsi(void) { + struct LaguerreRsi *h = wickra_laguerre_rsi_new(0.5); + if (!h) { printf("FAIL LaguerreRsi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_LaguerreRsi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_laguerre_rsi_update(h, c); + fails += cmp_row("LaguerreRsi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_laguerre_rsi_free(h); + return fails; +} +static int check_LeadLagCrossCorrelation(void) { + struct LeadLagCrossCorrelation *h = wickra_lead_lag_cross_correlation_new((uintptr_t)20, (uintptr_t)10); + if (!h) { printf("FAIL LeadLagCrossCorrelation: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_LeadLagCrossCorrelation", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraLeadLagCrossCorrelationOutput out; + if (wickra_lead_lag_cross_correlation_update(h, c, o, &out)) { + got[gn++] = out.lag; + got[gn++] = out.correlation; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("LeadLagCrossCorrelation", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_lead_lag_cross_correlation_free(h); + return fails; +} +static int check_LinRegAngle(void) { + struct LinRegAngle *h = wickra_lin_reg_angle_new((uintptr_t)14); + if (!h) { printf("FAIL LinRegAngle: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_LinRegAngle", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_lin_reg_angle_update(h, c); + fails += cmp_row("LinRegAngle", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_lin_reg_angle_free(h); + return fails; +} +static int check_LinRegChannel(void) { + struct LinRegChannel *h = wickra_lin_reg_channel_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL LinRegChannel: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_LinRegChannel", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraLinRegChannelOutput out; + if (wickra_lin_reg_channel_update(h, c, &out)) { + got[gn++] = out.upper; + got[gn++] = out.middle; + got[gn++] = out.lower; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("LinRegChannel", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_lin_reg_channel_free(h); + return fails; +} +static int check_LinRegIntercept(void) { + struct LinRegIntercept *h = wickra_lin_reg_intercept_new((uintptr_t)14); + if (!h) { printf("FAIL LinRegIntercept: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_LinRegIntercept", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_lin_reg_intercept_update(h, c); + fails += cmp_row("LinRegIntercept", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_lin_reg_intercept_free(h); + return fails; +} +static int check_LinRegSlope(void) { + struct LinRegSlope *h = wickra_lin_reg_slope_new((uintptr_t)14); + if (!h) { printf("FAIL LinRegSlope: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_LinRegSlope", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_lin_reg_slope_update(h, c); + fails += cmp_row("LinRegSlope", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_lin_reg_slope_free(h); + return fails; +} +static int check_LinearRegression(void) { + struct LinearRegression *h = wickra_linear_regression_new((uintptr_t)14); + if (!h) { printf("FAIL LinearRegression: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_LinearRegression", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_linear_regression_update(h, c); + fails += cmp_row("LinearRegression", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_linear_regression_free(h); + return fails; +} +static int check_LiquidationFeatures(void) { + struct LiquidationFeatures *h = wickra_liquidation_features_new(); + if (!h) { printf("FAIL LiquidationFeatures: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_LiquidationFeatures", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double fr=(c-o)/c*0.01, mp=c, ip=c-0.5, fp=c+1.0, oi=v*10.0, ls=v*0.6, ss=v*0.4, tbv=v*0.55, tsv=v*0.45, ll=hi-c, sl=c-lo; + struct WickraLiquidationFeaturesOutput out; + if (wickra_liquidation_features_update(h, fr, mp, ip, fp, oi, ls, ss, tbv, tsv, ll, sl, (int64_t)i, &out)) { + got[gn++] = out.long_; + got[gn++] = out.short_; + got[gn++] = out.net; + got[gn++] = out.total; + got[gn++] = out.imbalance; + } else { + for (int z = 0; z < 5; z++) got[gn++] = NANV; + } + fails += cmp_row("LiquidationFeatures", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_liquidation_features_free(h); + return fails; +} +static int check_LogReturn(void) { + struct LogReturn *h = wickra_log_return_new((uintptr_t)14); + if (!h) { printf("FAIL LogReturn: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_LogReturn", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_log_return_update(h, c); + fails += cmp_row("LogReturn", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_log_return_free(h); + return fails; +} +static int check_LongLeggedDoji(void) { + struct LongLeggedDoji *h = wickra_long_legged_doji_new(); + if (!h) { printf("FAIL LongLeggedDoji: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_LongLeggedDoji", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_long_legged_doji_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("LongLeggedDoji", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_long_legged_doji_free(h); + return fails; +} +static int check_LongLine(void) { + struct LongLine *h = wickra_long_line_new(); + if (!h) { printf("FAIL LongLine: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_LongLine", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_long_line_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("LongLine", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_long_line_free(h); + return fails; +} +static int check_LongShortRatio(void) { + struct LongShortRatio *h = wickra_long_short_ratio_new(); + if (!h) { printf("FAIL LongShortRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_LongShortRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double fr=(c-o)/c*0.01, mp=c, ip=c-0.5, fp=c+1.0, oi=v*10.0, ls=v*0.6, ss=v*0.4, tbv=v*0.55, tsv=v*0.45, ll=hi-c, sl=c-lo; + got[gn++] = wickra_long_short_ratio_update(h, fr, mp, ip, fp, oi, ls, ss, tbv, tsv, ll, sl, (int64_t)i); + fails += cmp_row("LongShortRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_long_short_ratio_free(h); + return fails; +} +static int check_M2Measure(void) { + struct M2Measure *h = wickra_m2_measure_new((uintptr_t)14, 2.0, 0.5); + if (!h) { printf("FAIL M2Measure: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_M2Measure", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_m2_measure_update(h, c); + fails += cmp_row("M2Measure", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_m2_measure_free(h); + return fails; +} +static int check_MaEnvelope(void) { + struct MaEnvelope *h = wickra_ma_envelope_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL MaEnvelope: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MaEnvelope", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraMaEnvelopeOutput out; + if (wickra_ma_envelope_update(h, c, &out)) { + got[gn++] = out.upper; + got[gn++] = out.middle; + got[gn++] = out.lower; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("MaEnvelope", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ma_envelope_free(h); + return fails; +} +static int check_MacdExt(void) { + struct MacdExt *h = wickra_macd_ext_new((uintptr_t)12, (uint8_t)0, (uintptr_t)26, (uint8_t)0, (uintptr_t)9, (uint8_t)0); + if (!h) { printf("FAIL MacdExt: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MacdExt", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraMacdOutput out; + if (wickra_macd_ext_update(h, c, &out)) { + got[gn++] = out.macd; + got[gn++] = out.signal; + got[gn++] = out.histogram; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("MacdExt", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_macd_ext_free(h); + return fails; +} +static int check_MacdFix(void) { + struct MacdFix *h = wickra_macd_fix_new((uintptr_t)9); + if (!h) { printf("FAIL MacdFix: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MacdFix", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraMacdOutput out; + if (wickra_macd_fix_update(h, c, &out)) { + got[gn++] = out.macd; + got[gn++] = out.signal; + got[gn++] = out.histogram; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("MacdFix", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_macd_fix_free(h); + return fails; +} +static int check_MacdHistogram(void) { + struct MacdHistogram *h = wickra_macd_histogram_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14); + if (!h) { printf("FAIL MacdHistogram: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MacdHistogram", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_macd_histogram_update(h, c); + fails += cmp_row("MacdHistogram", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_macd_histogram_free(h); + return fails; +} +static int check_MacdIndicator(void) { + struct MacdIndicator *h = wickra_macd_indicator_new((uintptr_t)12, (uintptr_t)26, (uintptr_t)9); + if (!h) { printf("FAIL MacdIndicator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MacdIndicator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraMacdOutput out; + if (wickra_macd_indicator_update(h, c, &out)) { + got[gn++] = out.macd; + got[gn++] = out.signal; + got[gn++] = out.histogram; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("MacdIndicator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_macd_indicator_free(h); + return fails; +} +static int check_Mama(void) { + struct Mama *h = wickra_mama_new(0.5, 0.05); + if (!h) { printf("FAIL Mama: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Mama", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraMamaOutput out; + if (wickra_mama_update(h, c, &out)) { + got[gn++] = out.mama; + got[gn++] = out.fama; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("Mama", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_mama_free(h); + return fails; +} +static int check_MarketFacilitationIndex(void) { + struct MarketFacilitationIndex *h = wickra_market_facilitation_index_new(); + if (!h) { printf("FAIL MarketFacilitationIndex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MarketFacilitationIndex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_market_facilitation_index_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("MarketFacilitationIndex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_market_facilitation_index_free(h); + return fails; +} +static int check_MartinRatio(void) { + struct MartinRatio *h = wickra_martin_ratio_new((uintptr_t)14); + if (!h) { printf("FAIL MartinRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MartinRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_martin_ratio_update(h, c); + fails += cmp_row("MartinRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_martin_ratio_free(h); + return fails; +} +static int check_Marubozu(void) { + struct Marubozu *h = wickra_marubozu_new(); + if (!h) { printf("FAIL Marubozu: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Marubozu", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_marubozu_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Marubozu", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_marubozu_free(h); + return fails; +} +static int check_MassIndex(void) { + struct MassIndex *h = wickra_mass_index_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL MassIndex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MassIndex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_mass_index_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("MassIndex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_mass_index_free(h); + return fails; +} +static int check_MatHold(void) { + struct MatHold *h = wickra_mat_hold_new(); + if (!h) { printf("FAIL MatHold: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MatHold", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_mat_hold_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("MatHold", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_mat_hold_free(h); + return fails; +} +static int check_MatchingLow(void) { + struct MatchingLow *h = wickra_matching_low_new(); + if (!h) { printf("FAIL MatchingLow: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MatchingLow", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_matching_low_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("MatchingLow", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_matching_low_free(h); + return fails; +} +static int check_MaxDrawdown(void) { + struct MaxDrawdown *h = wickra_max_drawdown_new((uintptr_t)14); + if (!h) { printf("FAIL MaxDrawdown: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MaxDrawdown", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_max_drawdown_update(h, c); + fails += cmp_row("MaxDrawdown", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_max_drawdown_free(h); + return fails; +} +static int check_McClellanOscillator(void) { + struct McClellanOscillator *h = wickra_mc_clellan_oscillator_new(); + if (!h) { printf("FAIL McClellanOscillator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_McClellanOscillator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double chg[5], vol[5]; bool nh[5], nl[5], am[5], ob[5]; + for (int j = 0; j < 5; j++) { chg[j] = (c-o)+j; vol[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); } + got[gn++] = wickra_mc_clellan_oscillator_update(h, chg, vol, nh, nl, am, ob, 5, (int64_t)i); + fails += cmp_row("McClellanOscillator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_mc_clellan_oscillator_free(h); + return fails; +} +static int check_McClellanSummationIndex(void) { + struct McClellanSummationIndex *h = wickra_mc_clellan_summation_index_new(); + if (!h) { printf("FAIL McClellanSummationIndex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_McClellanSummationIndex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double chg[5], vol[5]; bool nh[5], nl[5], am[5], ob[5]; + for (int j = 0; j < 5; j++) { chg[j] = (c-o)+j; vol[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); } + got[gn++] = wickra_mc_clellan_summation_index_update(h, chg, vol, nh, nl, am, ob, 5, (int64_t)i); + fails += cmp_row("McClellanSummationIndex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_mc_clellan_summation_index_free(h); + return fails; +} +static int check_McGinleyDynamic(void) { + struct McGinleyDynamic *h = wickra_mc_ginley_dynamic_new((uintptr_t)14); + if (!h) { printf("FAIL McGinleyDynamic: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_McGinleyDynamic", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_mc_ginley_dynamic_update(h, c); + fails += cmp_row("McGinleyDynamic", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_mc_ginley_dynamic_free(h); + return fails; +} +static int check_MedianAbsoluteDeviation(void) { + struct MedianAbsoluteDeviation *h = wickra_median_absolute_deviation_new((uintptr_t)14); + if (!h) { printf("FAIL MedianAbsoluteDeviation: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MedianAbsoluteDeviation", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_median_absolute_deviation_update(h, c); + fails += cmp_row("MedianAbsoluteDeviation", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_median_absolute_deviation_free(h); + return fails; +} +static int check_MedianChannel(void) { + struct MedianChannel *h = wickra_median_channel_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL MedianChannel: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MedianChannel", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraMedianChannelOutput out; + if (wickra_median_channel_update(h, c, &out)) { + got[gn++] = out.upper; + got[gn++] = out.middle; + got[gn++] = out.lower; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("MedianChannel", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_median_channel_free(h); + return fails; +} +static int check_MedianMa(void) { + struct MedianMa *h = wickra_median_ma_new((uintptr_t)14); + if (!h) { printf("FAIL MedianMa: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MedianMa", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_median_ma_update(h, c); + fails += cmp_row("MedianMa", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_median_ma_free(h); + return fails; +} +static int check_MedianPrice(void) { + struct MedianPrice *h = wickra_median_price_new(); + if (!h) { printf("FAIL MedianPrice: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MedianPrice", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_median_price_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("MedianPrice", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_median_price_free(h); + return fails; +} +static int check_Mfi(void) { + struct Mfi *h = wickra_mfi_new((uintptr_t)14); + if (!h) { printf("FAIL Mfi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Mfi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_mfi_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Mfi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_mfi_free(h); + return fails; +} +static int check_Microprice(void) { + struct Microprice *h = wickra_microprice_new(); + if (!h) { printf("FAIL Microprice: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Microprice", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double bp[5], bs[5], ap[5], asz[5]; + for (int k = 0; k < 5; k++) { double 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; } + got[gn++] = wickra_microprice_update(h, bp, bs, 5, ap, asz, 5); + fails += cmp_row("Microprice", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_microprice_free(h); + return fails; +} +static int check_MidPoint(void) { + struct MidPoint *h = wickra_mid_point_new((uintptr_t)14); + if (!h) { printf("FAIL MidPoint: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MidPoint", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_mid_point_update(h, c); + fails += cmp_row("MidPoint", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_mid_point_free(h); + return fails; +} +static int check_MidPrice(void) { + struct MidPrice *h = wickra_mid_price_new((uintptr_t)14); + if (!h) { printf("FAIL MidPrice: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MidPrice", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_mid_price_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("MidPrice", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_mid_price_free(h); + return fails; +} +static int check_MinusDi(void) { + struct MinusDi *h = wickra_minus_di_new((uintptr_t)14); + if (!h) { printf("FAIL MinusDi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MinusDi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_minus_di_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("MinusDi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_minus_di_free(h); + return fails; +} +static int check_MinusDm(void) { + struct MinusDm *h = wickra_minus_dm_new((uintptr_t)14); + if (!h) { printf("FAIL MinusDm: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MinusDm", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_minus_dm_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("MinusDm", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_minus_dm_free(h); + return fails; +} +static int check_ModifiedMaStop(void) { + struct ModifiedMaStop *h = wickra_modified_ma_stop_new((uintptr_t)14); + if (!h) { printf("FAIL ModifiedMaStop: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ModifiedMaStop", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraModifiedMaStopOutput out; + if (wickra_modified_ma_stop_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.value; + got[gn++] = out.direction; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("ModifiedMaStop", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_modified_ma_stop_free(h); + return fails; +} +static int check_Mom(void) { + struct Mom *h = wickra_mom_new((uintptr_t)14); + if (!h) { printf("FAIL Mom: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Mom", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_mom_update(h, c); + fails += cmp_row("Mom", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_mom_free(h); + return fails; +} +static int check_MorningDojiStar(void) { + struct MorningDojiStar *h = wickra_morning_doji_star_new(); + if (!h) { printf("FAIL MorningDojiStar: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MorningDojiStar", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_morning_doji_star_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("MorningDojiStar", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_morning_doji_star_free(h); + return fails; +} +static int check_MorningEveningStar(void) { + struct MorningEveningStar *h = wickra_morning_evening_star_new(); + if (!h) { printf("FAIL MorningEveningStar: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MorningEveningStar", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_morning_evening_star_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("MorningEveningStar", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_morning_evening_star_free(h); + return fails; +} +static int check_MurreyMathLines(void) { + struct MurreyMathLines *h = wickra_murrey_math_lines_new((uintptr_t)14); + if (!h) { printf("FAIL MurreyMathLines: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_MurreyMathLines", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraMurreyMathLinesOutput out; + if (wickra_murrey_math_lines_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.mm8_8; + got[gn++] = out.mm7_8; + got[gn++] = out.mm6_8; + got[gn++] = out.mm5_8; + got[gn++] = out.mm4_8; + got[gn++] = out.mm3_8; + got[gn++] = out.mm2_8; + got[gn++] = out.mm1_8; + got[gn++] = out.mm0_8; + } else { + for (int z = 0; z < 9; z++) got[gn++] = NANV; + } + fails += cmp_row("MurreyMathLines", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_murrey_math_lines_free(h); + return fails; +} +static int check_NakedPoc(void) { + struct NakedPoc *h = wickra_naked_poc_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL NakedPoc: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_NakedPoc", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_naked_poc_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("NakedPoc", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_naked_poc_free(h); + return fails; +} +static int check_Natr(void) { + struct Natr *h = wickra_natr_new((uintptr_t)14); + if (!h) { printf("FAIL Natr: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Natr", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_natr_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Natr", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_natr_free(h); + return fails; +} +static int check_NewHighsNewLows(void) { + struct NewHighsNewLows *h = wickra_new_highs_new_lows_new(); + if (!h) { printf("FAIL NewHighsNewLows: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_NewHighsNewLows", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double chg[5], vol[5]; bool nh[5], nl[5], am[5], ob[5]; + for (int j = 0; j < 5; j++) { chg[j] = (c-o)+j; vol[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); } + got[gn++] = wickra_new_highs_new_lows_update(h, chg, vol, nh, nl, am, ob, 5, (int64_t)i); + fails += cmp_row("NewHighsNewLows", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_new_highs_new_lows_free(h); + return fails; +} +static int check_NewPriceLines(void) { + struct NewPriceLines *h = wickra_new_price_lines_new((uintptr_t)14); + if (!h) { printf("FAIL NewPriceLines: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_NewPriceLines", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_new_price_lines_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("NewPriceLines", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_new_price_lines_free(h); + return fails; +} +static int check_Nrtr(void) { + struct Nrtr *h = wickra_nrtr_new(2.0); + if (!h) { printf("FAIL Nrtr: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Nrtr", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraNrtrOutput out; + if (wickra_nrtr_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.value; + got[gn++] = out.direction; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("Nrtr", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_nrtr_free(h); + return fails; +} +static int check_Nvi(void) { + struct Nvi *h = wickra_nvi_new(); + if (!h) { printf("FAIL Nvi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Nvi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_nvi_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Nvi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_nvi_free(h); + return fails; +} +static int check_OIPriceDivergence(void) { + struct OIPriceDivergence *h = wickra_oi_price_divergence_new((uintptr_t)20); + if (!h) { printf("FAIL OIPriceDivergence: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_OIPriceDivergence", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double fr=(c-o)/c*0.01, mp=c, ip=c-0.5, fp=c+1.0, oi=v*10.0, ls=v*0.6, ss=v*0.4, tbv=v*0.55, tsv=v*0.45, ll=hi-c, sl=c-lo; + got[gn++] = wickra_oi_price_divergence_update(h, fr, mp, ip, fp, oi, ls, ss, tbv, tsv, ll, sl, (int64_t)i); + fails += cmp_row("OIPriceDivergence", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_oi_price_divergence_free(h); + return fails; +} +static int check_OIWeighted(void) { + struct OIWeighted *h = wickra_oi_weighted_new(); + if (!h) { printf("FAIL OIWeighted: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_OIWeighted", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double fr=(c-o)/c*0.01, mp=c, ip=c-0.5, fp=c+1.0, oi=v*10.0, ls=v*0.6, ss=v*0.4, tbv=v*0.55, tsv=v*0.45, ll=hi-c, sl=c-lo; + got[gn++] = wickra_oi_weighted_update(h, fr, mp, ip, fp, oi, ls, ss, tbv, tsv, ll, sl, (int64_t)i); + fails += cmp_row("OIWeighted", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_oi_weighted_free(h); + return fails; +} +static int check_Obv(void) { + struct Obv *h = wickra_obv_new(); + if (!h) { printf("FAIL Obv: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Obv", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_obv_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Obv", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_obv_free(h); + return fails; +} +static int check_OiToVolumeRatio(void) { + struct OiToVolumeRatio *h = wickra_oi_to_volume_ratio_new(); + if (!h) { printf("FAIL OiToVolumeRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_OiToVolumeRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double fr=(c-o)/c*0.01, mp=c, ip=c-0.5, fp=c+1.0, oi=v*10.0, ls=v*0.6, ss=v*0.4, tbv=v*0.55, tsv=v*0.45, ll=hi-c, sl=c-lo; + got[gn++] = wickra_oi_to_volume_ratio_update(h, fr, mp, ip, fp, oi, ls, ss, tbv, tsv, ll, sl, (int64_t)i); + fails += cmp_row("OiToVolumeRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_oi_to_volume_ratio_free(h); + return fails; +} +static int check_OmegaRatio(void) { + struct OmegaRatio *h = wickra_omega_ratio_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL OmegaRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_OmegaRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_omega_ratio_update(h, c); + fails += cmp_row("OmegaRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_omega_ratio_free(h); + return fails; +} +static int check_OnNeck(void) { + struct OnNeck *h = wickra_on_neck_new(); + if (!h) { printf("FAIL OnNeck: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_OnNeck", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_on_neck_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("OnNeck", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_on_neck_free(h); + return fails; +} +static int check_OpenInterestDelta(void) { + struct OpenInterestDelta *h = wickra_open_interest_delta_new(); + if (!h) { printf("FAIL OpenInterestDelta: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_OpenInterestDelta", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double fr=(c-o)/c*0.01, mp=c, ip=c-0.5, fp=c+1.0, oi=v*10.0, ls=v*0.6, ss=v*0.4, tbv=v*0.55, tsv=v*0.45, ll=hi-c, sl=c-lo; + got[gn++] = wickra_open_interest_delta_update(h, fr, mp, ip, fp, oi, ls, ss, tbv, tsv, ll, sl, (int64_t)i); + fails += cmp_row("OpenInterestDelta", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_open_interest_delta_free(h); + return fails; +} +static int check_OpenInterestMomentum(void) { + struct OpenInterestMomentum *h = wickra_open_interest_momentum_new((uintptr_t)10); + if (!h) { printf("FAIL OpenInterestMomentum: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_OpenInterestMomentum", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double fr=(c-o)/c*0.01, mp=c, ip=c-0.5, fp=c+1.0, oi=v*10.0, ls=v*0.6, ss=v*0.4, tbv=v*0.55, tsv=v*0.45, ll=hi-c, sl=c-lo; + got[gn++] = wickra_open_interest_momentum_update(h, fr, mp, ip, fp, oi, ls, ss, tbv, tsv, ll, sl, (int64_t)i); + fails += cmp_row("OpenInterestMomentum", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_open_interest_momentum_free(h); + return fails; +} +static int check_OpeningMarubozu(void) { + struct OpeningMarubozu *h = wickra_opening_marubozu_new(); + if (!h) { printf("FAIL OpeningMarubozu: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_OpeningMarubozu", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_opening_marubozu_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("OpeningMarubozu", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_opening_marubozu_free(h); + return fails; +} +static int check_OpeningRange(void) { + struct OpeningRange *h = wickra_opening_range_new((uintptr_t)14); + if (!h) { printf("FAIL OpeningRange: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_OpeningRange", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraOpeningRangeOutput out; + if (wickra_opening_range_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.high; + got[gn++] = out.low; + got[gn++] = out.breakout_distance; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("OpeningRange", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_opening_range_free(h); + return fails; +} +static int check_OrderBookImbalanceFull(void) { + struct OrderBookImbalanceFull *h = wickra_order_book_imbalance_full_new(); + if (!h) { printf("FAIL OrderBookImbalanceFull: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_OrderBookImbalanceFull", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double bp[5], bs[5], ap[5], asz[5]; + for (int k = 0; k < 5; k++) { double 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; } + got[gn++] = wickra_order_book_imbalance_full_update(h, bp, bs, 5, ap, asz, 5); + fails += cmp_row("OrderBookImbalanceFull", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_order_book_imbalance_full_free(h); + return fails; +} +static int check_OrderBookImbalanceTop1(void) { + struct OrderBookImbalanceTop1 *h = wickra_order_book_imbalance_top1_new(); + if (!h) { printf("FAIL OrderBookImbalanceTop1: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_OrderBookImbalanceTop1", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double bp[5], bs[5], ap[5], asz[5]; + for (int k = 0; k < 5; k++) { double 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; } + got[gn++] = wickra_order_book_imbalance_top1_update(h, bp, bs, 5, ap, asz, 5); + fails += cmp_row("OrderBookImbalanceTop1", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_order_book_imbalance_top1_free(h); + return fails; +} +static int check_OrderBookImbalanceTopN(void) { + struct OrderBookImbalanceTopN *h = wickra_order_book_imbalance_top_n_new((uintptr_t)5); + if (!h) { printf("FAIL OrderBookImbalanceTopN: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_OrderBookImbalanceTopN", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double bp[5], bs[5], ap[5], asz[5]; + for (int k = 0; k < 5; k++) { double 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; } + got[gn++] = wickra_order_book_imbalance_top_n_update(h, bp, bs, 5, ap, asz, 5); + fails += cmp_row("OrderBookImbalanceTopN", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_order_book_imbalance_top_n_free(h); + return fails; +} +static int check_OrderFlowImbalance(void) { + struct OrderFlowImbalance *h = wickra_order_flow_imbalance_new((uintptr_t)20); + if (!h) { printf("FAIL OrderFlowImbalance: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_OrderFlowImbalance", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double bp[5], bs[5], ap[5], asz[5]; + for (int k = 0; k < 5; k++) { double 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; } + got[gn++] = wickra_order_flow_imbalance_update(h, bp, bs, 5, ap, asz, 5); + fails += cmp_row("OrderFlowImbalance", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_order_flow_imbalance_free(h); + return fails; +} +static int check_OuHalfLife(void) { + struct OuHalfLife *h = wickra_ou_half_life_new((uintptr_t)14); + if (!h) { printf("FAIL OuHalfLife: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_OuHalfLife", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_ou_half_life_update(h, c, o); + fails += cmp_row("OuHalfLife", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ou_half_life_free(h); + return fails; +} +static int check_OvernightGap(void) { + struct OvernightGap *h = wickra_overnight_gap_new((int32_t)0); + if (!h) { printf("FAIL OvernightGap: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_OvernightGap", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_overnight_gap_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("OvernightGap", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_overnight_gap_free(h); + return fails; +} +static int check_OvernightIntradayReturn(void) { + struct OvernightIntradayReturn *h = wickra_overnight_intraday_return_new((int32_t)14); + if (!h) { printf("FAIL OvernightIntradayReturn: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_OvernightIntradayReturn", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraOvernightIntradayReturnOutput out; + if (wickra_overnight_intraday_return_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.overnight; + got[gn++] = out.intraday; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("OvernightIntradayReturn", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_overnight_intraday_return_free(h); + return fails; +} +static int check_PainIndex(void) { + struct PainIndex *h = wickra_pain_index_new((uintptr_t)14); + if (!h) { printf("FAIL PainIndex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_PainIndex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_pain_index_update(h, c); + fails += cmp_row("PainIndex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_pain_index_free(h); + return fails; +} +static int check_PairSpreadZScore(void) { + struct PairSpreadZScore *h = wickra_pair_spread_z_score_new((uintptr_t)20, (uintptr_t)20); + if (!h) { printf("FAIL PairSpreadZScore: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_PairSpreadZScore", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_pair_spread_z_score_update(h, c, o); + fails += cmp_row("PairSpreadZScore", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_pair_spread_z_score_free(h); + return fails; +} +static int check_PairwiseBeta(void) { + struct PairwiseBeta *h = wickra_pairwise_beta_new((uintptr_t)14); + if (!h) { printf("FAIL PairwiseBeta: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_PairwiseBeta", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_pairwise_beta_update(h, c, o); + fails += cmp_row("PairwiseBeta", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_pairwise_beta_free(h); + return fails; +} +static int check_ParkinsonVolatility(void) { + struct ParkinsonVolatility *h = wickra_parkinson_volatility_new((uintptr_t)20, (uintptr_t)252); + if (!h) { printf("FAIL ParkinsonVolatility: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ParkinsonVolatility", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_parkinson_volatility_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("ParkinsonVolatility", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_parkinson_volatility_free(h); + return fails; +} +static int check_PearsonCorrelation(void) { + struct PearsonCorrelation *h = wickra_pearson_correlation_new((uintptr_t)14); + if (!h) { printf("FAIL PearsonCorrelation: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_PearsonCorrelation", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_pearson_correlation_update(h, c, o); + fails += cmp_row("PearsonCorrelation", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_pearson_correlation_free(h); + return fails; +} +static int check_PercentAboveMa(void) { + struct PercentAboveMa *h = wickra_percent_above_ma_new(); + if (!h) { printf("FAIL PercentAboveMa: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_PercentAboveMa", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double chg[5], vol[5]; bool nh[5], nl[5], am[5], ob[5]; + for (int j = 0; j < 5; j++) { chg[j] = (c-o)+j; vol[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); } + got[gn++] = wickra_percent_above_ma_update(h, chg, vol, nh, nl, am, ob, 5, (int64_t)i); + fails += cmp_row("PercentAboveMa", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_percent_above_ma_free(h); + return fails; +} +static int check_PercentB(void) { + struct PercentB *h = wickra_percent_b_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL PercentB: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_PercentB", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_percent_b_update(h, c); + fails += cmp_row("PercentB", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_percent_b_free(h); + return fails; +} +static int check_PercentageTrailingStop(void) { + struct PercentageTrailingStop *h = wickra_percentage_trailing_stop_new(2.0); + if (!h) { printf("FAIL PercentageTrailingStop: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_PercentageTrailingStop", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_percentage_trailing_stop_update(h, c); + fails += cmp_row("PercentageTrailingStop", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_percentage_trailing_stop_free(h); + return fails; +} +static int check_PerpetualPremiumIndex(void) { + struct PerpetualPremiumIndex *h = wickra_perpetual_premium_index_new(); + if (!h) { printf("FAIL PerpetualPremiumIndex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_PerpetualPremiumIndex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double fr=(c-o)/c*0.01, mp=c, ip=c-0.5, fp=c+1.0, oi=v*10.0, ls=v*0.6, ss=v*0.4, tbv=v*0.55, tsv=v*0.45, ll=hi-c, sl=c-lo; + got[gn++] = wickra_perpetual_premium_index_update(h, fr, mp, ip, fp, oi, ls, ss, tbv, tsv, ll, sl, (int64_t)i); + fails += cmp_row("PerpetualPremiumIndex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_perpetual_premium_index_free(h); + return fails; +} +static int check_Pgo(void) { + struct Pgo *h = wickra_pgo_new((uintptr_t)14); + if (!h) { printf("FAIL Pgo: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Pgo", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_pgo_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Pgo", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_pgo_free(h); + return fails; +} +static int check_PiercingDarkCloud(void) { + struct PiercingDarkCloud *h = wickra_piercing_dark_cloud_new(); + if (!h) { printf("FAIL PiercingDarkCloud: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_PiercingDarkCloud", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_piercing_dark_cloud_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("PiercingDarkCloud", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_piercing_dark_cloud_free(h); + return fails; +} +static int check_Pin(void) { + struct Pin *h = wickra_pin_new((uintptr_t)20); + if (!h) { printf("FAIL Pin: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Pin", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_pin_update(h, c, v, c >= o, (int64_t)i); + fails += cmp_row("Pin", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_pin_free(h); + return fails; +} +static int check_PivotReversal(void) { + struct PivotReversal *h = wickra_pivot_reversal_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL PivotReversal: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_PivotReversal", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_pivot_reversal_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("PivotReversal", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_pivot_reversal_free(h); + return fails; +} +static int check_PlusDi(void) { + struct PlusDi *h = wickra_plus_di_new((uintptr_t)14); + if (!h) { printf("FAIL PlusDi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_PlusDi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_plus_di_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("PlusDi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_plus_di_free(h); + return fails; +} +static int check_PlusDm(void) { + struct PlusDm *h = wickra_plus_dm_new((uintptr_t)14); + if (!h) { printf("FAIL PlusDm: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_PlusDm", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_plus_dm_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("PlusDm", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_plus_dm_free(h); + return fails; +} +static int check_Pmo(void) { + struct Pmo *h = wickra_pmo_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL Pmo: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Pmo", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_pmo_update(h, c); + fails += cmp_row("Pmo", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_pmo_free(h); + return fails; +} +static int check_PointAndFigureBars(void) { + struct PointAndFigureBars *h = wickra_point_and_figure_bars_new(2.0, (uintptr_t)3); + if (!h) { printf("FAIL PointAndFigureBars: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_PointAndFigureBars", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraPnfColumn bbuf[256]; + uintptr_t k = wickra_point_and_figure_bars_update(h, c, c, c, c, 1.0, 0, bbuf, 256); + for (uintptr_t b = 0; b < (uintptr_t)k; b++) { + got[gn++] = (double)bbuf[b].direction; + got[gn++] = (double)bbuf[b].high; + got[gn++] = (double)bbuf[b].low; + } + fails += cmp_row("PointAndFigureBars", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_point_and_figure_bars_free(h); + return fails; +} +static int check_PolarizedFractalEfficiency(void) { + struct PolarizedFractalEfficiency *h = wickra_polarized_fractal_efficiency_new((uintptr_t)10, (uintptr_t)5); + if (!h) { printf("FAIL PolarizedFractalEfficiency: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_PolarizedFractalEfficiency", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_polarized_fractal_efficiency_update(h, c); + fails += cmp_row("PolarizedFractalEfficiency", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_polarized_fractal_efficiency_free(h); + return fails; +} +static int check_Ppo(void) { + struct Ppo *h = wickra_ppo_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL Ppo: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Ppo", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_ppo_update(h, c); + fails += cmp_row("Ppo", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ppo_free(h); + return fails; +} +static int check_PpoHistogram(void) { + struct PpoHistogram *h = wickra_ppo_histogram_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14); + if (!h) { printf("FAIL PpoHistogram: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_PpoHistogram", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_ppo_histogram_update(h, c); + fails += cmp_row("PpoHistogram", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ppo_histogram_free(h); + return fails; +} +static int check_ProfileShape(void) { + struct ProfileShape *h = wickra_profile_shape_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL ProfileShape: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ProfileShape", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_profile_shape_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("ProfileShape", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_profile_shape_free(h); + return fails; +} +static int check_ProfitFactor(void) { + struct ProfitFactor *h = wickra_profit_factor_new((uintptr_t)14); + if (!h) { printf("FAIL ProfitFactor: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ProfitFactor", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_profit_factor_update(h, c); + fails += cmp_row("ProfitFactor", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_profit_factor_free(h); + return fails; +} +static int check_ProjectionBands(void) { + struct ProjectionBands *h = wickra_projection_bands_new((uintptr_t)14); + if (!h) { printf("FAIL ProjectionBands: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ProjectionBands", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraProjectionBandsOutput out; + if (wickra_projection_bands_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.upper; + got[gn++] = out.middle; + got[gn++] = out.lower; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("ProjectionBands", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_projection_bands_free(h); + return fails; +} +static int check_ProjectionOscillator(void) { + struct ProjectionOscillator *h = wickra_projection_oscillator_new((uintptr_t)14); + if (!h) { printf("FAIL ProjectionOscillator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ProjectionOscillator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_projection_oscillator_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("ProjectionOscillator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_projection_oscillator_free(h); + return fails; +} +static int check_Psar(void) { + struct Psar *h = wickra_psar_new(0.02, 0.02, 0.2); + if (!h) { printf("FAIL Psar: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Psar", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_psar_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Psar", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_psar_free(h); + return fails; +} +static int check_Pvi(void) { + struct Pvi *h = wickra_pvi_new(); + if (!h) { printf("FAIL Pvi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Pvi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_pvi_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Pvi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_pvi_free(h); + return fails; +} +static int check_Qqe(void) { + struct Qqe *h = wickra_qqe_new((uintptr_t)3, (uintptr_t)7, 2.0); + if (!h) { printf("FAIL Qqe: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Qqe", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraQqeOutput out; + if (wickra_qqe_update(h, c, &out)) { + got[gn++] = out.rsi_ma; + got[gn++] = out.trailing_line; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("Qqe", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_qqe_free(h); + return fails; +} +static int check_Qstick(void) { + struct Qstick *h = wickra_qstick_new((uintptr_t)14); + if (!h) { printf("FAIL Qstick: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Qstick", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_qstick_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Qstick", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_qstick_free(h); + return fails; +} +static int check_QuartileBands(void) { + struct QuartileBands *h = wickra_quartile_bands_new((uintptr_t)14); + if (!h) { printf("FAIL QuartileBands: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_QuartileBands", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraQuartileBandsOutput out; + if (wickra_quartile_bands_update(h, c, &out)) { + got[gn++] = out.upper; + got[gn++] = out.middle; + got[gn++] = out.lower; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("QuartileBands", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_quartile_bands_free(h); + return fails; +} +static int check_QuotedSpread(void) { + struct QuotedSpread *h = wickra_quoted_spread_new(); + if (!h) { printf("FAIL QuotedSpread: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_QuotedSpread", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double bp[5], bs[5], ap[5], asz[5]; + for (int k = 0; k < 5; k++) { double 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; } + got[gn++] = wickra_quoted_spread_update(h, bp, bs, 5, ap, asz, 5); + fails += cmp_row("QuotedSpread", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_quoted_spread_free(h); + return fails; +} +static int check_RSquared(void) { + struct RSquared *h = wickra_r_squared_new((uintptr_t)14); + if (!h) { printf("FAIL RSquared: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RSquared", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_r_squared_update(h, c); + fails += cmp_row("RSquared", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_r_squared_free(h); + return fails; +} +static int check_RangeBars(void) { + struct RangeBars *h = wickra_range_bars_new(2.0); + if (!h) { printf("FAIL RangeBars: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RangeBars", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraRangeBar bbuf[256]; + uintptr_t k = wickra_range_bars_update(h, c, c, c, c, 1.0, 0, bbuf, 256); + for (uintptr_t b = 0; b < (uintptr_t)k; b++) { + got[gn++] = (double)bbuf[b].open; + got[gn++] = (double)bbuf[b].close; + got[gn++] = (double)bbuf[b].direction; + } + fails += cmp_row("RangeBars", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_range_bars_free(h); + return fails; +} +static int check_RealizedSpread(void) { + struct RealizedSpread *h = wickra_realized_spread_new((uintptr_t)20); + if (!h) { printf("FAIL RealizedSpread: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RealizedSpread", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_realized_spread_update(h, c, v, c >= o, (int64_t)i, (hi + lo) / 2.0); + fails += cmp_row("RealizedSpread", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_realized_spread_free(h); + return fails; +} +static int check_RealizedVolatility(void) { + struct RealizedVolatility *h = wickra_realized_volatility_new((uintptr_t)14); + if (!h) { printf("FAIL RealizedVolatility: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RealizedVolatility", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_realized_volatility_update(h, c); + fails += cmp_row("RealizedVolatility", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_realized_volatility_free(h); + return fails; +} +static int check_RecoveryFactor(void) { + struct RecoveryFactor *h = wickra_recovery_factor_new(); + if (!h) { printf("FAIL RecoveryFactor: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RecoveryFactor", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_recovery_factor_update(h, c); + fails += cmp_row("RecoveryFactor", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_recovery_factor_free(h); + return fails; +} +static int check_RectangleRange(void) { + struct RectangleRange *h = wickra_rectangle_range_new(); + if (!h) { printf("FAIL RectangleRange: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RectangleRange", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_rectangle_range_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("RectangleRange", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rectangle_range_free(h); + return fails; +} +static int check_Reflex(void) { + struct Reflex *h = wickra_reflex_new((uintptr_t)14); + if (!h) { printf("FAIL Reflex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Reflex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_reflex_update(h, c); + fails += cmp_row("Reflex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_reflex_free(h); + return fails; +} +static int check_RegimeLabel(void) { + struct RegimeLabel *h = wickra_regime_label_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL RegimeLabel: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RegimeLabel", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_regime_label_update(h, c); + fails += cmp_row("RegimeLabel", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_regime_label_free(h); + return fails; +} +static int check_RelativeStrengthAB(void) { + struct RelativeStrengthAB *h = wickra_relative_strength_ab_new((uintptr_t)14, (uintptr_t)14); + if (!h) { printf("FAIL RelativeStrengthAB: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RelativeStrengthAB", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraRelativeStrengthOutput out; + if (wickra_relative_strength_ab_update(h, c, o, &out)) { + got[gn++] = out.ratio; + got[gn++] = out.ratio_ma; + got[gn++] = out.ratio_rsi; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("RelativeStrengthAB", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_relative_strength_ab_free(h); + return fails; +} +static int check_RenkoBars(void) { + struct RenkoBars *h = wickra_renko_bars_new(2.0); + if (!h) { printf("FAIL RenkoBars: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RenkoBars", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraRenkoBrick bbuf[256]; + uintptr_t k = wickra_renko_bars_update(h, c, c, c, c, 1.0, 0, bbuf, 256); + for (uintptr_t b = 0; b < (uintptr_t)k; b++) { + got[gn++] = (double)bbuf[b].open; + got[gn++] = (double)bbuf[b].close; + got[gn++] = (double)bbuf[b].direction; + } + fails += cmp_row("RenkoBars", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_renko_bars_free(h); + return fails; +} +static int check_RenkoTrailingStop(void) { + struct RenkoTrailingStop *h = wickra_renko_trailing_stop_new(2.0); + if (!h) { printf("FAIL RenkoTrailingStop: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RenkoTrailingStop", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_renko_trailing_stop_update(h, c); + fails += cmp_row("RenkoTrailingStop", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_renko_trailing_stop_free(h); + return fails; +} +static int check_RickshawMan(void) { + struct RickshawMan *h = wickra_rickshaw_man_new(); + if (!h) { printf("FAIL RickshawMan: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RickshawMan", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_rickshaw_man_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("RickshawMan", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rickshaw_man_free(h); + return fails; +} +static int check_RisingThreeMethods(void) { + struct RisingThreeMethods *h = wickra_rising_three_methods_new(); + if (!h) { printf("FAIL RisingThreeMethods: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RisingThreeMethods", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_rising_three_methods_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("RisingThreeMethods", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rising_three_methods_free(h); + return fails; +} +static int check_Rmi(void) { + struct Rmi *h = wickra_rmi_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL Rmi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Rmi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_rmi_update(h, c); + fails += cmp_row("Rmi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rmi_free(h); + return fails; +} +static int check_Roc(void) { + struct Roc *h = wickra_roc_new((uintptr_t)14); + if (!h) { printf("FAIL Roc: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Roc", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_roc_update(h, c); + fails += cmp_row("Roc", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_roc_free(h); + return fails; +} +static int check_Rocp(void) { + struct Rocp *h = wickra_rocp_new((uintptr_t)14); + if (!h) { printf("FAIL Rocp: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Rocp", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_rocp_update(h, c); + fails += cmp_row("Rocp", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rocp_free(h); + return fails; +} +static int check_Rocr(void) { + struct Rocr *h = wickra_rocr_new((uintptr_t)14); + if (!h) { printf("FAIL Rocr: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Rocr", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_rocr_update(h, c); + fails += cmp_row("Rocr", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rocr_free(h); + return fails; +} +static int check_Rocr100(void) { + struct Rocr100 *h = wickra_rocr100_new((uintptr_t)14); + if (!h) { printf("FAIL Rocr100: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Rocr100", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_rocr100_update(h, c); + fails += cmp_row("Rocr100", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rocr100_free(h); + return fails; +} +static int check_RogersSatchellVolatility(void) { + struct RogersSatchellVolatility *h = wickra_rogers_satchell_volatility_new((uintptr_t)20, (uintptr_t)252); + if (!h) { printf("FAIL RogersSatchellVolatility: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RogersSatchellVolatility", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_rogers_satchell_volatility_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("RogersSatchellVolatility", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rogers_satchell_volatility_free(h); + return fails; +} +static int check_RollMeasure(void) { + struct RollMeasure *h = wickra_roll_measure_new((uintptr_t)20); + if (!h) { printf("FAIL RollMeasure: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RollMeasure", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_roll_measure_update(h, c, v, c >= o, (int64_t)i); + fails += cmp_row("RollMeasure", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_roll_measure_free(h); + return fails; +} +static int check_RollingCorrelation(void) { + struct RollingCorrelation *h = wickra_rolling_correlation_new((uintptr_t)14); + if (!h) { printf("FAIL RollingCorrelation: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RollingCorrelation", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_rolling_correlation_update(h, c, o); + fails += cmp_row("RollingCorrelation", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rolling_correlation_free(h); + return fails; +} +static int check_RollingCovariance(void) { + struct RollingCovariance *h = wickra_rolling_covariance_new((uintptr_t)14); + if (!h) { printf("FAIL RollingCovariance: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RollingCovariance", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_rolling_covariance_update(h, c, o); + fails += cmp_row("RollingCovariance", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rolling_covariance_free(h); + return fails; +} +static int check_RollingIqr(void) { + struct RollingIqr *h = wickra_rolling_iqr_new((uintptr_t)14); + if (!h) { printf("FAIL RollingIqr: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RollingIqr", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_rolling_iqr_update(h, c); + fails += cmp_row("RollingIqr", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rolling_iqr_free(h); + return fails; +} +static int check_RollingMinMaxScaler(void) { + struct RollingMinMaxScaler *h = wickra_rolling_min_max_scaler_new((uintptr_t)14); + if (!h) { printf("FAIL RollingMinMaxScaler: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RollingMinMaxScaler", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_rolling_min_max_scaler_update(h, c); + fails += cmp_row("RollingMinMaxScaler", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rolling_min_max_scaler_free(h); + return fails; +} +static int check_RollingPercentileRank(void) { + struct RollingPercentileRank *h = wickra_rolling_percentile_rank_new((uintptr_t)14); + if (!h) { printf("FAIL RollingPercentileRank: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RollingPercentileRank", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_rolling_percentile_rank_update(h, c); + fails += cmp_row("RollingPercentileRank", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rolling_percentile_rank_free(h); + return fails; +} +static int check_RollingQuantile(void) { + struct RollingQuantile *h = wickra_rolling_quantile_new((uintptr_t)20, 0.5); + if (!h) { printf("FAIL RollingQuantile: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RollingQuantile", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_rolling_quantile_update(h, c); + fails += cmp_row("RollingQuantile", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rolling_quantile_free(h); + return fails; +} +static int check_RollingVwap(void) { + struct RollingVwap *h = wickra_rolling_vwap_new((uintptr_t)14); + if (!h) { printf("FAIL RollingVwap: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RollingVwap", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_rolling_vwap_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("RollingVwap", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rolling_vwap_free(h); + return fails; +} +static int check_RoofingFilter(void) { + struct RoofingFilter *h = wickra_roofing_filter_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL RoofingFilter: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RoofingFilter", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_roofing_filter_update(h, c); + fails += cmp_row("RoofingFilter", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_roofing_filter_free(h); + return fails; +} +static int check_Rsi(void) { + struct Rsi *h = wickra_rsi_new((uintptr_t)14); + if (!h) { printf("FAIL Rsi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Rsi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_rsi_update(h, c); + fails += cmp_row("Rsi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rsi_free(h); + return fails; +} +static int check_Rsx(void) { + struct Rsx *h = wickra_rsx_new((uintptr_t)14); + if (!h) { printf("FAIL Rsx: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Rsx", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_rsx_update(h, c); + fails += cmp_row("Rsx", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rsx_free(h); + return fails; +} +static int check_RunBars(void) { + struct RunBars *h = wickra_run_bars_new((uintptr_t)3); + if (!h) { printf("FAIL RunBars: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RunBars", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraRunBar bbuf[256]; + uintptr_t k = wickra_run_bars_update(h, o, hi, lo, c, 1.0, 0, bbuf, 256); + for (uintptr_t b = 0; b < (uintptr_t)k; b++) { + got[gn++] = (double)bbuf[b].open; + got[gn++] = (double)bbuf[b].high; + got[gn++] = (double)bbuf[b].low; + got[gn++] = (double)bbuf[b].close; + got[gn++] = (double)bbuf[b].length; + got[gn++] = (double)bbuf[b].direction; + } + fails += cmp_row("RunBars", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_run_bars_free(h); + return fails; +} +static int check_Rvi(void) { + struct Rvi *h = wickra_rvi_new((uintptr_t)14); + if (!h) { printf("FAIL Rvi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Rvi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_rvi_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Rvi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rvi_free(h); + return fails; +} +static int check_RviVolatility(void) { + struct RviVolatility *h = wickra_rvi_volatility_new((uintptr_t)14); + if (!h) { printf("FAIL RviVolatility: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_RviVolatility", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_rvi_volatility_update(h, c); + fails += cmp_row("RviVolatility", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rvi_volatility_free(h); + return fails; +} +static int check_Rwi(void) { + struct Rwi *h = wickra_rwi_new((uintptr_t)14); + if (!h) { printf("FAIL Rwi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Rwi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraRwiOutput out; + if (wickra_rwi_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.high; + got[gn++] = out.low; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("Rwi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_rwi_free(h); + return fails; +} +static int check_SampleEntropy(void) { + struct SampleEntropy *h = wickra_sample_entropy_new((uintptr_t)20, (uintptr_t)2, 0.2); + if (!h) { printf("FAIL SampleEntropy: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SampleEntropy", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_sample_entropy_update(h, c); + fails += cmp_row("SampleEntropy", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_sample_entropy_free(h); + return fails; +} +static int check_SarExt(void) { + struct SarExt *h = wickra_sar_ext_new(2.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5); + if (!h) { printf("FAIL SarExt: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SarExt", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_sar_ext_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("SarExt", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_sar_ext_free(h); + return fails; +} +static int check_SeasonalZScore(void) { + struct SeasonalZScore *h = wickra_seasonal_z_score_new((int32_t)14); + if (!h) { printf("FAIL SeasonalZScore: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SeasonalZScore", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_seasonal_z_score_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("SeasonalZScore", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_seasonal_z_score_free(h); + return fails; +} +static int check_SeparatingLines(void) { + struct SeparatingLines *h = wickra_separating_lines_new(); + if (!h) { printf("FAIL SeparatingLines: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SeparatingLines", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_separating_lines_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("SeparatingLines", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_separating_lines_free(h); + return fails; +} +static int check_SessionHighLow(void) { + struct SessionHighLow *h = wickra_session_high_low_new((int32_t)14); + if (!h) { printf("FAIL SessionHighLow: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SessionHighLow", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraSessionHighLowOutput out; + if (wickra_session_high_low_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.high; + got[gn++] = out.low; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("SessionHighLow", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_session_high_low_free(h); + return fails; +} +static int check_SessionRange(void) { + struct SessionRange *h = wickra_session_range_new((int32_t)14); + if (!h) { printf("FAIL SessionRange: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SessionRange", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraSessionRangeOutput out; + if (wickra_session_range_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.asia; + got[gn++] = out.eu; + got[gn++] = out.us; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("SessionRange", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_session_range_free(h); + return fails; +} +static int check_SessionVwap(void) { + struct SessionVwap *h = wickra_session_vwap_new((int32_t)14); + if (!h) { printf("FAIL SessionVwap: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SessionVwap", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_session_vwap_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("SessionVwap", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_session_vwap_free(h); + return fails; +} +static int check_ShannonEntropy(void) { + struct ShannonEntropy *h = wickra_shannon_entropy_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL ShannonEntropy: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ShannonEntropy", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_shannon_entropy_update(h, c); + fails += cmp_row("ShannonEntropy", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_shannon_entropy_free(h); + return fails; +} +static int check_Shark(void) { + struct Shark *h = wickra_shark_new(); + if (!h) { printf("FAIL Shark: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Shark", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_shark_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Shark", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_shark_free(h); + return fails; +} +static int check_SharpeRatio(void) { + struct SharpeRatio *h = wickra_sharpe_ratio_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL SharpeRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SharpeRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_sharpe_ratio_update(h, c); + fails += cmp_row("SharpeRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_sharpe_ratio_free(h); + return fails; +} +static int check_ShootingStar(void) { + struct ShootingStar *h = wickra_shooting_star_new(); + if (!h) { printf("FAIL ShootingStar: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ShootingStar", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_shooting_star_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("ShootingStar", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_shooting_star_free(h); + return fails; +} +static int check_ShortLine(void) { + struct ShortLine *h = wickra_short_line_new(); + if (!h) { printf("FAIL ShortLine: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ShortLine", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_short_line_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("ShortLine", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_short_line_free(h); + return fails; +} +static int check_SignedVolume(void) { + struct SignedVolume *h = wickra_signed_volume_new(); + if (!h) { printf("FAIL SignedVolume: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SignedVolume", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_signed_volume_update(h, c, v, c >= o, (int64_t)i); + fails += cmp_row("SignedVolume", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_signed_volume_free(h); + return fails; +} +static int check_SineWave(void) { + struct SineWave *h = wickra_sine_wave_new(); + if (!h) { printf("FAIL SineWave: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SineWave", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_sine_wave_update(h, c); + fails += cmp_row("SineWave", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_sine_wave_free(h); + return fails; +} +static int check_SineWeightedMa(void) { + struct SineWeightedMa *h = wickra_sine_weighted_ma_new((uintptr_t)14); + if (!h) { printf("FAIL SineWeightedMa: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SineWeightedMa", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_sine_weighted_ma_update(h, c); + fails += cmp_row("SineWeightedMa", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_sine_weighted_ma_free(h); + return fails; +} +static int check_SinglePrints(void) { + struct SinglePrints *h = wickra_single_prints_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL SinglePrints: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SinglePrints", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_single_prints_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("SinglePrints", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_single_prints_free(h); + return fails; +} +static int check_Skewness(void) { + struct Skewness *h = wickra_skewness_new((uintptr_t)14); + if (!h) { printf("FAIL Skewness: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Skewness", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_skewness_update(h, c); + fails += cmp_row("Skewness", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_skewness_free(h); + return fails; +} +static int check_Sma(void) { + struct Sma *h = wickra_sma_new((uintptr_t)14); + if (!h) { printf("FAIL Sma: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Sma", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_sma_update(h, c); + fails += cmp_row("Sma", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_sma_free(h); + return fails; +} +static int check_Smi(void) { + struct Smi *h = wickra_smi_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14); + if (!h) { printf("FAIL Smi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Smi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_smi_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Smi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_smi_free(h); + return fails; +} +static int check_Smma(void) { + struct Smma *h = wickra_smma_new((uintptr_t)14); + if (!h) { printf("FAIL Smma: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Smma", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_smma_update(h, c); + fails += cmp_row("Smma", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_smma_free(h); + return fails; +} +static int check_SmoothedHeikinAshi(void) { + struct SmoothedHeikinAshi *h = wickra_smoothed_heikin_ashi_new((uintptr_t)14); + if (!h) { printf("FAIL SmoothedHeikinAshi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SmoothedHeikinAshi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraSmoothedHeikinAshiOutput out; + if (wickra_smoothed_heikin_ashi_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.open; + got[gn++] = out.high; + got[gn++] = out.low; + got[gn++] = out.close; + } else { + for (int z = 0; z < 4; z++) got[gn++] = NANV; + } + fails += cmp_row("SmoothedHeikinAshi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_smoothed_heikin_ashi_free(h); + return fails; +} +static int check_SortinoRatio(void) { + struct SortinoRatio *h = wickra_sortino_ratio_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL SortinoRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SortinoRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_sortino_ratio_update(h, c); + fails += cmp_row("SortinoRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_sortino_ratio_free(h); + return fails; +} +static int check_SpearmanCorrelation(void) { + struct SpearmanCorrelation *h = wickra_spearman_correlation_new((uintptr_t)14); + if (!h) { printf("FAIL SpearmanCorrelation: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SpearmanCorrelation", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_spearman_correlation_update(h, c, o); + fails += cmp_row("SpearmanCorrelation", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_spearman_correlation_free(h); + return fails; +} +static int check_SpinningTop(void) { + struct SpinningTop *h = wickra_spinning_top_new(); + if (!h) { printf("FAIL SpinningTop: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SpinningTop", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_spinning_top_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("SpinningTop", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_spinning_top_free(h); + return fails; +} +static int check_SpreadAr1Coefficient(void) { + struct SpreadAr1Coefficient *h = wickra_spread_ar1_coefficient_new((uintptr_t)14); + if (!h) { printf("FAIL SpreadAr1Coefficient: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SpreadAr1Coefficient", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_spread_ar1_coefficient_update(h, c, o); + fails += cmp_row("SpreadAr1Coefficient", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_spread_ar1_coefficient_free(h); + return fails; +} +static int check_SpreadBollingerBands(void) { + struct SpreadBollingerBands *h = wickra_spread_bollinger_bands_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL SpreadBollingerBands: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SpreadBollingerBands", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraSpreadBollingerBandsOutput out; + if (wickra_spread_bollinger_bands_update(h, c, o, &out)) { + got[gn++] = out.middle; + got[gn++] = out.upper; + got[gn++] = out.lower; + got[gn++] = out.percent_b; + } else { + for (int z = 0; z < 4; z++) got[gn++] = NANV; + } + fails += cmp_row("SpreadBollingerBands", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_spread_bollinger_bands_free(h); + return fails; +} +static int check_SpreadHurst(void) { + struct SpreadHurst *h = wickra_spread_hurst_new((uintptr_t)14); + if (!h) { printf("FAIL SpreadHurst: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SpreadHurst", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_spread_hurst_update(h, c, o); + fails += cmp_row("SpreadHurst", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_spread_hurst_free(h); + return fails; +} +static int check_StalledPattern(void) { + struct StalledPattern *h = wickra_stalled_pattern_new(); + if (!h) { printf("FAIL StalledPattern: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_StalledPattern", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_stalled_pattern_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("StalledPattern", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_stalled_pattern_free(h); + return fails; +} +static int check_StandardError(void) { + struct StandardError *h = wickra_standard_error_new((uintptr_t)14); + if (!h) { printf("FAIL StandardError: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_StandardError", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_standard_error_update(h, c); + fails += cmp_row("StandardError", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_standard_error_free(h); + return fails; +} +static int check_StandardErrorBands(void) { + struct StandardErrorBands *h = wickra_standard_error_bands_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL StandardErrorBands: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_StandardErrorBands", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraStandardErrorBandsOutput out; + if (wickra_standard_error_bands_update(h, c, &out)) { + got[gn++] = out.upper; + got[gn++] = out.middle; + got[gn++] = out.lower; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("StandardErrorBands", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_standard_error_bands_free(h); + return fails; +} +static int check_StarcBands(void) { + struct StarcBands *h = wickra_starc_bands_new((uintptr_t)3, (uintptr_t)7, 2.0); + if (!h) { printf("FAIL StarcBands: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_StarcBands", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraStarcBandsOutput out; + if (wickra_starc_bands_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.upper; + got[gn++] = out.middle; + got[gn++] = out.lower; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("StarcBands", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_starc_bands_free(h); + return fails; +} +static int check_Stc(void) { + struct Stc *h = wickra_stc_new((uintptr_t)10, (uintptr_t)23, (uintptr_t)10, 0.5); + if (!h) { printf("FAIL Stc: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Stc", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_stc_update(h, c); + fails += cmp_row("Stc", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_stc_free(h); + return fails; +} +static int check_StdDev(void) { + struct StdDev *h = wickra_std_dev_new((uintptr_t)14); + if (!h) { printf("FAIL StdDev: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_StdDev", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_std_dev_update(h, c); + fails += cmp_row("StdDev", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_std_dev_free(h); + return fails; +} +static int check_StepTrailingStop(void) { + struct StepTrailingStop *h = wickra_step_trailing_stop_new(2.0); + if (!h) { printf("FAIL StepTrailingStop: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_StepTrailingStop", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_step_trailing_stop_update(h, c); + fails += cmp_row("StepTrailingStop", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_step_trailing_stop_free(h); + return fails; +} +static int check_SterlingRatio(void) { + struct SterlingRatio *h = wickra_sterling_ratio_new((uintptr_t)14); + if (!h) { printf("FAIL SterlingRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SterlingRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_sterling_ratio_update(h, c); + fails += cmp_row("SterlingRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_sterling_ratio_free(h); + return fails; +} +static int check_StickSandwich(void) { + struct StickSandwich *h = wickra_stick_sandwich_new(); + if (!h) { printf("FAIL StickSandwich: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_StickSandwich", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_stick_sandwich_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("StickSandwich", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_stick_sandwich_free(h); + return fails; +} +static int check_StochRsi(void) { + struct StochRsi *h = wickra_stoch_rsi_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL StochRsi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_StochRsi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_stoch_rsi_update(h, c); + fails += cmp_row("StochRsi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_stoch_rsi_free(h); + return fails; +} +static int check_Stochastic(void) { + struct Stochastic *h = wickra_stochastic_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL Stochastic: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Stochastic", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraStochasticOutput out; + if (wickra_stochastic_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.k; + got[gn++] = out.d; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("Stochastic", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_stochastic_free(h); + return fails; +} +static int check_StochasticCci(void) { + struct StochasticCci *h = wickra_stochastic_cci_new((uintptr_t)14); + if (!h) { printf("FAIL StochasticCci: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_StochasticCci", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_stochastic_cci_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("StochasticCci", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_stochastic_cci_free(h); + return fails; +} +static int check_SuperSmoother(void) { + struct SuperSmoother *h = wickra_super_smoother_new((uintptr_t)14); + if (!h) { printf("FAIL SuperSmoother: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SuperSmoother", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_super_smoother_update(h, c); + fails += cmp_row("SuperSmoother", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_super_smoother_free(h); + return fails; +} +static int check_SuperTrend(void) { + struct SuperTrend *h = wickra_super_trend_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL SuperTrend: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_SuperTrend", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraSuperTrendOutput out; + if (wickra_super_trend_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.value; + got[gn++] = out.direction; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("SuperTrend", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_super_trend_free(h); + return fails; +} +static int check_T3(void) { + struct T3 *h = wickra_t3_new((uintptr_t)5, 0.7); + if (!h) { printf("FAIL T3: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_T3", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_t3_update(h, c); + fails += cmp_row("T3", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_t3_free(h); + return fails; +} +static int check_TailRatio(void) { + struct TailRatio *h = wickra_tail_ratio_new((uintptr_t)14); + if (!h) { printf("FAIL TailRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TailRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_tail_ratio_update(h, c); + fails += cmp_row("TailRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_tail_ratio_free(h); + return fails; +} +static int check_TakerBuySellRatio(void) { + struct TakerBuySellRatio *h = wickra_taker_buy_sell_ratio_new(); + if (!h) { printf("FAIL TakerBuySellRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TakerBuySellRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double fr=(c-o)/c*0.01, mp=c, ip=c-0.5, fp=c+1.0, oi=v*10.0, ls=v*0.6, ss=v*0.4, tbv=v*0.55, tsv=v*0.45, ll=hi-c, sl=c-lo; + got[gn++] = wickra_taker_buy_sell_ratio_update(h, fr, mp, ip, fp, oi, ls, ss, tbv, tsv, ll, sl, (int64_t)i); + fails += cmp_row("TakerBuySellRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_taker_buy_sell_ratio_free(h); + return fails; +} +static int check_Takuri(void) { + struct Takuri *h = wickra_takuri_new(); + if (!h) { printf("FAIL Takuri: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Takuri", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_takuri_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Takuri", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_takuri_free(h); + return fails; +} +static int check_TasukiGap(void) { + struct TasukiGap *h = wickra_tasuki_gap_new(); + if (!h) { printf("FAIL TasukiGap: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TasukiGap", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_tasuki_gap_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TasukiGap", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_tasuki_gap_free(h); + return fails; +} +static int check_TdCamouflage(void) { + struct TdCamouflage *h = wickra_td_camouflage_new(); + if (!h) { printf("FAIL TdCamouflage: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TdCamouflage", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_td_camouflage_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TdCamouflage", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_td_camouflage_free(h); + return fails; +} +static int check_TdClop(void) { + struct TdClop *h = wickra_td_clop_new(); + if (!h) { printf("FAIL TdClop: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TdClop", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_td_clop_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TdClop", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_td_clop_free(h); + return fails; +} +static int check_TdClopwin(void) { + struct TdClopwin *h = wickra_td_clopwin_new(); + if (!h) { printf("FAIL TdClopwin: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TdClopwin", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_td_clopwin_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TdClopwin", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_td_clopwin_free(h); + return fails; +} +static int check_TdCombo(void) { + struct TdCombo *h = wickra_td_combo_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14, (uintptr_t)28); + if (!h) { printf("FAIL TdCombo: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TdCombo", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_td_combo_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TdCombo", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_td_combo_free(h); + return fails; +} +static int check_TdCountdown(void) { + struct TdCountdown *h = wickra_td_countdown_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14, (uintptr_t)28); + if (!h) { printf("FAIL TdCountdown: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TdCountdown", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_td_countdown_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TdCountdown", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_td_countdown_free(h); + return fails; +} +static int check_TdDWave(void) { + struct TdDWave *h = wickra_td_d_wave_new((uintptr_t)2); + if (!h) { printf("FAIL TdDWave: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TdDWave", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_td_d_wave_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TdDWave", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_td_d_wave_free(h); + return fails; +} +static int check_TdDeMarker(void) { + struct TdDeMarker *h = wickra_td_de_marker_new((uintptr_t)14); + if (!h) { printf("FAIL TdDeMarker: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TdDeMarker", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_td_de_marker_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TdDeMarker", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_td_de_marker_free(h); + return fails; +} +static int check_TdDifferential(void) { + struct TdDifferential *h = wickra_td_differential_new(); + if (!h) { printf("FAIL TdDifferential: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TdDifferential", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_td_differential_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TdDifferential", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_td_differential_free(h); + return fails; +} +static int check_TdLines(void) { + struct TdLines *h = wickra_td_lines_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL TdLines: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TdLines", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraTdLinesOutput out; + if (wickra_td_lines_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.resistance; + got[gn++] = out.support; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("TdLines", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_td_lines_free(h); + return fails; +} +static int check_TdMovingAverage(void) { + struct TdMovingAverage *h = wickra_td_moving_average_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL TdMovingAverage: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TdMovingAverage", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraTdMovingAverageOutput out; + if (wickra_td_moving_average_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.st1; + got[gn++] = out.st2; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("TdMovingAverage", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_td_moving_average_free(h); + return fails; +} +static int check_TdOpen(void) { + struct TdOpen *h = wickra_td_open_new(); + if (!h) { printf("FAIL TdOpen: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TdOpen", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_td_open_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TdOpen", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_td_open_free(h); + return fails; +} +static int check_TdPressure(void) { + struct TdPressure *h = wickra_td_pressure_new((uintptr_t)14); + if (!h) { printf("FAIL TdPressure: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TdPressure", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_td_pressure_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TdPressure", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_td_pressure_free(h); + return fails; +} +static int check_TdPropulsion(void) { + struct TdPropulsion *h = wickra_td_propulsion_new(); + if (!h) { printf("FAIL TdPropulsion: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TdPropulsion", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_td_propulsion_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TdPropulsion", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_td_propulsion_free(h); + return fails; +} +static int check_TdRangeProjection(void) { + struct TdRangeProjection *h = wickra_td_range_projection_new(); + if (!h) { printf("FAIL TdRangeProjection: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TdRangeProjection", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraTdRangeProjectionOutput out; + if (wickra_td_range_projection_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.high; + got[gn++] = out.low; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("TdRangeProjection", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_td_range_projection_free(h); + return fails; +} +static int check_TdRei(void) { + struct TdRei *h = wickra_td_rei_new((uintptr_t)14); + if (!h) { printf("FAIL TdRei: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TdRei", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_td_rei_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TdRei", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_td_rei_free(h); + return fails; +} +static int check_TdRiskLevel(void) { + struct TdRiskLevel *h = wickra_td_risk_level_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL TdRiskLevel: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TdRiskLevel", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraTdRiskLevelOutput out; + if (wickra_td_risk_level_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.buy_risk; + got[gn++] = out.sell_risk; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("TdRiskLevel", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_td_risk_level_free(h); + return fails; +} +static int check_TdSequential(void) { + struct TdSequential *h = wickra_td_sequential_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14, (uintptr_t)28); + if (!h) { printf("FAIL TdSequential: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TdSequential", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraTdSequentialOutput out; + if (wickra_td_sequential_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.setup; + got[gn++] = out.countdown; + got[gn++] = out.direction; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("TdSequential", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_td_sequential_free(h); + return fails; +} +static int check_TdSetup(void) { + struct TdSetup *h = wickra_td_setup_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL TdSetup: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TdSetup", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_td_setup_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TdSetup", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_td_setup_free(h); + return fails; +} +static int check_TdTrap(void) { + struct TdTrap *h = wickra_td_trap_new(); + if (!h) { printf("FAIL TdTrap: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TdTrap", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_td_trap_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TdTrap", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_td_trap_free(h); + return fails; +} +static int check_Tema(void) { + struct Tema *h = wickra_tema_new((uintptr_t)14); + if (!h) { printf("FAIL Tema: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Tema", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_tema_update(h, c); + fails += cmp_row("Tema", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_tema_free(h); + return fails; +} +static int check_TermStructureBasis(void) { + struct TermStructureBasis *h = wickra_term_structure_basis_new(); + if (!h) { printf("FAIL TermStructureBasis: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TermStructureBasis", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double fr=(c-o)/c*0.01, mp=c, ip=c-0.5, fp=c+1.0, oi=v*10.0, ls=v*0.6, ss=v*0.4, tbv=v*0.55, tsv=v*0.45, ll=hi-c, sl=c-lo; + got[gn++] = wickra_term_structure_basis_update(h, fr, mp, ip, fp, oi, ls, ss, tbv, tsv, ll, sl, (int64_t)i); + fails += cmp_row("TermStructureBasis", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_term_structure_basis_free(h); + return fails; +} +static int check_ThreeDrives(void) { + struct ThreeDrives *h = wickra_three_drives_new(); + if (!h) { printf("FAIL ThreeDrives: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ThreeDrives", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_three_drives_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("ThreeDrives", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_three_drives_free(h); + return fails; +} +static int check_ThreeInside(void) { + struct ThreeInside *h = wickra_three_inside_new(); + if (!h) { printf("FAIL ThreeInside: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ThreeInside", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_three_inside_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("ThreeInside", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_three_inside_free(h); + return fails; +} +static int check_ThreeLineBreak(void) { + struct ThreeLineBreak *h = wickra_three_line_break_new((uintptr_t)14); + if (!h) { printf("FAIL ThreeLineBreak: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ThreeLineBreak", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_three_line_break_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("ThreeLineBreak", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_three_line_break_free(h); + return fails; +} +static int check_ThreeLineBreakBars(void) { + struct ThreeLineBreakBars *h = wickra_three_line_break_bars_new((uintptr_t)3); + if (!h) { printf("FAIL ThreeLineBreakBars: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ThreeLineBreakBars", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraLineBreakBar bbuf[256]; + uintptr_t k = wickra_three_line_break_bars_update(h, c, c, c, c, 1.0, 0, bbuf, 256); + for (uintptr_t b = 0; b < (uintptr_t)k; b++) { + got[gn++] = (double)bbuf[b].open; + got[gn++] = (double)bbuf[b].close; + got[gn++] = (double)bbuf[b].direction; + } + fails += cmp_row("ThreeLineBreakBars", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_three_line_break_bars_free(h); + return fails; +} +static int check_ThreeLineStrike(void) { + struct ThreeLineStrike *h = wickra_three_line_strike_new(); + if (!h) { printf("FAIL ThreeLineStrike: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ThreeLineStrike", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_three_line_strike_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("ThreeLineStrike", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_three_line_strike_free(h); + return fails; +} +static int check_ThreeOutside(void) { + struct ThreeOutside *h = wickra_three_outside_new(); + if (!h) { printf("FAIL ThreeOutside: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ThreeOutside", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_three_outside_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("ThreeOutside", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_three_outside_free(h); + return fails; +} +static int check_ThreeSoldiersOrCrows(void) { + struct ThreeSoldiersOrCrows *h = wickra_three_soldiers_or_crows_new(); + if (!h) { printf("FAIL ThreeSoldiersOrCrows: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ThreeSoldiersOrCrows", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_three_soldiers_or_crows_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("ThreeSoldiersOrCrows", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_three_soldiers_or_crows_free(h); + return fails; +} +static int check_ThreeStarsInSouth(void) { + struct ThreeStarsInSouth *h = wickra_three_stars_in_south_new(); + if (!h) { printf("FAIL ThreeStarsInSouth: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ThreeStarsInSouth", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_three_stars_in_south_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("ThreeStarsInSouth", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_three_stars_in_south_free(h); + return fails; +} +static int check_Thrusting(void) { + struct Thrusting *h = wickra_thrusting_new(); + if (!h) { printf("FAIL Thrusting: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Thrusting", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_thrusting_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Thrusting", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_thrusting_free(h); + return fails; +} +static int check_TickBars(void) { + struct TickBars *h = wickra_tick_bars_new((uintptr_t)2); + if (!h) { printf("FAIL TickBars: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TickBars", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraTickBar bbuf[256]; + uintptr_t k = wickra_tick_bars_update(h, o, hi, lo, c, v, 0, bbuf, 256); + for (uintptr_t b = 0; b < (uintptr_t)k; b++) { + got[gn++] = (double)bbuf[b].open; + got[gn++] = (double)bbuf[b].high; + got[gn++] = (double)bbuf[b].low; + got[gn++] = (double)bbuf[b].close; + got[gn++] = (double)bbuf[b].volume; + } + fails += cmp_row("TickBars", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_tick_bars_free(h); + return fails; +} +static int check_TickIndex(void) { + struct TickIndex *h = wickra_tick_index_new(); + if (!h) { printf("FAIL TickIndex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TickIndex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double chg[5], vol[5]; bool nh[5], nl[5], am[5], ob[5]; + for (int j = 0; j < 5; j++) { chg[j] = (c-o)+j; vol[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); } + got[gn++] = wickra_tick_index_update(h, chg, vol, nh, nl, am, ob, 5, (int64_t)i); + fails += cmp_row("TickIndex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_tick_index_free(h); + return fails; +} +static int check_Tii(void) { + struct Tii *h = wickra_tii_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL Tii: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Tii", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_tii_update(h, c); + fails += cmp_row("Tii", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_tii_free(h); + return fails; +} +static int check_TimeBasedStop(void) { + struct TimeBasedStop *h = wickra_time_based_stop_new((uintptr_t)14); + if (!h) { printf("FAIL TimeBasedStop: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TimeBasedStop", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_time_based_stop_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TimeBasedStop", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_time_based_stop_free(h); + return fails; +} +static int check_TimeOfDayReturnProfile(void) { + struct TimeOfDayReturnProfile *h = wickra_time_of_day_return_profile_new((uintptr_t)24, (int32_t)0); + if (!h) { printf("FAIL TimeOfDayReturnProfile: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TimeOfDayReturnProfile", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double vbuf[256]; + intptr_t k = wickra_time_of_day_return_profile_update(h, o, hi, lo, c, v, (int64_t)i, vbuf, 256); + if (k < 0) { for (int z = 0; z < 24; z++) got[gn++] = NANV; } + else { for (int z = 0; z < 24; z++) got[gn++] = vbuf[z]; } + fails += cmp_row("TimeOfDayReturnProfile", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_time_of_day_return_profile_free(h); + return fails; +} +static int check_TowerTopBottom(void) { + struct TowerTopBottom *h = wickra_tower_top_bottom_new(); + if (!h) { printf("FAIL TowerTopBottom: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TowerTopBottom", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_tower_top_bottom_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TowerTopBottom", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_tower_top_bottom_free(h); + return fails; +} +static int check_TpoProfile(void) { + struct TpoProfile *h = wickra_tpo_profile_new((uintptr_t)30, (uintptr_t)50); + if (!h) { printf("FAIL TpoProfile: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TpoProfile", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double vbuf[256]; + struct WickraTpoProfileOutputScalars sc; + intptr_t k = wickra_tpo_profile_update(h, o, hi, lo, c, v, (int64_t)i, &sc, vbuf, 256); + if (k < 0) { for (int z = 0; z < 52; z++) got[gn++] = NANV; } + else { got[gn++] = sc.price_low; got[gn++] = sc.price_high; + for (int z = 0; z < 50; z++) got[gn++] = vbuf[z]; } + fails += cmp_row("TpoProfile", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_tpo_profile_free(h); + return fails; +} +static int check_TradeImbalance(void) { + struct TradeImbalance *h = wickra_trade_imbalance_new((uintptr_t)20); + if (!h) { printf("FAIL TradeImbalance: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TradeImbalance", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_trade_imbalance_update(h, c, v, c >= o, (int64_t)i); + fails += cmp_row("TradeImbalance", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_trade_imbalance_free(h); + return fails; +} +static int check_TradeSignAutocorrelation(void) { + struct TradeSignAutocorrelation *h = wickra_trade_sign_autocorrelation_new((uintptr_t)20); + if (!h) { printf("FAIL TradeSignAutocorrelation: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TradeSignAutocorrelation", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_trade_sign_autocorrelation_update(h, c, v, c >= o, (int64_t)i); + fails += cmp_row("TradeSignAutocorrelation", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_trade_sign_autocorrelation_free(h); + return fails; +} +static int check_TradeVolumeIndex(void) { + struct TradeVolumeIndex *h = wickra_trade_volume_index_new(2.0); + if (!h) { printf("FAIL TradeVolumeIndex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TradeVolumeIndex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_trade_volume_index_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TradeVolumeIndex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_trade_volume_index_free(h); + return fails; +} +static int check_TrendLabel(void) { + struct TrendLabel *h = wickra_trend_label_new((uintptr_t)14); + if (!h) { printf("FAIL TrendLabel: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TrendLabel", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_trend_label_update(h, c); + fails += cmp_row("TrendLabel", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_trend_label_free(h); + return fails; +} +static int check_TrendStrengthIndex(void) { + struct TrendStrengthIndex *h = wickra_trend_strength_index_new((uintptr_t)14); + if (!h) { printf("FAIL TrendStrengthIndex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TrendStrengthIndex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_trend_strength_index_update(h, c); + fails += cmp_row("TrendStrengthIndex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_trend_strength_index_free(h); + return fails; +} +static int check_Trendflex(void) { + struct Trendflex *h = wickra_trendflex_new((uintptr_t)14); + if (!h) { printf("FAIL Trendflex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Trendflex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_trendflex_update(h, c); + fails += cmp_row("Trendflex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_trendflex_free(h); + return fails; +} +static int check_TreynorRatio(void) { + struct TreynorRatio *h = wickra_treynor_ratio_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL TreynorRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TreynorRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_treynor_ratio_update(h, c, o); + fails += cmp_row("TreynorRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_treynor_ratio_free(h); + return fails; +} +static int check_Triangle(void) { + struct Triangle *h = wickra_triangle_new(); + if (!h) { printf("FAIL Triangle: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Triangle", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_triangle_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Triangle", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_triangle_free(h); + return fails; +} +static int check_Trima(void) { + struct Trima *h = wickra_trima_new((uintptr_t)14); + if (!h) { printf("FAIL Trima: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Trima", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_trima_update(h, c); + fails += cmp_row("Trima", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_trima_free(h); + return fails; +} +static int check_Trin(void) { + struct Trin *h = wickra_trin_new(); + if (!h) { printf("FAIL Trin: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Trin", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double chg[5], vol[5]; bool nh[5], nl[5], am[5], ob[5]; + for (int j = 0; j < 5; j++) { chg[j] = (c-o)+j; vol[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); } + got[gn++] = wickra_trin_update(h, chg, vol, nh, nl, am, ob, 5, (int64_t)i); + fails += cmp_row("Trin", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_trin_free(h); + return fails; +} +static int check_TripleTopBottom(void) { + struct TripleTopBottom *h = wickra_triple_top_bottom_new(); + if (!h) { printf("FAIL TripleTopBottom: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TripleTopBottom", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_triple_top_bottom_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TripleTopBottom", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_triple_top_bottom_free(h); + return fails; +} +static int check_Tristar(void) { + struct Tristar *h = wickra_tristar_new(); + if (!h) { printf("FAIL Tristar: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Tristar", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_tristar_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Tristar", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_tristar_free(h); + return fails; +} +static int check_Trix(void) { + struct Trix *h = wickra_trix_new((uintptr_t)14); + if (!h) { printf("FAIL Trix: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Trix", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_trix_update(h, c); + fails += cmp_row("Trix", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_trix_free(h); + return fails; +} +static int check_TrueRange(void) { + struct TrueRange *h = wickra_true_range_new(); + if (!h) { printf("FAIL TrueRange: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TrueRange", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_true_range_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TrueRange", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_true_range_free(h); + return fails; +} +static int check_Tsf(void) { + struct Tsf *h = wickra_tsf_new((uintptr_t)14); + if (!h) { printf("FAIL Tsf: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Tsf", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_tsf_update(h, c); + fails += cmp_row("Tsf", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_tsf_free(h); + return fails; +} +static int check_TsfOscillator(void) { + struct TsfOscillator *h = wickra_tsf_oscillator_new((uintptr_t)14); + if (!h) { printf("FAIL TsfOscillator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TsfOscillator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_tsf_oscillator_update(h, c); + fails += cmp_row("TsfOscillator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_tsf_oscillator_free(h); + return fails; +} +static int check_Tsi(void) { + struct Tsi *h = wickra_tsi_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL Tsi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Tsi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_tsi_update(h, c); + fails += cmp_row("Tsi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_tsi_free(h); + return fails; +} +static int check_Tsv(void) { + struct Tsv *h = wickra_tsv_new((uintptr_t)14); + if (!h) { printf("FAIL Tsv: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Tsv", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_tsv_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Tsv", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_tsv_free(h); + return fails; +} +static int check_TtmSqueeze(void) { + struct TtmSqueeze *h = wickra_ttm_squeeze_new((uintptr_t)14, 2.0, 0.5); + if (!h) { printf("FAIL TtmSqueeze: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TtmSqueeze", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraTtmSqueezeOutput out; + if (wickra_ttm_squeeze_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.squeeze; + got[gn++] = out.momentum; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("TtmSqueeze", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ttm_squeeze_free(h); + return fails; +} +static int check_TtmTrend(void) { + struct TtmTrend *h = wickra_ttm_trend_new((uintptr_t)14); + if (!h) { printf("FAIL TtmTrend: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TtmTrend", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_ttm_trend_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TtmTrend", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ttm_trend_free(h); + return fails; +} +static int check_TurnOfMonth(void) { + struct TurnOfMonth *h = wickra_turn_of_month_new(3.0, 3.0, (int32_t)0); + if (!h) { printf("FAIL TurnOfMonth: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TurnOfMonth", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_turn_of_month_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TurnOfMonth", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_turn_of_month_free(h); + return fails; +} +static int check_Tweezer(void) { + struct Tweezer *h = wickra_tweezer_new(); + if (!h) { printf("FAIL Tweezer: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Tweezer", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_tweezer_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Tweezer", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_tweezer_free(h); + return fails; +} +static int check_TwiggsMoneyFlow(void) { + struct TwiggsMoneyFlow *h = wickra_twiggs_money_flow_new((uintptr_t)14); + if (!h) { printf("FAIL TwiggsMoneyFlow: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TwiggsMoneyFlow", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_twiggs_money_flow_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TwiggsMoneyFlow", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_twiggs_money_flow_free(h); + return fails; +} +static int check_TwoCrows(void) { + struct TwoCrows *h = wickra_two_crows_new(); + if (!h) { printf("FAIL TwoCrows: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TwoCrows", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_two_crows_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TwoCrows", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_two_crows_free(h); + return fails; +} +static int check_TypicalPrice(void) { + struct TypicalPrice *h = wickra_typical_price_new(); + if (!h) { printf("FAIL TypicalPrice: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_TypicalPrice", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_typical_price_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("TypicalPrice", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_typical_price_free(h); + return fails; +} +static int check_UlcerIndex(void) { + struct UlcerIndex *h = wickra_ulcer_index_new((uintptr_t)14); + if (!h) { printf("FAIL UlcerIndex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_UlcerIndex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_ulcer_index_update(h, c); + fails += cmp_row("UlcerIndex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ulcer_index_free(h); + return fails; +} +static int check_UltimateOscillator(void) { + struct UltimateOscillator *h = wickra_ultimate_oscillator_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14); + if (!h) { printf("FAIL UltimateOscillator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_UltimateOscillator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_ultimate_oscillator_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("UltimateOscillator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_ultimate_oscillator_free(h); + return fails; +} +static int check_UniqueThreeRiver(void) { + struct UniqueThreeRiver *h = wickra_unique_three_river_new(); + if (!h) { printf("FAIL UniqueThreeRiver: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_UniqueThreeRiver", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_unique_three_river_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("UniqueThreeRiver", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_unique_three_river_free(h); + return fails; +} +static int check_UniversalOscillator(void) { + struct UniversalOscillator *h = wickra_universal_oscillator_new((uintptr_t)14); + if (!h) { printf("FAIL UniversalOscillator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_UniversalOscillator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_universal_oscillator_update(h, c); + fails += cmp_row("UniversalOscillator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_universal_oscillator_free(h); + return fails; +} +static int check_UpDownVolumeRatio(void) { + struct UpDownVolumeRatio *h = wickra_up_down_volume_ratio_new(); + if (!h) { printf("FAIL UpDownVolumeRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_UpDownVolumeRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double chg[5], vol[5]; bool nh[5], nl[5], am[5], ob[5]; + for (int j = 0; j < 5; j++) { chg[j] = (c-o)+j; vol[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); } + got[gn++] = wickra_up_down_volume_ratio_update(h, chg, vol, nh, nl, am, ob, 5, (int64_t)i); + fails += cmp_row("UpDownVolumeRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_up_down_volume_ratio_free(h); + return fails; +} +static int check_UpsideGapThreeMethods(void) { + struct UpsideGapThreeMethods *h = wickra_upside_gap_three_methods_new(); + if (!h) { printf("FAIL UpsideGapThreeMethods: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_UpsideGapThreeMethods", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_upside_gap_three_methods_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("UpsideGapThreeMethods", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_upside_gap_three_methods_free(h); + return fails; +} +static int check_UpsideGapTwoCrows(void) { + struct UpsideGapTwoCrows *h = wickra_upside_gap_two_crows_new(); + if (!h) { printf("FAIL UpsideGapTwoCrows: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_UpsideGapTwoCrows", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_upside_gap_two_crows_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("UpsideGapTwoCrows", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_upside_gap_two_crows_free(h); + return fails; +} +static int check_UpsidePotentialRatio(void) { + struct UpsidePotentialRatio *h = wickra_upside_potential_ratio_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL UpsidePotentialRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_UpsidePotentialRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_upside_potential_ratio_update(h, c); + fails += cmp_row("UpsidePotentialRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_upside_potential_ratio_free(h); + return fails; +} +static int check_ValueArea(void) { + struct ValueArea *h = wickra_value_area_new((uintptr_t)20, (uintptr_t)50, 0.7); + if (!h) { printf("FAIL ValueArea: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ValueArea", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraValueAreaOutput out; + if (wickra_value_area_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.poc; + got[gn++] = out.vah; + got[gn++] = out.val; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("ValueArea", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_value_area_free(h); + return fails; +} +static int check_ValueAtRisk(void) { + struct ValueAtRisk *h = wickra_value_at_risk_new((uintptr_t)20, 0.95); + if (!h) { printf("FAIL ValueAtRisk: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ValueAtRisk", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_value_at_risk_update(h, c); + fails += cmp_row("ValueAtRisk", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_value_at_risk_free(h); + return fails; +} +static int check_Variance(void) { + struct Variance *h = wickra_variance_new((uintptr_t)14); + if (!h) { printf("FAIL Variance: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Variance", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_variance_update(h, c); + fails += cmp_row("Variance", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_variance_free(h); + return fails; +} +static int check_VarianceRatio(void) { + struct VarianceRatio *h = wickra_variance_ratio_new((uintptr_t)60, (uintptr_t)2); + if (!h) { printf("FAIL VarianceRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_VarianceRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_variance_ratio_update(h, c, o); + fails += cmp_row("VarianceRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_variance_ratio_free(h); + return fails; +} +static int check_VerticalHorizontalFilter(void) { + struct VerticalHorizontalFilter *h = wickra_vertical_horizontal_filter_new((uintptr_t)14); + if (!h) { printf("FAIL VerticalHorizontalFilter: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_VerticalHorizontalFilter", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_vertical_horizontal_filter_update(h, c); + fails += cmp_row("VerticalHorizontalFilter", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_vertical_horizontal_filter_free(h); + return fails; +} +static int check_Vidya(void) { + struct Vidya *h = wickra_vidya_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL Vidya: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Vidya", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_vidya_update(h, c); + fails += cmp_row("Vidya", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_vidya_free(h); + return fails; +} +static int check_VolatilityCone(void) { + struct VolatilityCone *h = wickra_volatility_cone_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL VolatilityCone: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_VolatilityCone", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraVolatilityConeOutput out; + if (wickra_volatility_cone_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.current; + got[gn++] = out.min; + got[gn++] = out.median; + got[gn++] = out.max; + got[gn++] = out.percentile; + } else { + for (int z = 0; z < 5; z++) got[gn++] = NANV; + } + fails += cmp_row("VolatilityCone", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_volatility_cone_free(h); + return fails; +} +static int check_VolatilityOfVolatility(void) { + struct VolatilityOfVolatility *h = wickra_volatility_of_volatility_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL VolatilityOfVolatility: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_VolatilityOfVolatility", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_volatility_of_volatility_update(h, c); + fails += cmp_row("VolatilityOfVolatility", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_volatility_of_volatility_free(h); + return fails; +} +static int check_VolatilityRatio(void) { + struct VolatilityRatio *h = wickra_volatility_ratio_new((uintptr_t)14); + if (!h) { printf("FAIL VolatilityRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_VolatilityRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_volatility_ratio_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("VolatilityRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_volatility_ratio_free(h); + return fails; +} +static int check_VoltyStop(void) { + struct VoltyStop *h = wickra_volty_stop_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL VoltyStop: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_VoltyStop", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_volty_stop_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("VoltyStop", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_volty_stop_free(h); + return fails; +} +static int check_VolumeBars(void) { + struct VolumeBars *h = wickra_volume_bars_new(500.0); + if (!h) { printf("FAIL VolumeBars: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_VolumeBars", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraVolumeBar bbuf[256]; + uintptr_t k = wickra_volume_bars_update(h, o, hi, lo, c, v, 0, bbuf, 256); + for (uintptr_t b = 0; b < (uintptr_t)k; b++) { + got[gn++] = (double)bbuf[b].open; + got[gn++] = (double)bbuf[b].high; + got[gn++] = (double)bbuf[b].low; + got[gn++] = (double)bbuf[b].close; + got[gn++] = (double)bbuf[b].volume; + } + fails += cmp_row("VolumeBars", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_volume_bars_free(h); + return fails; +} +static int check_VolumeByTimeProfile(void) { + struct VolumeByTimeProfile *h = wickra_volume_by_time_profile_new((uintptr_t)24, (int32_t)0); + if (!h) { printf("FAIL VolumeByTimeProfile: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_VolumeByTimeProfile", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double vbuf[256]; + intptr_t k = wickra_volume_by_time_profile_update(h, o, hi, lo, c, v, (int64_t)i, vbuf, 256); + if (k < 0) { for (int z = 0; z < 24; z++) got[gn++] = NANV; } + else { for (int z = 0; z < 24; z++) got[gn++] = vbuf[z]; } + fails += cmp_row("VolumeByTimeProfile", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_volume_by_time_profile_free(h); + return fails; +} +static int check_VolumeOscillator(void) { + struct VolumeOscillator *h = wickra_volume_oscillator_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL VolumeOscillator: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_VolumeOscillator", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_volume_oscillator_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("VolumeOscillator", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_volume_oscillator_free(h); + return fails; +} +static int check_VolumePriceTrend(void) { + struct VolumePriceTrend *h = wickra_volume_price_trend_new(); + if (!h) { printf("FAIL VolumePriceTrend: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_VolumePriceTrend", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_volume_price_trend_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("VolumePriceTrend", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_volume_price_trend_free(h); + return fails; +} +static int check_VolumeProfile(void) { + struct VolumeProfile *h = wickra_volume_profile_new((uintptr_t)20, (uintptr_t)50); + if (!h) { printf("FAIL VolumeProfile: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_VolumeProfile", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + double vbuf[256]; + struct WickraVolumeProfileOutputScalars sc; + intptr_t k = wickra_volume_profile_update(h, o, hi, lo, c, v, (int64_t)i, &sc, vbuf, 256); + if (k < 0) { for (int z = 0; z < 52; z++) got[gn++] = NANV; } + else { got[gn++] = sc.price_low; got[gn++] = sc.price_high; + for (int z = 0; z < 50; z++) got[gn++] = vbuf[z]; } + fails += cmp_row("VolumeProfile", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_volume_profile_free(h); + return fails; +} +static int check_VolumeRsi(void) { + struct VolumeRsi *h = wickra_volume_rsi_new((uintptr_t)14); + if (!h) { printf("FAIL VolumeRsi: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_VolumeRsi", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_volume_rsi_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("VolumeRsi", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_volume_rsi_free(h); + return fails; +} +static int check_VolumeWeightedMacd(void) { + struct VolumeWeightedMacd *h = wickra_volume_weighted_macd_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14); + if (!h) { printf("FAIL VolumeWeightedMacd: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_VolumeWeightedMacd", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraVolumeWeightedMacdOutput out; + if (wickra_volume_weighted_macd_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.macd; + got[gn++] = out.signal; + got[gn++] = out.histogram; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("VolumeWeightedMacd", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_volume_weighted_macd_free(h); + return fails; +} +static int check_VolumeWeightedSr(void) { + struct VolumeWeightedSr *h = wickra_volume_weighted_sr_new((uintptr_t)14); + if (!h) { printf("FAIL VolumeWeightedSr: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_VolumeWeightedSr", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraVolumeWeightedSrOutput out; + if (wickra_volume_weighted_sr_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.support; + got[gn++] = out.resistance; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("VolumeWeightedSr", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_volume_weighted_sr_free(h); + return fails; +} +static int check_Vortex(void) { + struct Vortex *h = wickra_vortex_new((uintptr_t)14); + if (!h) { printf("FAIL Vortex: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Vortex", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraVortexOutput out; + if (wickra_vortex_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.plus; + got[gn++] = out.minus; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("Vortex", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_vortex_free(h); + return fails; +} +static int check_Vpin(void) { + struct Vpin *h = wickra_vpin_new(5000.0, (uintptr_t)10); + if (!h) { printf("FAIL Vpin: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Vpin", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_vpin_update(h, c, v, c >= o, (int64_t)i); + fails += cmp_row("Vpin", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_vpin_free(h); + return fails; +} +static int check_Vwap(void) { + struct Vwap *h = wickra_vwap_new(); + if (!h) { printf("FAIL Vwap: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Vwap", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_vwap_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Vwap", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_vwap_free(h); + return fails; +} +static int check_VwapStdDevBands(void) { + struct VwapStdDevBands *h = wickra_vwap_std_dev_bands_new(2.0); + if (!h) { printf("FAIL VwapStdDevBands: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_VwapStdDevBands", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraVwapStdDevBandsOutput out; + if (wickra_vwap_std_dev_bands_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.upper; + got[gn++] = out.middle; + got[gn++] = out.lower; + got[gn++] = out.stddev; + } else { + for (int z = 0; z < 4; z++) got[gn++] = NANV; + } + fails += cmp_row("VwapStdDevBands", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_vwap_std_dev_bands_free(h); + return fails; +} +static int check_Vwma(void) { + struct Vwma *h = wickra_vwma_new((uintptr_t)14); + if (!h) { printf("FAIL Vwma: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Vwma", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_vwma_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Vwma", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_vwma_free(h); + return fails; +} +static int check_Vzo(void) { + struct Vzo *h = wickra_vzo_new((uintptr_t)14); + if (!h) { printf("FAIL Vzo: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Vzo", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_vzo_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Vzo", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_vzo_free(h); + return fails; +} +static int check_Wad(void) { + struct Wad *h = wickra_wad_new(); + if (!h) { printf("FAIL Wad: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Wad", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_wad_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Wad", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_wad_free(h); + return fails; +} +static int check_WavePm(void) { + struct WavePm *h = wickra_wave_pm_new((uintptr_t)3, (uintptr_t)7); + if (!h) { printf("FAIL WavePm: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_WavePm", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_wave_pm_update(h, c); + fails += cmp_row("WavePm", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_wave_pm_free(h); + return fails; +} +static int check_WaveTrend(void) { + struct WaveTrend *h = wickra_wave_trend_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14); + if (!h) { printf("FAIL WaveTrend: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_WaveTrend", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraWaveTrendOutput out; + if (wickra_wave_trend_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.wt1; + got[gn++] = out.wt2; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("WaveTrend", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_wave_trend_free(h); + return fails; +} +static int check_Wedge(void) { + struct Wedge *h = wickra_wedge_new(); + if (!h) { printf("FAIL Wedge: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Wedge", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_wedge_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("Wedge", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_wedge_free(h); + return fails; +} +static int check_WeightedClose(void) { + struct WeightedClose *h = wickra_weighted_close_new(); + if (!h) { printf("FAIL WeightedClose: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_WeightedClose", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_weighted_close_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("WeightedClose", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_weighted_close_free(h); + return fails; +} +static int check_WickRatio(void) { + struct WickRatio *h = wickra_wick_ratio_new(); + if (!h) { printf("FAIL WickRatio: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_WickRatio", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_wick_ratio_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("WickRatio", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_wick_ratio_free(h); + return fails; +} +static int check_WilliamsFractals(void) { + struct WilliamsFractals *h = wickra_williams_fractals_new(); + if (!h) { printf("FAIL WilliamsFractals: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_WilliamsFractals", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraWilliamsFractalsOutput out; + if (wickra_williams_fractals_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.up; + got[gn++] = out.down; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("WilliamsFractals", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_williams_fractals_free(h); + return fails; +} +static int check_WilliamsR(void) { + struct WilliamsR *h = wickra_williams_r_new((uintptr_t)14); + if (!h) { printf("FAIL WilliamsR: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_WilliamsR", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_williams_r_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("WilliamsR", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_williams_r_free(h); + return fails; +} +static int check_WinRate(void) { + struct WinRate *h = wickra_win_rate_new((uintptr_t)14); + if (!h) { printf("FAIL WinRate: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_WinRate", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_win_rate_update(h, c); + fails += cmp_row("WinRate", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_win_rate_free(h); + return fails; +} +static int check_Wma(void) { + struct Wma *h = wickra_wma_new((uintptr_t)14); + if (!h) { printf("FAIL Wma: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Wma", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_wma_update(h, c); + fails += cmp_row("Wma", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_wma_free(h); + return fails; +} +static int check_WoodiePivots(void) { + struct WoodiePivots *h = wickra_woodie_pivots_new(); + if (!h) { printf("FAIL WoodiePivots: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_WoodiePivots", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraWoodiePivotsOutput out; + if (wickra_woodie_pivots_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.pp; + got[gn++] = out.r1; + got[gn++] = out.r2; + got[gn++] = out.s1; + got[gn++] = out.s2; + } else { + for (int z = 0; z < 5; z++) got[gn++] = NANV; + } + fails += cmp_row("WoodiePivots", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_woodie_pivots_free(h); + return fails; +} +static int check_YangZhangVolatility(void) { + struct YangZhangVolatility *h = wickra_yang_zhang_volatility_new((uintptr_t)20, (uintptr_t)252); + if (!h) { printf("FAIL YangZhangVolatility: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_YangZhangVolatility", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_yang_zhang_volatility_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("YangZhangVolatility", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_yang_zhang_volatility_free(h); + return fails; +} +static int check_YoyoExit(void) { + struct YoyoExit *h = wickra_yoyo_exit_new((uintptr_t)14, 2.0); + if (!h) { printf("FAIL YoyoExit: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_YoyoExit", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_yoyo_exit_update(h, o, hi, lo, c, v, (int64_t)i); + fails += cmp_row("YoyoExit", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_yoyo_exit_free(h); + return fails; +} +static int check_ZScore(void) { + struct ZScore *h = wickra_z_score_new((uintptr_t)14); + if (!h) { printf("FAIL ZScore: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ZScore", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_z_score_update(h, c); + fails += cmp_row("ZScore", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_z_score_free(h); + return fails; +} +static int check_ZeroLagMacd(void) { + struct ZeroLagMacd *h = wickra_zero_lag_macd_new((uintptr_t)3, (uintptr_t)7, (uintptr_t)14); + if (!h) { printf("FAIL ZeroLagMacd: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ZeroLagMacd", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraZeroLagMacdOutput out; + if (wickra_zero_lag_macd_update(h, c, &out)) { + got[gn++] = out.macd; + got[gn++] = out.signal; + got[gn++] = out.histogram; + } else { + for (int z = 0; z < 3; z++) got[gn++] = NANV; + } + fails += cmp_row("ZeroLagMacd", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_zero_lag_macd_free(h); + return fails; +} +static int check_ZigZag(void) { + struct ZigZag *h = wickra_zig_zag_new(0.02); + if (!h) { printf("FAIL ZigZag: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_ZigZag", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + struct WickraZigZagOutput out; + if (wickra_zig_zag_update(h, o, hi, lo, c, v, (int64_t)i, &out)) { + got[gn++] = out.swing; + got[gn++] = out.direction; + } else { + for (int z = 0; z < 2; z++) got[gn++] = NANV; + } + fails += cmp_row("ZigZag", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_zig_zag_free(h); + return fails; +} +static int check_Zlema(void) { + struct Zlema *h = wickra_zlema_new((uintptr_t)14); + if (!h) { printf("FAIL Zlema: new returned NULL\n"); return 1; } + double **exp; int rows = read_fixture("g_Zlema", &exp); + int fails = 0; + for (int i = 0; i < N_INPUT; i++) { + double o = IN[i][0], hi = IN[i][1], lo = IN[i][2], c = IN[i][3], v = IN[i][4]; + (void)o; (void)hi; (void)lo; (void)c; (void)v; + double got[128]; int gn = 0; + got[gn++] = wickra_zlema_update(h, c); + fails += cmp_row("Zlema", i, exp[i], EXPLEN[i], got, gn); + } + free_fixture(exp, rows); + wickra_zlema_free(h); + return fails; +} + +int main(int argc, char **argv) { + GDIR = (argc > 1) ? argv[1] : "testdata/golden"; + load_input(); + int total = 0, failed = 0; + + total++; if (check_AbandonedBaby()) failed++; + total++; if (check_Abcd()) failed++; + total++; if (check_AbsoluteBreadthIndex()) failed++; + total++; if (check_AccelerationBands()) failed++; + total++; if (check_AcceleratorOscillator()) failed++; + total++; if (check_AdOscillator()) failed++; + total++; if (check_AdVolumeLine()) failed++; + total++; if (check_AdaptiveCci()) failed++; + total++; if (check_AdaptiveCycle()) failed++; + total++; if (check_AdaptiveLaguerreFilter()) failed++; + total++; if (check_AdaptiveRsi()) failed++; + total++; if (check_Adl()) failed++; + total++; if (check_AdvanceBlock()) failed++; + total++; if (check_AdvanceDecline()) failed++; + total++; if (check_AdvanceDeclineRatio()) failed++; + total++; if (check_Adx()) failed++; + total++; if (check_Adxr()) failed++; + total++; if (check_Alligator()) failed++; + total++; if (check_Alma()) failed++; + total++; if (check_Alpha()) failed++; + total++; if (check_AmihudIlliquidity()) failed++; + total++; if (check_AnchoredRsi()) failed++; + total++; if (check_AnchoredVwap()) failed++; + total++; if (check_AndrewsPitchfork()) failed++; + total++; if (check_Apo()) failed++; + total++; if (check_Aroon()) failed++; + total++; if (check_AroonOscillator()) failed++; + total++; if (check_Atr()) failed++; + total++; if (check_AtrBands()) failed++; + total++; if (check_AtrRatchet()) failed++; + total++; if (check_AtrTrailingStop()) failed++; + total++; if (check_AutoFib()) failed++; + total++; if (check_Autocorrelation()) failed++; + total++; if (check_AutocorrelationPeriodogram()) failed++; + total++; if (check_AverageDailyRange()) failed++; + total++; if (check_AverageDrawdown()) failed++; + total++; if (check_AvgPrice()) failed++; + total++; if (check_AwesomeOscillator()) failed++; + total++; if (check_AwesomeOscillatorHistogram()) failed++; + total++; if (check_BalanceOfPower()) failed++; + total++; if (check_BandpassFilter()) failed++; + total++; if (check_Bat()) failed++; + total++; if (check_BeltHold()) failed++; + total++; if (check_Beta()) failed++; + total++; if (check_BetaNeutralSpread()) failed++; + total++; if (check_BetterVolume()) failed++; + total++; if (check_BipowerVariation()) failed++; + total++; if (check_BodySizePct()) failed++; + total++; if (check_BollingerBands()) failed++; + total++; if (check_BollingerBandwidth()) failed++; + total++; if (check_BomarBands()) failed++; + total++; if (check_BreadthThrust()) failed++; + total++; if (check_Breakaway()) failed++; + total++; if (check_BullishPercentIndex()) failed++; + total++; if (check_BurkeRatio()) failed++; + total++; if (check_Butterfly()) failed++; + total++; if (check_CalendarSpread()) failed++; + total++; if (check_CalmarRatio()) failed++; + total++; if (check_Camarilla()) failed++; + total++; if (check_CandleVolume()) failed++; + total++; if (check_Cci()) failed++; + total++; if (check_CenterOfGravity()) failed++; + total++; if (check_CentralPivotRange()) failed++; + total++; if (check_Cfo()) failed++; + total++; if (check_ChaikinMoneyFlow()) failed++; + total++; if (check_ChaikinOscillator()) failed++; + total++; if (check_ChaikinVolatility()) failed++; + total++; if (check_ChandeKrollStop()) failed++; + total++; if (check_ChandelierExit()) failed++; + total++; if (check_ChoppinessIndex()) failed++; + total++; if (check_ClassicPivots()) failed++; + total++; if (check_CloseVsOpen()) failed++; + total++; if (check_ClosingMarubozu()) failed++; + total++; if (check_Cmo()) failed++; + total++; if (check_CoefficientOfVariation()) failed++; + total++; if (check_Cointegration()) failed++; + total++; if (check_CommonSenseRatio()) failed++; + total++; if (check_CompositeProfile()) failed++; + total++; if (check_ConcealingBabySwallow()) failed++; + total++; if (check_ConditionalValueAtRisk()) failed++; + total++; if (check_ConnorsRsi()) failed++; + total++; if (check_Coppock()) failed++; + total++; if (check_CorrelationTrendIndicator()) failed++; + total++; if (check_Counterattack()) failed++; + total++; if (check_Crab()) failed++; + total++; if (check_CumulativeVolumeDelta()) failed++; + total++; if (check_CumulativeVolumeIndex()) failed++; + total++; if (check_CupAndHandle()) failed++; + total++; if (check_CyberneticCycle()) failed++; + total++; if (check_Cypher()) failed++; + total++; if (check_DayOfWeekProfile()) failed++; + total++; if (check_Decycler()) failed++; + total++; if (check_DecyclerOscillator()) failed++; + total++; if (check_Dema()) failed++; + total++; if (check_DemandIndex()) failed++; + total++; if (check_DemarkPivots()) failed++; + total++; if (check_DepthSlope()) failed++; + total++; if (check_DerivativeOscillator()) failed++; + total++; if (check_DetrendedStdDev()) failed++; + total++; if (check_DisparityIndex()) failed++; + total++; if (check_DistanceSsd()) failed++; + total++; if (check_Doji()) failed++; + total++; if (check_DojiStar()) failed++; + total++; if (check_DollarBars()) failed++; + total++; if (check_Donchian()) failed++; + total++; if (check_DonchianStop()) failed++; + total++; if (check_DoubleBollinger()) failed++; + total++; if (check_DoubleTopBottom()) failed++; + total++; if (check_DownsideGapThreeMethods()) failed++; + total++; if (check_Dpo()) failed++; + total++; if (check_DragonflyDoji()) failed++; + total++; if (check_DrawdownDuration()) failed++; + total++; if (check_DumplingTop()) failed++; + total++; if (check_Dx()) failed++; + total++; if (check_DynamicMomentumIndex()) failed++; + total++; if (check_EaseOfMovement()) failed++; + total++; if (check_EffectiveSpread()) failed++; + total++; if (check_EhlersStochastic()) failed++; + total++; if (check_Ehma()) failed++; + total++; if (check_ElderImpulse()) failed++; + total++; if (check_ElderRay()) failed++; + total++; if (check_ElderSafeZone()) failed++; + total++; if (check_Ema()) failed++; + total++; if (check_EmpiricalModeDecomposition()) failed++; + total++; if (check_Engulfing()) failed++; + total++; if (check_Equivolume()) failed++; + total++; if (check_EstimatedLeverageRatio()) failed++; + total++; if (check_EvenBetterSinewave()) failed++; + total++; if (check_EveningDojiStar()) failed++; + total++; if (check_Evwma()) failed++; + total++; if (check_EwmaVolatility()) failed++; + total++; if (check_Expectancy()) failed++; + total++; if (check_FallingThreeMethods()) failed++; + total++; if (check_Fama()) failed++; + total++; if (check_FibArcs()) failed++; + total++; if (check_FibChannel()) failed++; + total++; if (check_FibConfluence()) failed++; + total++; if (check_FibExtension()) failed++; + total++; if (check_FibFan()) failed++; + total++; if (check_FibProjection()) failed++; + total++; if (check_FibRetracement()) failed++; + total++; if (check_FibTimeZones()) failed++; + total++; if (check_FibonacciPivots()) failed++; + total++; if (check_FisherRsi()) failed++; + total++; if (check_FisherTransform()) failed++; + total++; if (check_FlagPennant()) failed++; + total++; if (check_Footprint()) failed++; + total++; if (check_ForceIndex()) failed++; + total++; if (check_FractalChaosBands()) failed++; + total++; if (check_Frama()) failed++; + total++; if (check_FryPanBottom()) failed++; + total++; if (check_FundingBasis()) failed++; + total++; if (check_FundingImpliedApr()) failed++; + total++; if (check_FundingRate()) failed++; + total++; if (check_FundingRateMean()) failed++; + total++; if (check_FundingRateZScore()) failed++; + total++; if (check_GainLossRatio()) failed++; + total++; if (check_GainToPainRatio()) failed++; + total++; if (check_GapSideBySideWhite()) failed++; + total++; if (check_Garch11()) failed++; + total++; if (check_GarmanKlassVolatility()) failed++; + total++; if (check_Gartley()) failed++; + total++; if (check_GatorOscillator()) failed++; + total++; if (check_GeneralizedDema()) failed++; + total++; if (check_GeometricMa()) failed++; + total++; if (check_GoldenPocket()) failed++; + total++; if (check_GrangerCausality()) failed++; + total++; if (check_GravestoneDoji()) failed++; + total++; if (check_Hammer()) failed++; + total++; if (check_HangingMan()) failed++; + total++; if (check_Harami()) failed++; + total++; if (check_HaramiCross()) failed++; + total++; if (check_HasbrouckInformationShare()) failed++; + total++; if (check_HeadAndShoulders()) failed++; + total++; if (check_HeikinAshi()) failed++; + total++; if (check_HeikinAshiOscillator()) failed++; + total++; if (check_HiLoActivator()) failed++; + total++; if (check_HighLowIndex()) failed++; + total++; if (check_HighLowRange()) failed++; + total++; if (check_HighLowVolumeNodes()) failed++; + total++; if (check_HighWave()) failed++; + total++; if (check_HighpassFilter()) failed++; + total++; if (check_Hikkake()) failed++; + total++; if (check_HikkakeModified()) failed++; + total++; if (check_HilbertDominantCycle()) failed++; + total++; if (check_HistoricalVolatility()) failed++; + total++; if (check_Hma()) failed++; + total++; if (check_HoltWinters()) failed++; + total++; if (check_HomingPigeon()) failed++; + total++; if (check_HtDcPhase()) failed++; + total++; if (check_HtPhasor()) failed++; + total++; if (check_HtTrendMode()) failed++; + total++; if (check_HurstChannel()) failed++; + total++; if (check_HurstExponent()) failed++; + total++; if (check_Ichimoku()) failed++; + total++; if (check_IdenticalThreeCrows()) failed++; + total++; if (check_ImbalanceBars()) failed++; + total++; if (check_InNeck()) failed++; + total++; if (check_Inertia()) failed++; + total++; if (check_InformationRatio()) failed++; + total++; if (check_InitialBalance()) failed++; + total++; if (check_InstantaneousTrendline()) failed++; + total++; if (check_IntradayIntensity()) failed++; + total++; if (check_IntradayMomentumIndex()) failed++; + total++; if (check_IntradayVolatilityProfile()) failed++; + total++; if (check_InverseFisherTransform()) failed++; + total++; if (check_InvertedHammer()) failed++; + total++; if (check_JarqueBera()) failed++; + total++; if (check_Jma()) failed++; + total++; if (check_JumpIndicator()) failed++; + total++; if (check_KRatio()) failed++; + total++; if (check_KagiBars()) failed++; + total++; if (check_KalmanHedgeRatio()) failed++; + total++; if (check_Kama()) failed++; + total++; if (check_KaseDevStop()) failed++; + total++; if (check_KasePermissionStochastic()) failed++; + total++; if (check_KellyCriterion()) failed++; + total++; if (check_Keltner()) failed++; + total++; if (check_KendallTau()) failed++; + total++; if (check_Kicking()) failed++; + total++; if (check_KickingByLength()) failed++; + total++; if (check_Kst()) failed++; + total++; if (check_Kurtosis()) failed++; + total++; if (check_Kvo()) failed++; + total++; if (check_KylesLambda()) failed++; + total++; if (check_LadderBottom()) failed++; + total++; if (check_LaguerreRsi()) failed++; + total++; if (check_LeadLagCrossCorrelation()) failed++; + total++; if (check_LinRegAngle()) failed++; + total++; if (check_LinRegChannel()) failed++; + total++; if (check_LinRegIntercept()) failed++; + total++; if (check_LinRegSlope()) failed++; + total++; if (check_LinearRegression()) failed++; + total++; if (check_LiquidationFeatures()) failed++; + total++; if (check_LogReturn()) failed++; + total++; if (check_LongLeggedDoji()) failed++; + total++; if (check_LongLine()) failed++; + total++; if (check_LongShortRatio()) failed++; + total++; if (check_M2Measure()) failed++; + total++; if (check_MaEnvelope()) failed++; + total++; if (check_MacdExt()) failed++; + total++; if (check_MacdFix()) failed++; + total++; if (check_MacdHistogram()) failed++; + total++; if (check_MacdIndicator()) failed++; + total++; if (check_Mama()) failed++; + total++; if (check_MarketFacilitationIndex()) failed++; + total++; if (check_MartinRatio()) failed++; + total++; if (check_Marubozu()) failed++; + total++; if (check_MassIndex()) failed++; + total++; if (check_MatHold()) failed++; + total++; if (check_MatchingLow()) failed++; + total++; if (check_MaxDrawdown()) failed++; + total++; if (check_McClellanOscillator()) failed++; + total++; if (check_McClellanSummationIndex()) failed++; + total++; if (check_McGinleyDynamic()) failed++; + total++; if (check_MedianAbsoluteDeviation()) failed++; + total++; if (check_MedianChannel()) failed++; + total++; if (check_MedianMa()) failed++; + total++; if (check_MedianPrice()) failed++; + total++; if (check_Mfi()) failed++; + total++; if (check_Microprice()) failed++; + total++; if (check_MidPoint()) failed++; + total++; if (check_MidPrice()) failed++; + total++; if (check_MinusDi()) failed++; + total++; if (check_MinusDm()) failed++; + total++; if (check_ModifiedMaStop()) failed++; + total++; if (check_Mom()) failed++; + total++; if (check_MorningDojiStar()) failed++; + total++; if (check_MorningEveningStar()) failed++; + total++; if (check_MurreyMathLines()) failed++; + total++; if (check_NakedPoc()) failed++; + total++; if (check_Natr()) failed++; + total++; if (check_NewHighsNewLows()) failed++; + total++; if (check_NewPriceLines()) failed++; + total++; if (check_Nrtr()) failed++; + total++; if (check_Nvi()) failed++; + total++; if (check_OIPriceDivergence()) failed++; + total++; if (check_OIWeighted()) failed++; + total++; if (check_Obv()) failed++; + total++; if (check_OiToVolumeRatio()) failed++; + total++; if (check_OmegaRatio()) failed++; + total++; if (check_OnNeck()) failed++; + total++; if (check_OpenInterestDelta()) failed++; + total++; if (check_OpenInterestMomentum()) failed++; + total++; if (check_OpeningMarubozu()) failed++; + total++; if (check_OpeningRange()) failed++; + total++; if (check_OrderBookImbalanceFull()) failed++; + total++; if (check_OrderBookImbalanceTop1()) failed++; + total++; if (check_OrderBookImbalanceTopN()) failed++; + total++; if (check_OrderFlowImbalance()) failed++; + total++; if (check_OuHalfLife()) failed++; + total++; if (check_OvernightGap()) failed++; + total++; if (check_OvernightIntradayReturn()) failed++; + total++; if (check_PainIndex()) failed++; + total++; if (check_PairSpreadZScore()) failed++; + total++; if (check_PairwiseBeta()) failed++; + total++; if (check_ParkinsonVolatility()) failed++; + total++; if (check_PearsonCorrelation()) failed++; + total++; if (check_PercentAboveMa()) failed++; + total++; if (check_PercentB()) failed++; + total++; if (check_PercentageTrailingStop()) failed++; + total++; if (check_PerpetualPremiumIndex()) failed++; + total++; if (check_Pgo()) failed++; + total++; if (check_PiercingDarkCloud()) failed++; + total++; if (check_Pin()) failed++; + total++; if (check_PivotReversal()) failed++; + total++; if (check_PlusDi()) failed++; + total++; if (check_PlusDm()) failed++; + total++; if (check_Pmo()) failed++; + total++; if (check_PointAndFigureBars()) failed++; + total++; if (check_PolarizedFractalEfficiency()) failed++; + total++; if (check_Ppo()) failed++; + total++; if (check_PpoHistogram()) failed++; + total++; if (check_ProfileShape()) failed++; + total++; if (check_ProfitFactor()) failed++; + total++; if (check_ProjectionBands()) failed++; + total++; if (check_ProjectionOscillator()) failed++; + total++; if (check_Psar()) failed++; + total++; if (check_Pvi()) failed++; + total++; if (check_Qqe()) failed++; + total++; if (check_Qstick()) failed++; + total++; if (check_QuartileBands()) failed++; + total++; if (check_QuotedSpread()) failed++; + total++; if (check_RSquared()) failed++; + total++; if (check_RangeBars()) failed++; + total++; if (check_RealizedSpread()) failed++; + total++; if (check_RealizedVolatility()) failed++; + total++; if (check_RecoveryFactor()) failed++; + total++; if (check_RectangleRange()) failed++; + total++; if (check_Reflex()) failed++; + total++; if (check_RegimeLabel()) failed++; + total++; if (check_RelativeStrengthAB()) failed++; + total++; if (check_RenkoBars()) failed++; + total++; if (check_RenkoTrailingStop()) failed++; + total++; if (check_RickshawMan()) failed++; + total++; if (check_RisingThreeMethods()) failed++; + total++; if (check_Rmi()) failed++; + total++; if (check_Roc()) failed++; + total++; if (check_Rocp()) failed++; + total++; if (check_Rocr()) failed++; + total++; if (check_Rocr100()) failed++; + total++; if (check_RogersSatchellVolatility()) failed++; + total++; if (check_RollMeasure()) failed++; + total++; if (check_RollingCorrelation()) failed++; + total++; if (check_RollingCovariance()) failed++; + total++; if (check_RollingIqr()) failed++; + total++; if (check_RollingMinMaxScaler()) failed++; + total++; if (check_RollingPercentileRank()) failed++; + total++; if (check_RollingQuantile()) failed++; + total++; if (check_RollingVwap()) failed++; + total++; if (check_RoofingFilter()) failed++; + total++; if (check_Rsi()) failed++; + total++; if (check_Rsx()) failed++; + total++; if (check_RunBars()) failed++; + total++; if (check_Rvi()) failed++; + total++; if (check_RviVolatility()) failed++; + total++; if (check_Rwi()) failed++; + total++; if (check_SampleEntropy()) failed++; + total++; if (check_SarExt()) failed++; + total++; if (check_SeasonalZScore()) failed++; + total++; if (check_SeparatingLines()) failed++; + total++; if (check_SessionHighLow()) failed++; + total++; if (check_SessionRange()) failed++; + total++; if (check_SessionVwap()) failed++; + total++; if (check_ShannonEntropy()) failed++; + total++; if (check_Shark()) failed++; + total++; if (check_SharpeRatio()) failed++; + total++; if (check_ShootingStar()) failed++; + total++; if (check_ShortLine()) failed++; + total++; if (check_SignedVolume()) failed++; + total++; if (check_SineWave()) failed++; + total++; if (check_SineWeightedMa()) failed++; + total++; if (check_SinglePrints()) failed++; + total++; if (check_Skewness()) failed++; + total++; if (check_Sma()) failed++; + total++; if (check_Smi()) failed++; + total++; if (check_Smma()) failed++; + total++; if (check_SmoothedHeikinAshi()) failed++; + total++; if (check_SortinoRatio()) failed++; + total++; if (check_SpearmanCorrelation()) failed++; + total++; if (check_SpinningTop()) failed++; + total++; if (check_SpreadAr1Coefficient()) failed++; + total++; if (check_SpreadBollingerBands()) failed++; + total++; if (check_SpreadHurst()) failed++; + total++; if (check_StalledPattern()) failed++; + total++; if (check_StandardError()) failed++; + total++; if (check_StandardErrorBands()) failed++; + total++; if (check_StarcBands()) failed++; + total++; if (check_Stc()) failed++; + total++; if (check_StdDev()) failed++; + total++; if (check_StepTrailingStop()) failed++; + total++; if (check_SterlingRatio()) failed++; + total++; if (check_StickSandwich()) failed++; + total++; if (check_StochRsi()) failed++; + total++; if (check_Stochastic()) failed++; + total++; if (check_StochasticCci()) failed++; + total++; if (check_SuperSmoother()) failed++; + total++; if (check_SuperTrend()) failed++; + total++; if (check_T3()) failed++; + total++; if (check_TailRatio()) failed++; + total++; if (check_TakerBuySellRatio()) failed++; + total++; if (check_Takuri()) failed++; + total++; if (check_TasukiGap()) failed++; + total++; if (check_TdCamouflage()) failed++; + total++; if (check_TdClop()) failed++; + total++; if (check_TdClopwin()) failed++; + total++; if (check_TdCombo()) failed++; + total++; if (check_TdCountdown()) failed++; + total++; if (check_TdDWave()) failed++; + total++; if (check_TdDeMarker()) failed++; + total++; if (check_TdDifferential()) failed++; + total++; if (check_TdLines()) failed++; + total++; if (check_TdMovingAverage()) failed++; + total++; if (check_TdOpen()) failed++; + total++; if (check_TdPressure()) failed++; + total++; if (check_TdPropulsion()) failed++; + total++; if (check_TdRangeProjection()) failed++; + total++; if (check_TdRei()) failed++; + total++; if (check_TdRiskLevel()) failed++; + total++; if (check_TdSequential()) failed++; + total++; if (check_TdSetup()) failed++; + total++; if (check_TdTrap()) failed++; + total++; if (check_Tema()) failed++; + total++; if (check_TermStructureBasis()) failed++; + total++; if (check_ThreeDrives()) failed++; + total++; if (check_ThreeInside()) failed++; + total++; if (check_ThreeLineBreak()) failed++; + total++; if (check_ThreeLineBreakBars()) failed++; + total++; if (check_ThreeLineStrike()) failed++; + total++; if (check_ThreeOutside()) failed++; + total++; if (check_ThreeSoldiersOrCrows()) failed++; + total++; if (check_ThreeStarsInSouth()) failed++; + total++; if (check_Thrusting()) failed++; + total++; if (check_TickBars()) failed++; + total++; if (check_TickIndex()) failed++; + total++; if (check_Tii()) failed++; + total++; if (check_TimeBasedStop()) failed++; + total++; if (check_TimeOfDayReturnProfile()) failed++; + total++; if (check_TowerTopBottom()) failed++; + total++; if (check_TpoProfile()) failed++; + total++; if (check_TradeImbalance()) failed++; + total++; if (check_TradeSignAutocorrelation()) failed++; + total++; if (check_TradeVolumeIndex()) failed++; + total++; if (check_TrendLabel()) failed++; + total++; if (check_TrendStrengthIndex()) failed++; + total++; if (check_Trendflex()) failed++; + total++; if (check_TreynorRatio()) failed++; + total++; if (check_Triangle()) failed++; + total++; if (check_Trima()) failed++; + total++; if (check_Trin()) failed++; + total++; if (check_TripleTopBottom()) failed++; + total++; if (check_Tristar()) failed++; + total++; if (check_Trix()) failed++; + total++; if (check_TrueRange()) failed++; + total++; if (check_Tsf()) failed++; + total++; if (check_TsfOscillator()) failed++; + total++; if (check_Tsi()) failed++; + total++; if (check_Tsv()) failed++; + total++; if (check_TtmSqueeze()) failed++; + total++; if (check_TtmTrend()) failed++; + total++; if (check_TurnOfMonth()) failed++; + total++; if (check_Tweezer()) failed++; + total++; if (check_TwiggsMoneyFlow()) failed++; + total++; if (check_TwoCrows()) failed++; + total++; if (check_TypicalPrice()) failed++; + total++; if (check_UlcerIndex()) failed++; + total++; if (check_UltimateOscillator()) failed++; + total++; if (check_UniqueThreeRiver()) failed++; + total++; if (check_UniversalOscillator()) failed++; + total++; if (check_UpDownVolumeRatio()) failed++; + total++; if (check_UpsideGapThreeMethods()) failed++; + total++; if (check_UpsideGapTwoCrows()) failed++; + total++; if (check_UpsidePotentialRatio()) failed++; + total++; if (check_ValueArea()) failed++; + total++; if (check_ValueAtRisk()) failed++; + total++; if (check_Variance()) failed++; + total++; if (check_VarianceRatio()) failed++; + total++; if (check_VerticalHorizontalFilter()) failed++; + total++; if (check_Vidya()) failed++; + total++; if (check_VolatilityCone()) failed++; + total++; if (check_VolatilityOfVolatility()) failed++; + total++; if (check_VolatilityRatio()) failed++; + total++; if (check_VoltyStop()) failed++; + total++; if (check_VolumeBars()) failed++; + total++; if (check_VolumeByTimeProfile()) failed++; + total++; if (check_VolumeOscillator()) failed++; + total++; if (check_VolumePriceTrend()) failed++; + total++; if (check_VolumeProfile()) failed++; + total++; if (check_VolumeRsi()) failed++; + total++; if (check_VolumeWeightedMacd()) failed++; + total++; if (check_VolumeWeightedSr()) failed++; + total++; if (check_Vortex()) failed++; + total++; if (check_Vpin()) failed++; + total++; if (check_Vwap()) failed++; + total++; if (check_VwapStdDevBands()) failed++; + total++; if (check_Vwma()) failed++; + total++; if (check_Vzo()) failed++; + total++; if (check_Wad()) failed++; + total++; if (check_WavePm()) failed++; + total++; if (check_WaveTrend()) failed++; + total++; if (check_Wedge()) failed++; + total++; if (check_WeightedClose()) failed++; + total++; if (check_WickRatio()) failed++; + total++; if (check_WilliamsFractals()) failed++; + total++; if (check_WilliamsR()) failed++; + total++; if (check_WinRate()) failed++; + total++; if (check_Wma()) failed++; + total++; if (check_WoodiePivots()) failed++; + total++; if (check_YangZhangVolatility()) failed++; + total++; if (check_YoyoExit()) failed++; + total++; if (check_ZScore()) failed++; + total++; if (check_ZeroLagMacd()) failed++; + total++; if (check_ZigZag()) failed++; + total++; if (check_Zlema()) failed++; + printf("\nC/C++ golden: %d passed, %d failed (of %d)\n", total - failed, failed, total); + return failed ? 1 : 0; +} diff --git a/examples/c/golden_test.cpp b/examples/c/golden_test.cpp new file mode 100644 index 00000000..aba0baca --- /dev/null +++ b/examples/c/golden_test.cpp @@ -0,0 +1,4 @@ +// C++ build of the 514-indicator golden parity test. wickra.h is `extern "C"`, +// so the generated C runner compiles unchanged under a C++ compiler; this target +// proves the C++ binding consumes the same C ABI and computes identical values. +#include "golden_test.c" diff --git a/examples/rust/src/bin/gen_golden.rs b/examples/rust/src/bin/gen_golden.rs index 04b45b2e..1265e2c9 100644 --- a/examples/rust/src/bin/gen_golden.rs +++ b/examples/rust/src/bin/gen_golden.rs @@ -15,7 +15,10 @@ use std::fmt::Write as _; use std::fs; use std::path::Path; -use wickra::{Adx, Atr, Beta, Candle, Ema, Indicator, MacdIndicator, Rsi, Sma}; +use wickra::{ + AdOscillator, Adx, Atr, AverageDrawdown, AwesomeOscillatorHistogram, Beta, Candle, Ema, + Indicator, IntradayIntensity, MacdIndicator, Rsi, Sma, +}; const N: usize = 80; @@ -50,6 +53,7 @@ fn write_csv(dir: &Path, name: &str, header: &str, rows: &[String]) { println!("wrote {}", path.display()); } +#[allow(clippy::too_many_lines)] fn main() { let dir = Path::new("testdata/golden"); fs::create_dir_all(dir).expect("create testdata/golden"); @@ -142,5 +146,4420 @@ fn main() { write_csv(dir, "beta", "beta", &rows); } + // candle, single output: the de-duplicated indicators, pinned across every + // binding so their corrected definitions stay identical to the Rust core. + { + let mut ad = AdOscillator::new(); // Williams A/D Oscillator (native ADOSC) + let rows: Vec = candles.iter().map(|&c| cell(ad.update(c))).collect(); + write_csv(dir, "ad_oscillator", "ad_oscillator", &rows); + } + { + let mut ii = IntradayIntensity::new(); // per-bar Bostian intensity + let rows: Vec = candles.iter().map(|&c| cell(ii.update(c))).collect(); + write_csv(dir, "intraday_intensity", "intraday_intensity", &rows); + } + { + let mut aoh = AwesomeOscillatorHistogram::new(5, 34, 1).unwrap(); // AO momentum + let rows: Vec = candles.iter().map(|&c| cell(aoh.update(c))).collect(); + write_csv( + dir, + "awesome_oscillator_histogram", + "awesome_oscillator_histogram", + &rows, + ); + } + // scalar (close-driven equity curve), single output. + { + let mut avg_dd = AverageDrawdown::new(20).unwrap(); // mean of distinct episodes + let rows: Vec = closes.iter().map(|&c| cell(avg_dd.update(c))).collect(); + write_csv(dir, "average_drawdown", "average_drawdown", &rows); + } + + emit_scalar(dir, &candles, &closes); + emit_multi(dir, &candles, &closes); + emit_skips(dir, &candles, &closes); + emit_missed(dir, &candles, &closes); + emit_exotic(dir, &candles); + emit_special(dir, &candles); + emit_profiles(dir, &candles); + emit_bars(dir, &candles); println!("golden fixtures written to {}", dir.display()); } + +// AUTO-GENERATED scalar-output golden tranche (single f64 output). +#[allow(clippy::too_many_lines)] +fn emit_scalar(dir: &Path, candles: &[Candle], closes: &[f64]) { + if let Ok(mut ind) = wickra::AdaptiveCci::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_AdaptiveCci", "AdaptiveCci", &rows); + } else { + eprintln!("gen_golden skip AdaptiveCci"); + } + if let Ok(mut ind) = wickra::AdaptiveRsi::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_AdaptiveRsi", "AdaptiveRsi", &rows); + } else { + eprintln!("gen_golden skip AdaptiveRsi"); + } + { + let mut ind = wickra::Adl::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Adl", "Adl", &rows); + } + { + let mut ind = wickra::AdOscillator::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_AdOscillator", "AdOscillator", &rows); + } + if let Ok(mut ind) = wickra::Adxr::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Adxr", "Adxr", &rows); + } else { + eprintln!("gen_golden skip Adxr"); + } + if let Ok(mut ind) = wickra::Alma::new(14, 2.0, 0.5) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Alma", "Alma", &rows); + } else { + eprintln!("gen_golden skip Alma"); + } + if let Ok(mut ind) = wickra::Apo::new(3, 7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Apo", "Apo", &rows); + } else { + eprintln!("gen_golden skip Apo"); + } + if let Ok(mut ind) = wickra::Atr::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Atr", "Atr", &rows); + } else { + eprintln!("gen_golden skip Atr"); + } + if let Ok(mut ind) = wickra::AutocorrelationPeriodogram::new(3, 7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv( + dir, + "g_AutocorrelationPeriodogram", + "AutocorrelationPeriodogram", + &rows, + ); + } else { + eprintln!("gen_golden skip AutocorrelationPeriodogram"); + } + { + let mut ind = wickra::AvgPrice::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_AvgPrice", "AvgPrice", &rows); + } + { + let mut ind = wickra::AbandonedBaby::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_AbandonedBaby", "AbandonedBaby", &rows); + } + { + let mut ind = wickra::Abcd::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Abcd", "Abcd", &rows); + } + if let Ok(mut ind) = wickra::AcceleratorOscillator::new(3, 7, 14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv( + dir, + "g_AcceleratorOscillator", + "AcceleratorOscillator", + &rows, + ); + } else { + eprintln!("gen_golden skip AcceleratorOscillator"); + } + { + let mut ind = wickra::AdaptiveCycle::new(); + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_AdaptiveCycle", "AdaptiveCycle", &rows); + } + { + let mut ind = wickra::AdvanceBlock::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_AdvanceBlock", "AdvanceBlock", &rows); + } + if let Ok(mut ind) = wickra::Alpha::new(14, 2.0) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_Alpha", "Alpha", &rows); + } else { + eprintln!("gen_golden skip Alpha"); + } + { + let mut ind = wickra::AnchoredRsi::new(); + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_AnchoredRsi", "AnchoredRsi", &rows); + } + { + let mut ind = wickra::AnchoredVwap::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_AnchoredVwap", "AnchoredVwap", &rows); + } + if let Ok(mut ind) = wickra::AroonOscillator::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_AroonOscillator", "AroonOscillator", &rows); + } else { + eprintln!("gen_golden skip AroonOscillator"); + } + if let Ok(mut ind) = wickra::AtrTrailingStop::new(14, 2.0) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_AtrTrailingStop", "AtrTrailingStop", &rows); + } else { + eprintln!("gen_golden skip AtrTrailingStop"); + } + if let Ok(mut ind) = wickra::Autocorrelation::new(3, 7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Autocorrelation", "Autocorrelation", &rows); + } else { + eprintln!("gen_golden skip Autocorrelation"); + } + if let Ok(mut ind) = wickra::AverageDrawdown::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_AverageDrawdown", "AverageDrawdown", &rows); + } else { + eprintln!("gen_golden skip AverageDrawdown"); + } + if let Ok(mut ind) = wickra::AwesomeOscillator::new(3, 7) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_AwesomeOscillator", "AwesomeOscillator", &rows); + } else { + eprintln!("gen_golden skip AwesomeOscillator"); + } + if let Ok(mut ind) = wickra::AwesomeOscillatorHistogram::new(3, 7, 14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv( + dir, + "g_AwesomeOscillatorHistogram", + "AwesomeOscillatorHistogram", + &rows, + ); + } else { + eprintln!("gen_golden skip AwesomeOscillatorHistogram"); + } + if let Ok(mut ind) = wickra::BandpassFilter::new(14, 2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_BandpassFilter", "BandpassFilter", &rows); + } else { + eprintln!("gen_golden skip BandpassFilter"); + } + { + let mut ind = wickra::BalanceOfPower::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_BalanceOfPower", "BalanceOfPower", &rows); + } + { + let mut ind = wickra::Bat::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Bat", "Bat", &rows); + } + { + let mut ind = wickra::BeltHold::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_BeltHold", "BeltHold", &rows); + } + if let Ok(mut ind) = wickra::Beta::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_Beta", "Beta", &rows); + } else { + eprintln!("gen_golden skip Beta"); + } + if let Ok(mut ind) = wickra::BetaNeutralSpread::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_BetaNeutralSpread", "BetaNeutralSpread", &rows); + } else { + eprintln!("gen_golden skip BetaNeutralSpread"); + } + if let Ok(mut ind) = wickra::BetterVolume::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_BetterVolume", "BetterVolume", &rows); + } else { + eprintln!("gen_golden skip BetterVolume"); + } + if let Ok(mut ind) = wickra::BipowerVariation::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_BipowerVariation", "BipowerVariation", &rows); + } else { + eprintln!("gen_golden skip BipowerVariation"); + } + { + let mut ind = wickra::BodySizePct::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_BodySizePct", "BodySizePct", &rows); + } + if let Ok(mut ind) = wickra::BollingerBandwidth::new(14, 2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_BollingerBandwidth", "BollingerBandwidth", &rows); + } else { + eprintln!("gen_golden skip BollingerBandwidth"); + } + { + let mut ind = wickra::Breakaway::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Breakaway", "Breakaway", &rows); + } + if let Ok(mut ind) = wickra::BurkeRatio::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_BurkeRatio", "BurkeRatio", &rows); + } else { + eprintln!("gen_golden skip BurkeRatio"); + } + { + let mut ind = wickra::Butterfly::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Butterfly", "Butterfly", &rows); + } + if let Ok(mut ind) = wickra::Cci::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Cci", "Cci", &rows); + } else { + eprintln!("gen_golden skip Cci"); + } + if let Ok(mut ind) = wickra::Cfo::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Cfo", "Cfo", &rows); + } else { + eprintln!("gen_golden skip Cfo"); + } + if let Ok(mut ind) = wickra::Cmo::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Cmo", "Cmo", &rows); + } else { + eprintln!("gen_golden skip Cmo"); + } + if let Ok(mut ind) = wickra::CorrelationTrendIndicator::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv( + dir, + "g_CorrelationTrendIndicator", + "CorrelationTrendIndicator", + &rows, + ); + } else { + eprintln!("gen_golden skip CorrelationTrendIndicator"); + } + if let Ok(mut ind) = wickra::CalmarRatio::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_CalmarRatio", "CalmarRatio", &rows); + } else { + eprintln!("gen_golden skip CalmarRatio"); + } + if let Ok(mut ind) = wickra::CenterOfGravity::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_CenterOfGravity", "CenterOfGravity", &rows); + } else { + eprintln!("gen_golden skip CenterOfGravity"); + } + if let Ok(mut ind) = wickra::ChaikinOscillator::new(3, 7) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_ChaikinOscillator", "ChaikinOscillator", &rows); + } else { + eprintln!("gen_golden skip ChaikinOscillator"); + } + if let Ok(mut ind) = wickra::ChaikinVolatility::new(3, 7) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_ChaikinVolatility", "ChaikinVolatility", &rows); + } else { + eprintln!("gen_golden skip ChaikinVolatility"); + } + if let Ok(mut ind) = wickra::ChoppinessIndex::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_ChoppinessIndex", "ChoppinessIndex", &rows); + } else { + eprintln!("gen_golden skip ChoppinessIndex"); + } + { + let mut ind = wickra::CloseVsOpen::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_CloseVsOpen", "CloseVsOpen", &rows); + } + { + let mut ind = wickra::ClosingMarubozu::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_ClosingMarubozu", "ClosingMarubozu", &rows); + } + if let Ok(mut ind) = wickra::CoefficientOfVariation::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv( + dir, + "g_CoefficientOfVariation", + "CoefficientOfVariation", + &rows, + ); + } else { + eprintln!("gen_golden skip CoefficientOfVariation"); + } + if let Ok(mut ind) = wickra::CommonSenseRatio::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_CommonSenseRatio", "CommonSenseRatio", &rows); + } else { + eprintln!("gen_golden skip CommonSenseRatio"); + } + { + let mut ind = wickra::ConcealingBabySwallow::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv( + dir, + "g_ConcealingBabySwallow", + "ConcealingBabySwallow", + &rows, + ); + } + if let Ok(mut ind) = wickra::ConditionalValueAtRisk::new(14, 2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv( + dir, + "g_ConditionalValueAtRisk", + "ConditionalValueAtRisk", + &rows, + ); + } else { + eprintln!("gen_golden skip ConditionalValueAtRisk"); + } + if let Ok(mut ind) = wickra::ConnorsRsi::new(3, 7, 14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_ConnorsRsi", "ConnorsRsi", &rows); + } else { + eprintln!("gen_golden skip ConnorsRsi"); + } + if let Ok(mut ind) = wickra::Coppock::new(3, 7, 14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Coppock", "Coppock", &rows); + } else { + eprintln!("gen_golden skip Coppock"); + } + { + let mut ind = wickra::Counterattack::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Counterattack", "Counterattack", &rows); + } + { + let mut ind = wickra::Crab::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Crab", "Crab", &rows); + } + { + let mut ind = wickra::CupAndHandle::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_CupAndHandle", "CupAndHandle", &rows); + } + if let Ok(mut ind) = wickra::CyberneticCycle::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_CyberneticCycle", "CyberneticCycle", &rows); + } else { + eprintln!("gen_golden skip CyberneticCycle"); + } + { + let mut ind = wickra::Cypher::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Cypher", "Cypher", &rows); + } + if let Ok(mut ind) = wickra::Dema::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Dema", "Dema", &rows); + } else { + eprintln!("gen_golden skip Dema"); + } + if let Ok(mut ind) = wickra::Dpo::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Dpo", "Dpo", &rows); + } else { + eprintln!("gen_golden skip Dpo"); + } + if let Ok(mut ind) = wickra::Dx::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Dx", "Dx", &rows); + } else { + eprintln!("gen_golden skip Dx"); + } + if let Ok(mut ind) = wickra::Decycler::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Decycler", "Decycler", &rows); + } else { + eprintln!("gen_golden skip Decycler"); + } + if let Ok(mut ind) = wickra::DecyclerOscillator::new(3, 7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_DecyclerOscillator", "DecyclerOscillator", &rows); + } else { + eprintln!("gen_golden skip DecyclerOscillator"); + } + if let Ok(mut ind) = wickra::DemandIndex::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_DemandIndex", "DemandIndex", &rows); + } else { + eprintln!("gen_golden skip DemandIndex"); + } + if let Ok(mut ind) = wickra::DerivativeOscillator::new(3, 7, 14, 28) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_DerivativeOscillator", "DerivativeOscillator", &rows); + } else { + eprintln!("gen_golden skip DerivativeOscillator"); + } + if let Ok(mut ind) = wickra::DetrendedStdDev::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_DetrendedStdDev", "DetrendedStdDev", &rows); + } else { + eprintln!("gen_golden skip DetrendedStdDev"); + } + if let Ok(mut ind) = wickra::DisparityIndex::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_DisparityIndex", "DisparityIndex", &rows); + } else { + eprintln!("gen_golden skip DisparityIndex"); + } + if let Ok(mut ind) = wickra::DistanceSsd::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_DistanceSsd", "DistanceSsd", &rows); + } else { + eprintln!("gen_golden skip DistanceSsd"); + } + { + let mut ind = wickra::Doji::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Doji", "Doji", &rows); + } + { + let mut ind = wickra::DojiStar::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_DojiStar", "DojiStar", &rows); + } + { + let mut ind = wickra::DoubleTopBottom::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_DoubleTopBottom", "DoubleTopBottom", &rows); + } + { + let mut ind = wickra::DownsideGapThreeMethods::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv( + dir, + "g_DownsideGapThreeMethods", + "DownsideGapThreeMethods", + &rows, + ); + } + { + let mut ind = wickra::DragonflyDoji::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_DragonflyDoji", "DragonflyDoji", &rows); + } + if let Ok(mut ind) = wickra::DumplingTop::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_DumplingTop", "DumplingTop", &rows); + } else { + eprintln!("gen_golden skip DumplingTop"); + } + if let Ok(mut ind) = wickra::DynamicMomentumIndex::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_DynamicMomentumIndex", "DynamicMomentumIndex", &rows); + } else { + eprintln!("gen_golden skip DynamicMomentumIndex"); + } + if let Ok(mut ind) = wickra::Ehma::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Ehma", "Ehma", &rows); + } else { + eprintln!("gen_golden skip Ehma"); + } + if let Ok(mut ind) = wickra::Ema::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Ema", "Ema", &rows); + } else { + eprintln!("gen_golden skip Ema"); + } + if let Ok(mut ind) = wickra::Evwma::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Evwma", "Evwma", &rows); + } else { + eprintln!("gen_golden skip Evwma"); + } + if let Ok(mut ind) = wickra::EaseOfMovement::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_EaseOfMovement", "EaseOfMovement", &rows); + } else { + eprintln!("gen_golden skip EaseOfMovement"); + } + if let Ok(mut ind) = wickra::EhlersStochastic::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_EhlersStochastic", "EhlersStochastic", &rows); + } else { + eprintln!("gen_golden skip EhlersStochastic"); + } + if let Ok(mut ind) = wickra::ElderImpulse::new(3, 7, 14, 28) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_ElderImpulse", "ElderImpulse", &rows); + } else { + eprintln!("gen_golden skip ElderImpulse"); + } + if let Ok(mut ind) = wickra::EmpiricalModeDecomposition::new(14, 2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv( + dir, + "g_EmpiricalModeDecomposition", + "EmpiricalModeDecomposition", + &rows, + ); + } else { + eprintln!("gen_golden skip EmpiricalModeDecomposition"); + } + { + let mut ind = wickra::Engulfing::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Engulfing", "Engulfing", &rows); + } + { + let mut ind = wickra::EveningDojiStar::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_EveningDojiStar", "EveningDojiStar", &rows); + } + if let Ok(mut ind) = wickra::EwmaVolatility::new(2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_EwmaVolatility", "EwmaVolatility", &rows); + } else { + eprintln!("gen_golden skip EwmaVolatility"); + } + if let Ok(mut ind) = wickra::Expectancy::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Expectancy", "Expectancy", &rows); + } else { + eprintln!("gen_golden skip Expectancy"); + } + if let Ok(mut ind) = wickra::Fama::new(2.0, 0.5) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Fama", "Fama", &rows); + } else { + eprintln!("gen_golden skip Fama"); + } + if let Ok(mut ind) = wickra::Frama::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Frama", "Frama", &rows); + } else { + eprintln!("gen_golden skip Frama"); + } + { + let mut ind = wickra::FallingThreeMethods::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_FallingThreeMethods", "FallingThreeMethods", &rows); + } + if let Ok(mut ind) = wickra::FisherRsi::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_FisherRsi", "FisherRsi", &rows); + } else { + eprintln!("gen_golden skip FisherRsi"); + } + if let Ok(mut ind) = wickra::FisherTransform::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_FisherTransform", "FisherTransform", &rows); + } else { + eprintln!("gen_golden skip FisherTransform"); + } + { + let mut ind = wickra::FlagPennant::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_FlagPennant", "FlagPennant", &rows); + } + if let Ok(mut ind) = wickra::ForceIndex::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_ForceIndex", "ForceIndex", &rows); + } else { + eprintln!("gen_golden skip ForceIndex"); + } + if let Ok(mut ind) = wickra::FryPanBottom::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_FryPanBottom", "FryPanBottom", &rows); + } else { + eprintln!("gen_golden skip FryPanBottom"); + } + if let Ok(mut ind) = wickra::GeneralizedDema::new(14, 2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_GeneralizedDema", "GeneralizedDema", &rows); + } else { + eprintln!("gen_golden skip GeneralizedDema"); + } + if let Ok(mut ind) = wickra::GeometricMa::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_GeometricMa", "GeometricMa", &rows); + } else { + eprintln!("gen_golden skip GeometricMa"); + } + if let Ok(mut ind) = wickra::GainLossRatio::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_GainLossRatio", "GainLossRatio", &rows); + } else { + eprintln!("gen_golden skip GainLossRatio"); + } + if let Ok(mut ind) = wickra::GainToPainRatio::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_GainToPainRatio", "GainToPainRatio", &rows); + } else { + eprintln!("gen_golden skip GainToPainRatio"); + } + { + let mut ind = wickra::GapSideBySideWhite::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_GapSideBySideWhite", "GapSideBySideWhite", &rows); + } + if let Ok(mut ind) = wickra::Garch11::new(2.0, 0.5, 0.5) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Garch11", "Garch11", &rows); + } else { + eprintln!("gen_golden skip Garch11"); + } + { + let mut ind = wickra::Gartley::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Gartley", "Gartley", &rows); + } + if let Ok(mut ind) = wickra::GrangerCausality::new(3, 7) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_GrangerCausality", "GrangerCausality", &rows); + } else { + eprintln!("gen_golden skip GrangerCausality"); + } + { + let mut ind = wickra::GravestoneDoji::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_GravestoneDoji", "GravestoneDoji", &rows); + } + if let Ok(mut ind) = wickra::HighpassFilter::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_HighpassFilter", "HighpassFilter", &rows); + } else { + eprintln!("gen_golden skip HighpassFilter"); + } + if let Ok(mut ind) = wickra::Hma::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Hma", "Hma", &rows); + } else { + eprintln!("gen_golden skip Hma"); + } + { + let mut ind = wickra::Hammer::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Hammer", "Hammer", &rows); + } + { + let mut ind = wickra::HangingMan::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_HangingMan", "HangingMan", &rows); + } + { + let mut ind = wickra::Harami::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Harami", "Harami", &rows); + } + { + let mut ind = wickra::HaramiCross::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_HaramiCross", "HaramiCross", &rows); + } + if let Ok(mut ind) = wickra::HasbrouckInformationShare::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv( + dir, + "g_HasbrouckInformationShare", + "HasbrouckInformationShare", + &rows, + ); + } else { + eprintln!("gen_golden skip HasbrouckInformationShare"); + } + { + let mut ind = wickra::HeadAndShoulders::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_HeadAndShoulders", "HeadAndShoulders", &rows); + } + if let Ok(mut ind) = wickra::HeikinAshiOscillator::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_HeikinAshiOscillator", "HeikinAshiOscillator", &rows); + } else { + eprintln!("gen_golden skip HeikinAshiOscillator"); + } + { + let mut ind = wickra::HighLowRange::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_HighLowRange", "HighLowRange", &rows); + } + { + let mut ind = wickra::HighWave::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_HighWave", "HighWave", &rows); + } + { + let mut ind = wickra::Hikkake::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Hikkake", "Hikkake", &rows); + } + { + let mut ind = wickra::HikkakeModified::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_HikkakeModified", "HikkakeModified", &rows); + } + { + let mut ind = wickra::HilbertDominantCycle::new(); + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_HilbertDominantCycle", "HilbertDominantCycle", &rows); + } + if let Ok(mut ind) = wickra::HistoricalVolatility::new(3, 7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_HistoricalVolatility", "HistoricalVolatility", &rows); + } else { + eprintln!("gen_golden skip HistoricalVolatility"); + } + if let Ok(mut ind) = wickra::HoltWinters::new(2.0, 0.5) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_HoltWinters", "HoltWinters", &rows); + } else { + eprintln!("gen_golden skip HoltWinters"); + } + { + let mut ind = wickra::HomingPigeon::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_HomingPigeon", "HomingPigeon", &rows); + } + if let Ok(mut ind) = wickra::HurstExponent::new(3, 7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_HurstExponent", "HurstExponent", &rows); + } else { + eprintln!("gen_golden skip HurstExponent"); + } + if let Ok(mut ind) = wickra::IntradayMomentumIndex::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv( + dir, + "g_IntradayMomentumIndex", + "IntradayMomentumIndex", + &rows, + ); + } else { + eprintln!("gen_golden skip IntradayMomentumIndex"); + } + { + let mut ind = wickra::IdenticalThreeCrows::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_IdenticalThreeCrows", "IdenticalThreeCrows", &rows); + } + { + let mut ind = wickra::InNeck::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_InNeck", "InNeck", &rows); + } + if let Ok(mut ind) = wickra::Inertia::new(3, 7) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Inertia", "Inertia", &rows); + } else { + eprintln!("gen_golden skip Inertia"); + } + if let Ok(mut ind) = wickra::InformationRatio::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_InformationRatio", "InformationRatio", &rows); + } else { + eprintln!("gen_golden skip InformationRatio"); + } + if let Ok(mut ind) = wickra::InstantaneousTrendline::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv( + dir, + "g_InstantaneousTrendline", + "InstantaneousTrendline", + &rows, + ); + } else { + eprintln!("gen_golden skip InstantaneousTrendline"); + } + { + let mut ind = wickra::IntradayIntensity::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_IntradayIntensity", "IntradayIntensity", &rows); + } + if let Ok(mut ind) = wickra::InverseFisherTransform::new(2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv( + dir, + "g_InverseFisherTransform", + "InverseFisherTransform", + &rows, + ); + } else { + eprintln!("gen_golden skip InverseFisherTransform"); + } + { + let mut ind = wickra::InvertedHammer::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_InvertedHammer", "InvertedHammer", &rows); + } + if let Ok(mut ind) = wickra::JarqueBera::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_JarqueBera", "JarqueBera", &rows); + } else { + eprintln!("gen_golden skip JarqueBera"); + } + if let Ok(mut ind) = wickra::Jma::new(3, 2.0, 7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Jma", "Jma", &rows); + } else { + eprintln!("gen_golden skip Jma"); + } + if let Ok(mut ind) = wickra::JumpIndicator::new(14, 2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_JumpIndicator", "JumpIndicator", &rows); + } else { + eprintln!("gen_golden skip JumpIndicator"); + } + if let Ok(mut ind) = wickra::Kama::new(3, 7, 14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Kama", "Kama", &rows); + } else { + eprintln!("gen_golden skip Kama"); + } + if let Ok(mut ind) = wickra::KRatio::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_KRatio", "KRatio", &rows); + } else { + eprintln!("gen_golden skip KRatio"); + } + if let Ok(mut ind) = wickra::Kvo::new(3, 7) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Kvo", "Kvo", &rows); + } else { + eprintln!("gen_golden skip Kvo"); + } + if let Ok(mut ind) = wickra::KellyCriterion::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_KellyCriterion", "KellyCriterion", &rows); + } else { + eprintln!("gen_golden skip KellyCriterion"); + } + if let Ok(mut ind) = wickra::KendallTau::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_KendallTau", "KendallTau", &rows); + } else { + eprintln!("gen_golden skip KendallTau"); + } + { + let mut ind = wickra::Kicking::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Kicking", "Kicking", &rows); + } + { + let mut ind = wickra::KickingByLength::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_KickingByLength", "KickingByLength", &rows); + } + if let Ok(mut ind) = wickra::Kurtosis::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Kurtosis", "Kurtosis", &rows); + } else { + eprintln!("gen_golden skip Kurtosis"); + } + { + let mut ind = wickra::LadderBottom::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_LadderBottom", "LadderBottom", &rows); + } + if let Ok(mut ind) = wickra::LaguerreRsi::new(2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_LaguerreRsi", "LaguerreRsi", &rows); + } else { + eprintln!("gen_golden skip LaguerreRsi"); + } + if let Ok(mut ind) = wickra::LogReturn::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_LogReturn", "LogReturn", &rows); + } else { + eprintln!("gen_golden skip LogReturn"); + } + { + let mut ind = wickra::LongLeggedDoji::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_LongLeggedDoji", "LongLeggedDoji", &rows); + } + { + let mut ind = wickra::LongLine::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_LongLine", "LongLine", &rows); + } + if let Ok(mut ind) = wickra::M2Measure::new(14, 2.0, 0.5) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_M2Measure", "M2Measure", &rows); + } else { + eprintln!("gen_golden skip M2Measure"); + } + if let Ok(mut ind) = wickra::Mfi::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Mfi", "Mfi", &rows); + } else { + eprintln!("gen_golden skip Mfi"); + } + if let Ok(mut ind) = wickra::MidPoint::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_MidPoint", "MidPoint", &rows); + } else { + eprintln!("gen_golden skip MidPoint"); + } + if let Ok(mut ind) = wickra::MidPrice::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_MidPrice", "MidPrice", &rows); + } else { + eprintln!("gen_golden skip MidPrice"); + } + if let Ok(mut ind) = wickra::MinusDi::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_MinusDi", "MinusDi", &rows); + } else { + eprintln!("gen_golden skip MinusDi"); + } + if let Ok(mut ind) = wickra::MinusDm::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_MinusDm", "MinusDm", &rows); + } else { + eprintln!("gen_golden skip MinusDm"); + } + if let Ok(mut ind) = wickra::Mom::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Mom", "Mom", &rows); + } else { + eprintln!("gen_golden skip Mom"); + } + if let Ok(mut ind) = wickra::MacdHistogram::new(3, 7, 14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_MacdHistogram", "MacdHistogram", &rows); + } else { + eprintln!("gen_golden skip MacdHistogram"); + } + { + let mut ind = wickra::MarketFacilitationIndex::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv( + dir, + "g_MarketFacilitationIndex", + "MarketFacilitationIndex", + &rows, + ); + } + if let Ok(mut ind) = wickra::MartinRatio::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_MartinRatio", "MartinRatio", &rows); + } else { + eprintln!("gen_golden skip MartinRatio"); + } + { + let mut ind = wickra::Marubozu::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Marubozu", "Marubozu", &rows); + } + if let Ok(mut ind) = wickra::MassIndex::new(3, 7) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_MassIndex", "MassIndex", &rows); + } else { + eprintln!("gen_golden skip MassIndex"); + } + { + let mut ind = wickra::MatHold::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_MatHold", "MatHold", &rows); + } + { + let mut ind = wickra::MatchingLow::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_MatchingLow", "MatchingLow", &rows); + } + if let Ok(mut ind) = wickra::MaxDrawdown::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_MaxDrawdown", "MaxDrawdown", &rows); + } else { + eprintln!("gen_golden skip MaxDrawdown"); + } + if let Ok(mut ind) = wickra::MedianAbsoluteDeviation::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv( + dir, + "g_MedianAbsoluteDeviation", + "MedianAbsoluteDeviation", + &rows, + ); + } else { + eprintln!("gen_golden skip MedianAbsoluteDeviation"); + } + if let Ok(mut ind) = wickra::MedianMa::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_MedianMa", "MedianMa", &rows); + } else { + eprintln!("gen_golden skip MedianMa"); + } + { + let mut ind = wickra::MedianPrice::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_MedianPrice", "MedianPrice", &rows); + } + { + let mut ind = wickra::MorningDojiStar::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_MorningDojiStar", "MorningDojiStar", &rows); + } + { + let mut ind = wickra::MorningEveningStar::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_MorningEveningStar", "MorningEveningStar", &rows); + } + if let Ok(mut ind) = wickra::Natr::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Natr", "Natr", &rows); + } else { + eprintln!("gen_golden skip Natr"); + } + { + let mut ind = wickra::Nvi::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Nvi", "Nvi", &rows); + } + if let Ok(mut ind) = wickra::NakedPoc::new(3, 7) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_NakedPoc", "NakedPoc", &rows); + } else { + eprintln!("gen_golden skip NakedPoc"); + } + if let Ok(mut ind) = wickra::NewPriceLines::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_NewPriceLines", "NewPriceLines", &rows); + } else { + eprintln!("gen_golden skip NewPriceLines"); + } + { + let mut ind = wickra::Obv::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Obv", "Obv", &rows); + } + if let Ok(mut ind) = wickra::OmegaRatio::new(14, 2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_OmegaRatio", "OmegaRatio", &rows); + } else { + eprintln!("gen_golden skip OmegaRatio"); + } + { + let mut ind = wickra::OnNeck::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_OnNeck", "OnNeck", &rows); + } + { + let mut ind = wickra::OpeningMarubozu::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_OpeningMarubozu", "OpeningMarubozu", &rows); + } + if let Ok(mut ind) = wickra::OuHalfLife::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_OuHalfLife", "OuHalfLife", &rows); + } else { + eprintln!("gen_golden skip OuHalfLife"); + } + if let Ok(mut ind) = wickra::Pgo::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Pgo", "Pgo", &rows); + } else { + eprintln!("gen_golden skip Pgo"); + } + if let Ok(mut ind) = wickra::PlusDi::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_PlusDi", "PlusDi", &rows); + } else { + eprintln!("gen_golden skip PlusDi"); + } + if let Ok(mut ind) = wickra::PlusDm::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_PlusDm", "PlusDm", &rows); + } else { + eprintln!("gen_golden skip PlusDm"); + } + if let Ok(mut ind) = wickra::Pmo::new(3, 7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Pmo", "Pmo", &rows); + } else { + eprintln!("gen_golden skip Pmo"); + } + if let Ok(mut ind) = wickra::Ppo::new(3, 7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Ppo", "Ppo", &rows); + } else { + eprintln!("gen_golden skip Ppo"); + } + if let Ok(mut ind) = wickra::Psar::new(2.0, 0.5, 0.5) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Psar", "Psar", &rows); + } else { + eprintln!("gen_golden skip Psar"); + } + { + let mut ind = wickra::Pvi::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Pvi", "Pvi", &rows); + } + if let Ok(mut ind) = wickra::PainIndex::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_PainIndex", "PainIndex", &rows); + } else { + eprintln!("gen_golden skip PainIndex"); + } + if let Ok(mut ind) = wickra::PairwiseBeta::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_PairwiseBeta", "PairwiseBeta", &rows); + } else { + eprintln!("gen_golden skip PairwiseBeta"); + } + if let Ok(mut ind) = wickra::PearsonCorrelation::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_PearsonCorrelation", "PearsonCorrelation", &rows); + } else { + eprintln!("gen_golden skip PearsonCorrelation"); + } + if let Ok(mut ind) = wickra::PercentB::new(14, 2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_PercentB", "PercentB", &rows); + } else { + eprintln!("gen_golden skip PercentB"); + } + if let Ok(mut ind) = wickra::PercentageTrailingStop::new(2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv( + dir, + "g_PercentageTrailingStop", + "PercentageTrailingStop", + &rows, + ); + } else { + eprintln!("gen_golden skip PercentageTrailingStop"); + } + { + let mut ind = wickra::PiercingDarkCloud::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_PiercingDarkCloud", "PiercingDarkCloud", &rows); + } + if let Ok(mut ind) = wickra::PivotReversal::new(3, 7) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_PivotReversal", "PivotReversal", &rows); + } else { + eprintln!("gen_golden skip PivotReversal"); + } + if let Ok(mut ind) = wickra::PpoHistogram::new(3, 7, 14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_PpoHistogram", "PpoHistogram", &rows); + } else { + eprintln!("gen_golden skip PpoHistogram"); + } + if let Ok(mut ind) = wickra::ProfileShape::new(3, 7) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_ProfileShape", "ProfileShape", &rows); + } else { + eprintln!("gen_golden skip ProfileShape"); + } + if let Ok(mut ind) = wickra::ProfitFactor::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_ProfitFactor", "ProfitFactor", &rows); + } else { + eprintln!("gen_golden skip ProfitFactor"); + } + if let Ok(mut ind) = wickra::ProjectionOscillator::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_ProjectionOscillator", "ProjectionOscillator", &rows); + } else { + eprintln!("gen_golden skip ProjectionOscillator"); + } + if let Ok(mut ind) = wickra::Qstick::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Qstick", "Qstick", &rows); + } else { + eprintln!("gen_golden skip Qstick"); + } + if let Ok(mut ind) = wickra::Reflex::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Reflex", "Reflex", &rows); + } else { + eprintln!("gen_golden skip Reflex"); + } + if let Ok(mut ind) = wickra::Rmi::new(3, 7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Rmi", "Rmi", &rows); + } else { + eprintln!("gen_golden skip Rmi"); + } + if let Ok(mut ind) = wickra::Roc::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Roc", "Roc", &rows); + } else { + eprintln!("gen_golden skip Roc"); + } + if let Ok(mut ind) = wickra::Rocp::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Rocp", "Rocp", &rows); + } else { + eprintln!("gen_golden skip Rocp"); + } + if let Ok(mut ind) = wickra::Rocr::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Rocr", "Rocr", &rows); + } else { + eprintln!("gen_golden skip Rocr"); + } + if let Ok(mut ind) = wickra::Rocr100::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Rocr100", "Rocr100", &rows); + } else { + eprintln!("gen_golden skip Rocr100"); + } + if let Ok(mut ind) = wickra::RollingMinMaxScaler::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_RollingMinMaxScaler", "RollingMinMaxScaler", &rows); + } else { + eprintln!("gen_golden skip RollingMinMaxScaler"); + } + if let Ok(mut ind) = wickra::Rsi::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Rsi", "Rsi", &rows); + } else { + eprintln!("gen_golden skip Rsi"); + } + if let Ok(mut ind) = wickra::Rsx::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Rsx", "Rsx", &rows); + } else { + eprintln!("gen_golden skip Rsx"); + } + if let Ok(mut ind) = wickra::RSquared::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_RSquared", "RSquared", &rows); + } else { + eprintln!("gen_golden skip RSquared"); + } + if let Ok(mut ind) = wickra::Rvi::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Rvi", "Rvi", &rows); + } else { + eprintln!("gen_golden skip Rvi"); + } + if let Ok(mut ind) = wickra::RviVolatility::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_RviVolatility", "RviVolatility", &rows); + } else { + eprintln!("gen_golden skip RviVolatility"); + } + if let Ok(mut ind) = wickra::RealizedVolatility::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_RealizedVolatility", "RealizedVolatility", &rows); + } else { + eprintln!("gen_golden skip RealizedVolatility"); + } + { + let mut ind = wickra::RecoveryFactor::new(); + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_RecoveryFactor", "RecoveryFactor", &rows); + } + { + let mut ind = wickra::RectangleRange::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_RectangleRange", "RectangleRange", &rows); + } + if let Ok(mut ind) = wickra::RegimeLabel::new(3, 7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_RegimeLabel", "RegimeLabel", &rows); + } else { + eprintln!("gen_golden skip RegimeLabel"); + } + if let Ok(mut ind) = wickra::RenkoTrailingStop::new(2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_RenkoTrailingStop", "RenkoTrailingStop", &rows); + } else { + eprintln!("gen_golden skip RenkoTrailingStop"); + } + { + let mut ind = wickra::RickshawMan::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_RickshawMan", "RickshawMan", &rows); + } + { + let mut ind = wickra::RisingThreeMethods::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_RisingThreeMethods", "RisingThreeMethods", &rows); + } + if let Ok(mut ind) = wickra::RollingCorrelation::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_RollingCorrelation", "RollingCorrelation", &rows); + } else { + eprintln!("gen_golden skip RollingCorrelation"); + } + if let Ok(mut ind) = wickra::RollingCovariance::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_RollingCovariance", "RollingCovariance", &rows); + } else { + eprintln!("gen_golden skip RollingCovariance"); + } + if let Ok(mut ind) = wickra::RollingIqr::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_RollingIqr", "RollingIqr", &rows); + } else { + eprintln!("gen_golden skip RollingIqr"); + } + if let Ok(mut ind) = wickra::RollingPercentileRank::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv( + dir, + "g_RollingPercentileRank", + "RollingPercentileRank", + &rows, + ); + } else { + eprintln!("gen_golden skip RollingPercentileRank"); + } + if let Ok(mut ind) = wickra::RollingQuantile::new(14, 2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_RollingQuantile", "RollingQuantile", &rows); + } else { + eprintln!("gen_golden skip RollingQuantile"); + } + if let Ok(mut ind) = wickra::RoofingFilter::new(3, 7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_RoofingFilter", "RoofingFilter", &rows); + } else { + eprintln!("gen_golden skip RoofingFilter"); + } + if let Ok(mut ind) = wickra::SampleEntropy::new(3, 7, 2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_SampleEntropy", "SampleEntropy", &rows); + } else { + eprintln!("gen_golden skip SampleEntropy"); + } + if let Ok(mut ind) = wickra::SarExt::new(2.0, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5, 0.5) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_SarExt", "SarExt", &rows); + } else { + eprintln!("gen_golden skip SarExt"); + } + if let Ok(mut ind) = wickra::ShannonEntropy::new(3, 7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_ShannonEntropy", "ShannonEntropy", &rows); + } else { + eprintln!("gen_golden skip ShannonEntropy"); + } + if let Ok(mut ind) = wickra::Sma::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Sma", "Sma", &rows); + } else { + eprintln!("gen_golden skip Sma"); + } + if let Ok(mut ind) = wickra::Smi::new(3, 7, 14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Smi", "Smi", &rows); + } else { + eprintln!("gen_golden skip Smi"); + } + if let Ok(mut ind) = wickra::Smma::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Smma", "Smma", &rows); + } else { + eprintln!("gen_golden skip Smma"); + } + if let Ok(mut ind) = wickra::Stc::new(3, 7, 14, 2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Stc", "Stc", &rows); + } else { + eprintln!("gen_golden skip Stc"); + } + if let Ok(mut ind) = wickra::SineWeightedMa::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_SineWeightedMa", "SineWeightedMa", &rows); + } else { + eprintln!("gen_golden skip SineWeightedMa"); + } + { + let mut ind = wickra::SeasonalZScore::new(14); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_SeasonalZScore", "SeasonalZScore", &rows); + } + { + let mut ind = wickra::SeparatingLines::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_SeparatingLines", "SeparatingLines", &rows); + } + { + let mut ind = wickra::SessionVwap::new(14); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_SessionVwap", "SessionVwap", &rows); + } + { + let mut ind = wickra::Shark::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Shark", "Shark", &rows); + } + if let Ok(mut ind) = wickra::SharpeRatio::new(14, 2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_SharpeRatio", "SharpeRatio", &rows); + } else { + eprintln!("gen_golden skip SharpeRatio"); + } + { + let mut ind = wickra::ShootingStar::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_ShootingStar", "ShootingStar", &rows); + } + { + let mut ind = wickra::ShortLine::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_ShortLine", "ShortLine", &rows); + } + { + let mut ind = wickra::SineWave::new(); + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_SineWave", "SineWave", &rows); + } + if let Ok(mut ind) = wickra::SinglePrints::new(3, 7) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_SinglePrints", "SinglePrints", &rows); + } else { + eprintln!("gen_golden skip SinglePrints"); + } + if let Ok(mut ind) = wickra::Skewness::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Skewness", "Skewness", &rows); + } else { + eprintln!("gen_golden skip Skewness"); + } + if let Ok(mut ind) = wickra::SortinoRatio::new(14, 2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_SortinoRatio", "SortinoRatio", &rows); + } else { + eprintln!("gen_golden skip SortinoRatio"); + } + if let Ok(mut ind) = wickra::SpearmanCorrelation::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_SpearmanCorrelation", "SpearmanCorrelation", &rows); + } else { + eprintln!("gen_golden skip SpearmanCorrelation"); + } + { + let mut ind = wickra::SpinningTop::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_SpinningTop", "SpinningTop", &rows); + } + if let Ok(mut ind) = wickra::SpreadAr1Coefficient::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_SpreadAr1Coefficient", "SpreadAr1Coefficient", &rows); + } else { + eprintln!("gen_golden skip SpreadAr1Coefficient"); + } + if let Ok(mut ind) = wickra::SpreadHurst::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_SpreadHurst", "SpreadHurst", &rows); + } else { + eprintln!("gen_golden skip SpreadHurst"); + } + { + let mut ind = wickra::StalledPattern::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_StalledPattern", "StalledPattern", &rows); + } + if let Ok(mut ind) = wickra::StandardError::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_StandardError", "StandardError", &rows); + } else { + eprintln!("gen_golden skip StandardError"); + } + if let Ok(mut ind) = wickra::StdDev::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_StdDev", "StdDev", &rows); + } else { + eprintln!("gen_golden skip StdDev"); + } + if let Ok(mut ind) = wickra::StepTrailingStop::new(2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_StepTrailingStop", "StepTrailingStop", &rows); + } else { + eprintln!("gen_golden skip StepTrailingStop"); + } + if let Ok(mut ind) = wickra::SterlingRatio::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_SterlingRatio", "SterlingRatio", &rows); + } else { + eprintln!("gen_golden skip SterlingRatio"); + } + { + let mut ind = wickra::StickSandwich::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_StickSandwich", "StickSandwich", &rows); + } + if let Ok(mut ind) = wickra::StochRsi::new(3, 7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_StochRsi", "StochRsi", &rows); + } else { + eprintln!("gen_golden skip StochRsi"); + } + if let Ok(mut ind) = wickra::StochasticCci::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_StochasticCci", "StochasticCci", &rows); + } else { + eprintln!("gen_golden skip StochasticCci"); + } + if let Ok(mut ind) = wickra::SuperSmoother::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_SuperSmoother", "SuperSmoother", &rows); + } else { + eprintln!("gen_golden skip SuperSmoother"); + } + if let Ok(mut ind) = wickra::T3::new(14, 2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_T3", "T3", &rows); + } else { + eprintln!("gen_golden skip T3"); + } + { + let mut ind = wickra::TdCamouflage::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TdCamouflage", "TdCamouflage", &rows); + } + { + let mut ind = wickra::TdClop::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TdClop", "TdClop", &rows); + } + { + let mut ind = wickra::TdClopwin::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TdClopwin", "TdClopwin", &rows); + } + if let Ok(mut ind) = wickra::TdCombo::new(3, 7, 14, 28) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TdCombo", "TdCombo", &rows); + } else { + eprintln!("gen_golden skip TdCombo"); + } + if let Ok(mut ind) = wickra::TdCountdown::new(3, 7, 14, 28) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TdCountdown", "TdCountdown", &rows); + } else { + eprintln!("gen_golden skip TdCountdown"); + } + { + let mut ind = wickra::TdDifferential::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TdDifferential", "TdDifferential", &rows); + } + { + let mut ind = wickra::TdOpen::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TdOpen", "TdOpen", &rows); + } + if let Ok(mut ind) = wickra::TdPressure::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TdPressure", "TdPressure", &rows); + } else { + eprintln!("gen_golden skip TdPressure"); + } + { + let mut ind = wickra::TdPropulsion::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TdPropulsion", "TdPropulsion", &rows); + } + if let Ok(mut ind) = wickra::TdRei::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TdRei", "TdRei", &rows); + } else { + eprintln!("gen_golden skip TdRei"); + } + if let Ok(mut ind) = wickra::TdSetup::new(3, 7) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TdSetup", "TdSetup", &rows); + } else { + eprintln!("gen_golden skip TdSetup"); + } + { + let mut ind = wickra::TdTrap::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TdTrap", "TdTrap", &rows); + } + if let Ok(mut ind) = wickra::Tema::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Tema", "Tema", &rows); + } else { + eprintln!("gen_golden skip Tema"); + } + if let Ok(mut ind) = wickra::Tii::new(3, 7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Tii", "Tii", &rows); + } else { + eprintln!("gen_golden skip Tii"); + } + if let Ok(mut ind) = wickra::Trendflex::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Trendflex", "Trendflex", &rows); + } else { + eprintln!("gen_golden skip Trendflex"); + } + if let Ok(mut ind) = wickra::Trima::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Trima", "Trima", &rows); + } else { + eprintln!("gen_golden skip Trima"); + } + if let Ok(mut ind) = wickra::Trix::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Trix", "Trix", &rows); + } else { + eprintln!("gen_golden skip Trix"); + } + if let Ok(mut ind) = wickra::Tsf::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Tsf", "Tsf", &rows); + } else { + eprintln!("gen_golden skip Tsf"); + } + if let Ok(mut ind) = wickra::Tsi::new(3, 7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Tsi", "Tsi", &rows); + } else { + eprintln!("gen_golden skip Tsi"); + } + if let Ok(mut ind) = wickra::Tsv::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Tsv", "Tsv", &rows); + } else { + eprintln!("gen_golden skip Tsv"); + } + if let Ok(mut ind) = wickra::TtmTrend::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TtmTrend", "TtmTrend", &rows); + } else { + eprintln!("gen_golden skip TtmTrend"); + } + if let Ok(mut ind) = wickra::TailRatio::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_TailRatio", "TailRatio", &rows); + } else { + eprintln!("gen_golden skip TailRatio"); + } + { + let mut ind = wickra::Takuri::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Takuri", "Takuri", &rows); + } + { + let mut ind = wickra::TasukiGap::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TasukiGap", "TasukiGap", &rows); + } + { + let mut ind = wickra::ThreeDrives::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_ThreeDrives", "ThreeDrives", &rows); + } + { + let mut ind = wickra::ThreeInside::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_ThreeInside", "ThreeInside", &rows); + } + if let Ok(mut ind) = wickra::ThreeLineBreak::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_ThreeLineBreak", "ThreeLineBreak", &rows); + } else { + eprintln!("gen_golden skip ThreeLineBreak"); + } + { + let mut ind = wickra::ThreeLineStrike::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_ThreeLineStrike", "ThreeLineStrike", &rows); + } + { + let mut ind = wickra::ThreeOutside::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_ThreeOutside", "ThreeOutside", &rows); + } + { + let mut ind = wickra::ThreeSoldiersOrCrows::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_ThreeSoldiersOrCrows", "ThreeSoldiersOrCrows", &rows); + } + { + let mut ind = wickra::ThreeStarsInSouth::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_ThreeStarsInSouth", "ThreeStarsInSouth", &rows); + } + { + let mut ind = wickra::Thrusting::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Thrusting", "Thrusting", &rows); + } + if let Ok(mut ind) = wickra::TimeBasedStop::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TimeBasedStop", "TimeBasedStop", &rows); + } else { + eprintln!("gen_golden skip TimeBasedStop"); + } + { + let mut ind = wickra::TowerTopBottom::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TowerTopBottom", "TowerTopBottom", &rows); + } + if let Ok(mut ind) = wickra::TradeVolumeIndex::new(2.0) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TradeVolumeIndex", "TradeVolumeIndex", &rows); + } else { + eprintln!("gen_golden skip TradeVolumeIndex"); + } + if let Ok(mut ind) = wickra::TrendLabel::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_TrendLabel", "TrendLabel", &rows); + } else { + eprintln!("gen_golden skip TrendLabel"); + } + if let Ok(mut ind) = wickra::TreynorRatio::new(14, 2.0) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_TreynorRatio", "TreynorRatio", &rows); + } else { + eprintln!("gen_golden skip TreynorRatio"); + } + { + let mut ind = wickra::Triangle::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Triangle", "Triangle", &rows); + } + { + let mut ind = wickra::TripleTopBottom::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TripleTopBottom", "TripleTopBottom", &rows); + } + { + let mut ind = wickra::Tristar::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Tristar", "Tristar", &rows); + } + { + let mut ind = wickra::TrueRange::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TrueRange", "TrueRange", &rows); + } + if let Ok(mut ind) = wickra::TsfOscillator::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_TsfOscillator", "TsfOscillator", &rows); + } else { + eprintln!("gen_golden skip TsfOscillator"); + } + { + let mut ind = wickra::Tweezer::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Tweezer", "Tweezer", &rows); + } + if let Ok(mut ind) = wickra::TwiggsMoneyFlow::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TwiggsMoneyFlow", "TwiggsMoneyFlow", &rows); + } else { + eprintln!("gen_golden skip TwiggsMoneyFlow"); + } + { + let mut ind = wickra::TwoCrows::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TwoCrows", "TwoCrows", &rows); + } + { + let mut ind = wickra::TypicalPrice::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TypicalPrice", "TypicalPrice", &rows); + } + if let Ok(mut ind) = wickra::UniversalOscillator::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_UniversalOscillator", "UniversalOscillator", &rows); + } else { + eprintln!("gen_golden skip UniversalOscillator"); + } + if let Ok(mut ind) = wickra::UlcerIndex::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_UlcerIndex", "UlcerIndex", &rows); + } else { + eprintln!("gen_golden skip UlcerIndex"); + } + if let Ok(mut ind) = wickra::UltimateOscillator::new(3, 7, 14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_UltimateOscillator", "UltimateOscillator", &rows); + } else { + eprintln!("gen_golden skip UltimateOscillator"); + } + { + let mut ind = wickra::UniqueThreeRiver::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_UniqueThreeRiver", "UniqueThreeRiver", &rows); + } + { + let mut ind = wickra::UpsideGapThreeMethods::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv( + dir, + "g_UpsideGapThreeMethods", + "UpsideGapThreeMethods", + &rows, + ); + } + { + let mut ind = wickra::UpsideGapTwoCrows::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_UpsideGapTwoCrows", "UpsideGapTwoCrows", &rows); + } + if let Ok(mut ind) = wickra::UpsidePotentialRatio::new(14, 2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_UpsidePotentialRatio", "UpsidePotentialRatio", &rows); + } else { + eprintln!("gen_golden skip UpsidePotentialRatio"); + } + if let Ok(mut ind) = wickra::Vidya::new(3, 7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Vidya", "Vidya", &rows); + } else { + eprintln!("gen_golden skip Vidya"); + } + { + let mut ind = wickra::Vwap::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Vwap", "Vwap", &rows); + } + if let Ok(mut ind) = wickra::Vwma::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Vwma", "Vwma", &rows); + } else { + eprintln!("gen_golden skip Vwma"); + } + if let Ok(mut ind) = wickra::Vzo::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Vzo", "Vzo", &rows); + } else { + eprintln!("gen_golden skip Vzo"); + } + if let Ok(mut ind) = wickra::ValueAtRisk::new(14, 2.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_ValueAtRisk", "ValueAtRisk", &rows); + } else { + eprintln!("gen_golden skip ValueAtRisk"); + } + if let Ok(mut ind) = wickra::Variance::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Variance", "Variance", &rows); + } else { + eprintln!("gen_golden skip Variance"); + } + if let Ok(mut ind) = wickra::VarianceRatio::new(3, 7) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_VarianceRatio", "VarianceRatio", &rows); + } else { + eprintln!("gen_golden skip VarianceRatio"); + } + if let Ok(mut ind) = wickra::VerticalHorizontalFilter::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv( + dir, + "g_VerticalHorizontalFilter", + "VerticalHorizontalFilter", + &rows, + ); + } else { + eprintln!("gen_golden skip VerticalHorizontalFilter"); + } + if let Ok(mut ind) = wickra::VolatilityOfVolatility::new(3, 7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv( + dir, + "g_VolatilityOfVolatility", + "VolatilityOfVolatility", + &rows, + ); + } else { + eprintln!("gen_golden skip VolatilityOfVolatility"); + } + if let Ok(mut ind) = wickra::VolatilityRatio::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_VolatilityRatio", "VolatilityRatio", &rows); + } else { + eprintln!("gen_golden skip VolatilityRatio"); + } + if let Ok(mut ind) = wickra::VoltyStop::new(14, 2.0) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_VoltyStop", "VoltyStop", &rows); + } else { + eprintln!("gen_golden skip VoltyStop"); + } + if let Ok(mut ind) = wickra::VolumeOscillator::new(3, 7) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_VolumeOscillator", "VolumeOscillator", &rows); + } else { + eprintln!("gen_golden skip VolumeOscillator"); + } + if let Ok(mut ind) = wickra::VolumeRsi::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_VolumeRsi", "VolumeRsi", &rows); + } else { + eprintln!("gen_golden skip VolumeRsi"); + } + if let Ok(mut ind) = wickra::WavePm::new(3, 7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_WavePm", "WavePm", &rows); + } else { + eprintln!("gen_golden skip WavePm"); + } + if let Ok(mut ind) = wickra::Wma::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Wma", "Wma", &rows); + } else { + eprintln!("gen_golden skip Wma"); + } + { + let mut ind = wickra::Wad::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Wad", "Wad", &rows); + } + { + let mut ind = wickra::Wedge::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Wedge", "Wedge", &rows); + } + { + let mut ind = wickra::WeightedClose::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_WeightedClose", "WeightedClose", &rows); + } + { + let mut ind = wickra::WickRatio::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_WickRatio", "WickRatio", &rows); + } + if let Ok(mut ind) = wickra::WilliamsR::new(14) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_WilliamsR", "WilliamsR", &rows); + } else { + eprintln!("gen_golden skip WilliamsR"); + } + if let Ok(mut ind) = wickra::WinRate::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_WinRate", "WinRate", &rows); + } else { + eprintln!("gen_golden skip WinRate"); + } + if let Ok(mut ind) = wickra::YoyoExit::new(14, 2.0) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_YoyoExit", "YoyoExit", &rows); + } else { + eprintln!("gen_golden skip YoyoExit"); + } + if let Ok(mut ind) = wickra::Zlema::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Zlema", "Zlema", &rows); + } else { + eprintln!("gen_golden skip Zlema"); + } + if let Ok(mut ind) = wickra::ZScore::new(14) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_ZScore", "ZScore", &rows); + } else { + eprintln!("gen_golden skip ZScore"); + } +} + +// AUTO-GENERATED multi-output golden tranche. +#[allow(clippy::too_many_lines)] +fn emit_multi(dir: &Path, candles: &[Candle], closes: &[f64]) { + if let Ok(mut ind) = wickra::Adx::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.plus_di, o.minus_di, o.adx), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_Adx", "plus_di,minus_di,adx", &rows); + } else { + eprintln!("gen_golden skip Adx"); + } + if let Ok(mut ind) = wickra::AccelerationBands::new(14, 2.0) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.upper, o.middle, o.lower), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_AccelerationBands", "upper,middle,lower", &rows); + } else { + eprintln!("gen_golden skip AccelerationBands"); + } + if let Ok(mut ind) = wickra::Alligator::new(3, 7, 14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.jaw, o.teeth, o.lips), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_Alligator", "jaw,teeth,lips", &rows); + } else { + eprintln!("gen_golden skip Alligator"); + } + if let Ok(mut ind) = wickra::AndrewsPitchfork::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.median, o.upper, o.lower), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_AndrewsPitchfork", "median,upper,lower", &rows); + } else { + eprintln!("gen_golden skip AndrewsPitchfork"); + } + if let Ok(mut ind) = wickra::Aroon::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.up, o.down), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_Aroon", "up,down", &rows); + } else { + eprintln!("gen_golden skip Aroon"); + } + if let Ok(mut ind) = wickra::AtrBands::new(14, 2.0) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.upper, o.middle, o.lower), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_AtrBands", "upper,middle,lower", &rows); + } else { + eprintln!("gen_golden skip AtrBands"); + } + if let Ok(mut ind) = wickra::AtrRatchet::new(14, 2.0, 0.5) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.value, o.direction), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_AtrRatchet", "value,direction", &rows); + } else { + eprintln!("gen_golden skip AtrRatchet"); + } + { + let mut ind = wickra::AutoFib::new(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!( + "{},{},{},{},{},{},{}", + o.level_0, + o.level_236, + o.level_382, + o.level_500, + o.level_618, + o.level_786, + o.level_1000 + ), + None => "nan,nan,nan,nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv( + dir, + "g_AutoFib", + "level_0,level_236,level_382,level_500,level_618,level_786,level_1000", + &rows, + ); + } + if let Ok(mut ind) = wickra::BomarBands::new(14, 2.0) { + let rows: Vec = closes + .iter() + .map(|&x| match ind.update(x) { + Some(o) => format!("{},{},{}", o.upper, o.middle, o.lower), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_BomarBands", "upper,middle,lower", &rows); + } else { + eprintln!("gen_golden skip BomarBands"); + } + if let Ok(mut ind) = wickra::CandleVolume::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.body, o.width), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_CandleVolume", "body,width", &rows); + } else { + eprintln!("gen_golden skip CandleVolume"); + } + { + let mut ind = wickra::CentralPivotRange::new(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.pivot, o.tc, o.bc), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_CentralPivotRange", "pivot,tc,bc", &rows); + } + if let Ok(mut ind) = wickra::ChandeKrollStop::new(3, 2.0, 7) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.stop_long, o.stop_short), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_ChandeKrollStop", "stop_long,stop_short", &rows); + } else { + eprintln!("gen_golden skip ChandeKrollStop"); + } + if let Ok(mut ind) = wickra::ChandelierExit::new(14, 2.0) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.long_stop, o.short_stop), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_ChandelierExit", "long_stop,short_stop", &rows); + } else { + eprintln!("gen_golden skip ChandelierExit"); + } + { + let mut ind = wickra::ClassicPivots::new(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!( + "{},{},{},{},{},{},{}", + o.pp, o.r1, o.r2, o.r3, o.s1, o.s2, o.s3 + ), + None => "nan,nan,nan,nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_ClassicPivots", "pp,r1,r2,r3,s1,s2,s3", &rows); + } + if let Ok(mut ind) = wickra::Cointegration::new(3, 7) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update((c.close, c.open)) { + Some(o) => format!("{},{},{}", o.hedge_ratio, o.spread, o.adf_stat), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_Cointegration", "hedge_ratio,spread,adf_stat", &rows); + } else { + eprintln!("gen_golden skip Cointegration"); + } + if let Ok(mut ind) = wickra::CompositeProfile::new(3, 7, 2.0) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.poc, o.vah, o.val), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_CompositeProfile", "poc,vah,val", &rows); + } else { + eprintln!("gen_golden skip CompositeProfile"); + } + { + let mut ind = wickra::DemarkPivots::new(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.pp, o.r1, o.s1), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_DemarkPivots", "pp,r1,s1", &rows); + } + if let Ok(mut ind) = wickra::Donchian::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.upper, o.middle, o.lower), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_Donchian", "upper,middle,lower", &rows); + } else { + eprintln!("gen_golden skip Donchian"); + } + if let Ok(mut ind) = wickra::DonchianStop::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.stop_long, o.stop_short), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_DonchianStop", "stop_long,stop_short", &rows); + } else { + eprintln!("gen_golden skip DonchianStop"); + } + if let Ok(mut ind) = wickra::DoubleBollinger::new(14, 2.0, 0.5) { + let rows: Vec = closes + .iter() + .map(|&x| match ind.update(x) { + Some(o) => format!( + "{},{},{},{},{}", + o.upper_outer, o.upper_inner, o.middle, o.lower_inner, o.lower_outer + ), + None => "nan,nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv( + dir, + "g_DoubleBollinger", + "upper_outer,upper_inner,middle,lower_inner,lower_outer", + &rows, + ); + } else { + eprintln!("gen_golden skip DoubleBollinger"); + } + if let Ok(mut ind) = wickra::ElderRay::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.bull_power, o.bear_power), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_ElderRay", "bull_power,bear_power", &rows); + } else { + eprintln!("gen_golden skip ElderRay"); + } + if let Ok(mut ind) = wickra::Equivolume::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.height, o.width), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_Equivolume", "height,width", &rows); + } else { + eprintln!("gen_golden skip Equivolume"); + } + { + let mut ind = wickra::FibArcs::new(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.arc_382, o.arc_500, o.arc_618), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_FibArcs", "arc_382,arc_500,arc_618", &rows); + } + { + let mut ind = wickra::FibChannel::new(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!( + "{},{},{},{}", + o.base, o.level_618, o.level_1000, o.level_1618 + ), + None => "nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv( + dir, + "g_FibChannel", + "base,level_618,level_1000,level_1618", + &rows, + ); + } + { + let mut ind = wickra::FibConfluence::new(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.price, o.strength), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_FibConfluence", "price,strength", &rows); + } + { + let mut ind = wickra::FibExtension::new(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!( + "{},{},{},{},{}", + o.level_1272, o.level_1414, o.level_1618, o.level_2000, o.level_2618 + ), + None => "nan,nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv( + dir, + "g_FibExtension", + "level_1272,level_1414,level_1618,level_2000,level_2618", + &rows, + ); + } + { + let mut ind = wickra::FibFan::new(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.fan_382, o.fan_500, o.fan_618), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_FibFan", "fan_382,fan_500,fan_618", &rows); + } + { + let mut ind = wickra::FibProjection::new(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!( + "{},{},{},{}", + o.level_618, o.level_1000, o.level_1618, o.level_2618 + ), + None => "nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv( + dir, + "g_FibProjection", + "level_618,level_1000,level_1618,level_2618", + &rows, + ); + } + { + let mut ind = wickra::FibRetracement::new(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!( + "{},{},{},{},{},{},{}", + o.level_0, + o.level_236, + o.level_382, + o.level_500, + o.level_618, + o.level_786, + o.level_1000 + ), + None => "nan,nan,nan,nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv( + dir, + "g_FibRetracement", + "level_0,level_236,level_382,level_500,level_618,level_786,level_1000", + &rows, + ); + } + { + let mut ind = wickra::FibTimeZones::new(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.on_zone, o.bars_to_next), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_FibTimeZones", "on_zone,bars_to_next", &rows); + } + { + let mut ind = wickra::FibonacciPivots::new(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!( + "{},{},{},{},{},{},{}", + o.pp, o.r1, o.r2, o.r3, o.s1, o.s2, o.s3 + ), + None => "nan,nan,nan,nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_FibonacciPivots", "pp,r1,r2,r3,s1,s2,s3", &rows); + } + if let Ok(mut ind) = wickra::FractalChaosBands::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.upper, o.lower), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_FractalChaosBands", "upper,lower", &rows); + } else { + eprintln!("gen_golden skip FractalChaosBands"); + } + if let Ok(mut ind) = wickra::GatorOscillator::new(3, 7, 14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.upper, o.lower), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_GatorOscillator", "upper,lower", &rows); + } else { + eprintln!("gen_golden skip GatorOscillator"); + } + { + let mut ind = wickra::GoldenPocket::new(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.low, o.mid, o.high), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_GoldenPocket", "low,mid,high", &rows); + } + { + let mut ind = wickra::HtPhasor::new(); + let rows: Vec = closes + .iter() + .map(|&x| match ind.update(x) { + Some(o) => format!("{},{}", o.inphase, o.quadrature), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_HtPhasor", "inphase,quadrature", &rows); + } + { + let mut ind = wickra::HeikinAshi::new(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{},{}", o.open, o.high, o.low, o.close), + None => "nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_HeikinAshi", "open,high,low,close", &rows); + } + if let Ok(mut ind) = wickra::HighLowVolumeNodes::new(3, 7) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.hvn, o.lvn), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_HighLowVolumeNodes", "hvn,lvn", &rows); + } else { + eprintln!("gen_golden skip HighLowVolumeNodes"); + } + if let Ok(mut ind) = wickra::HurstChannel::new(14, 2.0) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.upper, o.middle, o.lower), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_HurstChannel", "upper,middle,lower", &rows); + } else { + eprintln!("gen_golden skip HurstChannel"); + } + if let Ok(mut ind) = wickra::InitialBalance::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.high, o.low), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_InitialBalance", "high,low", &rows); + } else { + eprintln!("gen_golden skip InitialBalance"); + } + if let Ok(mut ind) = wickra::Kst::new(3, 7, 14, 28, 35, 42, 56, 63, 70) { + let rows: Vec = closes + .iter() + .map(|&x| match ind.update(x) { + Some(o) => format!("{},{}", o.kst, o.signal), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_Kst", "kst,signal", &rows); + } else { + eprintln!("gen_golden skip Kst"); + } + if let Ok(mut ind) = wickra::KalmanHedgeRatio::new(2.0, 0.5) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update((c.close, c.open)) { + Some(o) => format!("{},{},{}", o.hedge_ratio, o.intercept, o.spread), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv( + dir, + "g_KalmanHedgeRatio", + "hedge_ratio,intercept,spread", + &rows, + ); + } else { + eprintln!("gen_golden skip KalmanHedgeRatio"); + } + if let Ok(mut ind) = wickra::KasePermissionStochastic::new(3, 7) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.fast, o.slow), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_KasePermissionStochastic", "fast,slow", &rows); + } else { + eprintln!("gen_golden skip KasePermissionStochastic"); + } + if let Ok(mut ind) = wickra::Keltner::new(3, 7, 2.0) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.upper, o.middle, o.lower), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_Keltner", "upper,middle,lower", &rows); + } else { + eprintln!("gen_golden skip Keltner"); + } + if let Ok(mut ind) = wickra::Mama::new(2.0, 0.5) { + let rows: Vec = closes + .iter() + .map(|&x| match ind.update(x) { + Some(o) => format!("{},{}", o.mama, o.fama), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_Mama", "mama,fama", &rows); + } else { + eprintln!("gen_golden skip Mama"); + } + if let Ok(mut ind) = wickra::MaEnvelope::new(14, 2.0) { + let rows: Vec = closes + .iter() + .map(|&x| match ind.update(x) { + Some(o) => format!("{},{},{}", o.upper, o.middle, o.lower), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_MaEnvelope", "upper,middle,lower", &rows); + } else { + eprintln!("gen_golden skip MaEnvelope"); + } + if let Ok(mut ind) = wickra::MedianChannel::new(14, 2.0) { + let rows: Vec = closes + .iter() + .map(|&x| match ind.update(x) { + Some(o) => format!("{},{},{}", o.upper, o.middle, o.lower), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_MedianChannel", "upper,middle,lower", &rows); + } else { + eprintln!("gen_golden skip MedianChannel"); + } + if let Ok(mut ind) = wickra::ModifiedMaStop::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.value, o.direction), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_ModifiedMaStop", "value,direction", &rows); + } else { + eprintln!("gen_golden skip ModifiedMaStop"); + } + if let Ok(mut ind) = wickra::MurreyMathLines::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!( + "{},{},{},{},{},{},{},{},{}", + o.mm8_8, o.mm7_8, o.mm6_8, o.mm5_8, o.mm4_8, o.mm3_8, o.mm2_8, o.mm1_8, o.mm0_8 + ), + None => "nan,nan,nan,nan,nan,nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv( + dir, + "g_MurreyMathLines", + "mm8_8,mm7_8,mm6_8,mm5_8,mm4_8,mm3_8,mm2_8,mm1_8,mm0_8", + &rows, + ); + } else { + eprintln!("gen_golden skip MurreyMathLines"); + } + if let Ok(mut ind) = wickra::Nrtr::new(2.0) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.value, o.direction), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_Nrtr", "value,direction", &rows); + } else { + eprintln!("gen_golden skip Nrtr"); + } + if let Ok(mut ind) = wickra::OpeningRange::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.high, o.low, o.breakout_distance), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_OpeningRange", "high,low,breakout_distance", &rows); + } else { + eprintln!("gen_golden skip OpeningRange"); + } + { + let mut ind = wickra::OvernightIntradayReturn::new(14); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.overnight, o.intraday), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv( + dir, + "g_OvernightIntradayReturn", + "overnight,intraday", + &rows, + ); + } + if let Ok(mut ind) = wickra::ProjectionBands::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.upper, o.middle, o.lower), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_ProjectionBands", "upper,middle,lower", &rows); + } else { + eprintln!("gen_golden skip ProjectionBands"); + } + if let Ok(mut ind) = wickra::Qqe::new(3, 7, 2.0) { + let rows: Vec = closes + .iter() + .map(|&x| match ind.update(x) { + Some(o) => format!("{},{}", o.rsi_ma, o.trailing_line), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_Qqe", "rsi_ma,trailing_line", &rows); + } else { + eprintln!("gen_golden skip Qqe"); + } + if let Ok(mut ind) = wickra::QuartileBands::new(14) { + let rows: Vec = closes + .iter() + .map(|&x| match ind.update(x) { + Some(o) => format!("{},{},{}", o.upper, o.middle, o.lower), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_QuartileBands", "upper,middle,lower", &rows); + } else { + eprintln!("gen_golden skip QuartileBands"); + } + if let Ok(mut ind) = wickra::Rwi::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.high, o.low), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_Rwi", "high,low", &rows); + } else { + eprintln!("gen_golden skip Rwi"); + } + { + let mut ind = wickra::SessionHighLow::new(14); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.high, o.low), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_SessionHighLow", "high,low", &rows); + } + { + let mut ind = wickra::SessionRange::new(14); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.asia, o.eu, o.us), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_SessionRange", "asia,eu,us", &rows); + } + if let Ok(mut ind) = wickra::SmoothedHeikinAshi::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{},{}", o.open, o.high, o.low, o.close), + None => "nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_SmoothedHeikinAshi", "open,high,low,close", &rows); + } else { + eprintln!("gen_golden skip SmoothedHeikinAshi"); + } + if let Ok(mut ind) = wickra::SpreadBollingerBands::new(14, 2.0) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update((c.close, c.open)) { + Some(o) => format!("{},{},{},{}", o.middle, o.upper, o.lower, o.percent_b), + None => "nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv( + dir, + "g_SpreadBollingerBands", + "middle,upper,lower,percent_b", + &rows, + ); + } else { + eprintln!("gen_golden skip SpreadBollingerBands"); + } + if let Ok(mut ind) = wickra::StandardErrorBands::new(14, 2.0) { + let rows: Vec = closes + .iter() + .map(|&x| match ind.update(x) { + Some(o) => format!("{},{},{}", o.upper, o.middle, o.lower), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_StandardErrorBands", "upper,middle,lower", &rows); + } else { + eprintln!("gen_golden skip StandardErrorBands"); + } + if let Ok(mut ind) = wickra::StarcBands::new(3, 7, 2.0) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.upper, o.middle, o.lower), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_StarcBands", "upper,middle,lower", &rows); + } else { + eprintln!("gen_golden skip StarcBands"); + } + if let Ok(mut ind) = wickra::Stochastic::new(3, 7) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.k, o.d), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_Stochastic", "k,d", &rows); + } else { + eprintln!("gen_golden skip Stochastic"); + } + if let Ok(mut ind) = wickra::SuperTrend::new(14, 2.0) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.value, o.direction), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_SuperTrend", "value,direction", &rows); + } else { + eprintln!("gen_golden skip SuperTrend"); + } + if let Ok(mut ind) = wickra::TdLines::new(3, 7) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.resistance, o.support), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_TdLines", "resistance,support", &rows); + } else { + eprintln!("gen_golden skip TdLines"); + } + if let Ok(mut ind) = wickra::TdMovingAverage::new(3, 7) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.st1, o.st2), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_TdMovingAverage", "st1,st2", &rows); + } else { + eprintln!("gen_golden skip TdMovingAverage"); + } + { + let mut ind = wickra::TdRangeProjection::new(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.high, o.low), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_TdRangeProjection", "high,low", &rows); + } + if let Ok(mut ind) = wickra::TdRiskLevel::new(3, 7) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.buy_risk, o.sell_risk), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_TdRiskLevel", "buy_risk,sell_risk", &rows); + } else { + eprintln!("gen_golden skip TdRiskLevel"); + } + if let Ok(mut ind) = wickra::TdSequential::new(3, 7, 14, 28) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.setup, o.countdown, o.direction), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_TdSequential", "setup,countdown,direction", &rows); + } else { + eprintln!("gen_golden skip TdSequential"); + } + if let Ok(mut ind) = wickra::TtmSqueeze::new(14, 2.0, 0.5) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.squeeze, o.momentum), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_TtmSqueeze", "squeeze,momentum", &rows); + } else { + eprintln!("gen_golden skip TtmSqueeze"); + } + if let Ok(mut ind) = wickra::ValueArea::new(3, 7, 2.0) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.poc, o.vah, o.val), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_ValueArea", "poc,vah,val", &rows); + } else { + eprintln!("gen_golden skip ValueArea"); + } + if let Ok(mut ind) = wickra::VolatilityCone::new(3, 7) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!( + "{},{},{},{},{}", + o.current, o.min, o.median, o.max, o.percentile + ), + None => "nan,nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv( + dir, + "g_VolatilityCone", + "current,min,median,max,percentile", + &rows, + ); + } else { + eprintln!("gen_golden skip VolatilityCone"); + } + if let Ok(mut ind) = wickra::VolumeWeightedMacd::new(3, 7, 14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.macd, o.signal, o.histogram), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_VolumeWeightedMacd", "macd,signal,histogram", &rows); + } else { + eprintln!("gen_golden skip VolumeWeightedMacd"); + } + if let Ok(mut ind) = wickra::VolumeWeightedSr::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.support, o.resistance), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_VolumeWeightedSr", "support,resistance", &rows); + } else { + eprintln!("gen_golden skip VolumeWeightedSr"); + } + if let Ok(mut ind) = wickra::Vortex::new(14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.plus, o.minus), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_Vortex", "plus,minus", &rows); + } else { + eprintln!("gen_golden skip Vortex"); + } + if let Ok(mut ind) = wickra::WaveTrend::new(3, 7, 14) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.wt1, o.wt2), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_WaveTrend", "wt1,wt2", &rows); + } else { + eprintln!("gen_golden skip WaveTrend"); + } + { + let mut ind = wickra::WoodiePivots::new(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{},{},{}", o.pp, o.r1, o.r2, o.s1, o.s2), + None => "nan,nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_WoodiePivots", "pp,r1,r2,s1,s2", &rows); + } + if let Ok(mut ind) = wickra::ZeroLagMacd::new(3, 7, 14) { + let rows: Vec = closes + .iter() + .map(|&x| match ind.update(x) { + Some(o) => format!("{},{},{}", o.macd, o.signal, o.histogram), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_ZeroLagMacd", "macd,signal,histogram", &rows); + } else { + eprintln!("gen_golden skip ZeroLagMacd"); + } + if let Ok(mut ind) = wickra::ZigZag::new(2.0) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.swing, o.direction), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_ZigZag", "swing,direction", &rows); + } else { + eprintln!("gen_golden skip ZigZag"); + } +} + +// AUTO-GENERATED constraint-tuned tranche. +#[allow(clippy::too_many_lines)] +fn emit_skips(dir: &Path, candles: &[Candle], closes: &[f64]) { + if let Ok(mut ind) = wickra::Alma::new(9, 0.85, 6.0) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Alma", "Alma", &rows); + } else { + eprintln!("skip2 Alma"); + } + if let Ok(mut ind) = wickra::AutocorrelationPeriodogram::new(10, 48) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv( + dir, + "g_AutocorrelationPeriodogram", + "AutocorrelationPeriodogram", + &rows, + ); + } else { + eprintln!("skip2 AutocorrelationPeriodogram"); + } + if let Ok(mut ind) = wickra::Autocorrelation::new(10, 1) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Autocorrelation", "Autocorrelation", &rows); + } else { + eprintln!("skip2 Autocorrelation"); + } + if let Ok(mut ind) = wickra::BandpassFilter::new(20, 0.3) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_BandpassFilter", "BandpassFilter", &rows); + } else { + eprintln!("skip2 BandpassFilter"); + } + if let Ok(mut ind) = wickra::ConditionalValueAtRisk::new(20, 0.95) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv( + dir, + "g_ConditionalValueAtRisk", + "ConditionalValueAtRisk", + &rows, + ); + } else { + eprintln!("skip2 ConditionalValueAtRisk"); + } + if let Ok(mut ind) = wickra::EmpiricalModeDecomposition::new(20, 0.1) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv( + dir, + "g_EmpiricalModeDecomposition", + "EmpiricalModeDecomposition", + &rows, + ); + } else { + eprintln!("skip2 EmpiricalModeDecomposition"); + } + if let Ok(mut ind) = wickra::EwmaVolatility::new(0.94) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_EwmaVolatility", "EwmaVolatility", &rows); + } else { + eprintln!("skip2 EwmaVolatility"); + } + if let Ok(mut ind) = wickra::Fama::new(0.5, 0.05) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Fama", "Fama", &rows); + } else { + eprintln!("skip2 Fama"); + } + if let Ok(mut ind) = wickra::GeneralizedDema::new(5, 0.7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_GeneralizedDema", "GeneralizedDema", &rows); + } else { + eprintln!("skip2 GeneralizedDema"); + } + if let Ok(mut ind) = wickra::Garch11::new(2e-06, 0.1, 0.88) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Garch11", "Garch11", &rows); + } else { + eprintln!("skip2 Garch11"); + } + if let Ok(mut ind) = wickra::GrangerCausality::new(60, 1) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_GrangerCausality", "GrangerCausality", &rows); + } else { + eprintln!("skip2 GrangerCausality"); + } + if let Ok(mut ind) = wickra::HoltWinters::new(0.5, 0.1) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_HoltWinters", "HoltWinters", &rows); + } else { + eprintln!("skip2 HoltWinters"); + } + if let Ok(mut ind) = wickra::HurstExponent::new(100, 4) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_HurstExponent", "HurstExponent", &rows); + } else { + eprintln!("skip2 HurstExponent"); + } + if let Ok(mut ind) = wickra::Jma::new(7, 0.0, 2) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Jma", "Jma", &rows); + } else { + eprintln!("skip2 Jma"); + } + if let Ok(mut ind) = wickra::LaguerreRsi::new(0.5) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_LaguerreRsi", "LaguerreRsi", &rows); + } else { + eprintln!("skip2 LaguerreRsi"); + } + if let Ok(mut ind) = wickra::Psar::new(0.02, 0.02, 0.2) { + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_Psar", "Psar", &rows); + } else { + eprintln!("skip2 Psar"); + } + if let Ok(mut ind) = wickra::RollingQuantile::new(20, 0.5) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_RollingQuantile", "RollingQuantile", &rows); + } else { + eprintln!("skip2 RollingQuantile"); + } + if let Ok(mut ind) = wickra::SampleEntropy::new(20, 2, 0.2) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_SampleEntropy", "SampleEntropy", &rows); + } else { + eprintln!("skip2 SampleEntropy"); + } + if let Ok(mut ind) = wickra::Stc::new(10, 23, 10, 0.5) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_Stc", "Stc", &rows); + } else { + eprintln!("skip2 Stc"); + } + if let Ok(mut ind) = wickra::T3::new(5, 0.7) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_T3", "T3", &rows); + } else { + eprintln!("skip2 T3"); + } + if let Ok(mut ind) = wickra::ValueAtRisk::new(20, 0.95) { + let rows: Vec = closes.iter().map(|&x| cell(ind.update(x))).collect(); + write_csv(dir, "g_ValueAtRisk", "ValueAtRisk", &rows); + } else { + eprintln!("skip2 ValueAtRisk"); + } + if let Ok(mut ind) = wickra::VarianceRatio::new(60, 2) { + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_VarianceRatio", "VarianceRatio", &rows); + } else { + eprintln!("skip2 VarianceRatio"); + } + if let Ok(mut ind) = wickra::Mama::new(0.5, 0.05) { + let rows: Vec = closes + .iter() + .map(|&x| match ind.update(x) { + Some(o) => format!("{},{}", o.mama, o.fama), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_Mama", "mama,fama", &rows); + } else { + eprintln!("skip2 Mama"); + } + if let Ok(mut ind) = wickra::DoubleBollinger::new(20, 1.0, 2.0) { + let rows: Vec = closes + .iter() + .map(|&x| match ind.update(x) { + Some(o) => format!( + "{},{},{},{},{}", + o.upper_outer, o.upper_inner, o.middle, o.lower_inner, o.lower_outer + ), + None => "nan,nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv( + dir, + "g_DoubleBollinger", + "upper_outer,upper_inner,middle,lower_inner,lower_outer", + &rows, + ); + } else { + eprintln!("skip2 DoubleBollinger"); + } + if let Ok(mut ind) = wickra::BomarBands::new(4, 0.85) { + let rows: Vec = closes + .iter() + .map(|&x| match ind.update(x) { + Some(o) => format!("{},{},{}", o.upper, o.middle, o.lower), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_BomarBands", "upper,middle,lower", &rows); + } else { + eprintln!("skip2 BomarBands"); + } + if let Ok(mut ind) = wickra::Cointegration::new(40, 1) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update((c.close, c.open)) { + Some(o) => format!("{},{},{}", o.hedge_ratio, o.spread, o.adf_stat), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_Cointegration", "hedge_ratio,spread,adf_stat", &rows); + } else { + eprintln!("skip2 Cointegration"); + } + if let Ok(mut ind) = wickra::CompositeProfile::new(20, 24, 0.7) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.poc, o.vah, o.val), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_CompositeProfile", "poc,vah,val", &rows); + } else { + eprintln!("skip2 CompositeProfile"); + } + if let Ok(mut ind) = wickra::KalmanHedgeRatio::new(0.01, 0.001) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update((c.close, c.open)) { + Some(o) => format!("{},{},{}", o.hedge_ratio, o.intercept, o.spread), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv( + dir, + "g_KalmanHedgeRatio", + "hedge_ratio,intercept,spread", + &rows, + ); + } else { + eprintln!("skip2 KalmanHedgeRatio"); + } + if let Ok(mut ind) = wickra::ValueArea::new(20, 50, 0.7) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.poc, o.vah, o.val), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_ValueArea", "poc,vah,val", &rows); + } else { + eprintln!("skip2 ValueArea"); + } + if let Ok(mut ind) = wickra::ZigZag::new(0.02) { + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.swing, o.direction), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_ZigZag", "swing,direction", &rows); + } else { + eprintln!("skip2 ZigZag"); + } +} + +// AUTO-GENERATED missed scalar/multi tranche (single + multi f64 output). +#[allow(clippy::too_many_lines)] +fn emit_missed(dir: &Path, candles: &[Candle], closes: &[f64]) { + { + let mut ind = wickra::AdaptiveLaguerreFilter::new(20).unwrap(); + let rows: Vec = closes.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv( + dir, + "g_AdaptiveLaguerreFilter", + "AdaptiveLaguerreFilter", + &rows, + ); + } + { + let mut ind = wickra::EvenBetterSinewave::new(40, 10).unwrap(); + let rows: Vec = closes.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_EvenBetterSinewave", "EvenBetterSinewave", &rows); + } + { + let mut ind = wickra::HtDcPhase::new(); + let rows: Vec = closes.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_HtDcPhase", "HtDcPhase", &rows); + } + { + let mut ind = wickra::HtTrendMode::new(); + let rows: Vec = closes.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_HtTrendMode", "HtTrendMode", &rows); + } + { + let mut ind = wickra::LinearRegression::new(14).unwrap(); + let rows: Vec = closes.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_LinearRegression", "LinearRegression", &rows); + } + { + let mut ind = wickra::LinRegAngle::new(14).unwrap(); + let rows: Vec = closes.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_LinRegAngle", "LinRegAngle", &rows); + } + { + let mut ind = wickra::LinRegIntercept::new(14).unwrap(); + let rows: Vec = closes.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_LinRegIntercept", "LinRegIntercept", &rows); + } + { + let mut ind = wickra::LinRegSlope::new(14).unwrap(); + let rows: Vec = closes.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_LinRegSlope", "LinRegSlope", &rows); + } + { + let mut ind = wickra::McGinleyDynamic::new(14).unwrap(); + let rows: Vec = closes.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_McGinleyDynamic", "McGinleyDynamic", &rows); + } + { + let mut ind = wickra::PolarizedFractalEfficiency::new(10, 5).unwrap(); + let rows: Vec = closes.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv( + dir, + "g_PolarizedFractalEfficiency", + "PolarizedFractalEfficiency", + &rows, + ); + } + { + let mut ind = wickra::TrendStrengthIndex::new(14).unwrap(); + let rows: Vec = closes.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TrendStrengthIndex", "TrendStrengthIndex", &rows); + } + { + let mut ind = wickra::PairSpreadZScore::new(20, 20).unwrap(); + let rows: Vec = candles + .iter() + .map(|&c| cell(ind.update((c.close, c.open)))) + .collect(); + write_csv(dir, "g_PairSpreadZScore", "PairSpreadZScore", &rows); + } + { + let mut ind = wickra::AverageDailyRange::new(14, 0).unwrap(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_AverageDailyRange", "AverageDailyRange", &rows); + } + { + let mut ind = wickra::ChaikinMoneyFlow::new(20).unwrap(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_ChaikinMoneyFlow", "ChaikinMoneyFlow", &rows); + } + { + let mut ind = wickra::GarmanKlassVolatility::new(20, 252).unwrap(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv( + dir, + "g_GarmanKlassVolatility", + "GarmanKlassVolatility", + &rows, + ); + } + { + let mut ind = wickra::HiLoActivator::new(14).unwrap(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_HiLoActivator", "HiLoActivator", &rows); + } + { + let mut ind = wickra::OvernightGap::new(0); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_OvernightGap", "OvernightGap", &rows); + } + { + let mut ind = wickra::ParkinsonVolatility::new(20, 252).unwrap(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_ParkinsonVolatility", "ParkinsonVolatility", &rows); + } + { + let mut ind = wickra::RogersSatchellVolatility::new(20, 252).unwrap(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv( + dir, + "g_RogersSatchellVolatility", + "RogersSatchellVolatility", + &rows, + ); + } + { + let mut ind = wickra::TdDeMarker::new(14).unwrap(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TdDeMarker", "TdDeMarker", &rows); + } + { + let mut ind = wickra::TdDWave::new(2).unwrap(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TdDWave", "TdDWave", &rows); + } + { + let mut ind = wickra::TurnOfMonth::new(3, 3, 0).unwrap(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_TurnOfMonth", "TurnOfMonth", &rows); + } + { + let mut ind = wickra::VolumePriceTrend::new(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_VolumePriceTrend", "VolumePriceTrend", &rows); + } + { + let mut ind = wickra::RollingVwap::new(14).unwrap(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_RollingVwap", "RollingVwap", &rows); + } + { + let mut ind = wickra::YangZhangVolatility::new(20, 252).unwrap(); + let rows: Vec = candles.iter().map(|&c| cell(ind.update(c))).collect(); + write_csv(dir, "g_YangZhangVolatility", "YangZhangVolatility", &rows); + } + { + let mut ind = wickra::DrawdownDuration::new(); + let rows: Vec = closes + .iter() + .map(|&c| cell(ind.update(c).map(f64::from))) + .collect(); + write_csv(dir, "g_DrawdownDuration", "DrawdownDuration", &rows); + } + { + let mut ind = wickra::BollingerBands::new(20, 2.0).unwrap(); + let rows: Vec = closes + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{},{}", o.upper, o.middle, o.lower, o.stddev), + None => "nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_BollingerBands", "upper,middle,lower,stddev", &rows); + } + { + let mut ind = wickra::LinRegChannel::new(14, 2.0).unwrap(); + let rows: Vec = closes + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.upper, o.middle, o.lower), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_LinRegChannel", "upper,middle,lower", &rows); + } + { + let mut ind = wickra::MacdIndicator::new(12, 26, 9).unwrap(); + let rows: Vec = closes + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.macd, o.signal, o.histogram), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_MacdIndicator", "macd,signal,histogram", &rows); + } + { + let mut ind = wickra::MacdExt::new( + 12, + wickra::MaType::Sma, + 26, + wickra::MaType::Sma, + 9, + wickra::MaType::Sma, + ) + .unwrap(); + let rows: Vec = closes + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.macd, o.signal, o.histogram), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_MacdExt", "macd,signal,histogram", &rows); + } + { + let mut ind = wickra::MacdFix::new(9).unwrap(); + let rows: Vec = closes + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{}", o.macd, o.signal, o.histogram), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_MacdFix", "macd,signal,histogram", &rows); + } + { + let mut ind = wickra::RelativeStrengthAB::new(14, 14).unwrap(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update((c.close, c.open)) { + Some(o) => format!("{},{},{}", o.ratio, o.ratio_ma, o.ratio_rsi), + None => "nan,nan,nan".to_owned(), + }) + .collect(); + write_csv( + dir, + "g_RelativeStrengthAB", + "ratio,ratio_ma,ratio_rsi", + &rows, + ); + } + { + let mut ind = wickra::Camarilla::new(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!( + "{},{},{},{},{},{},{},{},{}", + o.pp, o.r1, o.r2, o.r3, o.r4, o.s1, o.s2, o.s3, o.s4 + ), + None => "nan,nan,nan,nan,nan,nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_Camarilla", "pp,r1,r2,r3,r4,s1,s2,s3,s4", &rows); + } + { + let mut ind = wickra::ElderSafeZone::new(10, 2.0).unwrap(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.value, o.direction), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_ElderSafeZone", "value,direction", &rows); + } + { + let mut ind = wickra::KaseDevStop::new(14, 2.0).unwrap(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", o.value, o.direction), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_KaseDevStop", "value,direction", &rows); + } + { + let mut ind = wickra::VwapStdDevBands::new(2.0).unwrap(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{},{},{}", o.upper, o.middle, o.lower, o.stddev), + None => "nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_VwapStdDevBands", "upper,middle,lower,stddev", &rows); + } +} + +// AUTO-GENERATED exotic-input tranche (DerivativesTick / CrossSection / Trade / TradeQuote / OrderBook). +#[allow(clippy::too_many_lines)] +fn emit_exotic(dir: &Path, candles: &[Candle]) { + use wickra::{ + CrossSection, DerivativesTick, Level, Member, OrderBook, Side, Trade, TradeQuote, + }; + let ticks: Vec = candles + .iter() + .map(|c| { + let funding_rate = (c.close - c.open) / c.close * 0.01; + DerivativesTick::new( + funding_rate, + c.close, + c.close - 0.5, + c.close + 1.0, + c.volume * 10.0, + c.volume * 0.6, + c.volume * 0.4, + c.volume * 0.55, + c.volume * 0.45, + c.high - c.close, + c.close - c.low, + c.timestamp, + ) + .unwrap() + }) + .collect(); + let sections: Vec = candles + .iter() + .map(|c| { + let members: Vec = (0..5) + .map(|j| { + let jf = f64::from(j); + Member::with_signals( + (c.close - c.open) + jf, + c.volume + jf * 10.0, + j % 2 == 0, + j % 3 == 0, + j % 2 == 0, + j % 3 == 0, + ) + }) + .collect(); + CrossSection::new(members, c.timestamp).unwrap() + }) + .collect(); + let trades: Vec = candles + .iter() + .map(|c| { + let side = if c.close >= c.open { + Side::Buy + } else { + Side::Sell + }; + Trade::new(c.close, c.volume, side, c.timestamp).unwrap() + }) + .collect(); + let quotes: Vec = candles + .iter() + .map(|c| { + let side = if c.close >= c.open { + Side::Buy + } else { + Side::Sell + }; + let trade = Trade::new(c.close, c.volume, side, c.timestamp).unwrap(); + TradeQuote::new(trade, c.high.midpoint(c.low)).unwrap() + }) + .collect(); + let books: Vec = candles + .iter() + .map(|c| { + let bids: Vec = (0..5) + .map(|k| { + let kf = f64::from(k + 1); + Level::new(c.close - 0.1 * kf, c.volume / kf).unwrap() + }) + .collect(); + let asks: Vec = (0..5) + .map(|k| { + let kf = f64::from(k + 1); + Level::new(c.close + 0.1 * kf, c.volume * 0.9 / kf).unwrap() + }) + .collect(); + OrderBook::new(bids, asks).unwrap() + }) + .collect(); + { + let mut ind = wickra::CalendarSpread::new(); + let rows: Vec = ticks.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_CalendarSpread", "CalendarSpread", &rows); + } + { + let mut ind = wickra::EstimatedLeverageRatio::new(); + let rows: Vec = ticks.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv( + dir, + "g_EstimatedLeverageRatio", + "EstimatedLeverageRatio", + &rows, + ); + } + { + let mut ind = wickra::FundingBasis::new(); + let rows: Vec = ticks.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_FundingBasis", "FundingBasis", &rows); + } + { + let mut ind = wickra::FundingImpliedApr::new(1095.0).unwrap(); + let rows: Vec = ticks.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_FundingImpliedApr", "FundingImpliedApr", &rows); + } + { + let mut ind = wickra::FundingRate::new(); + let rows: Vec = ticks.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_FundingRate", "FundingRate", &rows); + } + { + let mut ind = wickra::FundingRateMean::new(20).unwrap(); + let rows: Vec = ticks.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_FundingRateMean", "FundingRateMean", &rows); + } + { + let mut ind = wickra::FundingRateZScore::new(20).unwrap(); + let rows: Vec = ticks.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_FundingRateZScore", "FundingRateZScore", &rows); + } + { + let mut ind = wickra::LongShortRatio::new(); + let rows: Vec = ticks.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_LongShortRatio", "LongShortRatio", &rows); + } + { + let mut ind = wickra::OpenInterestDelta::new(); + let rows: Vec = ticks.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_OpenInterestDelta", "OpenInterestDelta", &rows); + } + { + let mut ind = wickra::OIPriceDivergence::new(20).unwrap(); + let rows: Vec = ticks.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_OIPriceDivergence", "OIPriceDivergence", &rows); + } + { + let mut ind = wickra::OiToVolumeRatio::new(); + let rows: Vec = ticks.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_OiToVolumeRatio", "OiToVolumeRatio", &rows); + } + { + let mut ind = wickra::OIWeighted::new(); + let rows: Vec = ticks.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_OIWeighted", "OIWeighted", &rows); + } + { + let mut ind = wickra::OpenInterestMomentum::new(10).unwrap(); + let rows: Vec = ticks.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_OpenInterestMomentum", "OpenInterestMomentum", &rows); + } + { + let mut ind = wickra::PerpetualPremiumIndex::new(); + let rows: Vec = ticks.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv( + dir, + "g_PerpetualPremiumIndex", + "PerpetualPremiumIndex", + &rows, + ); + } + { + let mut ind = wickra::TakerBuySellRatio::new(); + let rows: Vec = ticks.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_TakerBuySellRatio", "TakerBuySellRatio", &rows); + } + { + let mut ind = wickra::TermStructureBasis::new(); + let rows: Vec = ticks.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_TermStructureBasis", "TermStructureBasis", &rows); + } + { + let mut ind = wickra::LiquidationFeatures::new(); + let rows: Vec = ticks + .iter() + .map(|&t| match ind.update(t) { + Some(o) => format!( + "{},{},{},{},{}", + o.long, o.short, o.net, o.total, o.imbalance + ), + None => "nan,nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv( + dir, + "g_LiquidationFeatures", + "long,short,net,total,imbalance", + &rows, + ); + } + { + let mut ind = wickra::AbsoluteBreadthIndex::new(); + let rows: Vec = sections + .iter() + .map(|s| cell(ind.update(s.clone()))) + .collect(); + write_csv(dir, "g_AbsoluteBreadthIndex", "AbsoluteBreadthIndex", &rows); + } + { + let mut ind = wickra::AdvanceDecline::new(); + let rows: Vec = sections + .iter() + .map(|s| cell(ind.update(s.clone()))) + .collect(); + write_csv(dir, "g_AdvanceDecline", "AdvanceDecline", &rows); + } + { + let mut ind = wickra::AdvanceDeclineRatio::new(); + let rows: Vec = sections + .iter() + .map(|s| cell(ind.update(s.clone()))) + .collect(); + write_csv(dir, "g_AdvanceDeclineRatio", "AdvanceDeclineRatio", &rows); + } + { + let mut ind = wickra::AdVolumeLine::new(); + let rows: Vec = sections + .iter() + .map(|s| cell(ind.update(s.clone()))) + .collect(); + write_csv(dir, "g_AdVolumeLine", "AdVolumeLine", &rows); + } + { + let mut ind = wickra::BreadthThrust::new(10).unwrap(); + let rows: Vec = sections + .iter() + .map(|s| cell(ind.update(s.clone()))) + .collect(); + write_csv(dir, "g_BreadthThrust", "BreadthThrust", &rows); + } + { + let mut ind = wickra::BullishPercentIndex::new(); + let rows: Vec = sections + .iter() + .map(|s| cell(ind.update(s.clone()))) + .collect(); + write_csv(dir, "g_BullishPercentIndex", "BullishPercentIndex", &rows); + } + { + let mut ind = wickra::CumulativeVolumeIndex::new(); + let rows: Vec = sections + .iter() + .map(|s| cell(ind.update(s.clone()))) + .collect(); + write_csv( + dir, + "g_CumulativeVolumeIndex", + "CumulativeVolumeIndex", + &rows, + ); + } + { + let mut ind = wickra::HighLowIndex::new(10).unwrap(); + let rows: Vec = sections + .iter() + .map(|s| cell(ind.update(s.clone()))) + .collect(); + write_csv(dir, "g_HighLowIndex", "HighLowIndex", &rows); + } + { + let mut ind = wickra::McClellanOscillator::new(); + let rows: Vec = sections + .iter() + .map(|s| cell(ind.update(s.clone()))) + .collect(); + write_csv(dir, "g_McClellanOscillator", "McClellanOscillator", &rows); + } + { + let mut ind = wickra::McClellanSummationIndex::new(); + let rows: Vec = sections + .iter() + .map(|s| cell(ind.update(s.clone()))) + .collect(); + write_csv( + dir, + "g_McClellanSummationIndex", + "McClellanSummationIndex", + &rows, + ); + } + { + let mut ind = wickra::NewHighsNewLows::new(); + let rows: Vec = sections + .iter() + .map(|s| cell(ind.update(s.clone()))) + .collect(); + write_csv(dir, "g_NewHighsNewLows", "NewHighsNewLows", &rows); + } + { + let mut ind = wickra::PercentAboveMa::new(); + let rows: Vec = sections + .iter() + .map(|s| cell(ind.update(s.clone()))) + .collect(); + write_csv(dir, "g_PercentAboveMa", "PercentAboveMa", &rows); + } + { + let mut ind = wickra::TickIndex::new(); + let rows: Vec = sections + .iter() + .map(|s| cell(ind.update(s.clone()))) + .collect(); + write_csv(dir, "g_TickIndex", "TickIndex", &rows); + } + { + let mut ind = wickra::Trin::new(); + let rows: Vec = sections + .iter() + .map(|s| cell(ind.update(s.clone()))) + .collect(); + write_csv(dir, "g_Trin", "Trin", &rows); + } + { + let mut ind = wickra::UpDownVolumeRatio::new(); + let rows: Vec = sections + .iter() + .map(|s| cell(ind.update(s.clone()))) + .collect(); + write_csv(dir, "g_UpDownVolumeRatio", "UpDownVolumeRatio", &rows); + } + { + let mut ind = wickra::AmihudIlliquidity::new(20).unwrap(); + let rows: Vec = trades.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_AmihudIlliquidity", "AmihudIlliquidity", &rows); + } + { + let mut ind = wickra::CumulativeVolumeDelta::new(); + let rows: Vec = trades.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv( + dir, + "g_CumulativeVolumeDelta", + "CumulativeVolumeDelta", + &rows, + ); + } + { + let mut ind = wickra::Pin::new(20).unwrap(); + let rows: Vec = trades.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_Pin", "Pin", &rows); + } + { + let mut ind = wickra::RollMeasure::new(20).unwrap(); + let rows: Vec = trades.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_RollMeasure", "RollMeasure", &rows); + } + { + let mut ind = wickra::SignedVolume::new(); + let rows: Vec = trades.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_SignedVolume", "SignedVolume", &rows); + } + { + let mut ind = wickra::TradeImbalance::new(20).unwrap(); + let rows: Vec = trades.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_TradeImbalance", "TradeImbalance", &rows); + } + { + let mut ind = wickra::TradeSignAutocorrelation::new(20).unwrap(); + let rows: Vec = trades.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv( + dir, + "g_TradeSignAutocorrelation", + "TradeSignAutocorrelation", + &rows, + ); + } + { + let mut ind = wickra::Vpin::new(5000.0, 10).unwrap(); + let rows: Vec = trades.iter().map(|&t| cell(ind.update(t))).collect(); + write_csv(dir, "g_Vpin", "Vpin", &rows); + } + { + let mut ind = wickra::KylesLambda::new(20).unwrap(); + let rows: Vec = quotes.iter().map(|&q| cell(ind.update(q))).collect(); + write_csv(dir, "g_KylesLambda", "KylesLambda", &rows); + } + { + let mut ind = wickra::RealizedSpread::new(20).unwrap(); + let rows: Vec = quotes.iter().map(|&q| cell(ind.update(q))).collect(); + write_csv(dir, "g_RealizedSpread", "RealizedSpread", &rows); + } + { + let mut ind = wickra::EffectiveSpread::new(); + let rows: Vec = quotes.iter().map(|&q| cell(ind.update(q))).collect(); + write_csv(dir, "g_EffectiveSpread", "EffectiveSpread", &rows); + } + { + let mut ind = wickra::DepthSlope::new(); + let rows: Vec = books.iter().map(|b| cell(ind.update(b.clone()))).collect(); + write_csv(dir, "g_DepthSlope", "DepthSlope", &rows); + } + { + let mut ind = wickra::Microprice::new(); + let rows: Vec = books.iter().map(|b| cell(ind.update(b.clone()))).collect(); + write_csv(dir, "g_Microprice", "Microprice", &rows); + } + { + let mut ind = wickra::OrderBookImbalanceFull::new(); + let rows: Vec = books.iter().map(|b| cell(ind.update(b.clone()))).collect(); + write_csv( + dir, + "g_OrderBookImbalanceFull", + "OrderBookImbalanceFull", + &rows, + ); + } + { + let mut ind = wickra::OrderBookImbalanceTop1::new(); + let rows: Vec = books.iter().map(|b| cell(ind.update(b.clone()))).collect(); + write_csv( + dir, + "g_OrderBookImbalanceTop1", + "OrderBookImbalanceTop1", + &rows, + ); + } + { + let mut ind = wickra::OrderBookImbalanceTopN::new(5).unwrap(); + let rows: Vec = books.iter().map(|b| cell(ind.update(b.clone()))).collect(); + write_csv( + dir, + "g_OrderBookImbalanceTopN", + "OrderBookImbalanceTopN", + &rows, + ); + } + { + let mut ind = wickra::OrderFlowImbalance::new(20).unwrap(); + let rows: Vec = books.iter().map(|b| cell(ind.update(b.clone()))).collect(); + write_csv(dir, "g_OrderFlowImbalance", "OrderFlowImbalance", &rows); + } + { + let mut ind = wickra::QuotedSpread::new(); + let rows: Vec = books.iter().map(|b| cell(ind.update(b.clone()))).collect(); + write_csv(dir, "g_QuotedSpread", "QuotedSpread", &rows); + } +} + +// AUTO-GENERATED special multi-output tranche (Option / integer fields). +fn emit_special(dir: &Path, candles: &[Candle]) { + { + let mut ind = wickra::Ichimoku::new(9, 26, 52, 26).unwrap(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!( + "{},{},{},{},{}", + cell(o.tenkan), + cell(o.kijun), + cell(o.senkou_a), + cell(o.senkou_b), + cell(o.chikou) + ), + None => "nan,nan,nan,nan,nan".to_owned(), + }) + .collect(); + write_csv( + dir, + "g_Ichimoku", + "tenkan,kijun,senkou_a,senkou_b,chikou", + &rows, + ); + } + { + let mut ind = wickra::WilliamsFractals::new(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update(c) { + Some(o) => format!("{},{}", cell(o.up), cell(o.down)), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_WilliamsFractals", "up,down", &rows); + } + { + let mut ind = wickra::LeadLagCrossCorrelation::new(20, 10).unwrap(); + let rows: Vec = candles + .iter() + .map(|&c| match ind.update((c.close, c.open)) { + Some(o) => format!("{},{}", o.lag, o.correlation), + None => "nan,nan".to_owned(), + }) + .collect(); + write_csv(dir, "g_LeadLagCrossCorrelation", "lag,correlation", &rows); + } +} + +// AUTO-GENERATED profile tranche (variable-length histogram output, fixed width +// per configuration). The CSV header is a single placeholder token; each data +// row holds the flattened output (`bins` for time/volume profiles, prefixed by +// `price_low,price_high` for the price-binned TPO/volume profiles). +fn emit_profiles(dir: &Path, candles: &[Candle]) { + fn bins_row(bins: &[f64]) -> String { + bins.iter() + .map(|b| format!("{b}")) + .collect::>() + .join(",") + } + fn price_bins_row(price_low: f64, price_high: f64, bins: &[f64]) -> String { + format!("{price_low},{price_high},{}", bins_row(bins)) + } + fn nan_row(width: usize) -> String { + vec!["nan"; width].join(",") + } + { + let mut ind = wickra::TimeOfDayReturnProfile::new(24, 0).unwrap(); + let rows: Vec = candles + .iter() + .map(|&c| { + ind.update(c) + .map_or_else(|| nan_row(24), |o| bins_row(&o.bins)) + }) + .collect(); + write_csv(dir, "g_TimeOfDayReturnProfile", "profile", &rows); + } + { + let mut ind = wickra::IntradayVolatilityProfile::new(24, 0).unwrap(); + let rows: Vec = candles + .iter() + .map(|&c| { + ind.update(c) + .map_or_else(|| nan_row(24), |o| bins_row(&o.bins)) + }) + .collect(); + write_csv(dir, "g_IntradayVolatilityProfile", "profile", &rows); + } + { + let mut ind = wickra::VolumeByTimeProfile::new(24, 0).unwrap(); + let rows: Vec = candles + .iter() + .map(|&c| { + ind.update(c) + .map_or_else(|| nan_row(24), |o| bins_row(&o.bins)) + }) + .collect(); + write_csv(dir, "g_VolumeByTimeProfile", "profile", &rows); + } + { + let mut ind = wickra::DayOfWeekProfile::new(0); + let rows: Vec = candles + .iter() + .map(|&c| { + ind.update(c) + .map_or_else(|| nan_row(7), |o| bins_row(&o.bins)) + }) + .collect(); + write_csv(dir, "g_DayOfWeekProfile", "profile", &rows); + } + { + let mut ind = wickra::TpoProfile::new(30, 50).unwrap(); + let rows: Vec = candles + .iter() + .map(|&c| { + ind.update(c).map_or_else( + || nan_row(52), + |o| price_bins_row(o.price_low, o.price_high, &o.counts), + ) + }) + .collect(); + write_csv(dir, "g_TpoProfile", "profile", &rows); + } + { + let mut ind = wickra::VolumeProfile::new(20, 50).unwrap(); + let rows: Vec = candles + .iter() + .map(|&c| { + ind.update(c).map_or_else( + || nan_row(52), + |o| price_bins_row(o.price_low, o.price_high, &o.bins), + ) + }) + .collect(); + write_csv(dir, "g_VolumeProfile", "profile", &rows); + } +} + +// AUTO-GENERATED alt-chart-bars + footprint tranche (variable bar count per +// candle). Each row holds every bar completed on that candle, flattened; an +// empty row means no bar closed. Close-driven builders see a flat +// `Candle(close, close, close, close, 1.0, 0)`, mirroring the binding feed. +#[allow(clippy::too_many_lines)] +fn emit_bars(dir: &Path, candles: &[Candle]) { + use wickra::BarBuilder; + let flat = |c: &Candle| Candle::new(c.close, c.close, c.close, c.close, 1.0, 0).unwrap(); + let novol = |c: &Candle| Candle::new(c.open, c.high, c.low, c.close, 1.0, 0).unwrap(); + let withvol = |c: &Candle| Candle::new(c.open, c.high, c.low, c.close, c.volume, 0).unwrap(); + { + let mut b = wickra::RenkoBars::new(2.0).unwrap(); + let rows: Vec = candles + .iter() + .map(|c| { + b.update(flat(c)) + .iter() + .map(|x| format!("{},{},{}", x.open, x.close, i64::from(x.direction))) + .collect::>() + .join(",") + }) + .collect(); + write_csv(dir, "g_RenkoBars", "bars", &rows); + } + { + let mut b = wickra::KagiBars::new(2.0).unwrap(); + let rows: Vec = candles + .iter() + .map(|c| { + b.update(flat(c)) + .iter() + .map(|x| format!("{},{},{}", x.start, x.end, i64::from(x.direction))) + .collect::>() + .join(",") + }) + .collect(); + write_csv(dir, "g_KagiBars", "bars", &rows); + } + { + let mut b = wickra::PointAndFigureBars::new(2.0, 3).unwrap(); + let rows: Vec = candles + .iter() + .map(|c| { + b.update(flat(c)) + .iter() + .map(|x| format!("{},{},{}", i64::from(x.direction), x.high, x.low)) + .collect::>() + .join(",") + }) + .collect(); + write_csv(dir, "g_PointAndFigureBars", "bars", &rows); + } + { + let mut b = wickra::RangeBars::new(2.0).unwrap(); + let rows: Vec = candles + .iter() + .map(|c| { + b.update(flat(c)) + .iter() + .map(|x| format!("{},{},{}", x.open, x.close, i64::from(x.direction))) + .collect::>() + .join(",") + }) + .collect(); + write_csv(dir, "g_RangeBars", "bars", &rows); + } + { + let mut b = wickra::ThreeLineBreakBars::new(3).unwrap(); + let rows: Vec = candles + .iter() + .map(|c| { + b.update(flat(c)) + .iter() + .map(|x| format!("{},{},{}", x.open, x.close, i64::from(x.direction))) + .collect::>() + .join(",") + }) + .collect(); + write_csv(dir, "g_ThreeLineBreakBars", "bars", &rows); + } + { + let mut b = wickra::ImbalanceBars::new(5.0).unwrap(); + let rows: Vec = candles + .iter() + .map(|c| { + b.update(novol(c)) + .iter() + .map(|x| { + format!( + "{},{},{},{},{},{}", + x.open, + x.high, + x.low, + x.close, + x.imbalance, + i64::from(x.direction) + ) + }) + .collect::>() + .join(",") + }) + .collect(); + write_csv(dir, "g_ImbalanceBars", "bars", &rows); + } + { + let mut b = wickra::RunBars::new(3).unwrap(); + let rows: Vec = candles + .iter() + .map(|c| { + b.update(novol(c)) + .iter() + .map(|x| { + format!( + "{},{},{},{},{},{}", + x.open, + x.high, + x.low, + x.close, + x.length, + i64::from(x.direction) + ) + }) + .collect::>() + .join(",") + }) + .collect(); + write_csv(dir, "g_RunBars", "bars", &rows); + } + { + let mut b = wickra::DollarBars::new(50000.0).unwrap(); + let rows: Vec = candles + .iter() + .map(|c| { + b.update(withvol(c)) + .iter() + .map(|x| { + format!( + "{},{},{},{},{},{}", + x.open, x.high, x.low, x.close, x.volume, x.dollar + ) + }) + .collect::>() + .join(",") + }) + .collect(); + write_csv(dir, "g_DollarBars", "bars", &rows); + } + { + let mut b = wickra::TickBars::new(2).unwrap(); + let rows: Vec = candles + .iter() + .map(|c| { + b.update(withvol(c)) + .iter() + .map(|x| format!("{},{},{},{},{}", x.open, x.high, x.low, x.close, x.volume)) + .collect::>() + .join(",") + }) + .collect(); + write_csv(dir, "g_TickBars", "bars", &rows); + } + { + let mut b = wickra::VolumeBars::new(500.0).unwrap(); + let rows: Vec = candles + .iter() + .map(|c| { + b.update(withvol(c)) + .iter() + .map(|x| format!("{},{},{},{},{}", x.open, x.high, x.low, x.close, x.volume)) + .collect::>() + .join(",") + }) + .collect(); + write_csv(dir, "g_VolumeBars", "bars", &rows); + } + { + use wickra::{Indicator, Side, Trade}; + let mut fp = wickra::Footprint::new(1.0).unwrap(); + let rows: Vec = candles + .iter() + .map(|c| { + let side = if c.close >= c.open { + Side::Buy + } else { + Side::Sell + }; + let trade = Trade::new(c.close, c.volume, side, c.timestamp).unwrap(); + fp.update(trade).map_or_else(String::new, |o| { + o.levels + .iter() + .map(|x| format!("{},{},{}", x.price, x.bid_vol, x.ask_vol)) + .collect::>() + .join(",") + }) + }) + .collect(); + write_csv(dir, "g_Footprint", "footprint", &rows); + } +} diff --git a/testdata/golden/ad_oscillator.csv b/testdata/golden/ad_oscillator.csv new file mode 100644 index 00000000..6a04ac39 --- /dev/null +++ b/testdata/golden/ad_oscillator.csv @@ -0,0 +1,81 @@ +ad_oscillator +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-8.707352694334602 +-9.55383489048154 +-10.14583263837026 +-7.716297064947573 +-5.415123860960578 +-2.4582949833648513 +1.089975121991027 +4.696280572705112 +8.134366418062353 +11.139886165841459 +13.441608928194814 +14.831171905898678 +15.682268342180382 +15.9374382006224 +15.375320862892893 +11.844484625612038 +8.060314754372618 +4.217673873654952 +0.5154190742606168 +-2.897345501480764 +-5.727866727021226 +-7.735401540219346 +-8.752721804087948 +-9.182159376975637 +-6.2632569344388855 +-3.1449666933596028 +-0.30319497786799054 +2.9959756573154515 +6.422574509168438 +9.675090799346341 +12.465531880413298 +14.538632000083673 +15.690164238983918 +15.79822259186901 +15.242096487702092 +14.78004441080553 +11.364799581360547 +7.9100904036895905 +4.222306132949534 +0.5339213340415121 +-2.8476220551432476 +-5.631827518096841 +-7.747932992047389 +-9.797710430835835 +-11.339764291930237 +-9.268768456321464 +-6.970170355782635 +-3.9039149984445523 +-0.24018851807128883 +3.553124481651839 +7.187932205193405 +10.357360760324106 +12.796107189912675 +14.304138194947562 +14.76455851338833 +14.345553629020067 +13.857179803145186 +9.526827762286814 +5.950187351572687 +2.4261734293132875 +-1.0908438344866767 +-4.283755254915981 +-6.864403056782976 +-8.599321150467368 +-9.348752590786908 +-9.97346349734272 +-7.574008310030209 diff --git a/testdata/golden/average_drawdown.csv b/testdata/golden/average_drawdown.csv new file mode 100644 index 00000000..3a4d6df8 --- /dev/null +++ b/testdata/golden/average_drawdown.csv @@ -0,0 +1,81 @@ +average_drawdown +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.1331735000951348 +0.1331735000951348 +0.1331735000951348 +0.1331735000951348 +0.1331735000951348 +0.1331735000951348 +0.1331735000951348 +0.12848591667244894 +0.11764684482941928 +0.05343916178664985 +0.04921355423392666 +0.04636884595497022 +0.04514688029877185 +0.045815749429085506 +0.048602879867116276 +0.10712469987165406 +0.11766221882444922 +0.12182138508985806 +0.12182138508985806 +0.12182138508985806 +0.12182138508985806 +0.12182138508985806 +0.12182138508985806 +0.12182138508985806 +0.12182138508985806 +0.12182138508985806 +0.12182138508985806 +0.12182138508985806 +0.11714256410361094 +0.106819842069383 +0.048495266448839086 +0.04469198482259159 +0.04221729767595633 +0.04129261916801016 +0.04214212542806673 +0.04493167704509762 +0.09931745531053977 +0.10872826720736029 +0.11220718102346297 +0.11220718102346297 +0.11220718102346297 +0.11220718102346297 +0.11220718102346297 +0.11220718102346297 +0.11220718102346297 +0.11220718102346297 +0.11220718102346297 +0.11220718102346297 +0.11220718102346297 +0.10753903894104662 +0.09766728005121854 +0.04432515342740658 +0.0408846402070768 +0.03872168033510641 +0.038038413171863426 +0.03902283524154844 +0.041793273597892346 +0.09261212521030097 +0.10105646093429439 +0.10395200934035767 +0.10395200934035767 diff --git a/testdata/golden/awesome_oscillator_histogram.csv b/testdata/golden/awesome_oscillator_histogram.csv new file mode 100644 index 00000000..666bfe37 --- /dev/null +++ b/testdata/golden/awesome_oscillator_histogram.csv @@ -0,0 +1,81 @@ +awesome_oscillator_histogram +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-2.5465708339042976 +-2.3455680907694614 +-1.9183114349650765 +-1.2944880271234354 +-0.5275159653568977 +0.30966275885398886 +1.1321827319644342 +1.853304497311072 +2.3954107601774837 +2.7001719302630107 +2.736181583567415 +2.502786052996541 +2.0295153145464155 +1.371319641160568 +0.600557921537316 +-0.20278694033696354 +-0.9609784199580531 +-1.6069335072552065 +-2.0900573641307005 +-2.379022914620819 +-2.4616730624015304 +-2.3427633455721946 +-2.040565227680645 +-1.5833610703260206 +-1.0066024302738725 +-0.3510627241916069 +0.3381737686129185 +1.0124404584062603 +1.6206771076918614 +2.1117457548869396 +2.438216711865607 +2.5614779053997694 +2.4574975201079496 +2.122158747547033 +1.5749095562668458 +0.8595979048638469 +0.04178796738165147 +-0.7975047848210863 +-1.5710000605662628 +-2.1959628533200544 +-2.604933699888676 +-2.754602894965899 +-2.631338600597104 +-2.25246876630203 +-1.6631866243396303 +-0.9297348570175075 diff --git a/testdata/golden/bars_manifest.json b/testdata/golden/bars_manifest.json new file mode 100644 index 00000000..342e460e --- /dev/null +++ b/testdata/golden/bars_manifest.json @@ -0,0 +1,91 @@ +[ + { + "canonical": "RenkoBars", + "native": "RenkoBars", + "params": [ + 2.0 + ], + "feed": "close" + }, + { + "canonical": "KagiBars", + "native": "KagiBars", + "params": [ + 2.0 + ], + "feed": "close" + }, + { + "canonical": "PointAndFigureBars", + "native": "PointAndFigureBars", + "params": [ + 2.0, + 3 + ], + "feed": "close" + }, + { + "canonical": "RangeBars", + "native": "RangeBars", + "params": [ + 2.0 + ], + "feed": "close" + }, + { + "canonical": "ThreeLineBreakBars", + "native": "ThreeLineBreakBars", + "params": [ + 3 + ], + "feed": "close" + }, + { + "canonical": "ImbalanceBars", + "native": "ImbalanceBars", + "params": [ + 5.0 + ], + "feed": "candle4" + }, + { + "canonical": "RunBars", + "native": "RunBars", + "params": [ + 3 + ], + "feed": "candle4" + }, + { + "canonical": "DollarBars", + "native": "DollarBars", + "params": [ + 50000.0 + ], + "feed": "candle5" + }, + { + "canonical": "TickBars", + "native": "TickBars", + "params": [ + 2 + ], + "feed": "candle5" + }, + { + "canonical": "VolumeBars", + "native": "VolumeBars", + "params": [ + 500.0 + ], + "feed": "candle5" + }, + { + "canonical": "Footprint", + "native": "Footprint", + "params": [ + 1.0 + ], + "feed": "trade" + } +] \ No newline at end of file diff --git a/testdata/golden/exotic_manifest.json b/testdata/golden/exotic_manifest.json new file mode 100644 index 00000000..b088b4f3 --- /dev/null +++ b/testdata/golden/exotic_manifest.json @@ -0,0 +1,364 @@ +{ + "deriv": [ + { + "canonical": "CalendarSpread", + "native": "CalendarSpread", + "params": [], + "args": [ + "futures_price", + "mark_price" + ] + }, + { + "canonical": "EstimatedLeverageRatio", + "native": "EstimatedLeverageRatio", + "params": [], + "args": [ + "open_interest", + "long_size", + "short_size" + ] + }, + { + "canonical": "FundingBasis", + "native": "FundingBasis", + "params": [], + "args": [ + "mark_price", + "index_price" + ] + }, + { + "canonical": "FundingImpliedApr", + "native": "FundingImpliedApr", + "params": [ + 1095.0 + ], + "args": [ + "funding_rate" + ] + }, + { + "canonical": "FundingRate", + "native": "FundingRate", + "params": [], + "args": [ + "funding_rate" + ] + }, + { + "canonical": "FundingRateMean", + "native": "FundingRateMean", + "params": [ + 20 + ], + "args": [ + "funding_rate" + ] + }, + { + "canonical": "FundingRateZScore", + "native": "FundingRateZScore", + "params": [ + 20 + ], + "args": [ + "funding_rate" + ] + }, + { + "canonical": "LongShortRatio", + "native": "LongShortRatio", + "params": [], + "args": [ + "long_size", + "short_size" + ] + }, + { + "canonical": "OpenInterestDelta", + "native": "OpenInterestDelta", + "params": [], + "args": [ + "open_interest" + ] + }, + { + "canonical": "OIPriceDivergence", + "native": "OIPriceDivergence", + "params": [ + 20 + ], + "args": [ + "open_interest", + "mark_price" + ] + }, + { + "canonical": "OiToVolumeRatio", + "native": "OiToVolumeRatio", + "params": [], + "args": [ + "open_interest", + "taker_buy_volume", + "taker_sell_volume" + ] + }, + { + "canonical": "OIWeighted", + "native": "OIWeighted", + "params": [], + "args": [ + "mark_price", + "open_interest" + ] + }, + { + "canonical": "OpenInterestMomentum", + "native": "OpenInterestMomentum", + "params": [ + 10 + ], + "args": [ + "open_interest" + ] + }, + { + "canonical": "PerpetualPremiumIndex", + "native": "PerpetualPremiumIndex", + "params": [], + "args": [ + "mark_price", + "index_price" + ] + }, + { + "canonical": "TakerBuySellRatio", + "native": "TakerBuySellRatio", + "params": [], + "args": [ + "taker_buy_volume", + "taker_sell_volume" + ] + }, + { + "canonical": "TermStructureBasis", + "native": "TermStructureBasis", + "params": [], + "args": [ + "futures_price", + "index_price" + ] + }, + { + "canonical": "LiquidationFeatures", + "native": "LiquidationFeatures", + "params": [], + "args": [ + "long_liquidation", + "short_liquidation" + ], + "n": 5 + } + ], + "cross": [ + { + "canonical": "AbsoluteBreadthIndex", + "native": "AbsoluteBreadthIndex", + "params": [] + }, + { + "canonical": "AdvanceDecline", + "native": "AdvanceDecline", + "params": [] + }, + { + "canonical": "AdvanceDeclineRatio", + "native": "AdvanceDeclineRatio", + "params": [] + }, + { + "canonical": "AdVolumeLine", + "native": "AdVolumeLine", + "params": [] + }, + { + "canonical": "BreadthThrust", + "native": "BreadthThrust", + "params": [ + 10 + ] + }, + { + "canonical": "BullishPercentIndex", + "native": "BullishPercentIndex", + "params": [], + "extra": "on_buy_signal" + }, + { + "canonical": "CumulativeVolumeIndex", + "native": "CumulativeVolumeIndex", + "params": [] + }, + { + "canonical": "HighLowIndex", + "native": "HighLowIndex", + "params": [ + 10 + ] + }, + { + "canonical": "McClellanOscillator", + "native": "McClellanOscillator", + "params": [] + }, + { + "canonical": "McClellanSummationIndex", + "native": "McClellanSummationIndex", + "params": [] + }, + { + "canonical": "NewHighsNewLows", + "native": "NewHighsNewLows", + "params": [] + }, + { + "canonical": "PercentAboveMa", + "native": "PercentAboveMa", + "params": [], + "extra": "above_ma" + }, + { + "canonical": "TickIndex", + "native": "TickIndex", + "params": [] + }, + { + "canonical": "Trin", + "native": "Trin", + "params": [] + }, + { + "canonical": "UpDownVolumeRatio", + "native": "UpDownVolumeRatio", + "params": [] + } + ], + "trade": [ + { + "canonical": "AmihudIlliquidity", + "native": "AmihudIlliquidity", + "params": [ + 20 + ] + }, + { + "canonical": "CumulativeVolumeDelta", + "native": "CumulativeVolumeDelta", + "params": [] + }, + { + "canonical": "Pin", + "native": "Pin", + "params": [ + 20 + ] + }, + { + "canonical": "RollMeasure", + "native": "RollMeasure", + "params": [ + 20 + ] + }, + { + "canonical": "SignedVolume", + "native": "SignedVolume", + "params": [] + }, + { + "canonical": "TradeImbalance", + "native": "TradeImbalance", + "params": [ + 20 + ] + }, + { + "canonical": "TradeSignAutocorrelation", + "native": "TradeSignAutocorrelation", + "params": [ + 20 + ] + }, + { + "canonical": "Vpin", + "native": "Vpin", + "params": [ + 5000.0, + 10 + ] + } + ], + "trademid": [ + { + "canonical": "KylesLambda", + "native": "KylesLambda", + "params": [ + 20 + ] + }, + { + "canonical": "RealizedSpread", + "native": "RealizedSpread", + "params": [ + 20 + ] + }, + { + "canonical": "EffectiveSpread", + "native": "EffectiveSpread", + "params": [] + } + ], + "ob": [ + { + "canonical": "DepthSlope", + "native": "DepthSlope", + "params": [] + }, + { + "canonical": "Microprice", + "native": "Microprice", + "params": [] + }, + { + "canonical": "OrderBookImbalanceFull", + "native": "OrderBookImbalanceFull", + "params": [] + }, + { + "canonical": "OrderBookImbalanceTop1", + "native": "OrderBookImbalanceTop1", + "params": [] + }, + { + "canonical": "OrderBookImbalanceTopN", + "native": "OrderBookImbalanceTopN", + "params": [ + 5 + ] + }, + { + "canonical": "OrderFlowImbalance", + "native": "OrderFlowImbalance", + "params": [ + 20 + ] + }, + { + "canonical": "QuotedSpread", + "native": "QuotedSpread", + "params": [] + } + ] +} \ No newline at end of file diff --git a/testdata/golden/g_AbandonedBaby.csv b/testdata/golden/g_AbandonedBaby.csv new file mode 100644 index 00000000..f2383626 --- /dev/null +++ b/testdata/golden/g_AbandonedBaby.csv @@ -0,0 +1,81 @@ +AbandonedBaby +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Abcd.csv b/testdata/golden/g_Abcd.csv new file mode 100644 index 00000000..1ea97bec --- /dev/null +++ b/testdata/golden/g_Abcd.csv @@ -0,0 +1,81 @@ +Abcd +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_AbsoluteBreadthIndex.csv b/testdata/golden/g_AbsoluteBreadthIndex.csv new file mode 100644 index 00000000..bb2466c0 --- /dev/null +++ b/testdata/golden/g_AbsoluteBreadthIndex.csv @@ -0,0 +1,81 @@ +AbsoluteBreadthIndex +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +3 diff --git a/testdata/golden/g_AccelerationBands.csv b/testdata/golden/g_AccelerationBands.csv new file mode 100644 index 00000000..a1ac8b84 --- /dev/null +++ b/testdata/golden/g_AccelerationBands.csv @@ -0,0 +1,81 @@ +upper,middle,lower +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +112.00454229927934,107.082865308575,102.1633636879963 +111.903996698001,106.96031118542241,102.03702207594756 +111.48149095236647,106.55098952518925,101.67783115273905 +110.84753008292738,105.93612732359576,101.12981477034926 +110.1823135395352,105.21531190077062,100.40326913125591 +109.5036401798982,104.49759506253974,99.68310613110404 +108.96140873233165,103.89175182739567,99.03055716743253 +108.55757771159065,103.49656387805487,98.63355958617213 +108.37119784452737,103.39199568793734,98.57524233498944 +108.48123056464149,103.63205153291037,98.8947106702469 +109.13355090120591,104.23995145016349,99.41036676194948 +110.16562981720305,105.20605706144154,100.27299449048978 +111.46754612622676,106.48873254066868,101.51564231169665 +112.96480536016107,108.01806381828972,103.07772074367713 +114.59091724799116,109.7021037968819,104.84319176799882 +116.31238287778524,111.4350857115261,106.62930322893273 +118.02171523469391,113.10687095991703,108.31262995838041 +119.60041387832072,114.61278745568676,109.79025736162829 +120.86843833251953,115.86297967414018,111.04856243742181 +121.84199343121688,116.79043517866376,111.93416142447509 +122.39011307800129,117.35697064210828,112.49710053406037 +122.50576329657846,117.55664264968355,112.73761870284666 +122.28492982985878,117.41627860650068,112.6261751502832 +121.88410160023147,116.99308032537222,112.13535105079109 +121.32841892406745,116.36951435923494,111.41502979189917 +120.62769249435505,115.64594550958222,110.66031870509737 +119.88266208381762,114.93167153765809,109.99034859761083 +119.21334803236513,114.33515992096163,109.49959706481589 +118.84010683817569,113.9543587765253,109.15910992089735 +118.84698966435758,113.86794744733447,109.03065352633098 +119.18085830401883,114.12830831094557,109.25699419733856 +119.81567295627272,114.75684761770661,109.89580906685411 +120.76326521267524,115.742083334167,110.90944997004836 +122.03354824467185,117.04067079892921,112.20463572045877 +123.49186499228664,118.58127457216008,113.77854615433921 +125.15541127136517,120.2709406179764,115.44316740240318 +126.89365061452054,122.00339961162967,117.12777224548434 +128.6218453824203,123.66855966178939,118.70771114897195 +130.13799798652042,125.16234049131411,120.17901541980844 +131.34234704048916,126.39597061843133,121.46331658347619 +132.17765388899457,127.30391704882051,122.48228740200413 +132.7172572879352,127.84973914282192,123.08320478902942 +133.0219100353167,128.0293437492481,123.186349583904 +132.93455091218237,127.87135083438908,122.98973058574394 +132.4939509772264,127.43453694566097,122.56345976084957 +131.7887631702729,126.80258487767678,121.98496441162513 +131.0247690118917,126.07660853743191,121.25860807195049 +130.27164555235746,125.36612074013492,120.54153378663992 +129.71654667609008,124.7792507555816,119.87723904323487 +129.3572609063708,124.41308544252024,119.47022304519386 +129.28815104427278,124.34499676870873,119.38979732374698 +129.59013620461823,124.62573040346784,119.66083649483392 +130.21456383897035,125.27487275817427,120.3659767873086 +131.15508993875173,126.27910139046546,121.47771946198786 +132.48808298835723,127.59337505833837,122.8220665703464 +134.1585043208085,129.14495712015346,124.29662222632264 +135.91624586992114,130.83991288220435,125.9496633545152 +137.633736076585,132.57150050514548,127.68916465275844 +139.20567865090607,134.2297059345968,129.4023242200996 +140.5859255352183,135.71107012897224,130.93779292244716 +141.81250366072146,136.92793074753726,132.09525917422252 +142.754364932275,137.81625276622648,132.88840979194248 +143.28785588129955,138.34134853563094,133.37899646988078 +143.41286127577334,138.50097632541122,133.56914778640777 +143.2542302257144,138.3255405713923,133.39865072137914 +142.78440791301847,137.87537593786334,133.0076223601965 +142.13787741350674,137.23535780170852,132.42316873592566 diff --git a/testdata/golden/g_AcceleratorOscillator.csv b/testdata/golden/g_AcceleratorOscillator.csv new file mode 100644 index 00000000..66a4eba2 --- /dev/null +++ b/testdata/golden/g_AcceleratorOscillator.csv @@ -0,0 +1,81 @@ +AcceleratorOscillator +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +3.2996426213220005 +4.84857752293012 +5.924729552970451 +6.4545834557331245 +6.417599965248506 +5.841491144321343 +4.793768911659682 +3.371784844238129 +1.693113062779183 +-0.11263924144573112 +-1.9104284181475686 +-3.565408328921929 +-4.948672473753007 +-5.944134608210268 +-6.457067844127186 +-6.42398764082675 +-5.822647879910184 +-4.680198146699931 +-3.077262896534226 +-1.1459856324778537 +0.9390716309573922 +2.977022592953248 +4.762184239467388 +6.108237527367101 +6.871445963232525 +6.969248178937781 +6.391155144004517 +5.200116229259413 +3.5241270343523365 +1.5395065973679496 +-0.5513672052550485 +-2.544280250134392 +-4.255694561664433 +-5.540493964000969 +-6.303047113055063 +-6.501064809232347 +-6.143054116879824 +-5.281144907173644 +-4.001499867843839 +-2.4143724895006917 +-0.6452508608341481 +1.172364605777252 +2.9028805802986506 +4.414169016213934 +5.583872284129307 +6.30723799169914 +6.506541398243506 +6.141237785716633 +5.217152119335765 +3.792521891431367 +1.9787464662015921 +-0.06568115261740415 +-2.148468704480384 +-4.063069029679891 +-5.6121489252116135 +-6.631657364309163 +-7.011766147952425 +-6.71127327720228 +-5.763057971508655 +-4.2696655766952825 +-2.3897786374432184 diff --git a/testdata/golden/g_AdOscillator.csv b/testdata/golden/g_AdOscillator.csv new file mode 100644 index 00000000..7e5544c9 --- /dev/null +++ b/testdata/golden/g_AdOscillator.csv @@ -0,0 +1,81 @@ +AdOscillator +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-8.707352694334602 +-9.55383489048154 +-10.14583263837026 +-7.716297064947573 +-5.415123860960578 +-2.4582949833648513 +1.089975121991027 +4.696280572705112 +8.134366418062353 +11.139886165841459 +13.441608928194814 +14.831171905898678 +15.682268342180382 +15.9374382006224 +15.375320862892893 +11.844484625612038 +8.060314754372618 +4.217673873654952 +0.5154190742606168 +-2.897345501480764 +-5.727866727021226 +-7.735401540219346 +-8.752721804087948 +-9.182159376975637 +-6.2632569344388855 +-3.1449666933596028 +-0.30319497786799054 +2.9959756573154515 +6.422574509168438 +9.675090799346341 +12.465531880413298 +14.538632000083673 +15.690164238983918 +15.79822259186901 +15.242096487702092 +14.78004441080553 +11.364799581360547 +7.9100904036895905 +4.222306132949534 +0.5339213340415121 +-2.8476220551432476 +-5.631827518096841 +-7.747932992047389 +-9.797710430835835 +-11.339764291930237 +-9.268768456321464 +-6.970170355782635 +-3.9039149984445523 +-0.24018851807128883 +3.553124481651839 +7.187932205193405 +10.357360760324106 +12.796107189912675 +14.304138194947562 +14.76455851338833 +14.345553629020067 +13.857179803145186 +9.526827762286814 +5.950187351572687 +2.4261734293132875 +-1.0908438344866767 +-4.283755254915981 +-6.864403056782976 +-8.599321150467368 +-9.348752590786908 +-9.97346349734272 +-7.574008310030209 diff --git a/testdata/golden/g_AdVolumeLine.csv b/testdata/golden/g_AdVolumeLine.csv new file mode 100644 index 00000000..6903d0c1 --- /dev/null +++ b/testdata/golden/g_AdVolumeLine.csv @@ -0,0 +1,81 @@ +AdVolumeLine +5100 +10299.33466539753 +15594.043836551855 +20976.365073249373 +24291.57190051923 +27644.013195961597 +31023.624921751765 +34419.2598407483 +37819.13192166075 +41211.28621092421 +46765.93492433705 +52270.18312624685 +57707.91471652242 +63065.66540243315 +68333.1594775111 +73503.71948154103 +76621.23172456931 +79797.89405517736 +83030.6501881658 +86314.20755544862 +89641.248304041 +93002.72103576508 +98578.52207270983 +104175.36757452656 +109773.44987894449 +115352.91201627607 +120894.63934413614 +126381.02158791413 +131796.65490685028 +135036.0355606744 +138219.8602101341 +141344.78703097935 +144479.7517924345 +147673.2142014885 +150921.44820683007 +156349.94150618947 +161846.77543811404 +167396.12948601984 +172980.08932203558 +178579.36099472287 +184174.04011803455 +187556.25928503848 +190912.63895746498 +194232.95808682722 +197508.43324469475 +200732.06879026728 +203898.93576449735 +207006.36839213336 +212193.53178274486 +217476.7713473708 +222848.7819028155 +228298.71924661228 +233812.6324811551 +239374.0201919615 +242768.30106098144 +246168.29812294664 +249562.05144169205 +252937.84999939144 +256284.69857788205 +259592.7561033152 +264961.0425623154 +270240.1572034338 +275422.95929115795 +280539.7708147685 +285755.5257273193 +291065.6092457326 +294343.23130014475 +297665.34406713047 +301023.09261158743 +304406.20131242066 +307803.38351912913 +311202.79151494405 +314592.48884790885 +320139.8844339791 +325634.0104676668 +331059.15438774537 +336402.3537321723 +341653.9129105451 +346807.78973669483 +349935.36179176316 diff --git a/testdata/golden/g_AdaptiveCci.csv b/testdata/golden/g_AdaptiveCci.csv new file mode 100644 index 00000000..28baf350 --- /dev/null +++ b/testdata/golden/g_AdaptiveCci.csv @@ -0,0 +1,81 @@ +AdaptiveCci +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-122.65932429363109 +-133.88668580463195 +-113.02705394625994 +-77.66651779474725 +-48.732497663476664 +-21.18701458111578 +14.464476048711363 +63.7498974942403 +119.55850588636753 +158.12624691909662 +155.93668349002763 +119.4644501737837 +80.98977660363701 +50.12418566001646 +28.769451665108374 +15.945936381492855 +5.797635581633111 +-7.985894839175672 +-31.32180736058029 +-67.76349174063863 +-113.52265555723903 +-153.63031825456432 +-164.57812436122686 +-141.19950188039596 +-93.89399779495514 +-58.93580593705932 +-28.964575685198387 +8.479581679404008 +60.96327793734739 +119.727640109343 +160.25838783673703 +156.65003208401043 +120.9645229411653 +83.19083486418182 +52.21185642827945 +29.710899388112153 +15.90106536136664 +4.632431470611363 +-10.49668161617313 +-34.092332804631 +-68.85764305101857 +-110.91366692761622 +-145.53858818049181 +-152.27741914929015 +-123.91605869927966 +-81.6575011080737 +-50.227373446032985 +-22.602091834240422 +14.130027328942072 +67.64350671317011 +128.8601745865182 +168.11894618602497 +158.98336615249485 +116.42426303201626 +77.51768761909821 +47.73878698301638 +27.106145176706637 +14.448890581501455 +3.2412829210323824 +-12.9509083301616 +-38.7974683790103 +-75.92793042139692 +-118.57866433718134 +-151.41479497725533 +-156.55830047724308 +-130.46899939083355 +-87.59619020494708 diff --git a/testdata/golden/g_AdaptiveCycle.csv b/testdata/golden/g_AdaptiveCycle.csv new file mode 100644 index 00000000..9f2196cb --- /dev/null +++ b/testdata/golden/g_AdaptiveCycle.csv @@ -0,0 +1,81 @@ +AdaptiveCycle +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +10 +10 +10 +10 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +11 +10 +10 +10 +10 +10 +10 +10 +10 +11 +11 +11 +11 +11 diff --git a/testdata/golden/g_AdaptiveLaguerreFilter.csv b/testdata/golden/g_AdaptiveLaguerreFilter.csv new file mode 100644 index 00000000..c7dc4db9 --- /dev/null +++ b/testdata/golden/g_AdaptiveLaguerreFilter.csv @@ -0,0 +1,81 @@ +AdaptiveLaguerreFilter +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +70.36315138959995 +78.74037822895473 +85.2511055850559 +91.35623993456784 +96.75393648889109 +101.5184674632918 +105.78493292584325 +109.59267337985727 +112.84532232094348 +115.43688389641382 +117.34248629710474 +118.71019369671158 +119.6285401106491 +119.95470335454927 +119.63198931022981 +118.64724383936762 +117.03203518798995 +114.88737965830558 +112.51533439162829 +110.67595764168868 +109.92836088554839 +110.19512740947611 +111.33548760014536 +113.09087288002077 +115.21301966341899 +117.44854086808137 +119.50367382837953 +121.01360330671169 +122.44003487664212 +123.85938597996163 +125.03997921372257 +126.14207117364798 +127.12412582020283 +127.86474457202415 +128.4401133291739 +128.88138427555603 +129.02308234483806 +128.8356142768824 +128.44526498877397 +127.95435268490394 +127.36821878611492 +126.73752371917863 +126.1172553408605 +125.49445893321506 +124.944581234822 +124.71490944932616 +124.92704154993311 +125.94368398793198 +127.83627734198971 +130.30693864945556 +133.00924563039118 +135.27780029407577 +137.26001287517218 +138.97584508585103 +140.05428529486406 +140.45903219597125 +140.1933436307999 +139.327160620978 +138.02605504825928 +136.42776473287265 +134.8089415424083 diff --git a/testdata/golden/g_AdaptiveRsi.csv b/testdata/golden/g_AdaptiveRsi.csv new file mode 100644 index 00000000..6af6fb0a --- /dev/null +++ b/testdata/golden/g_AdaptiveRsi.csv @@ -0,0 +1,81 @@ +AdaptiveRsi +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +46.84518809898698 +46.251508261108434 +47.16390505862828 +52.37840674196512 +59.99655348995708 +65.48173017151746 +67.87766558168431 +68.43252618174914 +69.44810126271067 +72.08923275029326 +75.98552161484294 +80.06100840049977 +83.23119418239398 +84.2021581284505 +64.18998557492546 +38.11253923390308 +24.206580981003462 +17.89126638064292 +15.14203902910592 +14.106875948739164 +13.864776873313172 +13.738263243026974 +13.541416546295668 +15.582834404230711 +25.551997416225987 +38.90351978905494 +47.87795916253466 +51.609552476213786 +52.41576532276687 +54.211150479807365 +58.63178532791585 +64.88830071694787 +71.18719210199839 +75.89718031499687 +77.06051801176152 +56.70404367017364 +33.03499604424107 +20.95990137747064 +15.559560905802472 +13.231276347511777 +12.369529816925409 +12.177638647512682 +12.057088772323254 +11.889220459392881 +14.35885131749288 +25.02300188856863 +38.60359057255842 +47.43890026667333 +51.00845544677639 +51.72909528131173 +53.6981191944954 +58.34293313057035 +64.76247938510097 +71.11470034710942 +75.7623864114642 +76.61451286201687 +54.87238337757311 +31.754916459579274 +20.25339618069728 +15.14160101060116 +12.951047969220278 +12.153552755102773 +11.985049462216475 +11.857867615700993 +11.700250095535777 +14.57777691287174 diff --git a/testdata/golden/g_Adl.csv b/testdata/golden/g_Adl.csv new file mode 100644 index 00000000..d44b3d59 --- /dev/null +++ b/testdata/golden/g_Adl.csv @@ -0,0 +1,81 @@ +Adl +333.3333333333333 +587.469676284863 +746.681856548535 +772.153119497146 +610.038433924341 +334.4744473662835 +54.2091273279641 +-208.29753141933998 +-427.1711246545661 +-531.0152129735706 +-425.7814575313156 +-218.5866956835259 +50.11272016402873 +361.7112327407009 +611.4105453303878 +720.3662064954124 +673.5295760026064 +481.80062857551377 +158.70068139778397 +-129.889283477591 +-365.5677042872865 +-521.2254595472434 +-519.1250236675922 +-333.6937625669905 +-85.01753291738578 +190.18075952672433 +471.370101273559 +713.6426286531366 +765.2156727431039 +654.2693034702239 +437.127987752305 +135.00533364490457 +-153.74542546397385 +-355.06929881269167 +-444.00152074404275 +-360.8020461135121 +-99.49409085725023 +182.30234196937204 +454.53637831178025 +696.1168445937468 +863.5143925551931 +828.590153670103 +656.274435408461 +410.38451690257807 +114.53595695361508 +-192.94098694811032 +-361.1129271451715 +-381.40582427334715 +-248.28402591513859 +24.808963821476567 +330.4563800146842 +590.3159189010076 +784.3398907418045 +864.1606112551432 +730.0966410278963 +501.0239122163847 +234.15055048353526 +-47.20141395248396 +-318.296312591874 +-448.3573646076187 +-395.42992091150387 +-218.60193516559048 +49.789135579036724 +370.8715732562906 +610.3733487454008 +750.9789503536324 +745.9765727661561 +551.5872128968012 +272.9342803720846 +-5.675917425997227 +-263.15532575372094 +-470.11007471398796 +-532.1418578899545 +-404.67318016913936 +-185.33679765818127 +91.73355055592063 +408.6054983955447 +634.893433571831 +719.2201222699915 +646.7650424131407 diff --git a/testdata/golden/g_AdvanceBlock.csv b/testdata/golden/g_AdvanceBlock.csv new file mode 100644 index 00000000..c91d62df --- /dev/null +++ b/testdata/golden/g_AdvanceBlock.csv @@ -0,0 +1,81 @@ +AdvanceBlock +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_AdvanceDecline.csv b/testdata/golden/g_AdvanceDecline.csv new file mode 100644 index 00000000..04d7778d --- /dev/null +++ b/testdata/golden/g_AdvanceDecline.csv @@ -0,0 +1,81 @@ +AdvanceDecline +5 +10 +15 +20 +23 +26 +29 +32 +35 +38 +43 +48 +53 +58 +63 +68 +71 +74 +77 +80 +83 +86 +91 +96 +101 +106 +111 +116 +121 +124 +127 +130 +133 +136 +139 +144 +149 +154 +159 +164 +169 +172 +175 +178 +181 +184 +187 +190 +195 +200 +205 +210 +215 +220 +223 +226 +229 +232 +235 +238 +243 +248 +253 +258 +263 +268 +271 +274 +277 +280 +283 +286 +289 +294 +299 +304 +309 +314 +319 +322 diff --git a/testdata/golden/g_AdvanceDeclineRatio.csv b/testdata/golden/g_AdvanceDeclineRatio.csv new file mode 100644 index 00000000..b1783475 --- /dev/null +++ b/testdata/golden/g_AdvanceDeclineRatio.csv @@ -0,0 +1,81 @@ +AdvanceDeclineRatio +5 +5 +5 +5 +4 +4 +4 +4 +4 +4 +5 +5 +5 +5 +5 +5 +4 +4 +4 +4 +4 +4 +5 +5 +5 +5 +5 +5 +5 +4 +4 +4 +4 +4 +4 +5 +5 +5 +5 +5 +5 +4 +4 +4 +4 +4 +4 +4 +5 +5 +5 +5 +5 +5 +4 +4 +4 +4 +4 +4 +5 +5 +5 +5 +5 +5 +4 +4 +4 +4 +4 +4 +4 +5 +5 +5 +5 +5 +5 +4 diff --git a/testdata/golden/g_Adx.csv b/testdata/golden/g_Adx.csv new file mode 100644 index 00000000..35cc0959 --- /dev/null +++ b/testdata/golden/g_Adx.csv @@ -0,0 +1,81 @@ +plus_di,minus_di,adx +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +39.5757019682593,10.51553170206367,30.912276792040817 +37.536261624936586,10.906948307963743,32.63069750889788 +35.215165462446194,12.883060473369223,33.61637662813429 +32.86410166086221,15.606658308025656,33.758337048896145 +30.70333902684003,18.50628500756431,33.11744953242373 +28.583754140794692,21.990805693589266,31.683067176177246 +26.55934622279741,25.269437743189002,29.597761510222966 +24.849750313093512,27.34663879718962,27.82532441495794 +23.505186308008465,28.419972295720065,26.513882262566277 +22.24831894567969,28.255382095825222,25.469626589930424 +21.991214452481188,26.24217101526044,24.279889509686143 +23.0167314852192,24.206077112686202,22.725510472977113 +25.270075861089534,22.49633154108633,21.51703781909767 +28.167925277844184,20.797978949255484,21.055190823958306 +32.199512135355,19.002819811263755,21.39222118044018 +36.67556284467224,17.08189161927664,22.467654445091764 +39.66767810504092,15.312333278446436,24.027003737037383 +41.25710485757308,13.864063299710923,25.86050681733179 +41.90255145462447,12.778588478409224,27.8177163877859 +42.395628716412624,11.937994453509367,29.834786399099126 +41.39315313749411,11.291691494482587,31.784798356703554 +38.98369312390027,10.942263455121635,33.52631517717672 +36.80520205991526,11.790866997951634,34.808291852450445 +34.33471861125097,14.165199105275695,35.29246448522293 +31.575896425438806,17.056390539549085,34.90412360474046 +29.011655429985023,19.499990165743316,33.81146999165209 +26.941362744011517,21.41861333571675,32.21208520671275 +25.293388618220902,23.528371409730532,30.16945244226847 +23.70108159294569,26.085794270270323,28.356623123061247 +21.9818825371455,26.753559469925122,27.030505691607747 +20.4556018343849,25.575479039846915,25.894230469505597 +19.315305653157523,24.149775639951073,24.839117763267886 +20.15346427198841,22.836532180755725,23.510691119817217 +22.621623373749483,21.279561359099215,22.049713637827605 +26.102172398824052,19.564946484191104,21.497230627213543 +29.5794011460886,17.914862734831026,21.71599192763469 +33.103914522491884,16.421886804841026,22.570814571368153 +36.988461875248944,14.998303176938437,23.980008725527608 +39.75301194225335,13.75986552582622,25.73669586768207 +41.37315229671887,12.777991517838071,27.67023180773477 +42.48135161688847,11.981093863498268,29.693955639647385 +42.62294720176041,11.257736731480932,31.730983563876975 +40.47684671425082,10.451870979556956,33.67554918447296 +37.62379013468778,11.104415435913893,35.1575133843429 +35.445073236866044,12.840589537363048,35.99012453099969 +33.361147221464314,15.58241905716853,36.014040954862004 +30.784559395666363,20.10967847345435,34.9397977135121 +28.101022653590128,23.891333482064333,33.02243689823779 +25.724805235133402,26.22784634752717,30.732853434649453 +23.898483996930594,27.16675703876092,28.994806129209827 +22.507592062957475,27.59047661188655,27.648453495608493 +21.169522519356338,26.35196828602853,26.452526680749255 +21.224977830554703,24.775436644747092,25.11436900225873 diff --git a/testdata/golden/g_Adxr.csv b/testdata/golden/g_Adxr.csv new file mode 100644 index 00000000..304737e9 --- /dev/null +++ b/testdata/golden/g_Adxr.csv @@ -0,0 +1,81 @@ +Adxr +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +25.983733807999563 +27.01145934466903 +28.04201553661303 +28.892670392966764 +29.488978174877758 +29.750391781981573 +29.716273954661048 +29.805061385830747 +30.0200987198715 +30.138959221190433 +29.786176997454536 +28.814817038858788 +27.664253905374878 +26.633638015335528 +25.780836811354327 +25.412138784076504 +25.528754714322567 +25.87736864341869 +26.328417075526893 +26.67273875945817 +26.917255997265578 +27.511772902195133 +28.262141890042567 +28.93163952829554 +29.442066165134037 +29.77408292966708 +29.94115850722376 +29.931704040957925 +30.04380334346911 +30.353027438040357 +30.525871926924246 +30.414621147133786 +29.76236603733961 +28.49475567566985 +27.25983376272567 +26.224422681142073 +25.78281035028899 +25.814231110568052 +26.094611274215662 +26.39230040499675 diff --git a/testdata/golden/g_Alligator.csv b/testdata/golden/g_Alligator.csv new file mode 100644 index 00000000..c251e097 --- /dev/null +++ b/testdata/golden/g_Alligator.csv @@ -0,0 +1,81 @@ +jaw,teeth,lips +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +103.1558507984203,105.79078781985666,107.03252484838644 +101.40633091517769,104.66457400969036,106.38072244126543 +100.12134766492898,103.6484036032248,105.75005520720586 +99.45126641946796,102.85736079255639,105.20441583015872 +99.48179732233366,102.38386055477191,104.80001892286633 +100.23050496668327,102.29015479771627,104.58058330376035 +101.65091352849612,102.60466563405991,104.57423668578618 +103.64240261318041,103.32191065527263,104.79217554984066 +106.06357089840077,104.40533877149676,105.22887068691215 +108.74678086098042,105.79217620216004,105.86346569399983 +111.51210232882211,107.39940035392367,106.66198566332166 +114.17965210558982,109.13016482609532,107.58004037730764 +116.58013494644592,110.88029851210429,108.56583039522552 +118.5639933186376,112.54478587652095,109.56339322863947 +120.0098081380237,114.02430757656022,110.51611069636495 +120.83241224927542,115.2319237044486,111.37050425175165 +120.99065964425567,116.09981380870111,112.08026497907055 +120.49411603245278,116.5857016658648,112.61031953834029 +119.4073343437952,116.67828299452412,112.94056606892171 +117.85007687184077,116.40075141358238,113.068780058851 +115.99199777822656,115.81147829607036,113.01214145400436 +114.04094344984783,115.0011006527875,112.80690526393907 +112.22506977279107,114.08570376220037,112.50593506070611 +110.77020629693173,113.19638598834503,112.17411679531374 +109.87504142164983,112.46614680016516,111.88201642929747 +109.68748175918653,112.01560617646442,111.69846971536622 +110.2857400647586,111.93941339066988,111.6830259268331 +111.66723663953537,112.29524430472975,111.87925477413708 +113.74731238301733,113.09698995690853,112.30984113812596 +116.3682399561194,114.31314783482495,112.97414499271152 +119.3173733891288,115.87064675201391,113.84853751145694 +122.35182077950905,117.66351372462186,114.88940737208642 +125.22604604819371,119.5650827047563,116.03834231590618 +127.71848843366506,121.44198134759222,117.22870166509915 +129.65367446726884,123.16799066000424,118.39265487005467 +130.91727906545398,124.63606174597852,119.46778582660964 +131.46294056512707,125.76723343433491,120.40253423645706 +131.3110527086312,126.51581108594984,121.16001586211293 +130.5409511975122,126.87080209871046,121.72006817019587 +129.27865975228482,126.85412706487041,122.07964021959832 +127.68255537687806,126.516444145041,122.2518335343459 +125.92898676471277,125.93150205866118,122.26397753477707 +124.19918786337472,125.18980034466652,122.15509271520004 +122.66800277469706,124.39206209504869,121.9729884210673 +121.49422604547935,123.64272073676229,121.77110871863705 +120.81196235036562,123.04339419724455,121.60513202160142 +120.72241993610164,122.68624289872014,121.52928938488516 +121.28594722651424,122.64720845709432,121.59241170077475 +122.51476018956932,122.97937669403505,121.83383844469651 +124.3674708609567,123.70702176684883,122.27948514177044 +126.74697821540099,124.82116050362607,122.93852141195036 +129.5033313462492,126.27757151852889,123.80120114023575 +132.44273182319031,127.99813741260654,124.83836768572408 +135.34294646502107,129.87602860347457,126.00301111879254 +137.9742186094954,131.78470493132735,127.23399338876766 +140.12355045260327,133.59006338954046,128.46172344234276 +141.619267087984,135.1644400994269,129.6152217935144 +142.35231222129144,136.40072044063825,130.62973470025668 +142.29091393695515,137.2246342874446,131.45390489082996 +141.48610487842447,137.60347035514724,132.05551788158235 +140.06694707154648,137.54992194123912,132.42502599416864 +138.22594097035088,137.12049434505636,132.57637619229655 +136.1966718318972,136.408728517904,132.54507314677466 +134.2269530937761,135.53426953213685,132.3838190375432 +132.55133261814115,134.62938697995605,132.15640993963805 +131.3667293962986,133.82483497604997,131.93077515485058 +130.81421235028907,133.23688401636713,131.77208966223768 diff --git a/testdata/golden/g_Alma.csv b/testdata/golden/g_Alma.csv new file mode 100644 index 00000000..a28bb19f --- /dev/null +++ b/testdata/golden/g_Alma.csv @@ -0,0 +1,81 @@ +Alma +nan +nan +nan +nan +nan +nan +nan +nan +111.94970536775864 +111.06893157832275 +109.531823102842 +107.52034877441032 +105.25885111498506 +102.9940064860489 +100.97279022390286 +99.42041506842905 +98.52021357977716 +98.39726158677666 +99.10720553565477 +100.63129175872405 +102.87804168366374 +105.69142334193903 +108.86478923984795 +112.1593355636855 +115.32543381320428 +118.12492937208509 +120.35241515052857 +121.85357998883293 +122.5389928137129 +122.39209124972787 +121.47066108695326 +119.90167444845366 +117.86994774868424 +115.6016325936173 +113.344014331317 +111.3434227882747 +109.82322835964058 +108.96388899707799 +108.88683043739061 +109.64359960308988 +111.211260069327 +113.49444090641407 +116.33385588093464 +119.5205320205802 +122.81447654739276 +125.96611471786073 +128.7385835914609 +130.92889029169768 +132.3860447551969 +133.02454722438065 +132.83202568617187 +131.87034102707568 +130.27006118442495 +128.21879790140275 +125.94444792877846 +123.69483568689546 +121.71557584828516 +120.22813331047199 +119.41004039625565 +119.37903842005129 +120.18256020693593 +121.79349305965133 +124.11260065510152 +126.97738752954433 +130.17661431441516 +133.469167119997 +136.6055955210909 +139.35039522057332 +141.50304494686682 +142.91591842192776 +143.5074713769954 +143.26952565926126 +142.26799976190287 +140.63702052140982 +138.56694196674394 +136.28734156085395 +134.0465127296497 +132.08928554974582 +130.63515680688343 +129.858683001776 diff --git a/testdata/golden/g_Alpha.csv b/testdata/golden/g_Alpha.csv new file mode 100644 index 00000000..5e96d902 --- /dev/null +++ b/testdata/golden/g_Alpha.csv @@ -0,0 +1,81 @@ +Alpha +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +14.386988504259108 +13.212421186224432 +11.059484167373768 +9.378054556781706 +8.399884543745003 +8.016946768685571 +8.099402185312371 +8.291176266683564 +7.558724707776705 +5.202340033703678 +2.451829402762627 +0.25887933802150087 +-1.4479733958672654 +-2.8887317600775617 +-4.172750429834551 +-5.330900180496997 +-6.374715779067529 +-7.350691609157877 +-8.384458743551846 +-9.619541816548775 +-10.601166759253317 +-9.4077033263966 +-5.912515646884714 +-2.5587806683637524 +-0.022901584994329482 +2.034671716680407 +3.9978951583982507 +6.213520292133154 +8.777758936854312 +10.721639944676696 +10.630197517242905 +9.269248545074035 +7.953873394486493 +7.000172358166907 +6.302472469098049 +5.7117937708544275 +5.101595700035176 +4.358738041624505 +3.3598841600793037 +1.9313318181200145 +-0.1944772116095237 +-3.1605286690629697 +-5.97631973474688 +-7.327220506491372 +-8.02511402561214 +-8.964410433519063 +-10.380897183042563 +-12.484423093463292 +-15.707646976153043 +-20.02134341138259 +-21.89029822972246 +-17.495198620003336 +-11.654845563859709 +-7.424633000110333 +-4.440210083568232 +-2.090722760144132 +-0.029194921427318832 +1.9477690623565422 +4.013745476626099 +6.3927342458997884 +9.401867422537336 +13.276709429133177 +17.224306925384937 +18.624049314196938 +16.689263612105634 +13.943912605469578 +11.943688847666905 diff --git a/testdata/golden/g_AmihudIlliquidity.csv b/testdata/golden/g_AmihudIlliquidity.csv new file mode 100644 index 00000000..3b3452d3 --- /dev/null +++ b/testdata/golden/g_AmihudIlliquidity.csv @@ -0,0 +1,81 @@ +AmihudIlliquidity +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.00000015985561350029384 +0.00000015696771188449567 +0.0000001555303792060817 +0.00000015538151277346344 +0.00000015631093229344765 +0.00000015809693251091022 +0.00000016052029367231717 +0.0000001589845131230261 +0.0000001559508516581196 +0.0000001529768427906417 +0.0000001503460729755366 +0.00000014837206402589596 +0.00000014715332162105188 +0.00000014682375710095578 +0.00000014767538776327616 +0.0000001499189726303614 +0.00000015031723686424412 +0.00000014574211468297434 +0.0000001409279960850948 +0.00000013651731571450798 +0.00000013297737589390889 +0.00000013055309718846065 +0.00000012929133299478467 +0.00000012910138377497164 +0.0000001298184766752888 +0.00000013125189141704328 +0.0000001332132144884893 +0.0000001355275978678928 +0.0000001339382914458526 +0.00000013125540514859396 +0.0000001283947371727404 +0.0000001254650121375988 +0.00000012291775713992313 +0.0000001212427271966849 +0.0000001207208654452996 +0.00000012149003808330404 +0.00000012348242710816948 +0.00000012357281072705215 +0.0000001201625871252808 +0.00000011678172900066989 +0.00000011388044089483085 +0.00000011176347314797874 +0.00000011056397954223913 +0.00000011020000128947351 +0.00000011025821093960333 +0.00000011070122212135205 +0.00000011154097038302432 +0.00000011282328820660005 +0.00000011461652067341232 +0.00000011296405147780249 +0.0000001106418496468457 +0.0000001083644320663171 +0.00000010636813977636837 +0.00000010489751222331263 +0.00000010417655889480471 +0.0000001043649585629421 +0.0000001055082619108371 +0.00000010750148029927503 +0.00000010738588531942057 +0.00000010453775579601958 diff --git a/testdata/golden/g_AnchoredRsi.csv b/testdata/golden/g_AnchoredRsi.csv new file mode 100644 index 00000000..4ba088e1 --- /dev/null +++ b/testdata/golden/g_AnchoredRsi.csv @@ -0,0 +1,81 @@ +AnchoredRsi +nan +100 +100 +100 +100 +100 +100 +95.45605806313631 +86.52492002723935 +76.2638987205537 +66.81339372303415 +59.09916610759193 +53.29425407866635 +49.26964373016562 +46.84518809898699 +45.900691177151764 +46.50528672246023 +48.70488186940023 +52.032522011350665 +55.868698509204336 +59.67658744590001 +63.107208604442455 +65.9882922251125 +68.26641756325883 +69.95095010799662 +71.07592996619353 +71.67905841266892 +71.79263953008521 +70.92265776658282 +69.10610410124812 +66.68393947179895 +64.0284164122834 +61.46618054019408 +59.24380602867859 +57.5283318973131 +56.42553580651971 +56.001811453875014 +56.235171246003276 +57.0197593102381 +58.25880410351491 +59.798202212884654 +61.46661465071019 +63.10896422759926 +64.60450896314175 +65.87040024864744 +66.85647878026009 +67.53708615883738 +67.9036280460956 +67.95962807553119 +67.45633000604468 +66.43268012478919 +65.05131179571976 +63.501006648347214 +61.96478307287452 +60.59929220857238 +59.52658585180274 +58.83480409912063 +58.58312494864277 +58.74029304760523 +59.226372611328344 +59.99306654026555 +60.95989959911936 +62.0311011972887 +63.11189099784742 +64.11997874250162 +64.99114252964489 +65.6800659729537 +66.1585047045479 +66.4126719187185 +66.44111366160692 +66.0741861792892 +65.35121215660126 +64.37803148650991 +63.28003637922312 +62.183572731291854 +61.202193427563614 +60.429076438381514 +59.934583730106105 +59.76688110283679 +59.8917532366135 diff --git a/testdata/golden/g_AnchoredVwap.csv b/testdata/golden/g_AnchoredVwap.csv new file mode 100644 index 00000000..e30b1379 --- /dev/null +++ b/testdata/golden/g_AnchoredVwap.csv @@ -0,0 +1,81 @@ +AnchoredVwap +99.66666666666667 +101.43186355934736 +103.1418467346444 +104.72524251435041 +106.11658814601071 +107.26197807148026 +108.12392454778578 +108.68473286603445 +108.94788218474959 +108.93719496319889 +108.6939142335673 +108.27212140087826 +107.73315655203712 +107.13980697732005 +106.55099511684338 +106.01754191953432 +105.574488719377 +105.24403046718167 +105.0532260289652 +105.01668973808685 +105.13625480053574 +105.40178194132667 +105.79291824018027 +106.281534783261 +106.83455123904943 +107.41687731587024 +107.99424420127528 +108.53574454861608 +109.01593726593835 +109.41640368389328 +109.72667224007039 +109.94446831076806 +110.07829451614217 +110.13781541771121 +110.13654676966519 +110.09446794810344 +110.03604107972293 +109.98753674805292 +109.97402298898915 +110.01646326126956 +110.12936768851321 +110.3193480654346 +110.58476263894983 +110.91644060152191 +111.29929375327781 +111.71449283739537 +112.14183166129912 +112.56192604713692 +112.97175975899731 +113.35701680111218 +113.70418291569361 +114.0038205912578 +114.25128187847953 +114.44692254399716 +114.59582753713786 +114.7071101701647 +114.79288203685903 +114.86700832886702 +114.94376872046713 +115.03654251078153 +115.15663068517345 +115.3123159645159 +115.50824177852617 +115.74673529012439 +116.03442015889951 +116.36702355054167 +116.73595465861783 +117.12895426065779 +117.53127179630778 +117.92724246665307 +118.30204758751894 +118.64339224639716 +118.94283972962145 +119.19660258528434 +119.4056914713997 +119.57544065225956 +119.71453548143946 +119.83373933276083 +119.94454255354819 +120.060012943307 diff --git a/testdata/golden/g_AndrewsPitchfork.csv b/testdata/golden/g_AndrewsPitchfork.csv new file mode 100644 index 00000000..cef9d7cd --- /dev/null +++ b/testdata/golden/g_AndrewsPitchfork.csv @@ -0,0 +1,81 @@ +median,upper,lower +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +138.13379981168666,153.5903388831148,122.67726074025849 +139.30589937241328,154.76243844384143,123.84936030098511 +140.4779989331399,155.93453800456805,125.02145986171173 +141.65009849386652,157.10663756529468,126.19355942243835 +142.82219805459314,158.2787371260213,127.36565898316498 +143.99429761531977,159.45083668674792,128.53775854389158 +145.16639717604642,160.62293624747457,129.70985810461826 +146.33849673677304,161.7950358082012,130.88195766534488 +147.51059629749966,162.9671353689278,132.0540572260715 +148.68269585822628,164.13923492965444,133.22615678679813 +149.8547954189529,165.31133449038106,134.39825634752475 +116.38708046816012,131.99293946067135,100.78122147564889 +116.16761465158264,131.77347364409388,100.56175565907141 +115.94814883500517,131.5540078275164,100.34228984249394 +115.72868301842769,131.33454201093892,100.12282402591646 +115.50921720185022,131.11507619436145,99.90335820933899 +115.28975138527275,130.89561037778398,99.68389239276152 +115.07028556869527,130.6761445612065,99.46442657618404 +114.8508197521178,130.45667874462902,99.24496075960657 +114.63135393554032,130.23721292805155,99.02549494302909 +149.90312728485273,164.58343115980426,135.22282340990122 +151.1865172964635,165.86682117141504,136.506213421512 +152.4699073080743,167.15021118302582,137.7896034331228 +153.7532973196851,168.4336011946366,139.07299344473358 +155.0366873312959,169.71699120624743,140.3563834563444 +156.3200773429067,171.0003812178582,141.6397734679552 +157.60346735451748,172.28377122946898,142.92316347956597 +158.88685736612828,173.56716124107982,144.20655349117678 +160.17024737773906,174.8505512526906,145.48994350278755 diff --git a/testdata/golden/g_Apo.csv b/testdata/golden/g_Apo.csv new file mode 100644 index 00000000..2367ab74 --- /dev/null +++ b/testdata/golden/g_Apo.csv @@ -0,0 +1,81 @@ +Apo +nan +nan +nan +nan +nan +nan +3.7012739364605096 +2.8847777801619685 +1.8736290337854626 +0.765036373877777 +-0.33696510075722585 +-1.3302592716584911 +-2.1233990496681514 +-2.643515874936071 +-2.842644233118577 +-2.7018727014259554 +-2.2329355172898318 +-1.4770923173072958 +-0.5013890907210765 +0.6073706179847704 +1.7504092924981336 +2.8258211305865757 +3.7376915861189843 +4.404677560865807 +4.767282854940035 +4.793179765664334 +4.480102057977561 +3.856051324024037 +2.9767986263964445 +1.9209048414712981 +0.7827047048393894 +-0.3361185888392413 +-1.3356155121889373 +-2.126497700802304 +-2.6381132934775877 +-2.824757659991434 +-2.6697557651722406 +-2.1869514793122704 +-1.419470780852464 +-0.43586931695936926 +0.6759915614169643 +1.8167932622175442 +2.884631838707918 +3.7841208048447044 +4.434911755464242 +4.778871672124524 +4.785275789087777 +4.453552157572545 +3.8133327455611834 +2.921806509345913 +1.85861087963238 +0.718717990969509 +-0.39604889322816916 +-1.3861109473328668 +-2.1630288617662075 +-2.657402861884563 +-2.825071982224358 +-2.651058833324072 +-2.150907486793429 +-1.3692949692966465 +-0.3760403965244876 +0.7401317606929894 +1.8795171692881922 +2.9403379252089508 +3.82783407056084 +4.462728218496949 +4.788307166129613 +4.775487916077651 +4.425415574035384 +3.769361059913706 +2.8659277697137497 +1.7958167087099923 +0.6546177110066083 +-0.4557293156457263 +-1.4360403782011701 +-2.198747209018677 +-2.6757194784072453 +-2.82435067406567 +-2.6313640139317727 +-2.113998421581357 diff --git a/testdata/golden/g_Aroon.csv b/testdata/golden/g_Aroon.csv new file mode 100644 index 00000000..b6209926 --- /dev/null +++ b/testdata/golden/g_Aroon.csv @@ -0,0 +1,81 @@ +up,down +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +42.857142857142854,100 +35.714285714285715,100 +28.571428571428573,92.85714285714286 +21.428571428571427,85.71428571428571 +14.285714285714286,78.57142857142857 +7.142857142857143,71.42857142857143 +0,64.28571428571429 +0,57.142857142857146 +100,50 +100,42.857142857142854 +100,35.714285714285715 +100,28.571428571428573 +100,21.428571428571427 +92.85714285714286,14.285714285714286 +85.71428571428571,7.142857142857143 +78.57142857142857,0 +71.42857142857143,0 +64.28571428571429,0 +57.142857142857146,0 +50,0 +42.857142857142854,0 +35.714285714285715,100 +28.571428571428573,100 +21.428571428571427,100 +14.285714285714286,92.85714285714286 +7.142857142857143,85.71428571428571 +0,78.57142857142857 +0,71.42857142857143 +0,64.28571428571429 +100,57.142857142857146 +100,50 +100,42.857142857142854 +100,35.714285714285715 +100,28.571428571428573 +100,21.428571428571427 +92.85714285714286,14.285714285714286 +85.71428571428571,7.142857142857143 +78.57142857142857,0 +71.42857142857143,0 +64.28571428571429,0 +57.142857142857146,0 +50,0 +42.857142857142854,100 +35.714285714285715,100 +28.571428571428573,92.85714285714286 +21.428571428571427,85.71428571428571 +14.285714285714286,78.57142857142857 +7.142857142857143,71.42857142857143 +0,64.28571428571429 +0,57.142857142857146 +100,50 +100,42.857142857142854 +100,35.714285714285715 +100,28.571428571428573 +100,21.428571428571427 +100,14.285714285714286 +92.85714285714286,7.142857142857143 +85.71428571428571,0 +78.57142857142857,0 +71.42857142857143,0 +64.28571428571429,0 +57.142857142857146,0 +50,0 +42.857142857142854,100 +35.714285714285715,100 +28.571428571428573,92.85714285714286 diff --git a/testdata/golden/g_AroonOscillator.csv b/testdata/golden/g_AroonOscillator.csv new file mode 100644 index 00000000..d68c55cf --- /dev/null +++ b/testdata/golden/g_AroonOscillator.csv @@ -0,0 +1,81 @@ +AroonOscillator +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-57.142857142857146 +-64.28571428571428 +-64.28571428571429 +-64.28571428571428 +-64.28571428571428 +-64.28571428571429 +-64.28571428571429 +-57.142857142857146 +50 +57.142857142857146 +64.28571428571428 +71.42857142857143 +78.57142857142857 +78.57142857142857 +78.57142857142857 +78.57142857142857 +71.42857142857143 +64.28571428571429 +57.142857142857146 +50 +42.857142857142854 +-64.28571428571428 +-71.42857142857143 +-78.57142857142857 +-78.57142857142857 +-78.57142857142857 +-78.57142857142857 +-71.42857142857143 +-64.28571428571429 +42.857142857142854 +50 +57.142857142857146 +64.28571428571428 +71.42857142857143 +78.57142857142857 +78.57142857142857 +78.57142857142857 +78.57142857142857 +71.42857142857143 +64.28571428571429 +57.142857142857146 +50 +-57.142857142857146 +-64.28571428571428 +-64.28571428571429 +-64.28571428571428 +-64.28571428571428 +-64.28571428571429 +-64.28571428571429 +-57.142857142857146 +50 +57.142857142857146 +64.28571428571428 +71.42857142857143 +78.57142857142857 +85.71428571428571 +85.71428571428572 +85.71428571428571 +78.57142857142857 +71.42857142857143 +64.28571428571429 +57.142857142857146 +50 +-57.142857142857146 +-64.28571428571428 +-64.28571428571429 diff --git a/testdata/golden/g_Atr.csv b/testdata/golden/g_Atr.csv new file mode 100644 index 00000000..a220f9f8 --- /dev/null +++ b/testdata/golden/g_Atr.csv @@ -0,0 +1,81 @@ +Atr +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +3.917642936098542 +3.871756865753318 +3.8256550237571303 +3.775585219414474 +3.7359112048078584 +3.751806385408204 +3.844730678370346 +3.9663267478375337 +4.065925146592011 +4.103990051025662 +4.122277884333844 +4.120405500552875 +4.1099068422738645 +4.067219182386907 +3.965656623010464 +3.883731209815142 +3.8454426000158177 +3.827649810828608 +3.8056867488416217 +3.7971798302715882 +3.795930185925992 +3.768312827006575 +3.700099728786484 +3.6306300896424184 +3.63084862338228 +3.6560272497167245 +3.6536783654804816 +3.670527021756155 +3.731163563648225 +3.855191519830406 +3.994403105040647 +4.097289247845801 +4.128368657741341 +4.103844480606131 +4.0291518193306395 +3.972922779511551 +3.9077919971718877 +3.8900842871217334 +3.9281940607734454 +3.970355102352287 +3.970344885666312 +3.9271768651715058 +3.891868629198634 +3.896746818914544 +3.888594808948336 +3.8241554941261624 +3.755340593345057 +3.742402894117046 +3.779811441067645 +3.833276428397188 +3.8832337640008086 +3.9482678364884123 +3.9963590513965954 +3.9961613679725096 +3.957618048219805 +3.9111378825809897 +3.9118754285284236 +3.9079875306228926 +3.8519602816708205 +3.8003043443211753 +3.824279210324508 +3.89030736805505 +3.946176568396809 +3.944383618517461 +3.889018639116889 +3.8395240928112067 +3.792174559624793 diff --git a/testdata/golden/g_AtrBands.csv b/testdata/golden/g_AtrBands.csv new file mode 100644 index 00000000..23f06ed0 --- /dev/null +++ b/testdata/golden/g_AtrBands.csv @@ -0,0 +1,81 @@ +upper,middle,lower +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +107.45762428035735,99.62233840816026,91.78705253596317 +106.02775600737075,98.28424227586412,90.54072854435748 +105.37600887086329,97.72469882334903,90.07338877583477 +105.58952435047054,98.0383539116416,90.48718347281265 +106.71367558633838,99.24185317672267,91.77003076710696 +108.77596789525653,101.27235512444012,93.76874235362372 +111.68260593076432,103.99314457402363,96.30368321728294 +115.1384985136858,107.20584501801073,99.27319152233567 +118.79998929802753,110.6681390048435,102.53628871165947 +122.3233937371851,114.11541363513378,105.90743353308245 +125.52895341254967,117.28439764388199,109.03984187521431 +128.17748963959727,119.93667863849153,111.69586763738577 +130.0998134522951,121.87999976774739,113.66018608319966 +131.11987181851987,122.98543345374605,114.85099508897224 +131.13021135447178,123.19889810845086,115.26758486242993 +130.31345150051308,122.5459890808828,114.77852666125253 +128.82057750085346,121.12969230082183,113.4388071007902 +126.77648447407479,119.12118485241757,111.46588523076035 +124.35591773275388,116.74454423507063,109.13317073738739 +121.85109184831337,114.2567321877702,106.66237252722702 +119.51650143409877,111.92464106224679,104.33278069039481 +117.53787877807773,110.00125312406458,102.46462747005143 +116.10324185785626,108.7030424002833,101.30284294271033 +115.45189787861992,108.19063769933508,100.92937752005025 +115.81617136472467,108.55447411796011,101.29277687119556 +117.11876924278668,109.80671474335324,102.4946602439198 +119.18752089177063,111.88016416080967,104.57280742984871 +121.97532486350796,114.63427081999565,107.29321677648333 +125.33000921363842,117.86768208634197,110.40535495904552 +129.04661351187218,121.33623047221137,113.62584743255056 +132.76355060145823,124.77474439137693,116.78593818129563 +136.11531364276385,127.92073514707224,119.72615665138063 +138.7945815809989,130.5378442655162,122.28110695003353 +140.6446456556533,132.43695669444105,124.2292677332288 +141.55139752614045,133.49309388747918,125.4347902488179 +141.60242332451588,133.65657776549278,125.71073220646969 +140.77305230577312,132.95746831142935,125.14188431708558 +139.28304697581464,131.50287840157117,123.7227098273277 +137.32379385285304,129.46740573130614,121.61101760975926 +135.01824672769902,127.07753652299444,119.13682631828986 +132.53210395759075,124.59141418625812,116.65072441492549 +130.13013386635836,122.27578013601534,114.42142640567234 +128.16588383470605,120.38214657630877,112.5984093179115 +126.91782330201404,119.12432966418496,111.33083602635587 +126.43653956708025,118.65934994918358,110.88216033128691 +126.72171718354599,119.07340619529367,111.42509520704135 +127.88485668877826,120.37417550208815,112.86349431539804 +129.97493332051732,122.49012753228324,115.00532174404914 +132.83653698586798,125.27691410373268,117.71729122159739 +136.19681623942813,128.53026338263376,120.86371052583938 +139.7706944060697,132.0042268780681,124.23775935006648 +143.32968496117576,135.43314928819893,127.53661361522211 +146.5481167999892,138.555398697196,130.56268059440282 +149.12906011101606,141.13673737507105,133.14441463912604 +150.90648163291854,142.99124553647894,135.07600944003934 +151.8202047665887,143.9979290014267,136.17565323626474 +151.935278102078,144.11152724502116,136.28777638796433 +151.18253144660633,143.36655638536055,135.55058132411477 +149.57814652484404,141.8742259615024,134.17030539816074 +147.41311360519177,139.81250491654941,132.21189622790706 +145.0587825826475,137.41022416199849,129.76166574134947 +142.7072505300425,134.9266357939324,127.14602105782231 +140.52060801218852,132.6282548753949,124.73590173860129 +138.6538196765925,130.76505243955756,122.87628520252264 +137.32616360003695,129.54812632180318,121.7700890435694 +136.80989260441592,129.13084441879352,121.45179623317111 +137.179493910278,129.59514479102842,122.01079567177884 diff --git a/testdata/golden/g_AtrRatchet.csv b/testdata/golden/g_AtrRatchet.csv new file mode 100644 index 00000000..eb2d60e4 --- /dev/null +++ b/testdata/golden/g_AtrRatchet.csv @@ -0,0 +1,81 @@ +value,direction +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +91.78705253596317,1 +93.72293096883983,1 +95.6357584807184,1 +97.52355109042563,1 +106.71367558633838,-1 +104.83777239363428,-1 +96.30368321728294,1 +98.28684659120171,1 +100.31980916449771,1 +102.37180419001055,1 +104.43294313217747,1 +106.4931458824539,1 +108.54809930359083,1 +110.58170889478428,1 +112.56453720628951,1 +114.50640281119709,1 +116.429124111205,1 +118.3429490166193,1 +124.35591773275388,-1 +122.45732781761808,-1 +120.55936272465509,-1 +118.6752063111518,-1 +116.82515644675856,-1 +115.00984140193735,-1 +113.1944170902462,-1 +111.36640346538785,-1 +104.57280742984871,1 +106.40807094072679,1 +108.2736527225509,1 +110.20124848246611,1 +112.19845003498644,1 +114.24709465890933,1 +116.31127898778,1 +118.36320122808307,1 +120.3777771377484,1 +122.36423852750417,1 +124.31813452609012,1 +126.26317666965099,1 +128.2272737000377,1 +135.01824672769902,-1 +133.03307428486588,-1 +131.0694858522801,-1 +129.12355153768078,-1 +127.17517812822351,-1 +125.23088072374934,-1 +123.31880297668626,-1 +121.44113268001372,-1 +115.00532174404914,1 +116.89522746458296,1 +118.81186567878156,1 +120.75348256078196,1 +122.72761647902617,1 +124.72579600472446,1 +126.72387668871072,1 +128.70268571282062,1 +130.65825465411112,1 +132.61419236837534,1 +134.5681861336868,1 +136.4941662745222,1 +138.39431844668277,1 +145.0587825826475,-1 +143.11362889861996,-1 +141.14054061442155,-1 +139.16834880516282,-1 +137.22383948560437,-1 +135.30407743919878,-1 +133.40799015938637,-1 diff --git a/testdata/golden/g_AtrTrailingStop.csv b/testdata/golden/g_AtrTrailingStop.csv new file mode 100644 index 00000000..b02f12d1 --- /dev/null +++ b/testdata/golden/g_AtrTrailingStop.csv @@ -0,0 +1,81 @@ +AtrTrailingStop +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +91.78705253596317 +91.78705253596317 +91.78705253596317 +91.78705253596317 +91.78705253596317 +93.76874235362372 +96.30368321728294 +99.27319152233567 +102.53628871165947 +105.90743353308245 +109.03984187521431 +111.69586763738577 +113.66018608319966 +114.85099508897224 +115.26758486242993 +115.26758486242993 +115.26758486242993 +115.26758486242993 +115.26758486242993 +121.85109184831337 +119.51650143409877 +117.53787877807773 +116.10324185785626 +115.45189787861992 +115.45189787861992 +115.45189787861992 +115.45189787861992 +115.45189787861992 +110.40535495904552 +113.62584743255056 +116.78593818129563 +119.72615665138063 +122.28110695003353 +124.2292677332288 +125.4347902488179 +125.71073220646969 +125.71073220646969 +125.71073220646969 +125.71073220646969 +125.71073220646969 +132.53210395759075 +130.13013386635836 +128.16588383470605 +126.91782330201404 +126.43653956708025 +126.43653956708025 +126.43653956708025 +126.43653956708025 +126.43653956708025 +120.86371052583938 +124.23775935006648 +127.53661361522211 +130.56268059440282 +133.14441463912604 +135.07600944003934 +136.17565323626474 +136.28777638796433 +136.28777638796433 +136.28777638796433 +136.28777638796433 +136.28777638796433 +142.7072505300425 +140.52060801218852 +138.6538196765925 +137.32616360003695 +136.80989260441592 +136.80989260441592 diff --git a/testdata/golden/g_AutoFib.csv b/testdata/golden/g_AutoFib.csv new file mode 100644 index 00000000..3102832f --- /dev/null +++ b/testdata/golden/g_AutoFib.csv @@ -0,0 +1,81 @@ +level_0,level_236,level_382,level_500,level_618,level_786,level_1000 +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +146.57143212166807,139.65283986732902,135.3726938116786,131.91339768450908,128.45410155733956,123.52900198645413,117.25536324735009 +146.57143212166807,139.65283986732902,135.3726938116786,131.91339768450908,128.45410155733956,123.52900198645413,117.25536324735009 +146.57143212166807,139.65283986732902,135.3726938116786,131.91339768450908,128.45410155733956,123.52900198645413,117.25536324735009 +146.57143212166807,139.65283986732902,135.3726938116786,131.91339768450908,128.45410155733956,123.52900198645413,117.25536324735009 +146.57143212166807,139.65283986732902,135.3726938116786,131.91339768450908,128.45410155733956,123.52900198645413,117.25536324735009 +146.57143212166807,139.65283986732902,135.3726938116786,131.91339768450908,128.45410155733956,123.52900198645413,117.25536324735009 +146.57143212166807,139.65283986732902,135.3726938116786,131.91339768450908,128.45410155733956,123.52900198645413,117.25536324735009 +146.57143212166807,139.65283986732902,135.3726938116786,131.91339768450908,128.45410155733956,123.52900198645413,117.25536324735009 diff --git a/testdata/golden/g_Autocorrelation.csv b/testdata/golden/g_Autocorrelation.csv new file mode 100644 index 00000000..325b4034 --- /dev/null +++ b/testdata/golden/g_Autocorrelation.csv @@ -0,0 +1,81 @@ +Autocorrelation +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.6350373907840188 +0.5405958230224509 +0.5715509867319618 +0.6847209376927287 +0.7382107181033117 +0.7579207987906323 +0.762822432921618 +0.7572980491605352 +0.7363889001173629 +0.6799889443191299 +0.5648879977703694 +0.54489228047915 +0.6396550255535112 +0.6974753084777462 +0.7246269314937726 +0.737356237098341 +0.7424339180343317 +0.7421497527004213 +0.7363829456099225 +0.7224953185679739 +0.692943015254534 +0.6302595069491079 +0.5367533355339029 +0.578450958314291 +0.6892271578296308 +0.7399336462425192 +0.758500447439642 +0.7627917441846417 +0.7566305617172937 +0.7344628307695249 +0.6750260473147637 +0.5585359164341555 +0.5495761556376604 +0.6441109481859122 +0.6995996374123962 +0.7256276173803344 +0.737808053951148 +0.7425514974267139 +0.7419828113973262 +0.735860098072037 +0.7213607302420498 +0.690526496586784 +0.625324582684563 +0.5334303166974939 +0.585517119455116 +0.6935137858338126 +0.7415627500956398 +0.7590385074166992 +0.7627302918469656 +0.7559165686210035 +0.7324268451189209 +0.6698284783594914 +0.5525700479734488 +0.5545816350091717 +0.6484051513599884 +0.701634870935319 +0.7265871731416474 +0.7382375020131329 +0.7426529432973633 +0.741799024970625 +0.7353121322341262 +0.720177679673926 +0.6880037896027371 +0.6202378952393583 +0.5306891887744772 +0.5926832075977227 +0.6975877865016052 +0.7431028082864907 +0.7595363725248612 +0.7626379258822382 +0.7551541640582837 diff --git a/testdata/golden/g_AutocorrelationPeriodogram.csv b/testdata/golden/g_AutocorrelationPeriodogram.csv new file mode 100644 index 00000000..4fec27b4 --- /dev/null +++ b/testdata/golden/g_AutocorrelationPeriodogram.csv @@ -0,0 +1,81 @@ +AutocorrelationPeriodogram +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +21.370134797170195 +21.740355712706783 +21.746722633874473 +21.740310825815456 +21.738725576107456 +21.749343751613182 +21.766185715939745 +21.75280720655723 +21.730273225340735 +21.40113988450871 +21.4057206919317 +21.75019334383562 +21.79086264109681 +21.81280419301341 +21.82788909151058 +21.844734772756343 +21.855934020583508 +21.837309938261576 +21.805673317865626 +21.777167581422532 +21.443409700389537 +21.445501400132258 +21.79881307579408 +21.8119294822053 +21.817181956120407 +21.823218785838115 +21.835956629473383 +21.82597746701043 +21.796450877056287 +21.762894634740192 diff --git a/testdata/golden/g_AverageDailyRange.csv b/testdata/golden/g_AverageDailyRange.csv new file mode 100644 index 00000000..3fb61500 --- /dev/null +++ b/testdata/golden/g_AverageDailyRange.csv @@ -0,0 +1,81 @@ +AverageDailyRange +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan diff --git a/testdata/golden/g_AverageDrawdown.csv b/testdata/golden/g_AverageDrawdown.csv new file mode 100644 index 00000000..5e5050a9 --- /dev/null +++ b/testdata/golden/g_AverageDrawdown.csv @@ -0,0 +1,81 @@ +AverageDrawdown +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.11634127345040222 +0.12821030145315085 +0.1331735000951348 +0.1331735000951348 +0.1331735000951348 +0.1331735000951348 +0.1331735000951348 +0.12848591667244894 +0.11764684482941928 +0.10157868991104642 +0.08163145656350326 +0.059639073995000014 +0.03790405604273088 +0.019048334089855002 +0.005693114578271463 +0.005299633662253274 +0.016795651904350065 +0.033098617914940426 +0.052389704554812816 +0.07258316476831601 +0.0915126451559611 +0.10712469987165406 +0.11766221882444922 +0.12182138508985806 +0.12182138508985806 +0.12182138508985806 +0.12182138508985806 +0.12182138508985806 +0.11714256410361094 +0.106819842069383 +0.09175989280684736 +0.07327028934655701 +0.053091790499189634 +0.0333617631244852 +0.016459952712424047 +0.0047138027568846995 +0.005230640090830808 +0.01611368029862617 +0.03134280485272303 +0.04922347521153511 +0.06782429814370941 +0.08514955133331055 +0.09931745531053977 +0.10872826720736029 +0.11220718102346297 +0.11220718102346297 +0.11220718102346297 +0.11220718102346297 +0.11220718102346297 +0.10753903894104662 +0.09766728005121854 +0.08348090178429443 +0.06624448981419782 +0.047612143066346396 +0.02957601401364172 +0.014311064191176653 +0.003903314430496008 +0.005169405070518737 +0.015524790599955774 +0.029831217603866415 +0.046500812330085135 +0.06373460629192022 +0.07968323276528869 +0.09261212521030097 +0.10105646093429439 +0.10395200934035767 +0.10395200934035767 diff --git a/testdata/golden/g_AvgPrice.csv b/testdata/golden/g_AvgPrice.csv new file mode 100644 index 00000000..38b05c5f --- /dev/null +++ b/testdata/golden/g_AvgPrice.csv @@ -0,0 +1,81 @@ +AvgPrice +99.5 +103.0164107856682 +106.37627358101629 +109.29790049544098 +111.52846427794583 +112.875521673814 +113.23347255708218 +112.60032201013415 +111.08145361594332 +108.8791967020537 +106.26936898786705 +103.56820817142187 +101.0947104237263 +99.13404459529625 +97.90729114869247 +97.55138116443152 +98.1111039285459 +99.54285912806507 +101.72792025538247 +104.49173065212182 +107.62538078254896 +110.90590746884149 +114.11320078613974 +117.0427452645055 +119.51475165912528 +121.3811006281581 +122.53171006302097 +122.90143777679592 +122.47762047177889 +121.30715443421617 +119.50102880884698 +117.23377096648008 +114.73556192793188 +112.27583959099815 +110.13883479309037 +108.59332241867756 +107.86047934521304 +108.08471167108598 +109.31236243425991 +111.4822566759027 +114.43022978908895 +117.90746386998124 +121.6100951023235 +125.21564025514759 +128.42071556026957 +130.97449658556297 +132.70337320460774 +133.52404653447638 +133.4444882618243 +132.55426356447325 +131.00727699563942 +129.00074817527417 +126.75407686183011 +124.49034662606454 +122.42184954038225 +120.73959006069859 +119.60563259734175 +119.14667258704391 +119.44743496013818 +120.54333510757368 +122.41300180733944 +124.9723861156795 +128.0728922037315 +131.50599292428956 +135.0160376079457 +138.3215327770725 +141.14337574868256 +143.23676289844406 +144.42221413881902 +144.61070035874553 +143.81840248790633 +142.16811736828257 +139.8764867613631 +137.22863145779047 +134.54392876795973 +132.13813355498985 +130.28751561753393 +129.20009166687123 +128.99752295261356 +129.70917825826996 diff --git a/testdata/golden/g_AwesomeOscillator.csv b/testdata/golden/g_AwesomeOscillator.csv new file mode 100644 index 00000000..435f8aef --- /dev/null +++ b/testdata/golden/g_AwesomeOscillator.csv @@ -0,0 +1,81 @@ +AwesomeOscillator +nan +nan +nan +nan +nan +nan +4.570384735666252 +3.0561960735193736 +1.3060244118088917 +-0.5029613190631039 +-2.1806316349272805 +-3.5478673393119635 +-4.45972306302761 +-4.8239605326770345 +-4.611928464809438 +-3.860170724834589 +-2.662851979440731 +-1.1567326730114758 +0.49834529769209723 +2.1399322681608766 +3.621058126238438 +4.823442008798722 +5.664624488465435 +6.099225791599579 +6.115713017257008 +5.7307491018189864 +4.983264118814745 +3.929865635050632 +2.642270392028422 +1.2063775184159056 +-0.2782755010444333 +-1.700370951480437 +-2.941539115447682 +-3.8848111682511757 +-4.426560895042215 +-4.4905029143506 +-4.041336078802331 +-3.095141337885565 +-1.7238315423742847 +-0.051814538997348336 +1.755588138704951 +3.5108177967705103 +5.027224984104208 +6.143053104704535 +6.742326922060116 +6.769203490096643 +6.233526397720709 +5.206948615972465 +3.8107042616057925 +2.197548410777671 +0.5312485539522243 +-1.0328599437079902 +-2.3633384078653137 +-3.3623590198364894 +-3.9692970894536757 +-4.159140565860511 +-3.9375741515588345 +-3.334927744300842 +-2.4008870804206026 +-1.201070754973344 +0.18446919732400602 +1.6617572146048616 +3.123994988128942 +4.454940551834056 +5.535772236746325 +6.25568607305982 +6.525284065794352 +6.290702816278866 +5.545716409745864 +4.338947257621982 +2.7739114688308177 +1.0008201986038898 +-0.7993872839936955 +-2.4367284429525 +-3.736291195848054 +-4.560873609806407 +-4.828409641147431 +-4.5213585575528725 +-3.6867152703922557 +-2.4270217468478847 diff --git a/testdata/golden/g_AwesomeOscillatorHistogram.csv b/testdata/golden/g_AwesomeOscillatorHistogram.csv new file mode 100644 index 00000000..b0615ce1 --- /dev/null +++ b/testdata/golden/g_AwesomeOscillatorHistogram.csv @@ -0,0 +1,81 @@ +AwesomeOscillatorHistogram +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-0.9493266094278141 +1.7672459352793481 +4.358600076656543 +6.602187110662683 +8.296344652184288 +9.27861644113095 +9.442987181842355 +8.753826167727667 +7.25419885683786 +5.0665482432504945 +2.3845764783962977 +-0.5436382784689613 +-3.4398844131397794 +-6.024743436412052 +-8.047619021280653 +-9.313944923149322 +-9.705960567267766 +-9.194367129485144 +-7.8395445596312925 +-5.782563640816335 +-3.227675980109794 +-0.4190478382801217 +2.384954592075786 +4.936675586288629 +7.020602423104549 +8.46957444157708 +9.175065513168391 +9.09175978422364 +8.237265156648007 +6.688051325128271 +4.572584632754555 +2.0622813941775746 +-0.639506865491029 +-3.310544480839141 +-5.724885228158627 +-7.6699583626310215 +-8.964799135663043 +-9.477980849005377 +-9.143214002480718 +-7.970274245069987 +-6.049057200396703 +-3.545191401367603 +-0.6867092734768505 +2.2573921410563855 +5.004523682794101 +7.28854601676781 +8.888622473659666 +9.653061836115356 +9.51501349919954 +8.498087823482493 +6.711485620389652 +4.335747942904732 +1.601499796426907 +-1.235657687979156 +-3.92076039317206 +-6.222630824411269 +-7.952404629276373 +-8.976299109386929 +-9.222487507138581 +-8.682707819907705 diff --git a/testdata/golden/g_BalanceOfPower.csv b/testdata/golden/g_BalanceOfPower.csv new file mode 100644 index 00000000..28c19e3d --- /dev/null +++ b/testdata/golden/g_BalanceOfPower.csv @@ -0,0 +1,81 @@ +BalanceOfPower +0.3333333333333333 +0.24918578562417015 +0.1532445561608729 +0.024109914758360565 +-0.15126369246092533 +-0.25417582811797773 +-0.2563705799388135 +-0.238958499833379 +-0.19898370712725183 +-0.09462869525070507 +0.09646244971146158 +0.191696193537678 +0.251698133657637 +0.29632302023341184 +0.24160580444005647 +0.1074394752043461 +-0.04656481238909804 +-0.18695156649433217 +-0.30940801019469627 +-0.2719504613058267 +-0.21909709777835693 +-0.14317865093203458 +0.0019179256746909683 +0.1686706139360438 +0.2261481511924474 +0.2511179797823408 +0.2583640495061432 +0.22489355230909897 +0.04851072393034144 +-0.10602062779905451 +-0.21123897147261406 +-0.29963302122758023 +-0.28542416318247493 +-0.19524129928924822 +-0.08474486500729668 +0.07807035681224662 +0.242093752144673 +0.2585594827839427 +0.24820936374708588 +0.21964769214967206 +0.15232695504569738 +-0.031921304253094404 +-0.15874904242960208 +-0.229067283671274 +-0.27950011753293874 +-0.2953068046022972 +-0.16450528334957878 +-0.020242744866534435 +0.13084089121639847 +0.2634385178724825 +0.28987746987489366 +0.2428622264031086 +0.17919013792356872 +0.07307732461055456 +-0.12208792348704414 +-0.20824812068932066 +-0.24307226671835522 +-0.2576641629334006 +-0.25048433157799066 +-0.1216259848690068 +0.050232123962901463 +0.17071256189429312 +0.2640188090274396 +0.32000647838387675 +0.2340825348195698 +0.13493603424139705 +-0.004722755729112378 +-0.1809893451226458 +-0.2566062991560634 +-0.25458511111195226 +-0.23427222899952724 +-0.18817443846542414 +-0.05656914016469241 +0.11699965213355376 +0.20331039833065437 +0.2601529201580851 +0.3021742327768193 +0.21963053062292107 +0.08342772449640856 +-0.07179523248890883 diff --git a/testdata/golden/g_BandpassFilter.csv b/testdata/golden/g_BandpassFilter.csv new file mode 100644 index 00000000..e764cb10 --- /dev/null +++ b/testdata/golden/g_BandpassFilter.csv @@ -0,0 +1,81 @@ +BandpassFilter +0 +0 +0.574012005267825 +1.5051939265432086 +2.54458305256959 +3.448198884988975 +4.009823523581662 +4.086218622606344 +3.6126423309268434 +2.607740442938282 +1.168078854019702 +-0.5463516323519935 +-2.333481351676574 +-3.9746162574859554 +-5.2610044847335145 +-6.018577471206315 +-6.128272491000966 +-5.539922414953268 +-4.278443350086661 +-2.4418821924935603 +-0.19172160457823573 +2.263398771828806 +4.688766487722294 +6.847281187751889 +8.523334458966975 +9.544513179170929 +9.799013460090258 +9.247104067761713 +7.925575961060641 +5.944799417755753 +3.4787170957550906 +0.7487650319430692 +-1.9967257897032682 +-4.505686285402234 +-6.5458419377839485 +-7.926421068127718 +-8.516023442252639 +-8.255001910353016 +-7.161225160735305 +-5.328704114314367 +-2.9192213921929238 +-0.14774288552589354 +2.737044853919084 +5.475288254175229 +7.819552786063573 +9.557295088306667 +10.530181529467578 +10.648504146188172 +9.899392260794748 +8.348081342219519 +6.132128774337021 +3.4491025141962037 +0.5388560394682242 +-2.3380110321146 +-4.9235660024931995 +-6.98572284815168 +-8.339104774759921 +-8.861715715702925 +-8.505924735201422 +-7.302778765807896 +-5.359258231660181 +-2.848723133656547 +0.004592589919308665 +2.9456477338629767 +5.711422895881837 +8.054466679915556 +9.765050346980752 +10.689947540292025 +10.746158408897616 +9.928350350366278 +8.309350104598916 +6.033643709739312 +3.3044662669350995 +0.3656366484755811 +-2.520237984148214 +-5.095238650435061 +-7.129192802756659 +-8.440252827993273 +-8.9111551990596 +-8.499706985123517 diff --git a/testdata/golden/g_Bat.csv b/testdata/golden/g_Bat.csv new file mode 100644 index 00000000..66afec8e --- /dev/null +++ b/testdata/golden/g_Bat.csv @@ -0,0 +1,81 @@ +Bat +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_BeltHold.csv b/testdata/golden/g_BeltHold.csv new file mode 100644 index 00000000..91aee5ef --- /dev/null +++ b/testdata/golden/g_BeltHold.csv @@ -0,0 +1,81 @@ +BeltHold +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Beta.csv b/testdata/golden/g_Beta.csv new file mode 100644 index 00000000..7c0b295f --- /dev/null +++ b/testdata/golden/g_Beta.csv @@ -0,0 +1,81 @@ +Beta +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.863916838203187 +0.8748124702967537 +0.8946057997263253 +0.9097376510155167 +0.9181565067334678 +0.9210003489201404 +0.9195962060547169 +0.9174932266003597 +0.9249257951689157 +0.9487138883457331 +0.9763919596319081 +0.9982565294377046 +1.0148263315283022 +1.0281782404141946 +1.0394064955543543 +1.0489488974748693 +1.0571321057638519 +1.0646183197218162 +1.0727296033664908 +1.0828615929930323 +1.0911561042681732 +1.0810543255482563 +1.051331614898589 +1.0227697126979647 +1.000995295766229 +0.9829715985782936 +0.9653406036335549 +0.9451174989027369 +0.9216191753734285 +0.9037866100777762 +0.9045216485189498 +0.9169748362729095 +0.929308980343615 +0.9386370921780702 +0.9457999485962022 +0.951969735684252 +0.9580843792885625 +0.9649552887069828 +0.9734937015559431 +0.985056253647133 +1.0018005474479652 +1.0249593111810618 +1.0468858332211455 +1.0574227426531946 +1.0631260338233803 +1.0711199209001776 +1.0832778096850664 +1.1012401382548238 +1.1284177503347732 +1.1643894947830498 +1.1798991232740288 +1.1435110876247687 +1.095047907967375 +1.059823640813714 +1.0350251002237765 +1.0158073630345508 +0.9994517629356037 +0.9843614479943972 +0.9691469518976262 +0.9520208340373357 +0.9305011010160512 +0.9027103937239579 +0.8742867284782383 +0.8641903901829808 +0.8780799337451082 +0.8976243091278221 +0.9115993363797762 diff --git a/testdata/golden/g_BetaNeutralSpread.csv b/testdata/golden/g_BetaNeutralSpread.csv new file mode 100644 index 00000000..68127e81 --- /dev/null +++ b/testdata/golden/g_BetaNeutralSpread.csv @@ -0,0 +1,81 @@ +BetaNeutralSpread +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-0.2585415378308795 +-0.4993116528757753 +-0.660554122723326 +-0.8417739990935189 +-0.9940127336318625 +-1.0136166410863723 +-0.8157621367727188 +-0.3808238960257313 +0.1596130472267845 +0.5518223092989984 +0.7417041911235884 +0.789122513596169 +0.6831847429618989 +0.4125921646233337 +0.015090992115048607 +-0.4262627257469802 +-0.8066162386151916 +-1.0262602291343086 +-1.0104824422158742 +-0.719242507129934 +-0.18556011997246458 +0.3562680792260551 +0.6659803367819421 +0.8162022867167025 +0.8573083669292458 +0.7729728569854899 +0.578717507402132 +0.35381569734282436 +0.23071822337757908 +0.2650729582560416 +0.29453297370702103 +0.26840219208467886 +0.32102803646179723 +0.5036817552249317 +0.7659099549699704 +1.015512035626415 +1.1601762104641011 +1.1361193390621622 +0.9273813212856226 +0.5750470861860606 +0.17624462791634699 +-0.14090234706588944 +-0.32253088596095836 +-0.41626106949441066 +-0.3752988114551812 +-0.1631002766338696 +0.15646143011794322 +0.4558538117537978 +0.5639725731245022 +0.28621373100585856 +-0.32161659706252976 +-0.6999940972494301 +-0.8122706308072907 +-0.9131042111880561 +-1.0062556863712473 +-1.0158739869142437 +-0.8906931691027467 +-0.6265605860162111 +-0.26784717689341164 +0.09757070069628071 +0.34693849029537205 +0.34661785105078025 +0.05441147972820204 +-0.3111523192098957 +-0.5273831067767674 +-0.6894593989888449 +-0.8720990395464128 diff --git a/testdata/golden/g_BetterVolume.csv b/testdata/golden/g_BetterVolume.csv new file mode 100644 index 00000000..c7ab8186 --- /dev/null +++ b/testdata/golden/g_BetterVolume.csv @@ -0,0 +1,81 @@ +BetterVolume +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-0.020006687804093315 +0.016853857336572298 +-0.039443721655550545 +-0.02244504158427907 +-0.025223946621270255 +0.08243871347885245 +-0.1082071684180308 +-0.14337788080854064 +0.00879243827398124 +0.31169646376078275 +0.15356652604555243 +-0.09429715058979049 +-0.1650695688447683 +-0.041544613501317995 +0.19786477636369748 +0.12344598883300695 +-0.0554132978177585 +-0.13953855277459903 +-0.05463281738826853 +-0.06774565586944081 +-0.12254177308123027 +-0.0099180855454859 +0.13103136419730332 +0.17867605288326305 +-0.07104363874158026 +-0.16360008983517416 +-0.06084539357512253 +0.20894317692883313 +0.25818479748558976 +-0.03352744693200438 +-0.15591433946317967 +-0.09024685095461416 +0.0730477105083932 +-0.03359007850841267 +-0.006209593457099372 +-0.047048932532378185 +0.03392770071710849 +-0.042080046900217716 +-0.14900204143948015 +-0.07466800960162501 +0.17526521130147488 +0.29157674859368754 +-0.008991353415500614 +-0.15938925130449477 +-0.11440099146902272 +0.10374770261998767 +0.14908511137403035 +0.03996789138168244 +-0.11990695568209042 +-0.10133381248716367 +-0.00406065257849475 +-0.11650997912640504 +-0.07609861291022613 +0.1260437678106 +0.17069801225265457 +0.01881666800862214 +-0.14723455991083556 +-0.12618577181329726 +0.08176882388289486 +0.33022657457227655 +0.06718419079012339 +-0.13098662573354236 +-0.14191904426459834 +0.018126709904739413 +-0.0022183788156834305 +-0.03569350419843753 +-0.03535812024691565 diff --git a/testdata/golden/g_BipowerVariation.csv b/testdata/golden/g_BipowerVariation.csv new file mode 100644 index 00000000..e27077e9 --- /dev/null +++ b/testdata/golden/g_BipowerVariation.csv @@ -0,0 +1,81 @@ +BipowerVariation +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.007714317161982309 +0.0062145762915002505 +0.005055925760075394 +0.004413365533571286 +0.004509607622819985 +0.005315124158263795 +0.006562355683354122 +0.007976745659640407 +0.009157869299122543 +0.009855166494125319 +0.01000102549806265 +0.009716198072767076 +0.0092475022543884 +0.00885982271749398 +0.008753022199498785 +0.008821311674973997 +0.009065210455553202 +0.009206353710855401 +0.0090447957832399 +0.008475495253598897 +0.007517898517010254 +0.006309639581562646 +0.0050779484609337604 +0.00414070344112324 +0.0036366010217849408 +0.0037456683217484757 +0.004435655246026971 +0.005483728195503344 +0.0066539207541450795 +0.007621693995782195 +0.008185407520850327 +0.008295670297527777 +0.008057397001252235 +0.007676101993368076 +0.007368119518318543 +0.007290088930196527 +0.007355792145932586 +0.007564861164309522 +0.007684383082253087 +0.007548043380736373 +0.007067741053187536 +0.006260469459591064 +0.005244893253273746 +0.004216393896626487 +0.003445642329481183 +0.003045608105953257 +0.0031627884884795174 +0.003763277919738434 +0.0046591553527013775 +0.005642564165698592 +0.006447307785190299 +0.006908866913841917 +0.006991486504657669 +0.0067877514311543985 +0.006471659359592264 +0.006222839305862642 +0.0061647329564093216 +0.006228520362098688 +0.006409678459244259 +0.006510814215342929 +0.00639161325444207 +0.0059779024956309644 +0.005285696100470746 +0.004419182286526892 +0.0035484581956077735 +0.002905784962653635 diff --git a/testdata/golden/g_BodySizePct.csv b/testdata/golden/g_BodySizePct.csv new file mode 100644 index 00000000..11f10f37 --- /dev/null +++ b/testdata/golden/g_BodySizePct.csv @@ -0,0 +1,81 @@ +BodySizePct +0.3333333333333333 +0.24918578562417015 +0.1532445561608729 +0.024109914758360565 +0.15126369246092533 +0.25417582811797773 +0.2563705799388135 +0.238958499833379 +0.19898370712725183 +0.09462869525070507 +0.09646244971146158 +0.191696193537678 +0.251698133657637 +0.29632302023341184 +0.24160580444005647 +0.1074394752043461 +0.04656481238909804 +0.18695156649433217 +0.30940801019469627 +0.2719504613058267 +0.21909709777835693 +0.14317865093203458 +0.0019179256746909683 +0.1686706139360438 +0.2261481511924474 +0.2511179797823408 +0.2583640495061432 +0.22489355230909897 +0.04851072393034144 +0.10602062779905451 +0.21123897147261406 +0.29963302122758023 +0.28542416318247493 +0.19524129928924822 +0.08474486500729668 +0.07807035681224662 +0.242093752144673 +0.2585594827839427 +0.24820936374708588 +0.21964769214967206 +0.15232695504569738 +0.031921304253094404 +0.15874904242960208 +0.229067283671274 +0.27950011753293874 +0.2953068046022972 +0.16450528334957878 +0.020242744866534435 +0.13084089121639847 +0.2634385178724825 +0.28987746987489366 +0.2428622264031086 +0.17919013792356872 +0.07307732461055456 +0.12208792348704414 +0.20824812068932066 +0.24307226671835522 +0.2576641629334006 +0.25048433157799066 +0.1216259848690068 +0.050232123962901463 +0.17071256189429312 +0.2640188090274396 +0.32000647838387675 +0.2340825348195698 +0.13493603424139705 +0.004722755729112378 +0.1809893451226458 +0.2566062991560634 +0.25458511111195226 +0.23427222899952724 +0.18817443846542414 +0.05656914016469241 +0.11699965213355376 +0.20331039833065437 +0.2601529201580851 +0.3021742327768193 +0.21963053062292107 +0.08342772449640856 +0.07179523248890883 diff --git a/testdata/golden/g_BollingerBands.csv b/testdata/golden/g_BollingerBands.csv new file mode 100644 index 00000000..46af2128 --- /dev/null +++ b/testdata/golden/g_BollingerBands.csv @@ -0,0 +1,81 @@ +upper,middle,lower,stddev +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +115.28678132658357,104.88573811030453,94.4846948940255,5.200521608139521 +115.44235076607696,105.24603036120507,95.04970995633319,5.098160202435939 +116.031797084579,105.60667720811657,95.18155733165413,5.212559938231218 +117.04307249142056,105.98012665317574,94.91718081493093,5.531472919122411 +118.42198305380711,106.37768308055611,94.33338310730511,6.022149986625501 +120.08275668667552,106.80849746949707,93.53423825231862,6.637129608589224 +121.91875364904577,107.2787499645824,92.63874628011904,7.320001842231685 +123.81164604805659,107.79109782183062,91.77054959560465,8.010274113112986 +125.64023050374611,108.34443804392872,91.04864558411133,8.647896229908694 +127.28963390911599,108.9340059076973,90.5783779062786,9.17781400070935 +128.66054775091027,109.55180058262147,90.44305341433265,9.554373584144406 +129.67757252249928,110.18729982121242,90.69702711992556,9.745136350643426 +130.29572502322122,110.82839988003757,91.36107473685391,9.733662571591827 +130.50437915457422,111.4624967110735,92.42061426757276,9.52094122175037 +130.32821912788876,112.07761184377782,93.82700455966688,9.125303642055467 +129.8251239347045,112.66346238618785,95.5018008376712,8.58083077425832 +129.08124974424334,113.21237956503455,97.34350938582577,7.934435089604395 +128.2039061910054,113.71999375441924,99.23608131783307,7.241956218293082 +127.3130646923414,114.18562480148111,101.05818491062082,6.5637199454301465 +126.53231715555998,114.61234278242675,102.69236840929352,5.959987186566614 +125.97953405782138,115.00669376176606,104.03385346571073,5.486420148027664 +125.75638565002856,115.37811505186531,104.99984445370205,5.18913529908163 +125.9357870598765,115.73809220594023,105.54039735200396,5.098847426968135 +126.54962545900983,116.09913304779411,105.64864063657839,5.225246205607857 +127.5832865042029,116.47365038516884,105.36401426613477,5.55481805951703 +128.98050368815137,116.87285321059787,104.76520273304435,6.053825238776757 +130.6540678076189,117.3057454354863,103.9574230633537,6.674161186066302 +132.49645112780993,117.77832159752104,103.06019206723217,7.359064765144439 +134.3889288726604,118.29303138647245,102.19713390028451,8.047948743093972 +136.21040535734892,118.84856082070294,101.48671628405697,8.680922268322988 +137.8466392967716,119.43994962123331,101.03325994569502,9.20334483776914 +139.19945460276048,120.05903429869099,100.9186139946215,9.570210152034747 +140.1950055547042,120.69517737350274,101.19534919230128,9.749914090600733 +140.79015691470516,121.33621759026396,101.88227826582275,9.7269696622206 +140.97626533174446,121.96955624646452,102.9628471611846,9.503354542639963 +140.77995945870256,122.58328259706207,104.38660573542157,9.098338430820245 +140.2608570959882,123.16723780586335,106.07361851573852,8.54680964506242 +139.5065053256598,123.71392240410584,107.9213394825519,7.896291460776974 +138.62515648619677,124.21916619566703,109.8131759051373,7.202995145264866 +137.7372262869952,124.68250076826405,111.62777524953292,6.527362759365569 +136.96623775826222,125.10720133532797,113.24816491239372,5.929518211467127 +136.42944797138296,125.49999417094236,114.57054037050175,5.464726900220303 +136.22726554012488,125.87045577181189,115.51364600349889,5.178404884156497 +136.43060069072433,126.230157417333,116.02971414394166,5.100221636695671 +137.06878377954558,126.59163154166757,116.11447930378954,5.2385761189390125 +138.12465065906432,126.9672522487239,115.80985383838346,5.578699205170216 +139.53989769930303,127.36812997030788,115.19636224131273,6.085883864497572 +141.22591219022797,127.80311900433938,114.38032581845077,6.711396592944301 +143.07430661728296,128.27802658678937,113.48174655629578,7.398140015246793 +144.9659868609782,128.79509414858606,112.62420143619393,8.085446356196067 +146.77999404813113,129.35279709526566,111.92560014240019,8.713598476432734 +148.40274791188529,129.9459809944551,111.48921407702495,9.228383458715081 +149.7372310064368,130.56632200596493,111.39541300549307,9.585454500235931 +150.7111716289501,131.2030704256427,111.69496922233529,9.7540506016537 +151.2832944894774,131.8440109244297,112.40472735938202,9.719641782523846 +151.44694145156345,132.47655370732554,113.50616596308762,9.485193872118952 +151.2306783629382,133.08885912227984,114.94703988162149,9.070909620329171 +150.69584577480683,133.67089526104846,116.64594474729007,8.51247525687919 +149.93135875840417,134.21533407967942,118.49930940095467,7.858012339362374 +149.04638529170163,134.71820599085441,120.39002669000722,7.1640896504236 +148.16175684928777,135.17925445530142,122.19675206131508,6.491251196993171 diff --git a/testdata/golden/g_BollingerBandwidth.csv b/testdata/golden/g_BollingerBandwidth.csv new file mode 100644 index 00000000..83507dd6 --- /dev/null +++ b/testdata/golden/g_BollingerBandwidth.csv @@ -0,0 +1,81 @@ +BollingerBandwidth +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.16879579007366963 +0.17680039057822927 +0.19650058792331948 +0.21424672611303816 +0.2218485156728804 +0.21648705446878214 +0.20039817797284118 +0.18181008950235328 +0.17501842039744026 +0.19202112961997517 +0.2296132116378656 +0.27452330345784903 +0.31478659715957635 +0.3426194907796683 +0.3538823387277926 +0.3473938366733072 +0.324421781822258 +0.28832646696443404 +0.24445364388302124 +0.20045521783803974 +0.16672530648934705 +0.15365434418611756 +0.1618877747665169 +0.1799586747321528 +0.19564323954262347 +0.20180075780129564 +0.19615765304280974 +0.18105793914413004 +0.1643364355224346 +0.15916961823314693 +0.1759174350690347 +0.21088933321375514 +0.2519325370144049 +0.2883903230414888 +0.3133589828361553 +0.3231651388296732 +0.31677699772975804 +0.2953792271733987 +0.2620835214006471 +0.2218646003349807 +0.18188180503423843 +0.1518284655869271 +0.14105525211152398 +0.14944174450186498 +0.16611882975908207 +0.18007211276410284 +0.18503513101386584 +0.17918413056541488 +0.16494940352977738 +0.14983419627137987 +0.14605883995477778 +0.1625815350074952 +0.19532779323479507 +0.23309979623147067 +0.26632849104751305 +0.2888422628732098 +0.2973632954758554 +0.29099651629787765 +0.27086994226989075 +0.23989745127507997 +0.2027485974935046 +0.16616935589709325 +0.13924944090549335 +0.13042028464978736 +0.1389005399902564 +0.15436552105040613 +0.16684102484831206 diff --git a/testdata/golden/g_BomarBands.csv b/testdata/golden/g_BomarBands.csv new file mode 100644 index 00000000..1c5278e0 --- /dev/null +++ b/testdata/golden/g_BomarBands.csv @@ -0,0 +1,81 @@ +upper,middle,lower +nan,nan,nan +nan,nan,nan +nan,nan,nan +109.54456746495428,104.85872397420964,100.172880483465 +111.65151860825563,107.6888216891277,103.72612476999979 +112.89632833892851,109.9437586389845,106.9911889390405 +113.21246502196237,111.4667715326924,109.72107804342244 +112.8892248089026,112.16647767524587,111.44373054158915 +113.0448085487968,112.02503791170568,111.00526727461457 +113.11645015802397,111.09975014578013,109.0830501335363 +112.40300630319841,109.51793108873431,106.63285587427022 +110.89428341069745,107.465543436754,104.03680346281055 +108.77045727553799,105.170584377139,101.57071147874 +106.29055511139218,102.88271927859448,99.47488344579678 +103.69537150274303,100.85097982741084,98.00658815207865 +101.26138998311686,99.30151876860623,97.3416475540956 +99.39183917325946,98.41740835475375,97.44297753624804 +99.09696311889532,98.32228704689435,97.54761097489337 +100.88606458106953,99.06931525903836,97.25256593700719 +103.65175428251058,100.636426696707,97.62109911090343 +106.93985035635006,102.92829947329929,98.91674859024852 +110.50130048396242,105.7848709303295,101.06844137669658 +114.06263444321557,108.99563555800292,103.92863667279026 +117.36505788785524,112.3184488254675,107.27183976307975 +120.15530188830373,115.5011572305877,110.84701257287166 +122.21705705960778,118.30412242131366,114.39118778301955 +123.41081646361405,120.52162737596674,117.63243828831943 +123.67460863895239,122.00025249210896,120.32589634526552 +123.32334238951928,122.65258010270678,121.98181781589427 +123.52967694292381,122.46500323597539,121.40032952902696 +123.57168767418082,121.49894108564327,119.42619449710571 +122.81008363613644,119.88535261729821,116.96062159845998 +121.26150106551827,117.81303839402005,114.36457572252183 +119.11116121675727,115.5117755843763,111.91238995199532 +116.61754881051904,113.23179265228805,109.84603649405706 +114.02410909737821,111.22141719359121,108.4187252898042 +111.60716983386915,109.70489357148244,107.80261730909574 +109.79101890540441,108.86235183541076,107.93368476541711 +109.64025166035313,108.81371724023293,107.98718282011274 +111.49550123607261,109.60799768036453,107.72049412465645 +114.29635096239225,111.21890596052967,108.14146095866708 +117.60669067034175,113.54720795262513,109.48772523490851 +121.1754810837076,116.42958688483967,111.68369268597174 +124.7285962944926,119.65323194248148,114.57786759047036 +128.00943849537012,122.97484802425063,117.94025755313115 +130.76373058571465,126.14238856904419,121.52104655237372 +132.77984823430293,128.9175701246016,125.05529201490029 +133.92236116696577,131.09715749862715,128.27195383028854 +134.13387561699338,132.5311181532323,130.92836068947125 +133.75476039371082,133.1360241647106,132.51728793571036 +134.01163192425003,132.9025045914931,131.7933772587362 +134.02407764994823,131.89608255244985,129.76808745495148 +133.21467011850407,130.25132224182528,127.28797436514648 +131.62680705985076,128.15980871053245,124.69281036121414 +129.45070282074064,125.8530341441435,122.25536546754638 +126.94422654816275,123.58171935539417,120.2192121626256 +124.35340533018136,121.5934176406918,118.83342995120223 +121.95433302095667,120.11040158142316,118.26647014188966 +120.19230042645569,119.30980809624275,118.4273157660298 +120.18612284393471,119.30781532768759,118.42950781144047 +122.1072009808641,120.14926479471215,118.1913286085602 +124.94256021918531,121.80365583334944,118.66475144751357 +128.27434900167492,124.16787013018447,120.06139125869402 +131.8496120701715,127.07538297417945,122.30115387818739 +135.39364533367225,130.31113841315837,125.22863149264451 +138.65212007096625,133.6307595615242,128.60939905208215 +141.36982290144138,136.78237805963352,132.19493321782565 +143.33987437956597,139.52913272423623,135.7183910689065 +144.4309591849817,141.67032765254316,138.90969612010463 +144.59027747241987,143.05935978949947,141.52844210657906 +144.18349821147515,143.61681454207186,143.05013087266857 +144.49067859459367,143.3375596483277,142.18444070206172 +144.47363354597658,142.2912036271084,140.1087737082402 +143.61679272630107,140.6158778563527,137.61496298640435 +141.9902394753585,138.50589770849567,135.02155594163284 +139.78912745344638,136.1944049369688,132.5996824204912 +137.27063732724702,133.93254181772085,130.59444630819468 +134.6833084637562,131.967017357672,129.25072625158782 +132.3029227555087,130.5180695138873,128.7332162722659 +130.5957116468157,129.75979199279567,128.92387233877565 diff --git a/testdata/golden/g_BreadthThrust.csv b/testdata/golden/g_BreadthThrust.csv new file mode 100644 index 00000000..8f43b564 --- /dev/null +++ b/testdata/golden/g_BreadthThrust.csv @@ -0,0 +1,81 @@ +BreadthThrust +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.8799999999999999 +0.8799999999999999 +0.8799999999999999 +0.8799999999999999 +0.8799999999999999 +0.9 +0.9199999999999999 +0.9199999999999999 +0.9199999999999999 +0.9199999999999999 +0.9199999999999999 +0.9 +0.8800000000000001 +0.8800000000000001 +0.8800000000000001 +0.8800000000000001 +0.8800000000000001 +0.9 +0.9199999999999999 +0.9399999999999998 +0.9399999999999998 +0.9399999999999998 +0.9399999999999998 +0.9199999999999999 +0.9 +0.8800000000000001 +0.8800000000000001 +0.8800000000000001 +0.8800000000000001 +0.8800000000000001 +0.9 +0.9199999999999999 +0.9199999999999999 +0.9199999999999999 +0.9199999999999999 +0.9199999999999999 +0.9 +0.8800000000000001 +0.8600000000000001 +0.8600000000000001 +0.8600000000000001 +0.8600000000000001 +0.8800000000000001 +0.9 +0.9199999999999999 +0.9199999999999999 +0.9199999999999999 +0.9199999999999999 +0.9199999999999999 +0.9 +0.8800000000000001 +0.8800000000000001 +0.8800000000000001 +0.8800000000000001 +0.8800000000000001 +0.9 +0.9199999999999999 +0.9199999999999999 +0.9199999999999999 +0.9199999999999999 +0.9199999999999999 +0.9 +0.8800000000000001 +0.8600000000000001 +0.8600000000000001 +0.8600000000000001 +0.8600000000000001 +0.8800000000000001 +0.9 +0.9199999999999999 +0.9199999999999999 diff --git a/testdata/golden/g_Breakaway.csv b/testdata/golden/g_Breakaway.csv new file mode 100644 index 00000000..00eafa45 --- /dev/null +++ b/testdata/golden/g_Breakaway.csv @@ -0,0 +1,81 @@ +Breakaway +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_BullishPercentIndex.csv b/testdata/golden/g_BullishPercentIndex.csv new file mode 100644 index 00000000..f7832349 --- /dev/null +++ b/testdata/golden/g_BullishPercentIndex.csv @@ -0,0 +1,81 @@ +BullishPercentIndex +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 +40 diff --git a/testdata/golden/g_BurkeRatio.csv b/testdata/golden/g_BurkeRatio.csv new file mode 100644 index 00000000..6f219627 --- /dev/null +++ b/testdata/golden/g_BurkeRatio.csv @@ -0,0 +1,81 @@ +BurkeRatio +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Butterfly.csv b/testdata/golden/g_Butterfly.csv new file mode 100644 index 00000000..d338c635 --- /dev/null +++ b/testdata/golden/g_Butterfly.csv @@ -0,0 +1,81 @@ +Butterfly +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_CalendarSpread.csv b/testdata/golden/g_CalendarSpread.csv new file mode 100644 index 00000000..8c4a62bb --- /dev/null +++ b/testdata/golden/g_CalendarSpread.csv @@ -0,0 +1,81 @@ +CalendarSpread +0.01 +0.009666019494661213 +0.009376779413793654 +0.009146346837205032 +0.008983080209092827 +0.00889086859955053 +0.008870086174138788 +0.008918053407388176 +0.009028967761420852 +0.009193390421319947 +0.009397507022217337 +0.009622551282607 +0.009844961975236079 +0.010037909328156144 +0.01017457098761774 +0.010232827647876806 +0.010200089659820928 +0.010076393859950124 +0.009874363035906818 +0.009616018479835346 +0.009327849613348961 +0.009036024360690063 +0.008763058101838406 +0.008526283291630682 +0.008337732971697183 +0.008204791613928324 +0.00813104423765838 +0.008116955714325538 +0.008160201794446166 +0.008255614135603771 +0.008394812402503608 +0.008565710770915795 +0.008752219504725498 +0.008934583041850908 +0.009090805528116603 +0.009199374533765523 +0.00924294394843137 +0.00921196485106045 +0.009106911196981525 +0.008938134900862869 +0.00872339478278925 +0.008484089805613272 +0.008241561453724424 +0.00801444238477726 +0.007817340940468221 +0.007660613714180716 +0.007550762453015309 +0.007491024223641833 +0.007481861474521295 +0.007521202176155136 +0.0076043962851238414 +0.007723951788107799 +0.007869211407155643 +0.008026235246877032 +0.008178234470372093 +0.00830687961994524 +0.008394590784426907 +0.008427485911799235 +0.008398180852909241 +0.008307429694358761 +0.008163923249540598 +0.007982316671465685 +0.007780268815158392 +0.007575514994104674 +0.007383716654716643 +0.007217329742491205 +0.007085327453351134 +0.006993435131277928 +0.0069445443204262484 +0.006939070170977933 +0.006975127430082516 +0.00704849660481214 +0.0071524360470966095 +0.007277478849179807 +0.0074114350670334405 +0.007539871507315741 +0.007647303169646352 +0.007719139044249521 +0.007744083177810161 +0.0077163384601521565 diff --git a/testdata/golden/g_CalmarRatio.csv b/testdata/golden/g_CalmarRatio.csv new file mode 100644 index 00000000..a9e2d595 --- /dev/null +++ b/testdata/golden/g_CalmarRatio.csv @@ -0,0 +1,81 @@ +CalmarRatio +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Camarilla.csv b/testdata/golden/g_Camarilla.csv new file mode 100644 index 00000000..585be8ad --- /dev/null +++ b/testdata/golden/g_Camarilla.csv @@ -0,0 +1,81 @@ +pp,r1,r2,r3,r4,s1,s2,s3,s4 +99.66666666666667,100.275,100.55,100.825,101.65,99.725,99.45,99.175,98.35 +103.16267454598328,103.7780337561168,104.10086544562022,104.42369713512362,105.39219220363384,103.13237037710999,102.80953868760658,102.48670699810317,101.51821192959295 +106.46632396532765,106.96961867057054,107.29281260719073,107.61600654381093,108.58558835367148,106.32323079733017,106.00003686070998,105.67684292408978,104.70726111422923 +109.30969002905226,109.60221419837052,109.8711593004662,110.14010440256189,110.94693970884894,109.06432399417915,108.79537889208346,108.52643378998778,107.71959848370072 +111.45910647185464,111.57257823345337,111.82476560723448,112.0769529810156,112.83351510235893,111.06820348589115,110.81601611211003,110.56382873832892,109.80726661698559 +112.74199773788952,112.76387649333724,113.05280312063391,113.3417297479306,114.20850962982065,112.18602323874386,111.89709661144718,111.60816998415049,110.74139010226044 +113.06847380764877,113.09245340010824,113.44643049143453,113.80040758276081,114.86233885673968,112.38449921745567,112.03052212612938,111.6765450348031,110.61461376082423 +112.44424589558567,112.49132701898097,112.85056037147318,113.2097937239654,114.28749378144207,111.77286031399652,111.4136269615043,111.05439360901208,109.97669355153542 +110.97251301246604,111.05574857922898,111.35686535294643,111.6579821266639,112.56133244781628,110.45351503179404,110.15239825807659,109.85128148435912,108.94793116320673 +108.84406406881523,108.97799635816386,109.18219391398941,109.38639146981497,109.99898413729163,108.56960124651275,108.3654036906872,108.16120613486164,107.54861346738498 +106.3166460187776,106.68075955248203,106.95031902436538,107.21987849624873,108.02855691189879,106.14164060871532,105.87208113683197,105.60252166494863,104.79384324929856 +103.68631980047041,104.26141987598294,104.60029669339836,104.93917351081379,105.95580396306005,103.58366624115209,103.24478942373666,102.90591260632124,101.88928215407498 +101.25473880483469,101.92448274323586,102.27416991942023,102.6238570956046,103.67291862415775,101.2251083908671,100.87542121468273,100.52573403849836,99.47667250994522 +99.29680919958425,99.92444295706736,100.22654750597445,100.52865205488155,101.43496570160283,99.32023385925316,99.01812931034607,98.71602476143897,97.80971111471769 +98.03294152441634,98.57027723602701,98.8563121961899,99.1423471563528,100.0004520368415,97.99820731570122,97.71217235553833,97.42613739537543,96.56803251488674 +97.60915371740403,98.02044583881464,98.31619285428026,98.61193986974587,99.4991809161427,97.42895180788342,97.1332047924178,96.83745777695219,95.95021673055535 +98.08685392291113,98.32478270657958,98.61121150151759,98.89764029645558,99.75692668126956,97.7519251167036,97.4654963217656,97.17906752682761,96.31978114201362 +99.44252381095095,99.53703350309051,99.83221382945834,100.12739415582618,101.01293513492969,98.94667285035483,98.651492523987,98.35631219761916,97.47077121851565 +101.57606521173501,101.5422908444415,101.81222656444285,102.08216228444422,102.89196944444832,101.00241940443875,100.7324836844374,100.46254796443603,99.65274080443193 +104.32553529275576,104.32926258320965,104.66538059239568,105.0014986015817,106.00985262913977,103.65702656483761,103.32090855565158,102.98479054646556,101.97643651890749 +107.48553552770288,107.55689891578143,107.90795281355214,108.25900671132284,109.31216840463496,106.85479112024004,106.50373722246933,106.15268332469863,105.09952163138651 +110.82665131417549,110.9725900160979,111.2770410273523,111.5814920386067,112.49484507236991,110.3636879935891,110.0592369823347,109.7547859710803,108.84143293731708 +114.11393840247109,114.3269385068177,114.53846337850163,114.74998825018555,115.38456286523734,113.90388876344986,113.69236389176592,113.480839020082,112.84626440503021 +117.12329605763098,117.54705712667621,117.80971660947044,118.07237609226466,118.86035454064734,117.02173816108777,116.75907867829353,116.49641919549931,115.70844074711664 +119.6553939855807,120.27872556278697,120.62077248708242,120.96281941137788,121.98896018426422,119.59463171419608,119.25258478990064,118.91053786560518,117.88439709271884 +121.54740034135453,122.24423032717334,122.60846088659929,122.97269144602525,124.0653831243031,121.51576920832144,121.1515386488955,120.78730808946953,119.69461641119169 +122.68295119326267,123.3073924174329,123.62935138111975,123.95131034480659,124.91718723586712,122.66347449005922,122.34151552637236,122.01955656268552,121.05367967162499 +123.0005912206809,123.44138791563655,123.68387772282226,123.92636753000795,124.65383695156505,122.95640830126517,122.71391849407946,122.47142868689377,121.74395926533667 +122.50041000814686,122.8043699910581,123.0627509012334,123.32113181140869,124.09627454193458,122.28760817070751,122.02922726053221,121.77084635035692,120.99570361983103 +121.2480003897514,121.43656394581242,121.743435590803,122.0503072357936,122.97092217076536,120.82282065583124,120.51594901084066,120.20907736585006,119.2884624308783 +119.37441415670385,119.4508496779621,119.78051450350664,120.11017932905116,121.09917380568476,118.79152002687304,118.4618552013285,118.13219037578398,117.14319589915038 +117.0706953893436,117.04388229553408,117.34322035599752,117.64255841646096,118.54057259785128,116.4452061746072,116.14586811414375,115.84653005368031,114.94851587228999 +114.57595201454465,114.56429357775264,114.87185496773508,115.17941635771751,116.10210052766485,113.94917079778776,113.64160940780532,113.33404801782288,112.41136384787555 +112.1587734147477,112.25441963456801,112.58419820688923,112.91397677921046,113.90331249617411,111.59486248992557,111.26508391760436,110.93530534528313,109.94596962831947 +110.09297423674845,110.29889128757917,110.59652945109374,110.89416761460834,111.78708210515208,109.70361496054998,109.40597679703541,109.10833863352082,108.21542414297707 +108.62989574587948,108.96069883714864,109.218355274014,109.47601171087935,110.24898102147542,108.44538596341795,108.18772952655259,107.93007308968724,107.15710377909117 +107.97053212992039,108.44066080423896,108.69068390914283,108.94070701404672,109.69077632875835,107.94061459443121,107.69059148952734,107.44056838462345,106.69049906991182 +108.24129915337737,108.88756232781016,109.2206505376602,109.55373874751025,110.55300337706038,108.22138590811007,107.88829769826002,107.55520948840997,106.55594485885985 +109.47714653729103,110.17185510429249,110.53699546523174,110.90213582617098,111.99755690898873,109.44157438241399,109.07643402147474,108.7112936605355,107.61587257771775 +111.61489250420503,112.21228559059719,112.54440702038471,112.87652845017223,113.8728927395348,111.54804273102215,111.21592130123463,110.88379987144711,109.88743558208454 +114.49824346605784,114.87984470625676,115.12541859251787,115.37099247877899,116.10771413756234,114.38869693373454,114.14312304747342,113.89754916121231,113.16082750242896 +117.8942032754348,118.09616043868955,118.32463879103715,118.55311714338472,119.23855220042748,117.63920373399439,117.4107253816468,117.18224702929922,116.49681197225647 +121.51880689228612,121.65250649348452,121.96878251475769,122.28505853603085,123.23388659985032,121.01995445093822,120.70367842966505,120.38740240839189,119.43857434457242 +125.06867496722403,125.12761411184715,125.48048383231736,125.83335355278759,126.89196271419824,124.4218746709067,124.0690049504365,123.71613522996627,122.65752606855561 +128.2540554225371,128.24868876856593,128.57664239005965,128.90459601155334,129.88845687603444,127.59278152557853,127.26482790408484,126.93687428259113,125.95301341811003 +130.82894581221407,130.80892818262987,131.08001209974353,131.35109601685716,132.16434776819813,130.26676034840256,129.9956764312889,129.72459251417527,128.9113407628343 +132.61456770121885,132.73386525487982,133.03077381531858,133.32768237575732,134.21840805707362,132.14004813400228,131.84313957356352,131.54623101312478,130.65550533180848 +133.51372898547731,133.7734240495645,134.05375421164987,134.3340843737352,135.17507485999127,133.21276372539384,132.93243356330848,132.65210340122314,131.81111291496708 +133.51518476304713,133.9537560811636,134.2509343968344,134.54811271250523,135.43964765951765,133.35939944982198,133.06222113415117,132.76504281848034,131.87350787146792 +132.68866514679192,133.23806839554868,133.518668479668,133.79926856378734,134.6410688161453,132.67686822731002,132.3962681431907,132.11566805907137,131.2738678067134 +131.17247746428333,131.8163220706958,132.12976573982044,132.44320940894505,133.38354041631897,131.18943473244653,130.8759910633219,130.56254739419728,129.62221638682337 +129.1563006939515,129.81967906149674,130.17195239168734,130.52422572187794,131.58104571244974,129.11513240111555,128.76285907092495,128.41058574073435,127.35376575016255 +126.86189674888487,127.40847514811799,127.73941377324154,128.0703523983651,129.06316827373576,126.74659789787088,126.41565927274733,126.08472064762378,125.09190477225312 +124.52403581279573,124.84496825109156,125.09852231592498,125.35207638075842,126.11273857525872,124.33786012142468,124.08430605659126,123.83075199175782,123.07008979725752 +122.37315973892662,122.49512526070693,122.7144703853985,122.93381551009008,123.59185088416483,122.05643501132376,121.83708988663219,121.6177447619406,120.95970938786586 +120.62044223256866,120.6968255527843,121.01150452925984,121.32618350573539,122.27022043516199,120.06746759983324,119.7527886233577,119.43810964688215,118.49407271745555 +119.44519828628948,119.48734463199692,119.85035959980887,120.21337456762083,121.30241947105671,118.76131469637299,118.39829972856104,118.03528476074908,116.9462398573132 +118.98423170775713,119.00608999479411,119.35283004040464,119.69957008601519,120.73979022284678,118.31260990357305,117.96586985796252,117.61912981235197,116.57890967552038 +119.32275870519,119.34716359875881,119.62092100222395,119.89467840568909,120.71595061608453,118.79964879182853,118.52589138836339,118.25213398489825,117.43086177450282 +120.48694857241185,120.6291587967551,120.88414209142206,121.13912538608902,121.9040752700899,120.1191922074212,119.86420891275424,119.60922561808728,118.8442757340864 +122.4387103823207,122.77161505708187,123.0531025818805,123.33459010667913,124.179052681075,122.2086400074846,121.92715248268598,121.64566495788735,120.80120238349147 +125.07389544503057,125.6039558312047,125.93099755867671,126.25803928614873,127.23916446856478,124.94987237626066,124.62283064878865,124.29578892131663,123.31466373890058 +128.2253492633656,128.84785962930889,129.16545587598398,129.4830521226591,130.43584086268444,128.21266713595864,127.89507088928353,127.57747464260842,126.62468590258308 +131.67207090888238,132.2896676353533,132.57510839263853,132.86054914992377,133.71687142177942,131.71878612078288,131.43334536349766,131.14790460621242,130.29158233435678 +135.15507483469676,135.7598309638397,136.08651263948047,136.41319431512125,137.3932393420436,135.10646761255816,134.7797859369174,134.45310426127662,133.47305923435428 +138.3994880837803,138.8731449458564,139.1908911945168,139.5086374431772,140.46187618915837,138.2376524485356,137.91990619987521,137.60215995121482,136.64892120523365 +141.1411629574787,141.39443335426606,141.6521293334611,141.9098253126561,142.68291325024117,140.87904139587604,140.621345416681,140.363649437486,139.59056149990093 +143.154923777789,143.23994258729024,143.48863963810155,143.73733668891285,144.48342784134675,142.74254848566764,142.49385143485634,142.24515438404504,141.49906323161113 +144.28078575968826,144.3010611099437,144.60419321846072,144.9073253269777,145.81672165252874,143.69479689290972,143.3916647843927,143.0885326758757,142.17913635032468 +144.44430932083742,144.4709947348903,144.83046222475943,145.18992971462856,146.26833218423596,143.75205975515203,143.3925922652829,143.03312477541377,141.95472230580637 +143.66778712039107,143.72015549733024,144.0737546092999,144.42735372126958,145.4881510571786,143.01295727339087,142.6593581614212,142.30575904945152,141.2449617135425 +142.07015356602253,142.16055651565432,142.44688706980628,142.7332176239582,143.59220928641403,141.58789540735046,141.3015648531985,141.01523429904657,140.15624263659075 +139.85515947975856,140.01986187563278,140.22721883471613,140.4345757937995,141.05664667104958,139.60514795746604,139.3977909983827,139.19043403929933,138.56836316204925 +137.28916235919314,137.69477198042676,137.97931979885507,138.26386761728335,139.11751107256825,137.1256763435702,136.8411285251419,136.55658070671362,135.70293725142872 +134.6714977766173,135.27173843175984,135.6168410695873,135.96194370741475,136.9972516208971,134.58153315610497,134.2364305182775,133.89132788045006,132.85601996696772 +132.3015073284582,132.97365009660936,133.31904531782385,133.6644405390383,134.70062620268175,132.28285965418044,131.93746443296595,131.5920692117515,130.55588354810806 +130.44669455820846,131.05478070846547,131.34450897737338,131.6342372462813,132.503422053005,130.47532417064966,130.18559590174175,129.89586763283384,129.02668282611012 +129.31610321851522,129.83864309660322,130.12915987140326,130.41967664620327,131.2912269706034,129.25760954700314,128.9670927722031,128.6765759974031,127.80502567300299 +129.04196344134022,129.4238197929536,129.7167951671137,130.00977054127378,130.88869666375405,128.83786904463344,128.54489367047333,128.25191829631325,127.37299217383298 +129.6711671025228,129.8863359319469,130.17752707286533,130.4687182137838,131.3422916365392,129.30395365010995,129.0127625091915,128.72157136827303,127.84799794551763 diff --git a/testdata/golden/g_CandleVolume.csv b/testdata/golden/g_CandleVolume.csv new file mode 100644 index 00000000..7326f18d --- /dev/null +++ b/testdata/golden/g_CandleVolume.csv @@ -0,0 +1,81 @@ +body,width +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +0.9765876257280297,0.984655289664394 +0.753902254343302,0.9655888555864744 +0.3466353178350232,0.9478399490597385 +-0.14550003380861654,0.9421884126131856 +-0.6020119026848221,0.9626483486089994 +-0.9111302618846793,0.982008928644718 +-0.9971721561963847,0.9994748549503978 +-0.839071529076449,1.014322206909651 +-0.47553692799598934,1.0259317329262934 +0.004425697988054367,1.0338179677540162 +0.4833047587530075,1.0376522745715915 +0.8438539587324954,1.037278269633565 +0.997798279178582,1.0327186208417392 +0.9074467814501901,1.02417285734972 +0.5949206633098925,1.0120065030300074 +0.13673721820782703,0.9967324660159146 +-0.35492426678870004,0.9789861056332733 +-0.7596879128588228,0.9602431516076592 +-0.9784534628188908,0.9429885830339675 +-0.957659480323386,0.9481824990977922 +-0.7023970575027079,0.9684053199331565 +-0.2751633380515983,0.9872912880378175 +0.21943996321145676,1.004062387240149 +0.660316708244082,1.0180220081224625 +0.9395248937482563,1.0285872282268333 +0.9887046181866737,1.0353163377871835 +0.7958149698139465,1.0379297944922188 +0.40808206181338846,1.0363232052220062 +-0.07956356727854086,1.0305715065663164 +-0.5477292602242727,1.0209241793938475 +-0.8817917275413265,1.0077920006157317 +-0.9999608263946413,0.9917264232926171 +-0.8733046400935223,0.973393116719882 +-0.5328330203333849,0.955024624146008 +-0.061905293994414023,0.9383122349014661 +0.42417900733698843,0.9543505295086965 +0.8064094939122413,0.9742707127072462 +0.9912028118634737,0.9926201298908018 +0.9333151120639229,1.0086408477275313 +0.6469193223286425,1.0216661587699942 +0.20213512038718306,1.031151684705769 +-0.2921388087338386,1.0367011620214064 +-0.7148869687796662,1.038085194538078 +-0.9626058663135666,1.0352517241668941 +-0.9746452757206612,1.0283275796462352 +-0.7480575296890066,1.017611137078072 +-0.33831921097105067,1.0035567790828313 +0.15425144988758177,0.9867523903910149 +0.6090559761063616,0.9678915162790147 +0.9147423578045277,0.9499475852415349 +0.9964679075571325,0.9397020957441122 +0.8342233605065132,0.9602427230971811 +0.46773184024706893,0.979785655912073 +-0.013276747223045504,0.9975291172747941 +-0.49103472393022685,1.0127383995629875 +-0.8485702747846062,1.0247795352159101 +-0.9983462274487351,1.0331490429289865 +-0.9036922050915166,1.0374978179919319 +-0.5877828135603806,1.0376475694716916 +-0.1279636896273928,1.0335987217208569 +0.36318540841605795,1.0255293338594307 +0.7654140519453563,1.0137852677558696 +0.9802426408101041,0.9988624659015874 +0.9550736440473031,0.981382709136468 +0.6960693098639013,0.9624962497402593 +0.26664293235992886,0.9450260708304375 +-0.22806693448310966,0.9456174499826545 diff --git a/testdata/golden/g_Cci.csv b/testdata/golden/g_Cci.csv new file mode 100644 index 00000000..e33bf182 --- /dev/null +++ b/testdata/golden/g_Cci.csv @@ -0,0 +1,81 @@ +Cci +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-122.65932429363109 +-137.0151636882593 +-125.89930403140004 +-97.28687448853665 +-68.89633258784652 +-36.986950523349655 +5.758651399936917 +62.864395027655675 +121.0870946466215 +162.18720159415741 +172.7906916122349 +155.98932495874317 +135.3900230711342 +118.18311631230027 +101.58617910826399 +85.22432859940257 +66.64253836944792 +44.18611990667164 +13.333188942766858 +-31.988350185399963 +-86.0671956700284 +-129.1098911519495 +-145.74229167302815 +-133.63346204564155 +-103.91680518883841 +-75.06848534147063 +-42.082042678179896 +2.623260777078958 +62.365521098016124 +122.88166496963616 +164.76450500448146 +175.23787441565088 +157.18595019740496 +134.88409615821863 +115.56367722441603 +97.42273397535438 +79.7977290344987 +60.04988624181605 +37.05808198213891 +5.546522903176091 +-38.70113580103531 +-88.54943184764521 +-126.83931360506966 +-138.37517068893328 +-123.72480218655511 +-98.10552682658836 +-70.91095910586428 +-39.32477773272531 +4.872795229977028 +66.35776909428522 +129.5889082507055 +172.47645945857795 +180.22055847633152 +160.5307951144403 +139.24629124480492 +119.96699253157763 +101.92554742327289 +83.25382335921361 +62.58369948385561 +37.65398440197594 +4.108305732491509 +-42.0145103118215 +-91.79904312001099 +-127.58279600856493 +-136.9251325264295 +-120.6795182260707 +-92.97374297548613 diff --git a/testdata/golden/g_CenterOfGravity.csv b/testdata/golden/g_CenterOfGravity.csv new file mode 100644 index 00000000..5684dbcc --- /dev/null +++ b/testdata/golden/g_CenterOfGravity.csv @@ -0,0 +1,81 @@ +CenterOfGravity +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-0.029704561453137934 +-0.10340580108288844 +-0.16166923131629574 +-0.1994332453704759 +-0.21304260515759488 +-0.20072638635228657 +-0.16301631810464556 +-0.10297972854664206 +-0.026135596697043795 +0.060027641225655515 +0.1469099335468389 +0.22588831962719613 +0.28940804647613305 +0.33184646271325047 +0.35000191891529386 +0.3431815708485395 +0.31296670739862975 +0.2627859057555817 +0.1974223377305666 +0.12254236840120303 +0.0442834065391704 +-0.03110237797964288 +-0.09757727970269947 +-0.14965684132125112 +-0.18278564138076803 +-0.19375266001825153 +-0.18111140161507855 +-0.1455282847908741 +-0.08995240792883497 +-0.019500766906722866 +0.05900006988008677 +0.13778663782867007 +0.20911744698371404 +0.26622503218137883 +0.3040703624529826 +0.31977682049703127 +0.31272033690461587 +0.28433841826869344 +0.23776490895795632 +0.17739633993453818 +0.10846506714161652 +0.03665416389344944 +-0.03224574696344362 +-0.09265929364740799 +-0.13955687517727355 +-0.16881245778179377 +-0.1775860176583821 +-0.16469573464953235 +-0.13091076448044792 +-0.07907282901719892 +-0.013960257257419784 +0.05814820175393631 +0.13017664587967825 +0.19510760174949748 +0.24682397691841285 +0.2807759090901296 +0.2943688496948047 +0.28705212534668423 +0.2601593698855904 +0.21659016624123417 +0.16042295033508758 +0.0965247006286658 +0.03018950171346546 +-0.0331914493509764 +-0.08844447626009799 +-0.13093412270004734 +-0.15690334372246628 diff --git a/testdata/golden/g_CentralPivotRange.csv b/testdata/golden/g_CentralPivotRange.csv new file mode 100644 index 00000000..5e53a59f --- /dev/null +++ b/testdata/golden/g_CentralPivotRange.csv @@ -0,0 +1,81 @@ +pivot,tc,bc +99.66666666666667,99.83333333333334,99.5 +103.16267454598328,103.30893830629836,103.0164107856682 +106.46632396532765,106.55637434963901,106.37627358101628 +109.30969002905226,109.32147956266354,109.29790049544098 +111.45910647185464,111.52846427794583,111.38974866576345 +112.74199773788952,112.875521673814,112.60847380196503 +113.06847380764877,113.23347255708218,112.90347505821536 +112.44424589558567,112.60032201013414,112.2881697810372 +110.97251301246604,111.08145361594332,110.86357240898876 +108.84406406881523,108.87919670205369,108.80893143557677 +106.3166460187776,106.36392304968814,106.26936898786707 +103.68631980047041,103.80443142951896,103.56820817142187 +101.25473880483469,101.41476718594308,101.0947104237263 +99.29680919958425,99.45957380387225,99.13404459529625 +98.03294152441634,98.15859190014022,97.90729114869247 +97.60915371740403,97.66692627037654,97.55138116443152 +98.08685392291113,98.1111039285459,98.06260391727636 +99.44252381095095,99.54285912806509,99.3421884938368 +101.57606521173501,101.72792025538246,101.42421016808757 +104.32553529275576,104.49173065212182,104.1593399333897 +107.48553552770288,107.62538078254896,107.3456902728568 +110.82665131417549,110.90590746884149,110.7473951595095 +114.11393840247109,114.11467601880244,114.11320078613974 +117.12329605763098,117.20384685075648,117.04274526450548 +119.6553939855807,119.79603631203612,119.51475165912528 +121.54740034135453,121.71370005455097,121.3811006281581 +122.68295119326267,122.83419232350437,122.53171006302097 +123.0005912206809,123.09974466456589,122.90143777679592 +122.50041000814686,122.52319954451482,122.47762047177889 +121.2480003897514,121.30715443421619,121.1888463452866 +119.37441415670385,119.50102880884698,119.24779950456072 +117.0706953893436,117.23377096648008,116.90761981220712 +114.57595201454465,114.73556192793188,114.41634210115743 +112.1587734147477,112.27583959099815,112.04170723849725 +110.09297423674845,110.13883479309038,110.04711368040651 +108.62989574587948,108.6664690730814,108.59332241867756 +107.97053212992039,108.08058491462774,107.86047934521304 +108.24129915337737,108.39788663566875,108.08471167108598 +109.47714653729103,109.64193064032216,109.31236243425991 +111.61489250420503,111.74752833250736,111.4822566759027 +114.49824346605784,114.56625714302673,114.43022978908895 +117.8942032754348,117.90746386998124,117.88094268088837 +121.51880689228612,121.6100951023235,121.42751868224875 +125.06867496722403,125.21564025514759,124.92170967930046 +128.2540554225371,128.42071556026954,128.08739528480467 +130.82894581221407,130.97449658556297,130.68339503886517 +132.61456770121885,132.70337320460774,132.52576219782995 +133.51372898547731,133.52404653447638,133.50341143647825 +133.51518476304713,133.58588126426997,133.4444882618243 +132.68866514679192,132.82306672911062,132.55426356447322 +131.17247746428333,131.33767793292725,131.00727699563942 +129.1563006939515,129.31185321262882,129.00074817527417 +126.86189674888487,126.96971663593965,126.7540768618301 +124.52403581279573,124.55772499952693,124.49034662606454 +122.37315973892662,122.42184954038225,122.32446993747098 +120.62044223256866,120.7395900606986,120.50129440443872 +119.44519828628948,119.60563259734174,119.28476397523723 +118.98423170775713,119.14667258704391,118.82179082847036 +119.32275870519,119.44743496013817,119.19808245024183 +120.48694857241185,120.54333510757368,120.43056203725001 +122.4387103823207,122.46441895730197,122.41300180733944 +125.07389544503057,125.17540477438165,124.9723861156795 +128.2253492633656,128.37780632299967,128.0728922037315 +131.67207090888238,131.83814889347522,131.50599292428953 +135.15507483469676,135.29411206144783,135.0160376079457 +138.3994880837803,138.47744339048813,138.3215327770725 +141.1411629574787,141.14337574868256,141.13895016627487 +143.154923777789,143.23676289844406,143.07308465713396 +144.28078575968826,144.42221413881902,144.1393573805575 +144.44430932083742,144.61070035874553,144.2779182829293 +143.66778712039107,143.81840248790633,143.5171717528758 +142.07015356602253,142.1681173682826,141.97218976376246 +139.85515947975856,139.8764867613631,139.833832198154 +137.28916235919314,137.3496932605958,137.22863145779047 +134.6714977766173,134.79906678527485,134.54392876795973 +132.3015073284582,132.46488110192655,132.13813355498985 +130.44669455820846,130.605873498883,130.28751561753393 +129.31610321851522,129.43211477015922,129.20009166687123 +129.04196344134022,129.08640393006687,128.99752295261356 +129.6711671025228,129.70917825826996,129.63315594677562 diff --git a/testdata/golden/g_Cfo.csv b/testdata/golden/g_Cfo.csv new file mode 100644 index 00000000..d0d6a60b --- /dev/null +++ b/testdata/golden/g_Cfo.csv @@ -0,0 +1,81 @@ +Cfo +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-6.211646080627608 +-4.326168820371739 +-1.9809568063530525 +0.5641678339418075 +3.0155411654258417 +5.100039306202571 +6.611794576007831 +7.436628441374017 +7.551430784375306 +7.006106190201074 +5.899243715723177 +4.356210175798714 +2.513774869044149 +0.5116091092195241 +-1.5110398324943306 +-3.415928801007014 +-5.066183639970011 +-6.328893284343613 +-7.0821395678249885 +-7.227944862524328 +-6.7108691035644785 +-5.538912420628598 +-3.7996836991124483 +-1.6627286067588798 +0.6386013032501248 +2.8445009635287324 +4.714568584677494 +6.066868777653567 +6.798734610154175 +6.887050893935393 +6.373889886905947 +5.346360338750714 +3.917856442289515 +2.214354232171148 +0.3663102302610901 +-1.4951052028214036 +-3.239463752524493 +-4.7384288416183535 +-5.869137265738293 +-6.521457175092864 +-6.610177820348697 +-6.091516337439192 +-4.980669156090255 +-3.3642443681150747 +-1.4001768009593452 +0.6997059601743493 +2.7026927354653574 +4.394568805484394 +5.6128794690880905 +6.264871463945765 +6.328271120061411 +5.839570356448417 +4.87702457146736 +3.544386123905891 +1.9586015657786786 +0.24212486093676455 +-1.4811191982409797 +-3.087830679315334 +-4.457417276876832 +-5.47593258056298 +-6.043407388134122 +-6.085296605811297 +-5.567196988783816 +-4.509694692527085 +-2.9979300852630986 +-1.179807171385863 +0.7506929347576933 diff --git a/testdata/golden/g_ChaikinMoneyFlow.csv b/testdata/golden/g_ChaikinMoneyFlow.csv new file mode 100644 index 00000000..3e271796 --- /dev/null +++ b/testdata/golden/g_ChaikinMoneyFlow.csv @@ -0,0 +1,81 @@ +ChaikinMoneyFlow +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-0.006145532299268624 +-0.03294955594957903 +-0.052103925719440676 +-0.05933075199801512 +-0.051729096848586884 +-0.032470848255568764 +-0.006737254560738442 +0.019482192315830045 +0.043099127365522086 +0.055838186240634774 +0.055638276998371115 +0.04062583246303418 +0.01670418407495489 +-0.009656040807589212 +-0.03398419545983379 +-0.050001763026968245 +-0.05109712060201814 +-0.03640737310813678 +-0.014062979479010992 +0.013856817096127913 +0.038619823665143584 +0.057403180119382016 +0.06302157623867988 +0.05490312141816281 +0.034798177460268406 +0.009350466315531708 +-0.01799802739264192 +-0.03922954505627277 +-0.051785088148035736 +-0.04803242142375519 +-0.029845663364749832 +-0.005051462956145356 +0.021498563347591707 +0.04414564957326414 +0.05721155595741428 +0.0549682100563902 +0.040283751120069176 +0.015581815819956869 +-0.0107172136567519 +-0.03611369502326963 +-0.05355646479255505 +-0.0590382654145262 +-0.0492426460899833 +-0.028611765767251933 +-0.0018702597261331224 +0.023508715354892573 +0.04475156319769016 +0.05239577834370065 +0.0440071863028531 +0.024505538874736364 +-0.0014293944681174659 +-0.027775481214085757 +-0.04954890372651791 +-0.06147363895880932 +-0.05925644189286579 +-0.04279062089437059 +-0.019163014435919813 +0.008186886337573947 +0.03210243233004226 +0.048995051882192685 +0.05186274608644125 diff --git a/testdata/golden/g_ChaikinOscillator.csv b/testdata/golden/g_ChaikinOscillator.csv new file mode 100644 index 00000000..65089748 --- /dev/null +++ b/testdata/golden/g_ChaikinOscillator.csv @@ -0,0 +1,81 @@ +ChaikinOscillator +nan +nan +nan +nan +nan +nan +-221.21746713768766 +-285.4816876480526 +-328.6139576922394 +-329.6728363270306 +-262.55237241363477 +-152.76446143245957 +-25.323583173572757 +103.53182221437444 +201.33594960547958 +240.08441896771524 +212.89538498438776 +128.15533726081821 +-0.41658458755506445 +-120.72647342609437 +-209.6714777647087 +-255.73135848608973 +-240.51228497593362 +-158.3832815124829 +-45.617937612227365 +71.1708816629244 +176.36766411994944 +254.33863137123453 +264.67867619155396 +207.73476615700952 +106.1286251949495 +-20.770419342041862 +-137.94894840287802 +-214.9782465875113 +-239.22500806614758 +-197.6145489547351 +-91.98181935454808 +29.577289871496134 +139.52330368292775 +223.7077624723403 +269.16285119968904 +243.83209335121114 +160.77511792372013 +48.05938277147516 +-74.17858074429182 +-187.61473044509933 +-248.74443032653002 +-245.64823827329417 +-180.50068687961684 +-65.23452181288194 +62.55645936205581 +167.62340460398136 +234.57657645440497 +250.3171239698479 +191.41419623509614 +88.1306416022993 +-28.33536201849921 +-138.80618423299106 +-230.65569419414913 +-268.782561659251 +-236.25045582722902 +-150.31261272533885 +-32.199077285305876 +96.3889925846832 +192.43633858512123 +239.55095141420327 +226.0244679014645 +144.10163812916562 +25.704639067228698 +-91.5598649139217 +-188.45892287454382 +-252.97739149052586 +-261.05758907919505 +-199.58829510984282 +-96.75467735486586 +23.169851026134197 +144.4633047506485 +228.46242059758183 +252.48595864002425 +211.82027061172448 diff --git a/testdata/golden/g_ChaikinVolatility.csv b/testdata/golden/g_ChaikinVolatility.csv new file mode 100644 index 00000000..0e300688 --- /dev/null +++ b/testdata/golden/g_ChaikinVolatility.csv @@ -0,0 +1,81 @@ +ChaikinVolatility +nan +nan +nan +nan +nan +nan +nan +nan +nan +-14.701157976382289 +-7.729691691683784 +11.927803367932965 +16.632193070567002 +-0.8500386484327485 +-11.226881803578557 +-6.777484784532081 +11.565387954899272 +10.520151465604398 +-6.77930335887197 +-5.224482171135423 +5.081694527382163 +5.728376142747079 +-11.251411119676376 +-9.803929605910339 +3.102670639575739 +18.347278042941323 +6.075885845290857 +-13.604547123561412 +-14.337600788252642 +9.430419950674818 +17.44418201195798 +0.5382969223517377 +-8.251606515360562 +-3.0055037733458594 +7.943974439040795 +4.034040339420067 +-7.930312079469491 +-3.1535608366262915 +9.205018318405537 +8.592076684324933 +-9.109342287898803 +-15.940455794168795 +1.6909938828738127 +20.202895414473858 +8.120558354780181 +-10.485841739627688 +-10.544097531210541 +-0.04835039785392259 +13.25081696907028 +-0.24275776125985685 +-6.265855402055574 +0.656922589196291 +10.414774561547642 +-2.079570419043774 +-11.629093225881693 +-2.744626929650209 +12.966512775185748 +11.742602238045308 +-6.633192743820869 +-14.851232668281341 +-3.583926149910141 +19.05645196220935 +9.045713345976402 +-7.99425944993208 +-6.852061221075807 +3.4492327070853652 +2.3622207943857094 +-4.664817006388299 +-6.0888972716116365 +3.7608343327852274 +13.393102270462945 +-0.06869680979728003 +-17.552655074659867 +-4.967202310406985 +15.358648757004515 +14.606220900589797 +-4.3521112751086015 +-11.407329909619897 +-5.111390003519601 +13.065499701123137 diff --git a/testdata/golden/g_ChandeKrollStop.csv b/testdata/golden/g_ChandeKrollStop.csv new file mode 100644 index 00000000..d6f67b7e --- /dev/null +++ b/testdata/golden/g_ChandeKrollStop.csv @@ -0,0 +1,81 @@ +stop_long,stop_short +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +106.30750562837562,107.90469081176614 +109.5394804437872,107.90469081176614 +112.00390554825685,107.90469081176614 +109.65063707783224,107.90469081176614 +107.63136925482699,107.90469081176614 +105.84129319743352,107.90469081176614 +104.10065348852244,107.90469081176614 +103.25813836515103,107.72723943793277 +102.90128262725004,105.51904779283049 +102.72702630329066,102.06215364151677 +102.72702630329066,99.29564995148804 +102.72702630329066,98.18004643741055 +102.72702630329066,100.41213300838878 +102.72702630329066,102.90735498378025 +102.72702630329066,105.7616206979774 +102.72702630329066,109.23185213056104 +103.71360132104938,112.48736499974012 +106.07783979451192,114.79013181035553 +109.38363081737539,116.2278761556276 +112.31755405755604,117.15097182465699 +115.21589345569252,117.65079727923708 +118.48884681118497,117.65079727923708 +121.85252591431504,117.65079727923708 +122.5046132300596,117.65079727923708 +120.11807781921881,117.65079727923708 +117.70358623329867,117.65079727923708 +115.60590457853655,117.65079727923708 +113.79051042498541,117.56761394679646 +112.71679131057206,117.05174485294842 +112.71679131057206,116.07740444987564 +112.71679131057206,114.2390771115351 +112.71679131057206,111.63998516859168 +112.71679131057206,109.32261883231038 +112.71679131057206,111.25408395847614 +112.71679131057206,114.4237834232318 +112.8370428352486,117.32997930093 +113.30288378157066,120.04607750344444 +113.37330673134856,122.65588481436983 +114.65068733462947,125.26802011207516 +117.57031071046268,126.97778577649187 +122.00218947733727,127.5206078052743 +126.47162319577684,127.99483094993069 +130.0484291603516,127.99483094993069 +133.0881476443958,127.99483094993069 +133.1067215693585,127.99483094993069 +131.1926421540313,127.99483094993069 +128.8596284532021,127.99483094993069 +126.40120489807916,127.99483094993069 +125.18435689031611,127.91178489322596 +124.81631299066521,126.3666113993342 +124.28695934385212,124.55920525538966 +123.85025856714523,122.83692136743741 +123.85025856714523,120.92498976954829 +123.85025856714523,119.39256477211481 +123.85025856714523,121.87723098389718 +123.85025856714523,124.75582016923856 +123.85025856714523,128.06404891084847 +123.85025856714523,131.15107173923533 +124.73361817538458,133.95084759557142 +126.51620244825686,136.55682728215993 +128.80561969195458,138.5134215277091 +131.4956444878934,138.9156294539393 +135.07443778609596,138.9156294539393 +138.852665733264,139.37202919121447 +141.83228014408,139.37202919121447 +143.02415635563986,139.37202919121447 +140.7257356274533,139.37202919121447 +138.7452669923238,139.37202919121447 +136.98196803285364,139.37202919121447 +135.24482960305258,139.37202919121447 +134.6164553775105,138.86167152401222 +134.32854915620624,136.38231648347124 diff --git a/testdata/golden/g_ChandelierExit.csv b/testdata/golden/g_ChandelierExit.csv new file mode 100644 index 00000000..8ce105fe --- /dev/null +++ b/testdata/golden/g_ChandelierExit.csv @@ -0,0 +1,81 @@ +long_stop,short_stop +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +107.32897081939211,105.32148747345464 +107.42074296008256,104.09061418840149 +107.51294664407494,103.58952567304243 +107.61308625276025,103.48938606435712 +107.69243428197349,103.41003803514388 +107.6606439207728,103.44182839634458 +107.47479533484851,103.62767698226887 +106.62712316441664,103.87086912120324 +104.59205845212728,104.0700659187122 +107.0589927114553,104.1461957275795 +110.23087758380629,104.18277139419587 +113.13965115417652,104.17902662663393 +115.14799908593373,104.1580293100759 +116.15341150017538,104.07265399030199 +116.35653661892826,103.86952887154911 +116.5203874453189,103.70567804515846 +116.59696466491756,104.23965024709756 +116.63255024329197,105.58808424226137 +116.67647636726595,107.8669170985128 +116.69349020440602,110.2527193534685 +116.69598949309722,113.30240171201528 +116.75122421093604,116.05197955520579 +116.88765040737623,114.58812312971224 +117.02658968566436,113.75797713411309 +117.02615261818464,113.5295641368503 +116.97579536551575,113.57992138951919 +116.98049313398823,113.5752236210467 +116.88305540884195,113.60892093359806 +116.42464376362042,113.73019401738219 +115.62485399687992,113.97824992974655 +119.15157797490386,114.25667310016703 +122.01497499999813,114.46244538577734 +124.19639881797293,114.52460420556842 +126.11518548215236,114.475555851298 +126.99481650718974,114.32617052874701 +127.1196153337329,114.21371244910884 +127.24987689841223,114.08345088442951 +127.28529231851253,114.0480354643292 +127.20907277120911,115.17707585977453 +127.12475068805142,117.61139544540261 +127.12477112142336,121.03142563536096 +127.21110716241299,124.5155720420647 +127.28172363435873,126.80689653832022 +127.2719672549269,125.41904459256014 +127.28827127485933,125.03255286524676 +127.41714990450367,124.90367423560241 +127.55477970606589,124.7660444340402 +127.5806551045219,124.74016903558419 +127.5058380106207,124.81498612948538 +126.41825662105698,124.92191610414447 +125.29647498148003,125.0218307753517 +128.90140198391853,125.15189892032691 +132.06197603060872,125.24808135014328 +134.5566674447104,125.24768598329511 +136.6780561700661,125.1705993437897 +138.25338623829523,125.07763901251207 +138.74768126461123,125.07911410440694 +138.7554570604223,125.07133830859587 +138.8675115583264,125.65813332276086 +138.9708234330257,126.75312582530535 +138.92287370101906,128.52617372908685 +138.79081738555797,130.96913688376043 +138.67907898487445,134.23290217684269 +138.68266488463314,136.5959468423439 +138.7933948434343,135.39349199165028 +138.89238393604566,135.0785236428173 +138.98708300241847,134.98382457644448 diff --git a/testdata/golden/g_ChoppinessIndex.csv b/testdata/golden/g_ChoppinessIndex.csv new file mode 100644 index 00000000..0311cc04 --- /dev/null +++ b/testdata/golden/g_ChoppinessIndex.csv @@ -0,0 +1,81 @@ +ChoppinessIndex +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +42.90257180457944 +40.72606593025184 +38.83004126724888 +37.71076064434387 +37.05060437870289 +37.336921102810855 +38.71026527727755 +41.09824741435557 +46.010200558583385 +41.535499366324125 +36.60372335408175 +32.08709528643124 +28.77584330046512 +26.72680773120082 +25.76177836535247 +25.451326185189526 +26.35908146884564 +28.6184833636753 +32.316632864055435 +36.12513473394895 +41.01965722935059 +45.71500532569437 +40.77588807281766 +37.8336150843225 +36.774997809668946 +36.68508831615177 +36.404309810493245 +36.84091427187776 +39.02619135735654 +42.212964584599064 +36.33568596953783 +32.39551708813021 +29.67659681635415 +27.12819605971687 +25.675198490543828 +25.546921007087786 +25.71268097152727 +26.330036547663518 +28.256602823625684 +31.95534296817502 +37.65866462754063 +44.04175200150485 +48.540090266403816 +44.37276741865062 +42.189971606504976 +40.439303930502646 +39.19578685151331 +39.036025183386435 +39.94245737120603 +43.030508458830106 +46.45377688691414 +39.20596522493709 +33.50152698806041 +29.205444506845506 +25.90264539243834 +23.860373877587797 +23.554797703362073 +23.483424594718333 +23.936523381159564 +25.657458402108542 +29.00478263865693 +33.373115923936325 +39.13169434472794 +43.43869696567727 +40.26065797024805 +38.71130365179336 +37.66897368855721 diff --git a/testdata/golden/g_ClassicPivots.csv b/testdata/golden/g_ClassicPivots.csv new file mode 100644 index 00000000..7283f0d2 --- /dev/null +++ b/testdata/golden/g_ClassicPivots.csv @@ -0,0 +1,81 @@ +pp,r1,r2,r3,s1,s2,s3 +99.66666666666667,101.33333333333334,102.66666666666667,104.33333333333334,98.33333333333334,96.66666666666667,95.33333333333334 +103.16267454598328,105.06983843086239,106.68447479511136,108.59163867999047,101.54803818173431,99.6408742968552,98.02623793260624 +106.46632396532765,108.3192503675673,109.99207600118424,111.8450024034239,104.79349833171071,102.94057192947105,101.26774629585411 +109.30969002905226,110.78845284682183,112.24363659736883,113.7223994151384,107.85450627850526,106.37574346073569,104.92055971018868 +111.45910647185464,112.76531615911497,114.21024145855769,115.51645114581802,110.01418117241192,108.70797148515159,107.26304618570887 +112.74199773788952,114.1844372235833,115.89392458112607,117.33636406681985,111.03251038034675,109.59007089465297,107.8805835371102 +113.06847380764877,114.83425919272239,116.93004207666282,118.69582746173643,110.97269092370834,109.20690553863473,107.1111226546943 +112.44424589558567,114.24762443099476,116.36315519550081,118.1665337309099,110.32871513107962,108.52533659567052,106.40980583116448 +110.97251301246604,112.50602753835673,114.25742327120199,115.79093779709268,109.22111727962078,107.68760275373009,105.93620702088484 +108.84406406881523,109.92273628553433,111.07167376873036,112.15034598544946,107.69512658561919,106.6164543689001,105.46751688570406 +106.3166460187776,107.83424744177915,109.25729480295962,110.77489622596117,104.89359865759714,103.37599723459559,101.95294987341512 +103.68631980047041,105.65285043360308,107.38315780863867,109.34968844177133,101.95601242543482,99.98948179230216,98.25917441726656 +101.25473880483469,103.3221517833124,105.06950799957335,107.13692097805107,99.50738258857375,97.43996961009603,95.69261339383509 +99.29680919958425,101.10741679791094,102.59249518766164,104.40310278598834,97.81173080983355,96.00112321150685,94.51604482175615 +98.03294152441634,99.71878259193784,101.15332290801157,102.83916397553307,96.59840120834261,94.91256014082111,93.47801982474738 +97.60915371740403,99.28009180927988,100.83548479521072,102.50642288708657,96.05376073147319,94.38282263959734,92.8274296536665 +98.08685392291113,99.62494279875634,101.21153168587108,102.74962056171628,96.50026503579639,94.96217615995118,93.37558727283644 +99.44252381095095,100.95226300129774,102.6626728258728,104.1724120162196,97.73211398637588,96.22237479602909,94.51196497145402 +101.57606521173501,102.89658682264047,104.52081852084083,105.84134013174629,99.95183351353465,98.6313119026292,97.00708020442883 +104.32553529275576,105.99271089258619,107.99227721114875,109.65945281097918,102.3259689741932,100.65879337436277,98.65922705580022 +107.48553552770288,109.26052971524246,111.31521441247419,113.09020860001377,105.43085083047114,103.65585664293157,101.60117194569983 +110.82665131417549,112.40803703907896,114.14793507331443,115.7293207982179,109.08675327994003,107.50536755503656,105.76546952080109 +114.11393840247109,115.26844804616931,116.42148245720485,117.57599210090306,112.96090399143556,111.80639434773734,110.6533599367018 +117.12329605763098,118.63653493872498,119.98867223356798,121.50191111466198,115.77115876278798,114.25791988169398,112.90578258685098 +119.6553939855807,121.66174680819312,123.38681497789469,125.3931678005071,117.93032581587913,115.92397299326672,114.19890482356514 +121.54740034135453,123.70041219687434,125.52082462600127,127.67383648152108,119.7269879122276,117.57397605670779,115.75356362758086 +122.68295119326267,124.59033212543261,126.19523079711914,128.1026117292891,121.07805252157614,119.1706715894062,117.56577291771967 +123.0005912206809,124.42241634012424,125.64593457179761,127.06775969124095,121.77707298900754,120.3552478695642,119.13172963789083 +122.50041000814686,123.9325499636528,125.31911084642282,126.75125080192876,121.11384912537684,119.6817091698709,118.29514828710089 +121.2480003897514,122.86269168159892,124.595691062376,126.21038235422353,119.51500100897431,117.90030971712679,116.1673103363497 +119.37441415670385,121.04597128025816,122.97075770809873,124.64231483165304,117.44962772886328,115.77807060530897,113.8532841774684 +117.0706953893436,118.54037286928043,120.33620150349023,121.80587898342706,115.2748667551338,113.80518927519697,112.00936064098717 +114.57595201454465,116.09394968287982,117.93116717798947,119.44916484632463,112.73873451943501,111.22073685109984,109.3835193559902 +112.1587734147477,113.84049945115845,115.7563578400701,117.43808387648085,110.24291502583606,108.5611889894253,106.64533060051366 +110.09297423674845,111.67059457230425,113.33993602054392,114.91755635609972,108.42363278850878,106.84601245295298,105.17667100471331 +108.62989574587948,110.07186781961968,111.44069323895606,112.88266531269626,107.2610703265431,105.8190982528029,104.45027283346653 +107.97053212992039,109.44434730501251,110.69805691068996,112.17187208578208,106.71682252424294,105.24300734915082,103.98929774347337 +108.24129915337737,110.214731416669,111.87498871537785,113.84842097866948,106.58104185466851,104.60760959137689,102.94735229266803 +109.47714653729103,111.63360533635442,113.46049592935555,115.61695472841893,107.65025594428991,105.49379714522652,103.6669065522254 +111.61489250420503,113.55909976771203,115.23803537461436,117.18224263812135,109.9359568973027,107.9917496337957,106.31281402689338 +114.49824346605784,115.90575106808735,117.17723131617909,118.5847389182086,113.22676321796611,111.8192556159366,110.54777536784486 +117.8942032754348,119.12718823914791,120.3866943919539,121.619679355667,116.63469712262882,115.40171215891571,114.14220600610973 +121.51880689228612,123.15266061646597,124.96909076072058,126.60294448490042,119.70237674803151,118.06852302385167,116.25209287959706 +125.06867496722403,126.84645360913802,128.91816282689916,130.69594146881315,122.9969657494629,121.2191871075489,119.14747788978778 +128.2540554225371,129.87623322022483,131.83173129337746,133.4539090910652,126.29855734938448,124.67637955169674,122.72088147854411 +130.82894581221407,132.1620345867578,133.78622490799935,135.1193136825431,129.20475549097253,127.87166671642879,126.24747639518725 +132.61456770121885,134.14526343658682,135.85357017873258,137.38426591410055,130.90626095907308,129.3755652237051,127.66725848155934 +133.51372898547731,135.03248504785287,136.57187620822657,138.09063227060213,131.97433782510362,130.45558176272806,128.91619060235436 +133.51518476304713,135.20685389520168,136.75713002491054,138.44879915706508,131.96490863333827,130.27323950118372,128.72296337147486 +132.68866514679192,134.35361264248874,135.7497569735482,137.414704469245,131.29252081573247,129.62757332003565,128.2314289889762 +131.17247746428333,133.04737067360705,134.59186294564296,136.46675615496667,129.62798519224742,127.7530919829237,126.2085997108878 +129.1563006939515,131.23334410457753,132.99928247784894,135.07632588847497,127.39036232068008,125.31331891005405,123.54738053678264 +126.86189674888487,128.77483640934082,130.47213629568728,132.38507595614323,125.16459686253845,123.25165720208248,121.55435731573606 +124.52403581279573,125.94074717134566,127.29008015643319,128.70679151498314,123.1747028277082,121.75799146915827,120.40865848407074 +122.37315973892662,123.52089789033414,124.76601564465295,125.91375379606048,121.1280419846078,119.98030383320028,118.73518607888147 +120.62044223256866,122.21772518521438,124.05330379411997,125.65058674676568,118.78486362366307,117.18758067101736,115.35200206211177 +119.44519828628948,121.26484561784791,123.40536157151085,125.22500890306928,117.30468233262654,115.48503500106811,113.34451904740517 +118.98423170775713,120.71310016816417,122.76685038714477,124.49571884755181,116.93048148877654,115.2016130283695,113.1478628093889 +119.32275870519,120.69130465096077,122.3092031066279,123.67774905239868,117.70486024952287,116.33631430375209,114.71841584808496 +120.48694857241185,121.8213800081607,123.26858451423321,124.60301594998207,119.03974406633934,117.70531263059048,116.25810812451797 +122.4387103823207,123.99980545620357,125.50948338012392,127.07057845400679,120.92903245840036,119.36793738451749,117.85825946059714 +125.07389544503057,126.95926874241083,128.64162338108895,130.52699667846917,123.39154080635247,121.50616750897221,119.8238128702941 +128.2253492633656,130.11014948668213,131.69003559073047,133.574835814047,126.64546315931725,124.76066293600071,123.18077683195237 +131.67207090888238,133.39509847866734,134.7859700792666,136.50899764905157,130.2811993082831,128.55817173849815,127.16730013789888 +135.15507483469676,137.07601211039753,138.71887493259612,140.6398122082969,133.51221201249817,131.5912747367974,129.9484119145988 +138.3994880837803,140.21060474681758,141.86581079643918,143.67692745947645,136.74428203415872,134.93316537112145,133.27795932149985 +141.1411629574787,142.5445645982477,143.95239182142438,145.35579346219336,139.73333573430202,138.32993409353304,136.92210687035634 +143.154923777789,144.4296140251956,145.8679825139123,147.1426727613189,141.71655528907232,140.44186504166572,139.00349655294903 +144.28078575968826,145.7928052451957,147.58768148896465,149.09970097447209,142.4859095159193,140.97389003041187,139.1790137866429 +144.44430932083742,146.23865004585184,148.3657728466825,150.1601135716969,142.31718652000677,140.52284579499235,138.3957229941617 +143.66778712039107,145.44589418180132,147.52523197824206,149.30333903965231,141.58844932395033,139.81034226254008,137.73100446609934 +142.07015356602253,143.5339927864094,145.1937596113164,146.6575988317033,140.41038674111553,138.94654752072864,137.28678069582165 +139.85515947975856,140.9648701567905,142.11723539703158,143.22694607406353,138.7027942395175,137.59308356248553,136.44071832224446 +137.28916235919314,138.9017722702047,140.3933203784109,142.00593028942245,135.79761425098695,134.1850043399754,132.6934562317692 +134.6714977766173,136.6814448097882,138.43625382564397,140.44620085881488,132.9166887607615,130.9067417275906,129.15193271173482 +132.3015073284582,134.34885503582368,136.06945519625245,138.11680290361792,130.58090716802943,128.53355946066395,126.81295930023518 +130.44669455820846,132.18620951110796,133.60736658265836,135.34688153555786,129.02553748665807,127.28602253375857,125.86486546220817 +129.31610321851522,131.01675172361394,132.4853771254247,134.1860256305234,127.8474778167045,126.14682931160577,124.67820390979504 +129.04196344134022,130.68445142548555,132.23805843217755,133.8805464163229,127.48835643464821,125.84586845050288,124.29226144381087 +129.6711671025228,131.2214712608763,132.8477977307242,134.39810188907774,128.0448406326749,126.49453647432136,124.86821000447347 diff --git a/testdata/golden/g_CloseVsOpen.csv b/testdata/golden/g_CloseVsOpen.csv new file mode 100644 index 00000000..3d737076 --- /dev/null +++ b/testdata/golden/g_CloseVsOpen.csv @@ -0,0 +1,81 @@ +CloseVsOpen +0.010101010101010102 +0.008555302473654804 +0.005092093589927862 +0.0006474058438983365 +-0.0037243577179608854 +-0.007072486267167717 +-0.008704878444240493 +-0.008282203003051918 +-0.00586710114991039 +-0.001934179782023634 +0.002672842422326944 +0.006866032169332667 +0.009543048875593242 +0.00989994620125036 +0.007729925417843799 +0.0035596858815681327 +-0.0014819140618523147 +-0.006029533233774874 +-0.008916609748042668 +-0.009497753576253022 +-0.007765951012704723 +-0.004278578371686581 +0.000038784152762678 +0.00413784449113268 +0.007085682626149991 +0.008254302675592308 +0.007433336723402273 +0.004852376535468347 +0.0011170497011224764 +-0.0029215572869769235 +-0.006337023541247249 +-0.008311489530107607 +-0.008311977926179439 +-0.006236486985974821 +-0.0024952147238673336 +0.002022793844247083 +0.006140748973480604 +0.008730431046255387 +0.009085854603014965 +0.00716406024439718 +0.0035725788127038134 +-0.0006745690994107464 +-0.00449385843245222 +-0.007017476008624179 +-0.00775640263841302 +-0.006645590175311543 +-0.004007173520213375 +-0.000463519107287759 +0.003183752685463245 +0.00610217958999318 +0.007594744358194732 +0.007261226244084079 +0.005116793199718998 +0.0016250204350822023 +-0.0023834851015584924 +-0.0059034226343248125 +-0.008015908325590449 +-0.00814689231006948 +-0.0062431012477528035 +-0.002802685933840201 +0.001260884826489413 +0.004885429053275723 +0.00716795535886699 +0.007606174744057955 +0.0061978455976287984 +0.0033872093786015867 +-0.0000940612532389998 +-0.003422267356213165 +-0.00585841065558959 +-0.006879933140029513 +-0.0062638847158077455 +-0.004125891657813468 +-0.00091441518598534 +0.0026500784819516155 +0.005705180990505341 +0.007445935750730523 +0.007357474771271869 +0.005402081472392826 +0.0020691777024513685 +-0.0017567500561095138 diff --git a/testdata/golden/g_ClosingMarubozu.csv b/testdata/golden/g_ClosingMarubozu.csv new file mode 100644 index 00000000..4e06a420 --- /dev/null +++ b/testdata/golden/g_ClosingMarubozu.csv @@ -0,0 +1,81 @@ +ClosingMarubozu +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Cmo.csv b/testdata/golden/g_Cmo.csv new file mode 100644 index 00000000..d63edf8b --- /dev/null +++ b/testdata/golden/g_Cmo.csv @@ -0,0 +1,81 @@ +Cmo +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-6.309623802026029 +-23.585179418104072 +-40.18803983609773 +-50.61870753197415 +-50.291679277804334 +-39.36648953247307 +-22.586848454919732 +-5.352504449413339 +11.423208126347545 +27.804419563424762 +43.773927029629604 +59.161765948521584 +73.5486994910907 +86.13436536850944 +90.91341625954821 +84.97494554022931 +72.10700218636418 +57.553061503398894 +42.063233364958506 +26.021961072622712 +9.576366070068588 +-7.2709683334223945 +-24.59255634953573 +-41.011362248468814 +-50.93875191323274 +-49.957500462142484 +-38.546155399970836 +-21.596719449647093 +-4.3989711839650605 +12.346415257888 +28.699821576547777 +44.636903482904096 +59.976169553580036 +74.28058778071009 +86.72401707514427 +90.9173180846449 +84.40458015844972 +71.39645210603713 +56.757948394849045 +41.214656272755995 +25.13397701598401 +8.6516746735776 +-8.23719560632157 +-25.60986126475306 +-41.83702630293789 +-51.251969124929765 +-49.61599407697504 +-37.72649332188565 +-20.6139828923025 +-3.4484013882067246 +13.270173846570357 +29.59862567224627 +45.50554992832919 +60.79783166842711 +75.0203485899678 +87.32071182839712 +90.92382588112373 +83.84006201411987 +70.69229084065218 +55.968467586101504 +40.37002765283327 +24.247537873364106 +7.725419130004263 +-9.208983781652792 +-26.63801799740332 +-42.66561701311583 diff --git a/testdata/golden/g_CoefficientOfVariation.csv b/testdata/golden/g_CoefficientOfVariation.csv new file mode 100644 index 00000000..8b7ca637 --- /dev/null +++ b/testdata/golden/g_CoefficientOfVariation.csv @@ -0,0 +1,81 @@ +CoefficientOfVariation +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.042198947518417386 +0.04420009764455734 +0.04912514698082987 +0.053561681528259505 +0.05546212891822009 +0.054121763617195506 +0.05009954449321031 +0.04545252237558829 +0.04375460509936006 +0.048005282404993785 +0.057403302909466394 +0.06863082586446227 +0.07869664928989409 +0.08565487269491705 +0.0884705846819482 +0.08684845916832683 +0.08110544545556446 +0.07208161674110854 +0.06111341097075534 +0.05011380445950993 +0.04168132662233679 +0.03841358604652942 +0.040471943691629195 +0.04498966868303821 +0.04891080988565587 +0.0504501894503239 +0.049039413260702436 +0.04526448478603251 +0.04108410888060864 +0.03979240455828674 +0.04397935876725868 +0.05272233330343878 +0.06298313425360125 +0.07209758076037223 +0.07833974570903884 +0.08079128470741828 +0.07919424943243951 +0.07384480679334972 +0.06552088035016176 +0.05546615008374518 +0.0454704512585596 +0.03795711639673175 +0.03526381302788098 +0.03736043612546626 +0.04152970743977054 +0.0450180281910257 +0.04625878275346648 +0.04479603264135374 +0.04123735088244432 +0.037458549067844946 +0.036514709988694466 +0.040645383751873806 +0.04883194830869879 +0.05827494905786766 +0.06658212276187829 +0.07221056571830242 +0.07434082386896386 +0.0727491290744694 +0.06771748556747267 +0.059974362818769965 +0.05068714937337615 +0.041542338974273306 +0.03481236022637338 +0.03260507116244679 +0.0347251349975641 +0.03859138026260156 +0.041710256212078044 diff --git a/testdata/golden/g_Cointegration.csv b/testdata/golden/g_Cointegration.csv new file mode 100644 index 00000000..89e35fa8 --- /dev/null +++ b/testdata/golden/g_Cointegration.csv @@ -0,0 +1,81 @@ +hedge_ratio,spread,adf_stat +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +0.9831741715885588,0.7637502174167139,-37.06292974591647 +0.988049944506012,0.4180083055516093,-53.02790420211617 +0.9908298876205223,-0.026094383653301634,-76.18889860289656 +0.9896699107743651,-0.42201316847710757,-67.05774667167432 +0.9855100037353596,-0.6384826740990803,-43.64832949269429 +0.98102971421731,-0.6246943527980306,-31.566998705957356 +0.9784574011248798,-0.40854944698915574,-26.400550331427972 +0.978492219300515,-0.056993665567318885,-25.114680855081065 +0.9806341336314889,0.35034149419959704,-26.755610608042968 +0.9839886265683043,0.7277663187407484,-31.200662128763277 +0.9878468714460394,0.9897397437845825,-38.44701971128641 +0.9918726526401084,1.0673630494394217,-48.760048981190806 +0.9960037423228644,0.9296516185798112,-64.32162716963158 +1.0002323969127653,0.59748402286084,-87.41842104399706 +1.0043908124072178,0.14194016146119282,-91.39563736186307 +1.0080158642517327,-0.33336707531772447,-66.12557591204316 +1.010345446651303,-0.7197480392397893,-51.00414022878885 +1.0105064057673996,-0.9311376520304719,-47.77238754146207 +1.0079357778399198,-0.9229355070142589,-54.95027583527567 +1.0029329603673436,-0.6977955729245195,-77.06824911339838 +0.9969740830160352,-0.3022863093708992,-106.07863624642668 +0.9923443600822355,0.17802102382424323,-90.60500963029261 +0.9910798321636649,0.625883248189183,-76.01747657035645 +0.9937989177888921,0.9144430423566945,-76.13824267626535 +0.9991556453298867,0.9511310622544897,-76.7412363430093 +1.004414800743516,0.7248725384263253,-69.92637594856254 +1.0070264849688413,0.31688944005517783,-70.01053541061334 +1.0060699680742147,-0.14169125053064135,-95.25682008347349 +1.0023737904971097,-0.5286760646388018,-208.45489260061652 +0.9975215361650617,-0.7616381016691207,-105.4518175128289 +0.9928501653617889,-0.7996173790677119,-55.492829556581476 +0.9890401299987015,-0.6385231648546608,-39.793058656981565 +0.986194342363428,-0.3112064054581367,-32.90276652537735 +0.9841228605245638,0.11279378013580299,-29.155161263898552 +0.9826448202766037,0.5366624123809061,-26.81889657397013 +0.9818076334487978,0.8580051775815605,-25.738114011232078 +0.9819555605638626,0.9970293474723633,-26.55271687976332 +0.9835926757110114,0.9193549847091731,-30.46133350391611 +0.9870159784141638,0.6430918727181165,-40.42673538677094 +0.9917912682193969,0.22921341608116563,-67.63069769812668 +0.9963814994369898,-0.23442772335766904,-180.95017308586478 diff --git a/testdata/golden/g_CommonSenseRatio.csv b/testdata/golden/g_CommonSenseRatio.csv new file mode 100644 index 00000000..d4298579 --- /dev/null +++ b/testdata/golden/g_CommonSenseRatio.csv @@ -0,0 +1,81 @@ +CommonSenseRatio +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_CompositeProfile.csv b/testdata/golden/g_CompositeProfile.csv new file mode 100644 index 00000000..24fc78ec --- /dev/null +++ b/testdata/golden/g_CompositeProfile.csv @@ -0,0 +1,81 @@ +poc,vah,val +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +99.54309832541462,109.15611885844513,96.33875814773778 +99.54309832541462,109.95720390286434,97.13984319215699 +111.55937399170276,114.7637141693796,101.94635345867225 +111.64283084076067,114.86429037209041,101.97845224677144 +111.43255281280342,115.18875576729438,101.10299468795326 +99.64854324445065,111.30957290392128,96.46826242823138 +98.79546532812748,111.3673640195644,96.50966556604803 +98.89130252546786,113.06611964517838,96.5288330055161 +98.89130252546786,113.06611964517838,96.5288330055161 +98.89130252546786,115.42858916513012,96.5288330055161 +121.3347629650095,123.69723248496126,101.25377204541961 +121.3347629650095,123.69723248496126,101.25377204541961 +121.3347629650095,123.69723248496126,101.25377204541961 +121.3347629650095,123.69723248496126,103.61624156537137 +121.3347629650095,123.69723248496126,105.97871108532311 +121.3347629650095,123.69723248496126,109.52241536525075 +121.39836186308636,123.70995226457663,109.84040985563499 +121.54253056866325,123.738786005692,109.46312566500511 +121.7844846291034,123.78717681778004,109.76833149704358 +109.41757537168279,120.23232045769473,106.7138891001798 +109.19378668856066,120.03054999468576,106.87162312296242 +121.65993568111494,123.91243355297287,111.14827894577793 +121.65993568111494,123.91243355297287,111.89911156973056 +121.65993568111494,123.91243355297287,111.89911156973056 +121.48741075094989,124.09647541281232,111.05115210350019 +121.73020615620499,124.72291698190548,110.75693312863649 +123.17918660976211,124.27023949490253,110.08655198807718 +109.19026351021895,122.04880863880511,106.85234621411239 +109.26633077089463,122.45957184645371,106.86755966624752 +109.2676162653639,123.66641326669901,106.86781676514137 +109.2676162653639,126.06621276692154,106.86781676514137 +132.06571151747784,134.46551101770035,111.66741576558641 +132.06571151747784,134.46551101770035,111.66741576558641 +132.06571151747784,134.46551101770035,111.66741576558641 +132.06571151747784,134.46551101770035,112.86731551569767 +132.06571151747784,134.46551101770035,115.2671150159202 +132.06571151747784,134.46551101770035,118.86681426625398 +132.06571151747784,134.46551101770035,120.06671401636524 +132.17538035582595,134.48744478536997,120.61505820810581 +132.4201717623333,134.53640306667145,120.78089958847339 +120.87345097836938,130.94519994986956,117.21099680691476 +120.87885723654206,130.08097852705922,117.81148347303635 +121.3368439577556,129.49980537856663,117.62640694829605 +131.7260675842424,133.9523297899181,122.07893135964753 +131.7260675842424,133.9523297899181,122.07893135964753 +120.91959594913983,131.5051570876435,119.29104808167772 +132.9299032315107,134.82984747201505,121.53023778848481 +120.94401717512378,131.48302839733432,117.78231380846061 +121.24214456264362,131.49386794482697,117.82490343524917 +121.45832348261571,132.26593551615588,117.85578613810232 +121.53062329152147,132.5241491193907,117.86611468223171 +121.53062329152147,136.18865772868045,117.86611468223171 +121.53062329152147,139.8531663379702,117.86611468223171 +121.53062329152147,141.07466920773345,117.86611468223171 +121.53062329152147,141.07466920773345,117.86611468223171 +142.2961720774967,145.96068068678645,122.7521261612847 +142.2961720774967,145.96068068678645,126.41663477057446 +142.2961720774967,145.96068068678645,128.85964051010095 +142.3980876313401,145.9752400516212,130.47424623040308 +142.5728403530215,146.00020472614713,130.00583765156082 +129.97750876312355,142.82441716973867,127.83635736202103 diff --git a/testdata/golden/g_ConcealingBabySwallow.csv b/testdata/golden/g_ConcealingBabySwallow.csv new file mode 100644 index 00000000..3eac1c50 --- /dev/null +++ b/testdata/golden/g_ConcealingBabySwallow.csv @@ -0,0 +1,81 @@ +ConcealingBabySwallow +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_ConditionalValueAtRisk.csv b/testdata/golden/g_ConditionalValueAtRisk.csv new file mode 100644 index 00000000..52d9bb0d --- /dev/null +++ b/testdata/golden/g_ConditionalValueAtRisk.csv @@ -0,0 +1,81 @@ +ConditionalValueAtRisk +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_ConnorsRsi.csv b/testdata/golden/g_ConnorsRsi.csv new file mode 100644 index 00000000..382412d3 --- /dev/null +++ b/testdata/golden/g_ConnorsRsi.csv @@ -0,0 +1,81 @@ +ConnorsRsi +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +20.061283314740034 +23.896408953577673 +49.53795731366795 +65.69106632387555 +77.69443165640959 +83.15528512582098 +86.17204229024105 +88.02882310238692 +86.94812404654664 +83.19643154912801 +79.27466526142048 +75.23823213651293 +71.11183294559038 +66.90014688093241 +40.23144250522475 +27.195236796824176 +19.09092430836132 +14.31094926879428 +11.517907362618482 +12.125324690060035 +15.643595013434124 +19.46495261137512 +25.885165776890773 +48.549012511877855 +64.83459556060374 +76.6206787434694 +81.94299556919626 +84.92424090803753 +86.80070832363394 +85.76753069347761 +82.07836240553648 +78.22759644628381 +74.266706686933 +70.21752272631612 +66.08191143347221 +37.28692639051447 +26.604242619532524 +18.70663023848171 +14.086685791328541 +11.38453052035164 +12.042611377963858 +15.591093118996687 +21.813542010527595 +25.86967335117042 +49.0262094974816 +65.38235402480967 +76.9115523568429 +82.05690876363795 +84.95464589289965 +86.79395822850881 +85.74430966521503 +82.04812017000587 +78.19485445465615 +74.23366560609323 +70.18507340428178 +66.04952152111285 +36.79486805928958 +26.08740171667547 +18.386066276903524 +13.912845424318931 +11.290409304884747 +14.370914777160621 +17.941885795933896 +21.79703389887148 +25.86481395943643 +49.55905281708175 diff --git a/testdata/golden/g_Coppock.csv b/testdata/golden/g_Coppock.csv new file mode 100644 index 00000000..1c5b1c30 --- /dev/null +++ b/testdata/golden/g_Coppock.csv @@ -0,0 +1,81 @@ +Coppock +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-3.9825596047566534 +-0.461445069022803 +3.590878296696879 +7.780238182408071 +11.704704194692338 +15.000083970709955 +17.37762415878997 +18.64816104186203 +18.731322271488814 +17.652236304803075 +15.52997008126108 +12.561593352723357 +9.004341924932241 +5.156829956694799 +1.3392117273310775 +-2.12821537643926 +-4.948251050618623 +-6.871360828458241 +-7.71985072936075 +-7.4087016561172545 +-5.959429474493558 +-3.5035742278522193 +-0.27356820646649077 +3.4194587593084633 +7.219047694521752 +10.76342580365719 +13.725545790870573 +15.846267521020229 +16.95592474690589 +16.983039660347067 +15.952068314925848 +13.973562393583991 +11.229980328182224 +7.959299631092152 +4.437366374415674 +0.9590539198643141 +-2.1820309559532594 +-4.715344410032374 +-6.416053547539063 +-7.126865796316846 +-6.776379783659843 +-5.390787182746236 +-3.096029498911087 +-0.10857053276842493 +3.285400012926643 +6.760424331089816 +9.98774654529165 +12.67100437433782 +14.575789066011104 +15.549061307598926 +15.527325278301127 +14.535044496375903 +12.676075078859025 +10.120842152097568 +7.091148699467689 +3.8435218538170797 +0.6512878415666261 +-2.214702456291881 +-4.506572078180917 +-6.020396270388238 diff --git a/testdata/golden/g_CorrelationTrendIndicator.csv b/testdata/golden/g_CorrelationTrendIndicator.csv new file mode 100644 index 00000000..736cecb4 --- /dev/null +++ b/testdata/golden/g_CorrelationTrendIndicator.csv @@ -0,0 +1,81 @@ +CorrelationTrendIndicator +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-0.17462034541597504 +-0.5803566858807343 +-0.8163884051229796 +-0.9236696441182383 +-0.9528910448381389 +-0.9200381655096165 +-0.8071804226708758 +-0.5620398002472344 +-0.14817739948916156 +0.3101955524239207 +0.634874081888336 +0.8164843543365353 +0.9122789993362788 +0.9610775576916197 +0.9813972694866453 +0.9802461773929265 +0.9572413361250052 +0.9043798279732657 +0.8013700061386485 +0.6065997305336664 +0.2635559384450724 +-0.20085472848724775 +-0.5980919563477168 +-0.825195967701741 +-0.9270657577898619 +-0.9527044406831651 +-0.9161653101754096 +-0.7975595995219825 +-0.5431405644228551 +-0.12156955451227046 +0.33279512086785246 +0.648314593918127 +0.8236435783001111 +0.9160127388288282 +0.962864670084019 +0.9818740524245654 +0.9795707205154925 +0.9551880971715826 +0.9002048574322741 +0.7933958966921085 +0.5917441082170058 +0.2395539978639731 +-0.22683835483577697 +-0.6152482190615909 +-0.8336153100916528 +-0.9302321419972458 +-0.9523309199206859 +-0.912044684795263 +-0.78751333825931 +-0.5236602914118714 +-0.09484160242581631 +0.3548937717217056 +0.661305816402338 +0.8305496612380214 +0.9196086035532519 +0.9645670274595753 +0.9822856471858482 +0.9788277779709976 +0.9530418362182973 +0.8958729204191248 +0.7851306815561723 +0.5763958370853332 +0.215127432214357 +-0.2525308158579238 +-0.6318297763031304 +-0.8416583727900423 +-0.9331740613542806 diff --git a/testdata/golden/g_Counterattack.csv b/testdata/golden/g_Counterattack.csv new file mode 100644 index 00000000..febfbdf6 --- /dev/null +++ b/testdata/golden/g_Counterattack.csv @@ -0,0 +1,81 @@ +Counterattack +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Crab.csv b/testdata/golden/g_Crab.csv new file mode 100644 index 00000000..2be29a14 --- /dev/null +++ b/testdata/golden/g_Crab.csv @@ -0,0 +1,81 @@ +Crab +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_CumulativeVolumeDelta.csv b/testdata/golden/g_CumulativeVolumeDelta.csv new file mode 100644 index 00000000..abc60203 --- /dev/null +++ b/testdata/golden/g_CumulativeVolumeDelta.csv @@ -0,0 +1,81 @@ +CumulativeVolumeDelta +1000 +2019.866933079506 +3058.808767310371 +4115.273014649874 +3043.5374055599223 +1959.3903070791325 +866.1863984824099 +-232.3585745164362 +-1332.3159348205868 +-2429.7006979084063 +-1338.7709552258382 +-257.92131484387914 +809.6250032112359 +1861.1751403933824 +2894.6739554089727 +3908.7859562149592 +2902.948541872201 +1877.3944316695179 +833.1423873400327 +-228.0434017542393 +-1303.7236512850322 +-2390.881228526391 +-1295.7210211374395 +-196.35192077409306 +903.264540109491 +1999.1569675758049 +3087.50243314782 +4164.778881903419 +5227.905545690651 +4181.445327749275 +3153.5037779293825 +2145.194837647633 +1133.5399171625836 +102.3857808112457 +-947.0255543026151 +118.67310556926373 +1198.039891954179 +2287.9107015353416 +3384.7026687384905 +4484.5570032759515 +5583.492827938289 +4489.419772270312 +3403.9598814614837 +2330.520171674072 +1272.028452384896 +230.8166038607203 +-791.4723875493042 +-1793.94993009464 +-776.5172519723418 +260.13066095285114 +1314.5327720417881 +2384.520240801143 +3467.302887709708 +4559.580429870989 +3461.48680686434 +2361.48778620927 +1263.570013294138 +171.63716072767056 +-910.6456987692002 +-1979.9982072469124 +-926.3409154468688 +109.48201277681392 +1126.0424303216448 +2129.4047350437586 +3152.5557175539125 +4194.572421236577 +3135.365069765854 +2061.3274807706093 +975.4112992849596 +-118.95826765945094 +-1218.019003228938 +-2317.821668500574 +-3414.387446155502 +-2324.9083289414516 +-1246.08312220392 +-181.05433818820848 +867.5855306971714 +1897.8973663717416 +2908.672731601686 +1899.4820465789176 diff --git a/testdata/golden/g_CumulativeVolumeIndex.csv b/testdata/golden/g_CumulativeVolumeIndex.csv new file mode 100644 index 00000000..d8c205c1 --- /dev/null +++ b/testdata/golden/g_CumulativeVolumeIndex.csv @@ -0,0 +1,81 @@ +CumulativeVolumeIndex +1 +2 +3 +4 +4.607327781500751 +5.214573192923746 +5.82175965709102 +6.428911805813795 +7.036054934903841 +7.643214509890251 +8.643214509890251 +9.643214509890251 +10.643214509890251 +11.643214509890251 +12.643214509890251 +13.643214509890251 +14.251013016640101 +14.858664461861286 +15.466181478194612 +16.073580761537674 +16.68088216174401 +17.288107872125664 +18.288107872125664 +19.288107872125664 +20.288107872125664 +21.288107872125664 +22.288107872125664 +23.288107872125664 +24.288107872125664 +24.895609323999267 +25.50324333755792 +26.11102310070751 +26.718777631647214 +27.326388313775876 +27.933869064855767 +28.933869064855767 +29.933869064855767 +30.933869064855767 +31.933869064855767 +32.93386906485577 +33.93386906485577 +34.54104992248382 +35.148286729595974 +35.7556030909174 +36.363020857653034 +36.970559408990475 +37.57823482345415 +38.18605895617797 +39.18605895617797 +40.18605895617797 +41.18605895617797 +42.18605895617797 +43.18605895617797 +44.18605895617797 +44.79321399206709 +45.400356855455776 +46.00751301684244 +46.61470769589301 +47.22196536113844 +47.829309173116414 +48.829309173116414 +49.829309173116414 +50.829309173116414 +51.829309173116414 +52.829309173116414 +53.829309173116414 +54.43672202106366 +55.04403438407611 +55.651268205349304 +56.2584471522959 +56.865596004673364 +57.4727401205503 +58.07990494698516 +59.07990494698516 +60.07990494698516 +61.07990494698516 +62.07990494698516 +63.07990494698516 +64.07990494698515 +64.68767804493136 diff --git a/testdata/golden/g_CupAndHandle.csv b/testdata/golden/g_CupAndHandle.csv new file mode 100644 index 00000000..076c0023 --- /dev/null +++ b/testdata/golden/g_CupAndHandle.csv @@ -0,0 +1,81 @@ +CupAndHandle +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_CyberneticCycle.csv b/testdata/golden/g_CyberneticCycle.csv new file mode 100644 index 00000000..818c1ccb --- /dev/null +++ b/testdata/golden/g_CyberneticCycle.csv @@ -0,0 +1,81 @@ +CyberneticCycle +0 +1.7276010333066978 +2.7645530699174694 +-0.7871467847326956 +0.557595922646926 +1.0488973938759638 +0.751749071346416 +-0.21317504162466439 +-1.6783008216755793 +-3.442396275490697 +-5.287054114399992 +-6.994910672212173 +-8.36794636463458 +-9.244209307421254 +-9.511447766607334 +-9.11641600748427 +-8.069006985245295 +-6.440829493000726 +-4.358345432778851 +-1.9911703507712462 +0.4634262325271483 +2.7984435485390717 +4.815900769543716 +6.344747197500294 +7.256336365963559 +7.476085929933998 +6.9902853714791675 +5.847446496613284 +4.1540787570639734 +2.0652690828730966 +-0.22909030318288925 +-2.521194135768388 +-4.603825995737912 +-6.28881582922359 +-7.42380322689185 +-7.905808085606075 +-7.690395592313624 +-6.795616128932127 +-5.300367535350157 +-3.337325486175348 +-1.0810730240355588 +1.2675107996410198 +3.4992090081242857 +5.415167665881331 +6.844669486513109 +7.6603926435066745 +7.789791954058341 +7.22158595675019 +6.006770557018634 +4.254068820065793 +2.1202234762249743 +-0.20400062578563505 +-2.51085367742648 +-4.594155731949709 +-6.2677116814782385 +-7.381941382082317 +-7.837239362002252 +-7.592870690905492 +-6.670608334815729 +-5.152787053364819 +-3.1749476536326684 +-0.9137286456025775 +1.4289131173132685 +3.6437433058324906 +5.532940967600575 +6.927769779223402 +7.703651187772571 +7.79129301204737 +7.182879426671205 +5.93276940299403 +4.1526412230466505 +2.001516797746538 +-0.3284431082990067 +-2.629103871324796 +-4.694948921146704 +-6.3414378090720644 +-7.421490556993015 +-7.838625787730096 +-7.5555790447355555 +-6.597631450738659 diff --git a/testdata/golden/g_Cypher.csv b/testdata/golden/g_Cypher.csv new file mode 100644 index 00000000..3443eb66 --- /dev/null +++ b/testdata/golden/g_Cypher.csv @@ -0,0 +1,81 @@ +Cypher +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_DayOfWeekProfile.csv b/testdata/golden/g_DayOfWeekProfile.csv new file mode 100644 index 00000000..e0f1af98 --- /dev/null +++ b/testdata/golden/g_DayOfWeekProfile.csv @@ -0,0 +1,81 @@ +profile +nan,nan,nan,nan,nan,nan,nan +0,0,0,0.03455202066613405,0,0,0 +0,0,0,0.03269922059020891,0,0,0 +0,0,0,0.030197462695043198,0,0,0 +0,0,0,0.027191823235230228,0,0,0 +0,0,0,0.023827757820251573,0,0,0 +0,0,0,0.020246961346029768,0,0,0 +0,0,0,0.01658615739779084,0,0,0 +0,0,0,0.01297735291771257,0,0,0 +0,0,0,0.00954821622392125,0,0,0 +0,0,0,0.0064213653557427365,0,0,0 +0,0,0,0.0037114983379089987,0,0,0 +0,0,0,0.0015195967567728323,0,0,0 +0,0,0,-0.00007590041586827198,0,0,0 +0,0,0,-0.0010298852181880472,0,0,0 +0,0,0,-0.0013407671755269431,0,0,0 +0,0,0,-0.0010563705733454276,0,0,0 +0,0,0,-0.00027212522142184377,0,0,0 +0,0,0,0.0008796671441347511,0,0,0 +0,0,0,0.002247372177046216,0,0,0 +0,0,0,0.003679672910171661,0,0,0 +0,0,0,0.005042343610943414,0,0,0 +0,0,0,0.006229039698504705,0,0,0 +0,0,0,0.0071656027982417774,0,0,0 +0,0,0,0.00780929014535874,0,0,0 +0,0,0,0.008145034245704084,0,0,0 +0,0,0,0.008180604199201457,0,0,0 +0,0,0,0.007941903693697003,0,0,0 +0,0,0,0.0074689916452702065,0,0,0 +0,0,0,0.0068129137428084114,0,0,0 +0,0,0,0.006033101201964408,0,0,0 +0,0,0,0.005194889804133368,0,0,0 +0,0,0,0.004366615796204967,0,0,0 +0,0,0,0.0036157797588774482,0,0,0 +0,0,0,0.003004001846693305,0,0,0 +0,0,0,0.002580979473233179,0,0,0 +0,0,0,0.002378346633507682,0,0,0 +0,0,0,0.002404956714325021,0,0,0 +0,0,0,0.0026452367120057157,0,0,0 +0,0,0,0.003061582430062202,0,0,0 +0,0,0,0.003600457290589873,0,0,0 +0,0,0,0.004200600355976889,0,0,0 +0,0,0,0.004801240252282936,0,0,0 +0,0,0,0.005348623590004026,0,0,0 +0,0,0,0.00580009490965307,0,0,0 +0,0,0,0.006125844672933778,0,0,0 +0,0,0,0.0063089429782567956,0,0,0 +0,0,0,0.006344383363026338,0,0,0 +0,0,0,0.006237722494846098,0,0,0 +0,0,0,0.006003674278811874,0,0,0 +0,0,0,0.005664795497326864,0,0,0 +0,0,0,0.0052502202755707605,0,0,0 +0,0,0,0.004794269221331266,0,0,0 +0,0,0,0.004334682589762182,0,0,0 +0,0,0,0.003910228770823491,0,0,0 +0,0,0,0.003557559534040414,0,0,0 +0,0,0,0.00330745072677284,0,0,0 +0,0,0,0.003180946074890931,0,0,0 +0,0,0,0.0031862651629235906,0,0,0 +0,0,0,0.003317414836202402,0,0,0 +0,0,0,0.0035550933010570513,0,0,0 +0,0,0,0.0038697821269768327,0,0,0 +0,0,0,0.004226225386010642,0,0,0 +0,0,0,0.004588164187002954,0,0,0 +0,0,0,0.004922346826761778,0,0,0 +0,0,0,0.005201292336525303,0,0,0 +0,0,0,0.005404763246809321,0,0,0 +0,0,0,0.005520211520565706,0,0,0 +0,0,0,0.005542563932172715,0,0,0 +0,0,0,0.005473670078624767,0,0,0 +0,0,0,0.005321626147922717,0,0,0 +0,0,0,0.0051000652884562025,0,0,0 +0,0,0,0.004827397245763467,0,0,0 +0,0,0,0.00452589646891607,0,0,0 +0,0,0,0.004220488924489232,0,0,0 +0,0,0,0.003937091726335384,0,0,0 +0,0,0,0.003700441743642402,0,0,0 +0,0,0,0.0035315242799908325,0,0,0 +0,0,0,0.0034449527247347876,0,0,0 +0,0,0,0.003446859407992263,0,0,0 diff --git a/testdata/golden/g_Decycler.csv b/testdata/golden/g_Decycler.csv new file mode 100644 index 00000000..c19f71c0 --- /dev/null +++ b/testdata/golden/g_Decycler.csv @@ -0,0 +1,81 @@ +Decycler +100 +103.4552020666134 +106.84260610684093 +109.9922351820131 +112.69190271998991 +114.73447977702911 +115.95391805203293 +116.2506106076836 +115.60634956922256 +114.08920857313237 +111.84899973848412 +109.10441115959462 +106.12341852346808 +103.1989974164679 +100.62247358357489 +98.65698943751352 +97.51351060554336 +97.33154218801705 +98.16628741492273 +99.98339659700744 +102.66177130572977 +106.00416688814968 +109.75463911337555 +113.62126955153781 +117.30213337033575 +120.51218440379466 +123.00865125286346 +124.61267198012455 +125.22523166952686 +124.8359766452161 +123.524115967029 +121.4513280659784 +118.84730488576758 +115.98922384341613 +113.17698055237814 +110.70639410383527 +108.84277794334868 +107.79723682855342 +107.70780692305738 +108.62712352218664 +110.5177178610531 +113.25536300956286 +116.64016988654528 +120.41444215185317 +124.28569500135697 +127.95278162621068 +131.1327935088464 +133.5863316107801 +135.13889103608926 +135.69644893012747 +135.25386318382726 +133.89533170555913 +131.78687123008953 +129.16148750644905 +126.29836156484126 +123.49791128927949 +121.05495596983066 +119.23238096392852 +118.23765492326308 +118.20429723178852 +119.17995111294084 +121.12212779952269 +123.90200192662222 +127.31591911622611 +131.1035878151215 +134.97133036328066 +138.61831634395816 +141.76343486840744 +144.17040537401277 +145.6688838629933 +146.16967922421247 +145.67272040936575 +144.26706277941372 +142.1229330543426 +139.47652346719153 +136.60889341527476 +133.8208632612557 +131.4061429460471 +129.62509575451546 +128.68148083865918 diff --git a/testdata/golden/g_DecyclerOscillator.csv b/testdata/golden/g_DecyclerOscillator.csv new file mode 100644 index 00000000..8527f7ba --- /dev/null +++ b/testdata/golden/g_DecyclerOscillator.csv @@ -0,0 +1,81 @@ +DecyclerOscillator +0 +0 +-0.07751784410081086 +-0.2928777235131008 +-0.5963479925408279 +-0.9238487249057812 +-1.2176914142460618 +-1.4324090362493536 +-1.536661166568635 +-1.5137521107566982 +-1.3613710553485419 +-1.0906111346094036 +-0.7242255617591979 +-0.2941372997525207 +0.16168302018087388 +0.602765386340721 +0.9898445603597423 +1.2884176071530788 +1.4718538094387412 +1.5237888896795369 +1.4395952092523032 +1.2267997315407797 +0.9044141478168086 +0.5012379611042945 +0.053286633210248624 +-0.3994251832410498 +-0.816457828532478 +-1.160558880556593 +-1.400990744512498 +-1.5162763198626124 +-1.496117469455612 +-1.3423149128452252 +-1.0686073688446527 +-0.6994443143098295 +-0.26780198393748833 +0.187762299224687 +0.6265543349561256 +1.0093781377510993 +1.3020371975623561 +1.4783891522469048 +1.5226810069431735 +1.430956302198993 +1.2114085327180106 +0.8836492468837776 +0.4769562055525114 +0.027658086873458387 +-0.42411064633390083 +-0.8379948386126728 +-1.1770234477174313 +-1.4109120577091971 +-1.5187680956364034 +-1.4909571028533435 +-1.329963352517197 +-1.0501679368656909 +-0.6765641470778831 +-0.24252489700961632 +0.2131783798084541 +0.6498390668570266 +1.0284515654472273 +1.3151955486831355 +1.4844570305379392 +1.521116386940733 +1.4218989467648129 +1.195667508446661 +0.8626306525972041 +0.45253756968199355 +0.0020206534376825402 +-0.4486767617602254 +-0.8592952181021758 +-1.1931553918081192 +-1.420434547880319 +-1.5208305162013005 +-1.4853752239253026 +-1.317235786716651 +-1.0314315997396761 +-0.65349269982039 +-0.21717924329152538 +0.23853418822619687 +0.6729400711244296 +1.0472342216536674 diff --git a/testdata/golden/g_Dema.csv b/testdata/golden/g_Dema.csv new file mode 100644 index 00000000..a875664a --- /dev/null +++ b/testdata/golden/g_Dema.csv @@ -0,0 +1,81 @@ +Dema +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +118.74669156806847 +120.5868328209357 +121.85291827578372 +122.4637098553673 +122.39887114257087 +121.70038064392803 +120.46844413479518 +118.85226093096911 +117.03646019559268 +115.2244115151639 +113.61989432980793 +112.40875836801216 +111.74220885902692 +111.72320585412186 +112.39718940217612 +113.7479564075443 +115.69905523523809 +118.12057160102216 +120.84069799790156 +123.66105186591119 +126.37437306285267 +128.7830188389398 +130.7166034323693 +132.04720593990055 +132.7007874434865 +132.66379708083548 +131.98437658149507 +130.76805535714053 +129.16832043086035 +127.37290335057457 +125.58700885837773 +124.01498330283054 +122.8420601805199 +122.2178133252714 +122.24279574243225 +122.95955753648009 +124.34884522128698 +126.33132187516286 +128.77465445064718 +131.50533512402893 +134.32418069760755 +137.02412552286745 +139.40871854313608 +141.30967216046872 +142.60189533169736 +143.21466802688062 +143.13795886557884 +142.42332159308563 +141.17929031580826 +139.56168482520613 +137.75969200690437 +135.97896664176378 +134.42326115484317 +133.27622527311593 diff --git a/testdata/golden/g_DemandIndex.csv b/testdata/golden/g_DemandIndex.csv new file mode 100644 index 00000000..21636c87 --- /dev/null +++ b/testdata/golden/g_DemandIndex.csv @@ -0,0 +1,81 @@ +DemandIndex +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-1.3981695937855296 +-2.0068107629842244 +-1.2950310416934385 +0.6113744030848662 +3.463125700373265 +6.940326807329817 +10.608975841234228 +14.020888208931803 +16.794793040402592 +18.728293762605144 +19.65225163662969 +19.47793713803193 +18.234958190674984 +16.058302063220793 +13.148783411880693 +9.738997813437685 +6.100353570295531 +2.5311454442443 +-0.7633836882180678 +-3.5562070589902257 +-5.556306299394285 +-6.535267963168352 +-6.359310347217522 +-5.006302894140896 +-2.5899406812189936 +0.6158517487029703 +4.227045305448223 +7.867540814199778 +11.202185740108547 +13.893228597270356 +15.701246846535655 +16.513672744293473 +16.34407185419179 +15.25539560380825 +13.39151229762484 +10.866441592629577 +7.839968657093757 +4.52186074193715 +1.1796536958073534 +-1.8888676755396907 +-4.4104775197042425 +-6.157544724360968 +-6.916406556748635 +-6.580551792404769 +-5.1869282148639275 +-2.901390848535689 +0.017967966456192825 +3.2492423054688033 +6.4332675587283905 +9.279000514842673 +11.68109929400956 +13.408591216988569 +14.305287067380865 +14.31577178601452 +13.449914747944835 +11.774838924378777 +9.427051462000454 +6.610446539894006 +3.5704659904747507 +0.5430409208306626 +-2.2004579601695644 +-4.393550644141975 +-5.818768528405156 +-6.352356283843296 +-5.950187233661405 +-4.661110122759889 diff --git a/testdata/golden/g_DemarkPivots.csv b/testdata/golden/g_DemarkPivots.csv new file mode 100644 index 00000000..5c5eaf27 --- /dev/null +++ b/testdata/golden/g_DemarkPivots.csv @@ -0,0 +1,81 @@ +pp,r1,s1 +99.25,100.5,97.5 +102.6858835747635,104.11625648842282,100.59445623929474 +106.00309236476774,107.39278716644749,103.86703513059089 +108.93999932460987,110.04907143793704,107.11512486962047 +111.82033779671532,113.48777880883634,110.73664382213329 +113.16936957727522,115.0391809023547,111.88725405911815 +113.59241952863388,115.88215063469261,112.02058236567856 +112.97312858671218,115.30538981324779,111.38648051333264 +111.41036194567735,113.38172540477936,110.09681514604341 +109.13129843961424,110.49720502713235,108.26959532721722 +105.93724566302721,107.07544673027837,104.13479794609636 +103.19468714218725,104.66958511703675,100.97274710886849 +100.73788556021526,102.28844529407355,98.4736760993349 +98.84415730000258,100.20211299874761,96.90642701067021 +97.61148125753598,98.87586205817712,95.75548067458189 +97.19141919443507,98.44462276334197,95.21829168553528 +98.48350114468982,100.41823724231372,97.29355947935377 +99.8701262670947,101.80746791358526,98.5873188986634 +101.98212313628511,103.70870267174067,100.76394936263485 +104.8254268723964,106.99249405186748,103.3257521334745 +107.99920670201082,110.28787206385834,106.45819317908703 +111.26162582273436,113.2779860561967,109.95670229705776 +113.82531099154654,114.69119322432022,112.38364916958646 +116.74498633735749,117.879915498178,115.01453932224099 +119.1538057799276,120.6585703968869,116.92714940457292 +121.00914737747458,122.62390626911443,118.65048198446769 +122.20610596022017,123.63664165934762,120.12436205549115 +122.64513494082007,123.71150378040258,121.06616042928587 +122.14237501927037,123.21647998589984,120.39777914762388 +121.68125023494567,123.72919137198745,120.38150069936285 +119.85561076366399,122.00836449417844,118.41202094278356 +117.51965254789604,119.43828718638532,116.17278107223869 +115.03525638832207,117.01255843043465,113.65734326698984 +112.63773801197561,114.79842864561428,111.20084422029188 +110.51030959880836,112.50526529642408,109.25830351262861 +108.26940272744443,109.35088178274958,106.540084289673 +107.60207833614736,108.70743971746646,105.97991493669689 +107.74794108755447,109.22801528502319,105.5943257230227 +108.93803183752519,110.55537593682273,106.57202654475822 +111.12884068832828,112.58699613595853,108.9638532655492 +114.14636656555048,115.20199726707263,112.52300941695138 +118.20907981363631,119.75694131555092,117.26445019903183 +121.97291442834978,124.06087568859328,120.61059182015883 +125.58660227166432,127.88230821801861,124.03282035834349 +128.74292994082526,130.85398225680115,127.2763063859608 +131.23499339252444,132.97412974737856,130.01685065159327 +133.04164438675528,134.99941680765968,131.76041433014595 +133.89857677557075,135.80218062803974,132.74403340529048 +133.0922674800085,134.36101932912442,131.119074067261 +132.27242827286773,133.52113889464036,130.4600470678841 +130.70375416195242,132.10992406894522,128.6905385875856 +128.637039841295,130.19482239926455,126.35184061536711 +126.38366183377089,127.81836657911286,124.20812703231047 +124.16985797315824,125.23239149207069,122.46634714843323 +122.68443917750632,124.14345676749355,121.75060086176721 +121.07933688479505,123.13551448966716,119.70265292811585 +119.98032727470522,122.33510359467938,118.37494030945801 +119.49766926250228,121.73997527765448,117.95735659826684 +119.72723331910679,121.50025387879435,118.51380947735645 +120.84874969892996,122.54498226119694,119.76334631937557 +122.04843661384999,123.21925791926213,120.14848492145892 +124.6025521206855,126.01658209372069,122.44885415766232 +127.75414920753644,129.16774937502385,125.70306304765896 +131.24131401643615,132.53358469377488,129.41968552339065 +134.67484051577156,136.11554347254713,132.55174337464777 +137.946708918021,139.30504641529893,135.83872370264007 +141.4931197632729,143.24847820983604,140.43724934589036 +143.5145158999682,145.14879826955396,142.43573953343068 +144.7295048206305,146.69024336708017,143.38334763780378 +144.97609002104508,147.30221144626717,143.3807479204221 +144.18762156950126,146.4855630800217,142.6281182221707 +142.48509527224925,144.36387619886287,141.24027015356899 +140.1432507898188,141.54105277691102,139.278976859638 +136.88600988144026,138.09546731469894,134.9913092954812 +134.16901101832457,135.67647129320275,131.91171524417607 +131.78967040161683,133.32518118214094,129.5572333143467 +130.0118158199836,131.31645203465825,128.15578001020836 +128.89094109224055,130.1664274710646,126.99715356415516 +128.63134144530386,129.86320743341284,126.6671124425755 +130.07774871998475,132.03463449580025,128.85800386759882 diff --git a/testdata/golden/g_DepthSlope.csv b/testdata/golden/g_DepthSlope.csv new file mode 100644 index 00000000..b7e16f35 --- /dev/null +++ b/testdata/golden/g_DepthSlope.csv @@ -0,0 +1,81 @@ +DepthSlope +2992.4999999999623 +3051.951797240385 +3109.0334389358277 +3161.469260163426 +3207.1688102016433 +3244.310192203725 +3271.4126964756524 +3287.3958316990056 +3291.622400710131 +3283.92390354026 +3264.607254977547 +3234.442548842976 +3194.6323567798954 +3146.7637855175344 +3092.7452039341165 +3034.730162411882 +3009.9684624206693 +3068.9706747814944 +3124.924242655943 +3175.5984738645757 +3218.9731467208558 +3253.3190498947315 +3277.2669206113965 +3289.8620328372754 +3290.602259194088 +3279.4580891929068 +3256.8738057242153 +3223.749772901093 +3181.406541383255 +3131.532202189528 +3076.1150878359986 +3017.3645037931014 +3027.3773495514774 +3085.7287530313383 +3140.363420328189 +3189.1032396665596 +3230.0051082568198 +3261.438397671587 +3282.1499618553858 +3291.3140961033123 +3288.5654553020076 +3274.013619086385 +3248.2387232453734 +3212.268331538793 +3167.536469972805 +3115.82645670852 +3059.1998067944214 +2999.9140460668427 +3044.6672892809015 +3102.1688794285583 +3155.298317433563 +3201.9375002622874 +3240.2270708738424 +3268.6405449175927 +3286.045166847359 +3291.7470693102614 +3285.518935448493 +3267.6090613051165 +3238.731457044346 +3200.037381619515 +3153.0694457115947 +3099.700112709331 +3042.057049502828 +3002.5616968808445 +3061.779315161563 +3118.2349857702966 +3169.677999276064 +3214.0574850681887 +3249.6041730957286 +3274.9009290810654 +3288.9392511916035 +3291.1594758252904 +3281.4730896322917 +3260.266258262962 +3228.3844311619814 +3187.0986361669356 +3138.0548076394207 +3083.20816825607 +3024.745280450531 +3020.003124930555 diff --git a/testdata/golden/g_DerivativeOscillator.csv b/testdata/golden/g_DerivativeOscillator.csv new file mode 100644 index 00000000..20890930 --- /dev/null +++ b/testdata/golden/g_DerivativeOscillator.csv @@ -0,0 +1,81 @@ +DerivativeOscillator +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +15.669758528895564 +15.605096339568412 +13.869921780265415 +10.804582973557004 +6.8753042321413815 +2.5163382527083584 +-1.9229897068654154 +-6.20517650134294 +-10.19695566531707 +-13.419684515999585 +-14.989539827109773 +-14.67182841363428 +-12.798460496574464 +-9.872206290489373 +-6.365458452224736 +-2.6566562267201164 +0.9894303828336248 +4.427784694637957 +7.59425390964396 +10.4674944578395 +13.046891662673595 +14.6693330723905 +14.660350079016851 +12.96535801815142 +9.94405942315975 +6.068138490232855 +1.7711101036748005 +-2.600449430861012 +-6.813663519637785 +-10.738687944697183 +-13.847465795246329 diff --git a/testdata/golden/g_DetrendedStdDev.csv b/testdata/golden/g_DetrendedStdDev.csv new file mode 100644 index 00000000..0a23a3db --- /dev/null +++ b/testdata/golden/g_DetrendedStdDev.csv @@ -0,0 +1,81 @@ +DetrendedStdDev +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +4.4493568840082 +3.85002544416922 +3.0228441874058336 +2.1742635482342014 +1.769971306398982 +2.216024415579623 +3.072494870785695 +3.8908751090105262 +4.473935957527837 +4.729488568546997 +4.623113627647043 +4.16881236285195 +3.43231640396512 +2.556206230458396 +1.863322298250773 +1.914120328984829 +2.6538309490921663 +3.5254060105834535 +4.235503991624014 +4.653029673859745 +4.7186475785848945 +4.423745457431836 +3.8084355087095356 +2.973058427633583 +2.1338214707036323 +1.7730527338329696 +2.2589850464144696 +3.121962112450148 +3.9309620985747804 +4.497472030370875 +4.733186059037806 +4.606493442295264 +4.134101965925981 +3.385036843910629 +2.5080552187028315 +1.8416776060900932 +1.9430215405759157 +2.7031505018716637 +3.571151815762076 +4.267453612003202 +4.666313222018953 +4.711508441976194 +4.397112860586306 +3.766128597052999 +2.923188429400928 +2.0948215932161833 +1.7791961089270387 +2.3030311037042295 +3.171199863049106 +3.970264860746911 +4.519954982138415 +4.735732744871595 +4.588774165272115 +4.098504004183562 +3.3373126356377707 +2.460454957586373 +1.822692386028191 +1.9740820032484074 +2.752712081364799 +3.6163243314016262 +4.298452409966766 +4.6784730462616215 +4.7032272284941445 +4.36947082014111 +3.723128933945447 +2.8732876702202064 +2.057391257222006 diff --git a/testdata/golden/g_DisparityIndex.csv b/testdata/golden/g_DisparityIndex.csv new file mode 100644 index 00000000..902311b5 --- /dev/null +++ b/testdata/golden/g_DisparityIndex.csv @@ -0,0 +1,81 @@ +DisparityIndex +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-6.9670594627031415 +-8.111484356583244 +-8.283630908705579 +-7.45522194503994 +-5.6773663605935605 +-3.0864250379823357 +0.09759460673684461 +3.5839654969862904 +7.037433863707748 +10.115945739908675 +12.513864417861873 +14.001685823514073 +14.453423249451015 +13.856358007522486 +12.30313170343465 +9.970740632012157 +7.093133487662245 +3.9335902186952003 +0.7608681939734508 +-2.1694439163768413 +-4.628893835738071 +-6.427020502902492 +-7.420807667919894 +-7.523900218334668 +-6.715710969755918 +-5.049230857596431 +-2.655062208721618 +0.2616088517659754 +3.4341146331146954 +6.55872279451694 +9.328479706739246 +11.471112881402016 +12.783389157279412 +13.15464597939804 +12.57518893191254 +11.129568854070886 +8.978494644140644 +6.334931660243469 +3.4395851204866137 +0.5392307216981119 +-2.1307300870578514 +-4.359773468587107 +-5.973003492009427 +-6.840485466938339 +-6.886035141493229 +-6.095442525749179 +-4.522990506720933 +-2.2940752979133645 +0.3988350187531619 +3.3092804711572623 +6.159660869673855 +8.671900136306334 +10.601109102427868 +11.76571247419995 +12.067923174773256 +11.501008024226905 +10.143398960197493 +8.142817905116859 +5.695103012913074 +3.022181450400031 +0.3522242772736118 +-2.096717124645413 +-4.129707943944602 +-5.585465237210979 +-6.34547619574199 +-6.342344642462295 +-5.567233643766536 diff --git a/testdata/golden/g_DistanceSsd.csv b/testdata/golden/g_DistanceSsd.csv new file mode 100644 index 00000000..64427cc0 --- /dev/null +++ b/testdata/golden/g_DistanceSsd.csv @@ -0,0 +1,81 @@ +DistanceSsd +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.0022061752808360505 +0.0016554655632489113 +0.0009271084891486337 +0.0005398748924547556 +0.0006392596542137324 +0.0009980484710697662 +0.0012591812015395015 +0.0011984923702331198 +0.0008688681887476694 +0.0005712934930835004 +0.0006508049856415997 +0.0011942426118459115 +0.001847134997627689 +0.0020290151110934147 +0.0015219412819619234 +0.0008298545170876565 +0.00071329543822844 +0.0013193127001669505 +0.002005416861195529 +0.0020780806954136615 +0.001495444916020541 +0.0007908980702376005 +0.0004860812749357418 +0.0006683952196217615 +0.0010317439328010264 +0.0012039872326501983 +0.001039157182104747 +0.000685581565355477 +0.00043917143713783735 +0.0005129969728793537 +0.0008730462030227376 +0.0012431181248390062 +0.0013016151152203752 +0.000974226054570753 +0.0005852573444034396 +0.0006221912434030307 +0.0012068693552082295 +0.0018490013465934359 +0.0019169817728014952 +0.001344271007347832 +0.000680507446029724 +0.0004629493249835952 +0.0007187846470579891 +0.001070143360072688 +0.0011571407609382966 +0.0009166376858705445 +0.000558792932056377 +0.00035951736598546427 +0.0004519368428976101 +0.0007408987734374968 +0.0009785340233923478 +0.0009551990403679945 +0.0006850586655237414 +0.00043371553420188357 +0.0005113406762427515 +0.0009569858885479594 +0.001424091537219046 +0.0014733675384533415 +0.001040541077963229 +0.0005450185481231381 +0.00045552367731676555 +0.0007988516330366678 +0.001175201411548084 +0.0012068942304301908 +0.0008822556157732365 +0.0004901730636203186 +0.00031746482316111815 diff --git a/testdata/golden/g_Doji.csv b/testdata/golden/g_Doji.csv new file mode 100644 index 00000000..1b655654 --- /dev/null +++ b/testdata/golden/g_Doji.csv @@ -0,0 +1,81 @@ +Doji +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 diff --git a/testdata/golden/g_DojiStar.csv b/testdata/golden/g_DojiStar.csv new file mode 100644 index 00000000..bf252b88 --- /dev/null +++ b/testdata/golden/g_DojiStar.csv @@ -0,0 +1,81 @@ +DojiStar +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_DollarBars.csv b/testdata/golden/g_DollarBars.csv new file mode 100644 index 00000000..6e61881c --- /dev/null +++ b/testdata/golden/g_DollarBars.csv @@ -0,0 +1,81 @@ +bars +99,101,98,100,1000,100000 +102.57761950472302,104.77731091023225,101.25551066110417,103.4552020666134,1019.8669330795061,105510.53964279758 +106.10612242808222,108.13914959894458,104.61339756308799,106.64642473395035,1038.941834230865,110799.43212725427 +109.26253189460714,110.76487377959927,107.8309272112827,109.33326909627483,1056.4642473395036,115506.6898449634 +111.7365376962194,112.90403177129735,110.1528967845943,111.32039085967226,1071.7356090899523,119306.02690212241 +113.27609348158748,114.45148509543229,111.29955825219574,112.47494986604055,1084.1470984807897,121939.39054904015 +113.7284688053824,115.1642566915892,111.30268842257516,112.73847630878196,1093.2039085967226,123246.14294999944 +113.06855035377954,114.55977666009171,110.64086736017657,112.13209366648874,1098.544972998846,123182.14780915696 +111.40827542637513,112.72390874531129,109.43899848657534,110.75463180551151,1099.9573603041506,121825.37244224855 +108.98459460176909,109.99300155201126,107.76539185209613,108.7737988023383,1097.3847630878195,119366.70942886616 +106.12753789513545,107.73969337995807,104.79904459577605,106.41120008059868,1090.929742682568,116087.14312247078 +103.21387328427625,105.41662717550601,101.71978916733775,103.92254305856751,1080.849640381959,112324.64329243136 +100.61462528040111,103.00209502109563,99.18732582635697,101.57479556705148,1067.546318055115,108435.79901480683 +98.64575078243223,100.78188758933494,97.48620160125755,99.62233840816026,1051.5501371821465,104757.88361950715 +97.53034002152081,99.46748184049008,96.34710045689485,98.28424227586412,1033.4988150155905,101576.64792681077 +97.378063505514,99.16454670333486,95.93821562552817,97.72469882334903,1014.1120008059867,99103.78985190894 +98.18385394545021,99.67344281002588,96.54876504706593,98.0383539116416,1005.837414342758,98610.6444049058 +99.8438650794075,101.15293363552601,97.93278462060415,99.24185317672267,1025.5541102026832,101777.89042951915 +102.1834853863248,103.20029690993537,100.25554360082955,101.27235512444012,1044.2520443294852,105753.86387275821 +104.99031673022002,106.32510161131832,102.65835969292533,103.99314457402363,1061.185789094272,110356.04718517998 +108.04491654708718,109.54022022493461,105.7105413401633,107.20584501801073,1075.680249530793,115319.2101201333 +111.14367593283949,112.56654934841096,109.24526558927202,110.6681390048435,1087.157577241359,120313.7058783156 +114.11098793714572,115.26697281350663,112.95942875877287,114.11541363513378,1095.1602073889517,124974.6600629291 +116.80109288512898,118.47543335247398,115.61005717653698,117.28439764388199,1099.3691003633464,128938.84272441153 +119.09282467975903,121.38046215528227,117.64904116296829,119.93667863849153,1099.616460883584,131884.34609458983 +120.88220148856881,123.36781277048146,119.39438848583472,121.87999976774739,1095.8924274663138,133567.36880507047 +122.07798667229586,124.2878498649492,120.77557026109272,122.98543345374605,1088.3454655720152,133850.63883079335 +122.60397744514097,124.22410945235427,121.57876610123756,123.19889810845086,1077.2764487555987,132719.2714448748 +122.40925186267498,123.88697089091687,121.06827005264091,122.5459890808828,1063.126663787232,130281.9085320655 +121.48461656761053,122.98099977052848,119.63330909790388,121.12969230082183,1046.4602179413757,126757.40420428979 +119.8808727652764,121.29920058454442,117.70285703314954,119.12118485241757,1027.9415498198925,122449.61537357603 +117.72299769788953,118.8665240235534,115.60101790940676,116.74454423507063,1008.3089402817496,117714.56768133992 +115.21439166809358,116.4131695096543,113.05795434620948,114.2567321877702,1011.6549204850494,115588.38531630023 +112.6270381197495,114.07463180365934,110.47704737833695,111.92464106224679,1031.154136351338,115411.55659097458 +110.27641646211617,111.76231568498811,108.51535390119264,110.00125312406458,1049.4113351138608,115436.56190512236 +108.48360243707184,109.99872116521585,107.18792367213928,108.7030424002833,1065.6986598718788,115844.68660997793 +107.530320991091,109.22424173559783,106.49671695482826,108.19063769933508,1079.3667863849153,116777.38093046597 +107.61494922421186,109.90155645208623,106.26786689008574,108.55447411796011,1089.8708095811626,118310.35259059854 +108.81801012516657,111.30403713029216,107.32068773822765,109.80671474335324,1096.7919672031487,120435.1226754774 +111.08434919099572,113.29382811110736,109.67068524069803,111.88016416080967,1099.8543345374605,123051.88350102917 +114.22618875818226,115.76972371414958,113.09073586402833,114.63427081999565,1098.9358246623383,125975.70693813774 +117.94724565362051,119.15370942824079,116.6612183117217,117.86768208634197,1094.0730556679773,128955.85510470587 +121.88395973243564,123.33523703654073,119.88495316810628,121.33623047221137,1085.459890808828,131705.61147952135 +125.65653611891825,127.14038418498515,123.29089632531003,124.77474439137693,1073.4397097874114,133938.1654082781 +128.92069597346688,130.20955349568973,126.63187762484937,127.92073514707224,1058.4917192891762,135403.03887855983 +131.41114890560974,132.45313613345562,129.49585703767033,130.5378442655162,1041.2118485241756,135917.5501300591 +132.96978971477444,134.3228744433646,131.08387196585088,132.43695669444105,1022.2889914100246,135388.84288457324 +133.5549991814736,135.053120145851,131.99497292310176,133.49309388747918,1002.4775425453357,133823.8287070939 +133.2323987581558,135.065460892756,131.8235156308926,133.65657776549278,1017.4326781222982,135986.56986460654 +132.1510588175171,134.08480947785137,131.0237176510951,132.95746831142935,1036.647912925193,137830.08203286072 +130.5116755897077,132.71696973631924,129.29758425495962,131.50287840157117,1054.402111088937,138656.91260088843 +128.53409061924222,130.9222390672229,127.07925728332546,129.46740573130614,1069.9874687593544,138528.5017452806 +126.4306172006658,128.5591966352313,124.94895708842891,127.07753652299444,1082.7826469085653,137597.3513589878 +124.38927906587094,125.87336879788326,123.1073244542458,124.59141418625812,1092.2775421612807,136088.40366176414 +122.56791894474918,123.61827749324543,121.2254215875191,122.27578013601534,1098.093623006649,134270.25441552154 +121.09703354508844,122.45602084147426,119.02315927992295,120.38214657630877,1099.9990206550704,132420.24333829476 +120.08693553049852,121.58571423995242,117.62555095473105,119.12432966418496,1097.9177729151318,130788.71872490991 +119.63399522490424,121.03798192673773,117.25536324735009,118.65934994918358,1091.9328525664675,129568.04247369475 +119.82146372498268,120.94065716085713,117.95421275941922,119.07340619529367,1082.2828594968707,128871.10654707484 +120.7124947130592,121.93415307848436,119.152517136663,120.37417550208815,1069.3525084777123,128722.42652909434 +122.33587608239566,123.94838830624106,120.87761530843784,122.49012753228324,1053.6572918000436,129062.61604790752 +124.66785812762632,126.75625008370868,123.18852214765032,125.27691410373268,1035.8229282236828,129764.70000575516 +127.61552102482923,129.80523536741393,126.34054904004905,128.53026338263376,1016.5604175448309,130658.77821139726 +131.00775897051096,133.06294250948164,129.94904333909741,132.0042268780681,1003.3623047221139,132448.0653134392 +134.59892592769242,136.79793765689536,133.234137558996,135.43314928819893,1023.1509825101539,138568.5597586651 +138.08766685694894,140.0546941334019,136.58837142074304,138.555398697196,1042.016703682664,144377.03982788947 +141.1500141222941,142.5489901806554,139.73776131670974,141.13673737507105,1059.2073514707224,149493.06979026794 +143.48228026040917,144.5932922665057,141.8802335303824,142.99124553647894,1074.037588995245,153577.97260342693 +144.84649927621132,146.0756620034572,142.76876627418082,143.9979290014267,1085.9161814856498,156369.681203071 +145.1098734724699,146.57143212166807,142.649968595823,144.11152724502116,1094.3695669444105,157711.26966283142 +144.27024859045207,145.7471249168318,141.88968005898082,143.36655638536055,1099.060735569487,157568.5529169587 +142.46200877506277,143.72992039092952,140.60631434563564,141.8742259615024,1099.8026652716362,156033.6518458107 +139.9404686061768,141.00752471999962,138.7454488027266,139.81250491654941,1096.5657776549278,153313.60817969943 +137.04703875358243,138.78071046739933,135.67655244818158,137.41022416199849,1089.4791172140503,149705.5697161989 +134.16122174198705,136.42630679247307,132.66155074344638,134.9266357939324,1078.8252067375315,145562.25575478876 +131.6480122345848,134.02210748888697,130.25415962109273,132.6282548753949,1065.0287840157116,141252.90901606772 +129.80997879551026,131.86785162975886,128.70717960530897,130.76505243955756,1048.6398688853799,137125.44744500748 +128.85205701193928,130.78472862032595,127.6154547134165,129.54812632180318,1030.3118356745701,133474.96783881815 +128.8642014864336,130.59557044803222,127.39947545719488,129.13084441879352,1010.7753652299442,130522.27642985711 +129.82321172551153,131.29749357237068,128.12086294416926,129.59514479102842,1009.1906850227682,130786.2129472828 diff --git a/testdata/golden/g_Donchian.csv b/testdata/golden/g_Donchian.csv new file mode 100644 index 00000000..8c7daf0d --- /dev/null +++ b/testdata/golden/g_Donchian.csv @@ -0,0 +1,81 @@ +upper,middle,lower +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +115.1642566915892,106.32522914642337,97.48620160125755 +115.1642566915892,105.75567857424203,96.34710045689485 +115.1642566915892,105.55123615855868,95.93821562552817 +115.1642566915892,105.55123615855868,95.93821562552817 +115.1642566915892,105.55123615855868,95.93821562552817 +115.1642566915892,105.55123615855868,95.93821562552817 +115.1642566915892,105.55123615855868,95.93821562552817 +114.55977666009171,105.24899614280994,95.93821562552817 +112.72390874531129,104.33106218541974,95.93821562552817 +115.26697281350663,105.6025942195174,95.93821562552817 +118.47543335247398,107.20682448900108,95.93821562552817 +121.38046215528227,108.65933889040522,95.93821562552817 +123.36781277048146,109.65301419800483,95.93821562552817 +124.2878498649492,110.11303274523868,95.93821562552817 +124.2878498649492,110.11303274523868,95.93821562552817 +124.2878498649492,110.11303274523868,95.93821562552817 +124.2878498649492,110.41830745600757,96.54876504706593 +124.2878498649492,111.11031724277667,97.93278462060415 +124.2878498649492,112.27169673288938,100.25554360082955 +124.2878498649492,113.47310477893726,102.65835969292533 +124.2878498649492,114.99919560255626,105.7105413401633 +124.2878498649492,116.40160188307092,108.51535390119264 +124.2878498649492,115.73788676854423,107.18792367213928 +124.2878498649492,115.39228340988873,106.49671695482826 +124.2878498649492,115.27785837751748,106.26786689008574 +124.2878498649492,115.27785837751748,106.26786689008574 +124.2878498649492,115.27785837751748,106.26786689008574 +124.22410945235427,115.24598817122,106.26786689008574 +123.88697089091687,115.0774188905013,106.26786689008574 +123.33523703654073,114.80155196331324,106.26786689008574 +127.14038418498515,116.70412553753545,106.26786689008574 +130.20955349568973,118.23871019288774,106.26786689008574 +132.45313613345562,119.36050151177068,106.26786689008574 +134.3228744433646,120.29537066672518,106.26786689008574 +135.053120145851,120.66049351796838,106.26786689008574 +135.065460892756,120.66666389142087,106.26786689008574 +135.065460892756,120.66666389142087,106.26786689008574 +135.065460892756,120.66666389142087,106.26786689008574 +135.065460892756,121.19307431549183,107.32068773822765 +135.065460892756,122.36807306672702,109.67068524069803 +135.065460892756,124.07809837839216,113.09073586402833 +135.065460892756,125.86333960223885,116.6612183117217 +135.065460892756,127.04431008633946,119.02315927992295 +135.065460892756,126.34550592374353,117.62555095473105 +135.065460892756,126.16041207005304,117.25536324735009 +135.065460892756,126.16041207005304,117.25536324735009 +135.065460892756,126.16041207005304,117.25536324735009 +135.065460892756,126.16041207005304,117.25536324735009 +135.065460892756,126.16041207005304,117.25536324735009 +134.08480947785137,125.67008636260073,117.25536324735009 +133.06294250948164,125.15915287841587,117.25536324735009 +136.79793765689536,127.02665045212272,117.25536324735009 +140.0546941334019,128.655028690376,117.25536324735009 +142.5489901806554,129.90217671400274,117.25536324735009 +144.5932922665057,130.92432775692788,117.25536324735009 +146.0756620034572,131.66551262540366,117.25536324735009 +146.57143212166807,131.91339768450908,117.25536324735009 +146.57143212166807,131.91339768450908,117.25536324735009 +146.57143212166807,132.26282244054363,117.95421275941922 +146.57143212166807,132.86197462916553,119.152517136663 +146.57143212166807,133.72452371505295,120.87761530843784 +146.57143212166807,134.87997713465919,123.18852214765032 +146.57143212166807,136.45599058085855,126.34054904004905 +146.57143212166807,137.63930586348852,128.70717960530897 +146.57143212166807,137.0934434175423,127.6154547134165 +146.57143212166807,136.98545378943146,127.39947545719488 +146.57143212166807,136.98545378943146,127.39947545719488 diff --git a/testdata/golden/g_DonchianStop.csv b/testdata/golden/g_DonchianStop.csv new file mode 100644 index 00000000..83bb24c7 --- /dev/null +++ b/testdata/golden/g_DonchianStop.csv @@ -0,0 +1,81 @@ +stop_long,stop_short +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +97.48620160125755,115.1642566915892 +96.34710045689485,115.1642566915892 +95.93821562552817,115.1642566915892 +95.93821562552817,115.1642566915892 +95.93821562552817,115.1642566915892 +95.93821562552817,115.1642566915892 +95.93821562552817,115.1642566915892 +95.93821562552817,114.55977666009171 +95.93821562552817,112.72390874531129 +95.93821562552817,115.26697281350663 +95.93821562552817,118.47543335247398 +95.93821562552817,121.38046215528227 +95.93821562552817,123.36781277048146 +95.93821562552817,124.2878498649492 +95.93821562552817,124.2878498649492 +95.93821562552817,124.2878498649492 +96.54876504706593,124.2878498649492 +97.93278462060415,124.2878498649492 +100.25554360082955,124.2878498649492 +102.65835969292533,124.2878498649492 +105.7105413401633,124.2878498649492 +108.51535390119264,124.2878498649492 +107.18792367213928,124.2878498649492 +106.49671695482826,124.2878498649492 +106.26786689008574,124.2878498649492 +106.26786689008574,124.2878498649492 +106.26786689008574,124.2878498649492 +106.26786689008574,124.22410945235427 +106.26786689008574,123.88697089091687 +106.26786689008574,123.33523703654073 +106.26786689008574,127.14038418498515 +106.26786689008574,130.20955349568973 +106.26786689008574,132.45313613345562 +106.26786689008574,134.3228744433646 +106.26786689008574,135.053120145851 +106.26786689008574,135.065460892756 +106.26786689008574,135.065460892756 +106.26786689008574,135.065460892756 +107.32068773822765,135.065460892756 +109.67068524069803,135.065460892756 +113.09073586402833,135.065460892756 +116.6612183117217,135.065460892756 +119.02315927992295,135.065460892756 +117.62555095473105,135.065460892756 +117.25536324735009,135.065460892756 +117.25536324735009,135.065460892756 +117.25536324735009,135.065460892756 +117.25536324735009,135.065460892756 +117.25536324735009,135.065460892756 +117.25536324735009,134.08480947785137 +117.25536324735009,133.06294250948164 +117.25536324735009,136.79793765689536 +117.25536324735009,140.0546941334019 +117.25536324735009,142.5489901806554 +117.25536324735009,144.5932922665057 +117.25536324735009,146.0756620034572 +117.25536324735009,146.57143212166807 +117.25536324735009,146.57143212166807 +117.95421275941922,146.57143212166807 +119.152517136663,146.57143212166807 +120.87761530843784,146.57143212166807 +123.18852214765032,146.57143212166807 +126.34054904004905,146.57143212166807 +128.70717960530897,146.57143212166807 +127.6154547134165,146.57143212166807 +127.39947545719488,146.57143212166807 +127.39947545719488,146.57143212166807 diff --git a/testdata/golden/g_DoubleBollinger.csv b/testdata/golden/g_DoubleBollinger.csv new file mode 100644 index 00000000..d2925401 --- /dev/null +++ b/testdata/golden/g_DoubleBollinger.csv @@ -0,0 +1,81 @@ +upper_outer,upper_inner,middle,lower_inner,lower_outer +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +115.28678132658357,110.08625971844405,104.88573811030453,99.685216502165,94.4846948940255 +115.44235076607696,110.344190563641,105.24603036120507,100.14787015876914,95.04970995633319 +116.031797084579,110.81923714634779,105.60667720811657,100.39411726988534,95.18155733165413 +117.04307249142056,111.51159957229815,105.98012665317574,100.44865373405334,94.91718081493093 +118.42198305380711,112.39983306718162,106.37768308055611,100.3555330939306,94.33338310730511 +120.08275668667552,113.44562707808629,106.80849746949707,100.17136786090785,93.53423825231862 +121.91875364904577,114.5987518068141,107.2787499645824,99.95874812235071,92.63874628011904 +123.81164604805659,115.8013719349436,107.79109782183062,99.78082370871763,91.77054959560465 +125.64023050374611,116.99233427383741,108.34443804392872,99.69654181402002,91.04864558411133 +127.28963390911599,118.11181990840664,108.9340059076973,99.75619190698795,90.5783779062786 +128.66054775091027,119.10617416676587,109.55180058262147,99.99742699847707,90.44305341433265 +129.67757252249928,119.93243617185584,110.18729982121242,100.442163470569,90.69702711992556 +130.29572502322122,120.56206245162939,110.82839988003757,101.09473730844574,91.36107473685391 +130.50437915457422,120.98343793282388,111.4624967110735,101.94155548932312,92.42061426757276 +130.32821912788876,121.20291548583329,112.07761184377782,102.95230820172235,93.82700455966688 +129.8251239347045,121.24429316044616,112.66346238618785,104.08263161192953,95.5018008376712 +129.08124974424334,121.14681465463894,113.21237956503455,105.27794447543016,97.34350938582577 +128.2039061910054,120.96194997271232,113.71999375441924,106.47803753612615,99.23608131783307 +127.3130646923414,120.74934474691126,114.18562480148111,107.62190485605096,101.05818491062082 +126.53231715555998,120.57232996899336,114.61234278242675,108.65235559586014,102.69236840929352 +125.97953405782138,120.49311390979372,115.00669376176606,109.5202736137384,104.03385346571073 +125.75638565002856,120.56725035094694,115.37811505186531,110.18897975278368,104.99984445370205 +125.9357870598765,120.83693963290837,115.73809220594023,110.6392447789721,105.54039735200396 +126.54962545900983,121.32437925340197,116.09913304779411,110.87388684218625,105.64864063657839 +127.5832865042029,122.02846844468587,116.47365038516884,110.9188323256518,105.36401426613477 +128.98050368815137,122.92667844937462,116.87285321059787,110.81902797182111,104.76520273304435 +130.6540678076189,123.9799066215526,117.3057454354863,110.63158424942,103.9574230633537 +132.49645112780993,125.13738636266548,117.77832159752104,110.4192568323766,103.06019206723217 +134.3889288726604,126.34098012956642,118.29303138647245,110.24508264337848,102.19713390028451 +136.21040535734892,127.52948308902593,118.84856082070294,110.16763855237996,101.48671628405697 +137.8466392967716,128.64329445900245,119.43994962123331,110.23660478346417,101.03325994569502 +139.19945460276048,129.62924445072574,120.05903429869099,110.48882414665624,100.9186139946215 +140.1950055547042,130.44509146410348,120.69517737350274,110.945263282902,101.19534919230128 +140.79015691470516,131.06318725248457,121.33621759026396,111.60924792804336,101.88227826582275 +140.97626533174446,131.47291078910447,121.96955624646452,112.46620170382455,102.9628471611846 +140.77995945870256,131.6816210278823,122.58328259706207,113.48494416624182,104.38660573542157 +140.2608570959882,131.71404745092576,123.16723780586335,114.62042816080093,106.07361851573852 +139.5065053256598,131.6102138648828,123.71392240410584,115.81763094332887,107.9213394825519 +138.62515648619677,131.4221613409319,124.21916619566703,117.01617105040216,109.8131759051373 +137.7372262869952,131.2098635276296,124.68250076826405,118.15513800889848,111.62777524953292 +136.96623775826222,131.0367195467951,125.10720133532797,119.17768312386085,113.24816491239372 +136.42944797138296,130.96472107116267,125.49999417094236,120.03526727072206,114.57054037050175 +136.22726554012488,131.04886065596838,125.87045577181189,120.6920508876554,115.51364600349889 +136.43060069072433,131.33037905402867,126.230157417333,121.12993578063734,116.02971414394166 +137.06878377954558,131.8302076606066,126.59163154166757,121.35305542272856,116.11447930378954 +138.12465065906432,132.5459514538941,126.9672522487239,121.38855304355369,115.80985383838346 +139.53989769930303,133.45401383480544,127.36812997030788,121.2822461058103,115.19636224131273 +141.22591219022797,134.5145155972837,127.80311900433938,121.09172241139508,114.38032581845077 +143.07430661728296,135.67616660203615,128.27802658678937,120.87988657154257,113.48174655629578 +144.9659868609782,136.88054050478212,128.79509414858606,120.70964779238999,112.62420143619393 +146.77999404813113,138.0663955716984,129.35279709526566,120.63919861883292,111.92560014240019 +148.40274791188529,139.1743644531702,129.9459809944551,120.71759753574003,111.48921407702495 +149.7372310064368,140.15177650620086,130.56632200596493,120.98086750572901,111.39541300549307 +150.7111716289501,140.95712102729638,131.2030704256427,121.44901982398899,111.69496922233529 +151.2832944894774,141.56365270695355,131.8440109244297,122.12436914190586,112.40472735938202 +151.44694145156345,141.96174757944448,132.47655370732554,122.99135983520658,113.50616596308762 +151.2306783629382,142.159768742609,133.08885912227984,124.01794950195067,114.94703988162149 +150.69584577480683,142.18337051792764,133.67089526104846,125.15842000416927,116.64594474729007 +149.93135875840417,142.0733464190418,134.21533407967942,126.35732174031705,118.49930940095467 +149.04638529170163,141.882295641278,134.71820599085441,127.55411634043081,120.39002669000722 +148.16175684928777,141.6705056522946,135.17925445530142,128.68800325830824,122.19675206131508 diff --git a/testdata/golden/g_DoubleTopBottom.csv b/testdata/golden/g_DoubleTopBottom.csv new file mode 100644 index 00000000..9059a80e --- /dev/null +++ b/testdata/golden/g_DoubleTopBottom.csv @@ -0,0 +1,81 @@ +DoubleTopBottom +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_DownsideGapThreeMethods.csv b/testdata/golden/g_DownsideGapThreeMethods.csv new file mode 100644 index 00000000..2d5f85f5 --- /dev/null +++ b/testdata/golden/g_DownsideGapThreeMethods.csv @@ -0,0 +1,81 @@ +DownsideGapThreeMethods +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Dpo.csv b/testdata/golden/g_Dpo.csv new file mode 100644 index 00000000..af52624a --- /dev/null +++ b/testdata/golden/g_Dpo.csv @@ -0,0 +1,81 @@ +Dpo +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +5.392084557465552 +5.778165123359543 +5.581104141299491 +4.8185044819157525 +3.55848690156769 +1.9136050180589308 +0.030791231171832578 +-1.9217683110034045 +-3.7696572797770926 +-5.347809257046265 +-6.515252626814473 +-7.167703149799962 +-7.246879363946022 +-6.745708693849608 +-5.708959222858283 +-4.229240693515365 +-2.4387319550735214 +-0.49737382055295143 +1.421417969741853 +3.146243459827801 +4.523029125639155 +5.42879080406253 +5.782619501950208 +5.552908755510629 +4.760177941586917 +3.475239342835394 +1.8128726974125726 +-0.07842773319140406 +-2.029717714278476 +-3.8666943232698685 +-5.425265910662219 +-6.56620991837147 +-7.187609216206852 +-7.233956055575916 +-6.701110411350385 +-5.636669797980716 +-4.135717525287674 +-2.3323291895779903 +-0.3875960999371557 +1.5247645286409295 +3.233927216695733 +4.587217551619162 +5.463750138231092 +5.785226931103736 +5.5229313657684145 +4.700293523894416 +3.3907971938742634 +1.7114157828595467 +-0.18783656932345139 +-2.137305306504885 +-3.9628501923999266 +-5.501400739282857 +-6.615522808990647 +-7.205695195171742 +-7.219199556250189 +-6.654829587870196 +-5.562998778471638 +-4.0412371225116885 +-2.225479056528684 +-0.2779208407732483 +1.6274679496587794 +3.3204846088445947 +4.649897000848057 +5.496952676015553 +5.7859866736289405 +5.491180447497271 +4.638868159793958 diff --git a/testdata/golden/g_DragonflyDoji.csv b/testdata/golden/g_DragonflyDoji.csv new file mode 100644 index 00000000..a895e340 --- /dev/null +++ b/testdata/golden/g_DragonflyDoji.csv @@ -0,0 +1,81 @@ +DragonflyDoji +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_DrawdownDuration.csv b/testdata/golden/g_DrawdownDuration.csv new file mode 100644 index 00000000..63fe7974 --- /dev/null +++ b/testdata/golden/g_DrawdownDuration.csv @@ -0,0 +1,81 @@ +DrawdownDuration +0 +0 +0 +0 +0 +0 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +0 +0 +0 +0 +0 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +0 +0 +0 +0 +0 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 +11 +12 +13 +14 +15 +0 +0 +0 +0 +0 +0 +1 +2 +3 +4 +5 +6 +7 +8 +9 +10 diff --git a/testdata/golden/g_DumplingTop.csv b/testdata/golden/g_DumplingTop.csv new file mode 100644 index 00000000..8c85b1f0 --- /dev/null +++ b/testdata/golden/g_DumplingTop.csv @@ -0,0 +1,81 @@ +DumplingTop +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-1 +-1 +-1 +-1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +-1 +-1 +-1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +-1 +-1 +-1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +-1 +-1 +-1 diff --git a/testdata/golden/g_Dx.csv b/testdata/golden/g_Dx.csv new file mode 100644 index 00000000..69839e4d --- /dev/null +++ b/testdata/golden/g_Dx.csv @@ -0,0 +1,81 @@ +Dx +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +2.7174982676068495 +4.166648154584697 +2.1275676267468624 +3.7701417145167873 +11.395552014155225 +21.60608428354046 +30.48264814292815 +37.640297211976886 +43.25474600393361 +49.116524075630345 +53.772772066764716 +56.692429430218645 +58.014483047984115 +58.014483047984115 +54.97016682803976 +46.430205178207615 +35.60382251880033 +24.78591181828232 +13.036096544972992 +2.488787852817332 +4.783642176512549 +9.465134281474663 +11.894302845664349 +8.813307466510475 +2.5185829957597154 +5.806893318664893 +15.051179887146615 +25.773615814704538 +36.4482868855623 +44.298544532330425 +49.69604686115909 +53.26144080368929 +56.056696546171054 +57.13495380556111 +56.1660338433279 +51.473988631008886 +41.586708711265246 +29.85569215846836 +19.60697302150321 +11.420083002501352 +3.6152265044927967 +4.789841973367377 +9.79097908271221 +11.12265258217762 +11.122652582177633 +6.2411447549585715 +3.0570063719626233 +14.314951489230735 +24.55988883310958 +33.683508939903156 +42.29953272960049 +48.57362871569005 +52.80619902841984 +56.00236545451139 +58.212346578861656 +58.95490225222082 +54.423047982652065 +46.8140694375379 +36.324954465072146 +20.97463557596337 +8.096746299671818 +0.9682684080010634 +6.400191158494682 +10.145869258791144 +10.90547808757916 +7.718319181881883 diff --git a/testdata/golden/g_DynamicMomentumIndex.csv b/testdata/golden/g_DynamicMomentumIndex.csv new file mode 100644 index 00000000..c9ae4107 --- /dev/null +++ b/testdata/golden/g_DynamicMomentumIndex.csv @@ -0,0 +1,81 @@ +DynamicMomentumIndex +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +62.312787467535415 +78.41087026464602 +68.23152085914484 +44.619313319244576 +30.946292661728425 +18.3703438420933 +37.70372182523214 +63.25674091072122 +49.14026539556971 +65.78013790344252 +30.03759603652921 +53.08030517999548 +87.89388726870399 +97.00286983016719 +100 +100 +97.93040745056713 +80.66185922652697 +63.113488175909524 +73.98540328038406 +70.7238471649591 +59.9432544275169 +78.21862620864395 +67.7252404368256 +43.83356422243877 +30.17233037498952 +28.29986651301814 +37.19506936762347 +62.52773229463307 +49.31462512449102 +64.85947313915757 +30.61590490193518 +53.97156464523288 +88.56627321582728 +97.30271086168928 +100 +100 +98.12484553262117 +81.0299257927291 +64.00869137096304 +73.85741307340268 +70.52697451874488 +58.022472631436464 +78.02997818596393 +67.21965079429874 +43.04398606416532 +29.393456784662813 +27.615598843013522 +44.69620451477919 +60.808314739115744 diff --git a/testdata/golden/g_EaseOfMovement.csv b/testdata/golden/g_EaseOfMovement.csv new file mode 100644 index 00000000..b40f0184 --- /dev/null +++ b/testdata/golden/g_EaseOfMovement.csv @@ -0,0 +1,81 @@ +EaseOfMovement +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-26151.466800484948 +-120974.03433294773 +-189997.06345021547 +-215841.17400482477 +-212727.18645758028 +-172487.32252723776 +-101829.18411150637 +-14109.615549096838 +66560.62592014727 +153031.56269196267 +263198.50391997834 +377524.94662854174 +467182.16940737097 +517559.760461622 +535989.6429922216 +517331.8675481486 +459776.9256747997 +375217.5082214147 +272022.81932490837 +142511.62846853206 +15593.015479399208 +-85109.66564247772 +-146607.94545179384 +-195807.30208863845 +-223877.74746355502 +-221155.10966145006 +-196345.4078982545 +-146246.45056151113 +-54153.566876437435 +64948.75295095573 +187462.78210498 +291720.3142761399 +390028.91958295426 +469209.20859925135 +514627.47851743957 +524967.4184258331 +502360.65196860477 +445544.3689264558 +360190.72965824313 +268186.01557271014 +184657.18234108415 +90573.44283627353 +-22708.566343171202 +-126421.69459436447 +-197872.79181050727 +-229320.13421657606 +-229525.81983907736 +-184441.13100768157 +-107149.79709530054 +-12269.596042054805 +110893.76387012724 +240912.1788498646 +347914.48258887156 +426632.7860093844 +484614.69964133523 +526938.8145814195 +536291.5166298717 +514168.992079603 +474474.24467971234 +400224.271800224 +294383.5372585484 +170620.55791413813 +55297.90780267589 +-44698.22424432257 +-136602.36282839687 +-199143.95754856785 diff --git a/testdata/golden/g_EffectiveSpread.csv b/testdata/golden/g_EffectiveSpread.csv new file mode 100644 index 00000000..47f2d074 --- /dev/null +++ b/testdata/golden/g_EffectiveSpread.csv @@ -0,0 +1,81 @@ +EffectiveSpread +100.50251256281408 +85.18861754136002 +50.791618062899886 +6.471963445505306 +37.31306077254334 +70.97585053578337 +87.42931522314525 +83.16643066140644 +58.84363227038314 +19.360521184557342 +26.692751464027264 +68.42541613912245 +94.97730223727129 +98.51183109847284 +77.00164568932314 +35.53361456264146 +14.83012910695449 +60.477658363251216 +89.56540737265853 +95.43072451505249 +77.96223557821791 +42.877511112705086 +0.38783400672134377 +41.29301287839624 +70.60667800568238 +82.20375940034327 +74.05811777077578 +48.40632250294267 +11.164261493742346 +29.258312788235965 +63.57166297488654 +83.46174099429538 +83.46666580365905 +62.55994700742576 +24.983316608400788 +20.20750063852253 +61.219522873685584 +86.92486469384652 +90.44764893643783 +71.38489958339268 +35.662085321819355 +6.74796697911144 +45.03978553453113 +70.42185191438784 +77.8660064329978 +66.67745728062486 +40.152183585555136 +4.6362655717170655 +31.786925999126282 +60.836179254244755 +75.66013389443202 +72.34958907337887 +51.037358193524106 +16.237011612982997 +23.863289913575358 +59.20899420151053 +80.4816500201313 +81.80213971217898 +62.626504281036524 +28.06618969594184 +12.600904120492503 +48.735244243683944 +71.4235730969052 +75.7735739184767 +61.786982886349406 +33.814824840096726 +0.9406567720654088 +34.28133350642489 +58.756215575601004 +69.03681573853596 +62.83564477553813 +41.34420743842122 +9.148334547871924 +26.465716706337634 +56.889527379969884 +74.18317592643852 +73.30507758325405 +53.87529535649575 +20.670391667741562 +17.58294498088382 diff --git a/testdata/golden/g_EhlersStochastic.csv b/testdata/golden/g_EhlersStochastic.csv new file mode 100644 index 00000000..53c2f0b4 --- /dev/null +++ b/testdata/golden/g_EhlersStochastic.csv @@ -0,0 +1,81 @@ +EhlersStochastic +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-1 +-1 +-1 +-1 +-0.9801602634310502 +-0.8877529296541342 +-0.6954523192537675 +-0.4150838128029121 +-0.039349438837953166 +0.4705199234864532 +0.8826452025521778 +1 +1 +1 +1 +0.9714259151088367 +0.8741480695273156 +0.6997928401837009 +0.4449747706369007 +0.08896610034786029 +-0.4101736025295942 +-0.8512356180057757 +-1 +-1 +-1 +-0.9884949043419611 +-0.9213808759869249 +-0.7709785470600224 +-0.5416514128608596 +-0.22121487179084082 +0.2238001110769695 +0.7414561454220093 +1 +1 +1 +1 +0.9659036989515286 +0.8562361876065651 +0.6678560885961229 +0.3972647376642455 +0.021159181731267795 +-0.5064282719222211 +-0.9078463159303297 +-1 +-1 +-1 +-0.9865787269316799 +-0.9162084269635191 +-0.7638666899519126 +-0.5328459873097013 +-0.20968121454572164 +0.2396424735011834 +0.7507146906572771 +1 +1 +1 +1 +0.9632361159198071 +0.8484035592997645 +0.6548450532798711 +0.37821431402080274 +-0.006002909877768692 +-0.5458191466951843 +-0.9312795326965265 +-1 +-1 +-1 diff --git a/testdata/golden/g_Ehma.csv b/testdata/golden/g_Ehma.csv new file mode 100644 index 00000000..6416487b --- /dev/null +++ b/testdata/golden/g_Ehma.csv @@ -0,0 +1,81 @@ +Ehma +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +99.30136095292977 +98.52324868899755 +98.3537879603379 +98.88677839514703 +100.14772726164267 +102.09273945267712 +104.61327332952098 +107.54645476889341 +110.6901001782283 +113.82115141544934 +116.71590431290105 +119.17024226548507 +121.01807973768683 +122.14637662382091 +122.50538829620118 +122.11324019784195 +121.05442177152412 +119.47233697265314 +117.55657901323364 +115.52606787669716 +113.60955842043963 +112.02526153094237 +110.96139983768576 +110.55943585518655 +110.90147157117153 +112.0029457640562 +113.81128200629483 +116.21060867004653 +119.0321297857744 +122.0692207681123 +125.09590091079507 +127.88703286861063 +130.23844503677105 +131.9851795898473 +133.01623634072374 +133.2844955711078 +132.81093360988865 +131.6827547271927 +130.04560633177076 +128.09057296495283 +126.03711096568792 +124.11344827743083 +122.53620028897411 +121.49102262200672 +121.11602914329798 +121.48945646360258 +122.6226768537142 +124.45918374501532 +126.87964046443204 +129.71254123934366 +132.74953217743882 +135.76402366205522 +138.53143158879428 +140.84923936757855 +142.55508862300397 +143.5412826147836 +143.7644068397531 +143.24920744336134 +142.08638100032687 +140.4244731025165 +138.45660943404206 +136.40324461143413 +134.49246978736156 +132.93963808424962 diff --git a/testdata/golden/g_ElderImpulse.csv b/testdata/golden/g_ElderImpulse.csv new file mode 100644 index 00000000..9c36951a --- /dev/null +++ b/testdata/golden/g_ElderImpulse.csv @@ -0,0 +1,81 @@ +ElderImpulse +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +1 +1 +1 +1 +1 +1 +1 +0 +0 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 diff --git a/testdata/golden/g_ElderRay.csv b/testdata/golden/g_ElderRay.csv new file mode 100644 index 00000000..748ffe0c --- /dev/null +++ b/testdata/golden/g_ElderRay.csv @@ -0,0 +1,81 @@ +bull_power,bear_power +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +-6.300977719240052,-9.596663707317447 +-6.442233730390143,-9.562615113985373 +-5.653833301207868,-8.880164379014559 +-4.24093371546337,-7.365611478423318 +-2.138439776794357,-5.358588791716215 +0.17812593599903437,-2.766627373106786 +3.173467490703672,-0.4932744276893146 +5.848024651333816,2.018345766562504 +7.944227983977797,4.622944224838861 +9.378905812980037,7.071361758246283 +11.067855599500007,8.202479423563005 +12.302337617572618,8.570916625258633 +12.582771535433437,8.609347250786698 +11.876089667408095,8.363810063551625 +10.374064200025202,7.728720848908495 +8.877466461447312,6.058765623171354 +7.155470291545285,3.8077796189206765 +5.034250389103306,1.4379068377084252 +2.5376279561616712,-0.7278781579849607 +0.3605619595454357,-2.994653203899375 +-1.4275802147345757,-5.025164640056971 +-3.006435147495239,-6.253396931290709 +-3.9612685429741674,-6.772066036050745 +-3.9665010380782064,-6.694025818847777 +-2.6710171674943552,-6.304706729494839 +-0.8997553057914445,-4.883104697855956 +1.1331861117269426,-2.489956758682382 +3.27926453868713,0.6002766885658843 +5.946287197994408,3.4537960814753177 +9.04397370736568,5.593689838931226 +11.451323380849843,7.601835521174721 +12.889602779162828,9.311926908322462 +13.370799610396787,10.413520514611506 +13.45992189745482,10.220919419941083 +12.506148754398623,9.448001531649368 +11.037208651431555,7.795263389568149 +8.865995093846266,5.804903267089998 +6.660280149971996,3.24089466861237 +4.410787328214468,0.5678055443170251 +1.9722669250247264,-1.6379726217776636 +-0.4474921757968531,-3.2135365194343137 +-2.163239368746048,-4.5560952744723835 +-2.6055799824261925,-6.038441543977498 +-2.6842504293192917,-6.644413714540661 +-2.483900779855574,-6.266519459243213 +-1.9880953442295635,-4.974539745667471 +-0.6539891595358682,-3.435625101357232 +1.3733146956524251,-1.6974583021507925 +3.8209310740341635,0.2532031379758024 +6.123923774678175,2.659237447313302 +8.27190887870158,5.158009708317351 +10.587955271792765,7.024155173893405 +12.198656240020185,8.73233352736132 +12.922192356381771,10.110963492436099 +13.184568080604691,10.471509344481404 +12.988377175486107,9.681481446209716 +12.014248304756961,8.092784778911891 +10.015358090794109,6.157913232943116 +7.17915901349653,4.055552968202647 +4.02186420401776,1.7597882867447368 +1.738441465281909,-1.3657165539358402 +-0.3338777818863434,-4.09863383091303 +-2.1871531256105072,-5.955100993404756 +-3.615514561413306,-6.776186585863201 +-3.907272254930348,-7.076546161839801 +-3.3549428996957147,-6.551037890533053 +-2.0723039677973247,-5.2489345959987475 diff --git a/testdata/golden/g_ElderSafeZone.csv b/testdata/golden/g_ElderSafeZone.csv new file mode 100644 index 00000000..3234bac3 --- /dev/null +++ b/testdata/golden/g_ElderSafeZone.csv @@ -0,0 +1,81 @@ +value,direction +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +101.5472226823765,1 +101.5472226823765,1 +101.5472226823765,1 +103.71480953066157,-1 +101.72770676078193,-1 +100.59008989564869,-1 +100.59008989564869,-1 +100.59008989564869,-1 +96.39817706910179,1 +98.71596761740268,1 +102.16620975206415,1 +106.35447881836723,1 +110.79335529155368,1 +114.06207120080761,1 +116.83127150023493,1 +119.39438848583472,1 +120.77557026109272,1 +121.57876610123756,1 +121.57876610123756,1 +128.11321355728018,-1 +126.21507713121595,-1 +123.55504423016869,-1 +120.92360803537558,-1 +117.94957614530948,-1 +114.66970339465503,-1 +111.83879535415132,-1 +109.22424173559783,-1 +109.22424173559783,-1 +104.03170925765983,1 +106.3293246887435,1 +109.82359582315296,1 +113.55016797194803,1 +117.16891818565678,1 +121.18630608118443,1 +125.1335529507781,1 +128.5758002556168,1 +130.62617183636584,1 +131.99497292310176,1 +131.99497292310176,1 +131.99497292310176,1 +137.54090403097084,-1 +135.4684537713701,-1 +132.46927125396974,-1 +129.04339948099158,-1 +126.04623119177856,-1 +124.19757068100785,-1 +122.3283006893438,-1 +121.0626634205477,-1 +120.94065716085713,-1 +120.94065716085713,-1 +117.43698073483512,1 +119.9138908023252,1 +123.26311150361752,1 +127.02306273564956,1 +130.58743199888332,1 +134.8205753881702,1 +138.9973859019478,1 +141.8802335303824,1 +142.76876627418082,1 +142.76876627418082,1 +142.76876627418082,1 +148.68371590041937,-1 +145.79786664978653,-1 +143.28354033812815,-1 +140.33570457838215,-1 +137.28047648302004,-1 +134.54947959043398,-1 +132.76286847548832,-1 +131.58711068445393,-1 +131.58711068445393,-1 diff --git a/testdata/golden/g_Ema.csv b/testdata/golden/g_Ema.csv new file mode 100644 index 00000000..0397dd85 --- /dev/null +++ b/testdata/golden/g_Ema.csv @@ -0,0 +1,81 @@ +Ema +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +107.082865308575 +105.90971557088022 +104.81838000454273 +103.91437652548925 +103.29137341232037 +103.02217097393634 +103.15163412061464 +103.6921955736008 +104.62232136443316 +105.88806700052659 +107.40757775297398 +109.07812453770966 +110.78504123504803 +112.4117601975411 +113.85004525232907 +115.00950442946956 +115.8255294789832 +116.26495019544112 +116.32889606739172 +116.05260755010886 +115.50221201839392 +114.76875083248335 +113.95998970819002 +113.19074277367604 +112.57257361958058 +112.2037924360836 +112.16064199938042 +112.49045917546245 +113.20742223024638 +114.29126332917505 +115.68906080413531 +117.3199507165269 +119.08233652305883 +120.86295254590979 +122.54697139145239 +124.02825224132444 +125.2188143840051 +126.05668958634725 +126.51145173900844 +126.58692971020658 +126.32086097368011 +125.78151686199148 +125.06160082390045 +124.26996466927172 +123.5218827065933 +122.92875250508669 +122.58814223802023 +122.57507361058863 +122.93531900967452 +123.68131159273575 +124.79103363078006 +126.20998238510259 +127.85603789338172 +129.62679782427364 +131.408724185901 +133.0872848279711 +134.5571838169111 +135.7317668260377 +136.550761377433 +136.98566051598186 +137.04226900211742 +136.7601845743594 +136.20926061449748 +135.48336619117217 +134.6920008752563 +133.95051334772793 +133.369797540168 diff --git a/testdata/golden/g_EmpiricalModeDecomposition.csv b/testdata/golden/g_EmpiricalModeDecomposition.csv new file mode 100644 index 00000000..5e5abef1 --- /dev/null +++ b/testdata/golden/g_EmpiricalModeDecomposition.csv @@ -0,0 +1,81 @@ +EmpiricalModeDecomposition +nan +0 +0.12563322659118248 +0.21950820416968736 +0.31519861098038215 +0.43449091290062825 +0.5795353090656074 +0.731686313403286 +0.8559687346592502 +0.9094304119871549 +0.8513181150857461 +0.6530121060468214 +0.3059273192427743 +-0.17393431486824323 +-0.7454955629051638 +-1.3462542930191885 +-1.8995457694418663 +-2.3243951421334987 +-2.546600908597779 +-2.509539905755016 +-2.1832290615527103 +-1.5704044699744322 +-0.7087509685262163 +0.3311128119382546 +1.4517751140382147 +2.5386824951152347 +3.472264668376385 +4.14119306237823 +4.4552834838344975 +4.356570765795453 +3.827264921209457 +2.893623229654307 +1.625204964986764 +0.12946823841883948 +-1.4578311111511408 +-2.9855236296897214 +-4.301916794709036 +-5.27018512014787 +-5.782678039520116 +-5.772652243293419 +-5.222178134854917 +-4.165343028594489 +-2.6863389629669046 +-0.9125336370606161 +0.9968723556887182 +2.865550778142234 +4.516715747457834 +5.790150494521807 +6.55793012276876 +6.737289946367534 +6.299352057150277 +5.272813229849591 +3.742177379497444 +1.8406390970733422 +-0.2617592814301668 +-2.3736159133549775 +-4.299864650295693 +-5.86001769764904 +-6.9052325460603825 +-7.332580165720846 +-7.0951462509907035 +-6.20698277863486 +-4.742406977206887 +-2.8296737714752713 +-0.639576031151794 +1.6299952111191656 +3.772115947503072 +5.589854035331257 +6.9144917622018465 +7.621252096710317 +7.641060324761127 +6.967235443795204 +5.6564716571101075 +3.8239963811800024 +1.6333286251970454 +-0.7184393022663627 +-3.01849918413535 +-5.057693933588453 +-6.6496226083919385 +-7.647732246235462 diff --git a/testdata/golden/g_Engulfing.csv b/testdata/golden/g_Engulfing.csv new file mode 100644 index 00000000..9e787f08 --- /dev/null +++ b/testdata/golden/g_Engulfing.csv @@ -0,0 +1,81 @@ +Engulfing +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Equivolume.csv b/testdata/golden/g_Equivolume.csv new file mode 100644 index 00000000..bdddb550 --- /dev/null +++ b/testdata/golden/g_Equivolume.csv @@ -0,0 +1,81 @@ +height,width +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +3.2956859880773948,0.984655289664394 +3.1203813835952303,0.9655888555864744 +3.226331077806691,0.9478399490597385 +3.124677762959948,0.9421884126131856 +3.2201490149218586,0.9626483486089994 +2.9447533091058204,0.982008928644718 +3.6667419183929866,0.9994748549503978 +3.8296788847713117,1.014322206909651 +3.321283759138936,1.0259317329262934 +2.3075440547337536,1.0338179677540162 +2.8653761759370013,1.0376522745715915 +3.7314209923139856,1.037278269633565 +3.9734242846467396,1.0327186208417392 +3.51227960385647,1.02417285734972 +2.6453433511167077,1.0120065030300074 +2.8187008382759586,0.9967324660159146 +3.3476906726246085,0.9789861056332733 +3.596343551394881,0.9602431516076592 +3.265506114146632,0.9429885830339675 +3.355215163444811,0.9481824990977922 +3.5975844253223954,0.9684053199331565 +3.24696178379547,0.9872912880378175 +2.810797493076578,1.004062387240149 +2.7275247807695706,1.0180220081224625 +3.633689562000484,1.0285872282268333 +3.983349392064511,1.0353163377871835 +3.6231428704093247,1.0379297944922188 +2.6789878501212456,1.0363232052220062 +2.4924911165190906,1.0305715065663164 +3.450283868434454,1.0209241793938475 +3.849487859675122,1.0077920006157317 +3.577675870840366,0.9917264232926171 +2.9572790957852817,0.973393116719882 +3.2390024775137363,0.955024624146008 +3.0581472227492554,0.9383122349014661 +3.241945261863407,0.9543505295086965 +3.061091826756268,0.9742707127072462 +3.419385481359626,0.9926201298908018 +3.842981783897443,1.0086408477275313 +3.61023954680239,1.0216661587699942 +2.7660443436374607,1.031151684705769 +2.3928559057263357,1.0367011620214064 +3.432861561551306,1.038085194538078 +3.9601632852213697,1.0352517241668941 +3.782618679387639,1.0283275796462352 +2.9864444014379075,1.017611137078072 +2.7816359418213636,1.0035567790828313 +3.0707729978032177,0.9867523903910149 +3.567727936058361,0.9678915162790147 +3.4646863273648734,0.9499475852415349 +3.1138991703842294,0.9397020957441122 +3.5638000978993603,0.9602427230971811 +3.466322712658865,0.979785655912073 +2.811228863945672,0.9975291172747941 +2.713058736123287,1.0127383995629875 +3.306895729276391,1.0247795352159101 +3.92146352584507,1.0331490429289865 +3.857444857850993,1.0374978179919319 +3.123606045293883,1.0376475694716916 +2.262075917273023,1.0335987217208569 +3.104158019217749,1.0255293338594307 +3.764756049026687,1.0137852677558696 +3.7679478677942484,0.9988624659015874 +3.1606720244498945,0.981382709136468 +3.169273906909453,0.9624962497402593 +3.196094990837338,0.9450260708304375 +3.1766306282014227,0.9456174499826545 diff --git a/testdata/golden/g_EstimatedLeverageRatio.csv b/testdata/golden/g_EstimatedLeverageRatio.csv new file mode 100644 index 00000000..46a40ceb --- /dev/null +++ b/testdata/golden/g_EstimatedLeverageRatio.csv @@ -0,0 +1,81 @@ +EstimatedLeverageRatio +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +9.999999999999998 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10.000000000000002 +9.999999999999998 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10.000000000000002 +10.000000000000002 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +9.999999999999998 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +9.999999999999998 diff --git a/testdata/golden/g_EvenBetterSinewave.csv b/testdata/golden/g_EvenBetterSinewave.csv new file mode 100644 index 00000000..13cfc0cd --- /dev/null +++ b/testdata/golden/g_EvenBetterSinewave.csv @@ -0,0 +1,81 @@ +EvenBetterSinewave +nan +nan +0.8001617937065221 +0.9721822068186153 +0.9903687704173283 +0.9953914610427143 +0.9984918121523015 +0.9998526555081169 +0.9977114339594868 +0.9886544205854114 +0.9630054803563445 +0.8797625893509556 +0.48570424523007383 +-0.5507544115174889 +-0.9017807568118628 +-0.9740669806444057 +-0.9949408504711417 +-0.9995258788043457 +-0.9926697983542115 +-0.963924929810382 +-0.847403540034827 +-0.22073261730907412 +0.6938300200733655 +0.9110658673445763 +0.9663978915150303 +0.986818568030099 +0.9957277847261964 +0.9993567724372091 +0.999604554004073 +0.9966208109872549 +0.9889924578231188 +0.9719908606916065 +0.9290985919411602 +0.7801646322432153 +0.07477733170618023 +-0.7776584928858067 +-0.9527495723326683 +-0.9911462913730176 +-0.9993938640921832 +-0.9916924485991087 +-0.9547834683954273 +-0.787693140284556 +0.04246574979339678 +0.771890946966979 +0.9269080898407993 +0.971080974652914 +0.9885113361477523 +0.9963564451372279 +0.9995160310309165 +0.9995004262195538 +0.9963041227620322 +0.9884004217758667 +0.9708458132530672 +0.9263073654415653 +0.7696106916353556 +0.03396002905257585 +-0.7903387829194719 +-0.9554204835770437 +-0.9919157545673408 +-0.9993795123713564 +-0.9906724081547233 +-0.9505159934497351 +-0.7645772941564564 +0.1162920381012233 +0.7896986386963736 +0.9311773391119532 +0.9725921429781659 +0.989164891139777 +0.9966445255865999 +0.9995954421988297 +0.99941040069448 +0.9960086881583635 +0.9877487578268541 +0.969359594914315 +0.9221119375450367 +0.7518609226200467 +-0.03260162335476505 +-0.8086362604770629 +-0.9590026342586663 +-0.9928271908220161 diff --git a/testdata/golden/g_EveningDojiStar.csv b/testdata/golden/g_EveningDojiStar.csv new file mode 100644 index 00000000..29b5fdd3 --- /dev/null +++ b/testdata/golden/g_EveningDojiStar.csv @@ -0,0 +1,81 @@ +EveningDojiStar +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Evwma.csv b/testdata/golden/g_Evwma.csv new file mode 100644 index 00000000..ab717aa5 --- /dev/null +++ b/testdata/golden/g_Evwma.csv @@ -0,0 +1,81 @@ +Evwma +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +99.62233840816026 +99.53004907151393 +99.40782170813854 +99.31565765890238 +99.31058281869593 +99.44818838442512 +99.77265762930762 +100.31120384619922 +101.07016873442157 +102.03348363242927 +103.16385117623496 +104.40657185101438 +105.69551002098196 +106.96035789851709 +108.13417991938618 +109.16023121119257 +109.99722664681151 +110.62302795984635 +111.03535081401729 +111.25352634555388 +111.29994856426322 +111.20836351469733 +111.02868503620148 +110.82231398984267 +110.65569462356538 +110.59291157067706 +110.68834570041534 +110.98043525523603 +111.48742099400938 +112.20562726076221 +113.11041695355047 +114.15954437425668 +115.29829611552283 +116.46742774964764 +117.60852709568157 +118.70248892813275 +119.69450385123214 +120.53173458551477 +121.17551193690801 +121.6062189931818 +121.8260896397901 +121.85938925836058 +121.74985327571932 +121.55570485817061 +121.34296188435954 +121.17799580254439 +121.1203758517096 +121.21691911921305 +121.49760731218818 +121.9747969301849 +122.64798809740951 +123.52490652577238 +124.57681085654806 +125.75674006241647 +127.0034575974923 +128.24742806224688 +129.41814083993359 +130.4518158894211 +131.2984184643357 +131.92700052673777 +132.32865814688572 +132.51678610863823 +132.52473910629777 +132.40138724428084 +132.20522632017975 +131.99769981671554 +131.83542139122744 diff --git a/testdata/golden/g_EwmaVolatility.csv b/testdata/golden/g_EwmaVolatility.csv new file mode 100644 index 00000000..c1ec213e --- /dev/null +++ b/testdata/golden/g_EwmaVolatility.csv @@ -0,0 +1,81 @@ +EwmaVolatility +nan +0.03396850274500474 +0.03376396213068082 +0.03329791438067671 +0.03258360553899256 +0.03169191753288074 +0.030731800820399446 +0.02982485796098939 +0.029074344774969313 +0.02853313113138286 +0.028181993760619195 +0.027931580630350335 +0.027653052097001567 +0.02722888888171916 +0.02660638016397493 +0.025833724473256273 +0.025059021262119577 +0.02447875060673666 +0.02424601565043995 +0.024387880532315772 +0.024791658346381275 +0.025265920317677527 +0.02562263996002066 +0.02573219419923383 +0.025542535595650437 +0.025075414023296064 +0.024411905741723607 +0.023672032390293835 +0.02298776526369364 +0.022468621473095186 +0.022165808543500736 +0.022050231284750338 +0.022019963256440202 +0.021938606468945347 +0.021689915673056104 +0.021229270428067482 +0.02061505555207214 +0.02000394869232789 +0.019596977985609533 +0.019544702296967302 +0.019863507928403464 +0.020428135050559505 +0.021041385911669284 +0.021518122629506142 +0.02173593021656738 +0.021649783293554284 +0.021286317337150567 +0.020729359697824034 +0.020100095770100575 +0.019530059461596572 +0.01912586088747622 +0.018932814446056687 +0.018914884667409787 +0.018966511456709193 +0.01895422640673899 +0.01877027028034217 +0.01837941995604381 +0.017845240992843046 +0.017322629833587247 +0.01700446422892337 +0.01703001467055171 +0.0174064574652337 +0.018006761241761707 +0.018640406428931406 +0.0191330708923154 +0.019372110743296075 +0.01931853851981927 +0.019001008741153697 +0.018502137047678707 +0.0179395273637584 +0.01743928715125553 +0.017101181693674732 +0.01696351405019204 +0.01698581715035046 +0.01706364199352184 +0.017070709461754634 +0.016909594613820435 +0.01655365293563265 +0.016068806538512285 +0.01560407200355932 diff --git a/testdata/golden/g_Expectancy.csv b/testdata/golden/g_Expectancy.csv new file mode 100644 index 00000000..a3cab342 --- /dev/null +++ b/testdata/golden/g_Expectancy.csv @@ -0,0 +1,81 @@ +Expectancy +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_FallingThreeMethods.csv b/testdata/golden/g_FallingThreeMethods.csv new file mode 100644 index 00000000..9461ddea --- /dev/null +++ b/testdata/golden/g_FallingThreeMethods.csv @@ -0,0 +1,81 @@ +FallingThreeMethods +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Fama.csv b/testdata/golden/g_Fama.csv new file mode 100644 index 00000000..a85f73a7 --- /dev/null +++ b/testdata/golden/g_Fama.csv @@ -0,0 +1,81 @@ +Fama +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +111.94765361474765 +112.38762046856048 +112.41598514771403 +112.43761675334571 +112.45234430424455 +112.46111336053173 +112.46591770064626 +112.46963552875255 +112.47578496115004 +112.48822074431472 +112.51079940063087 +114.1538634740154 +114.28814037883537 +114.4328264917832 +114.58934716665446 +114.757954125155 +114.93774960001653 +115.1268098069963 +115.32239690945454 +115.52124072413379 +115.71986517722902 +115.91493051316976 +117.6609802287366 +117.7887877289052 +117.90883885335546 +118.0209743462473 +118.12615538634968 +118.22638934988917 +118.32456073134564 +118.42418241513518 +118.52908960095459 +118.64310380341622 +121.29767872601451 +121.50838933921361 +121.7280954797341 +121.95817722996213 +122.19884014082518 +122.44914502089233 +122.70713668026012 +122.97006031635108 +123.23464639003058 +123.49743871299117 +123.75513659848458 +126.12055357487883 +126.29489515802776 +126.46044558837417 +126.61712467302056 +126.7659712003218 diff --git a/testdata/golden/g_FibArcs.csv b/testdata/golden/g_FibArcs.csv new file mode 100644 index 00000000..f30c2ebb --- /dev/null +++ b/testdata/golden/g_FibArcs.csv @@ -0,0 +1,81 @@ +arc_382,arc_500,arc_618 +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +103.09892555931879,105.31087260692951,107.52281965454023 +102.86253302957594,105.00145830098337,107.14038357239079 +102.51732940859611,104.54962110074798,106.58191279289986 +102.04488957552375,103.93124435588888,105.81759913625402 +101.41236918521201,103.10333808584734,104.79430698648267 +100.55442722822669,101.98037740916497,103.40632759010326 +99.3028290994984,100.34215996318552,101.38149082687266 +95.93821562552817,95.93821562552817,95.93821562552817 +95.93821562552817,95.93821562552817,95.93821562552817 +95.93821562552817,95.93821562552817,95.93821562552817 +95.93821562552817,95.93821562552817,95.93821562552817 +95.93821562552817,95.93821562552817,95.93821562552817 +95.93821562552817,95.93821562552817,95.93821562552817 +114.1996706830759,111.08342685202602,107.96718302097617 +114.64170556553591,111.66200654110982,108.68230751668372 +115.2111578240943,112.40736290047943,109.60356797686457 +115.93404385308685,113.35354880230214,110.77305375151744 +116.85499649070387,114.55898419185321,112.26297189300257 +118.06129049382565,116.13790304410686,114.21451559438808 +119.7762789809758,118.38265237283744,116.98902576469906 +124.2878498649492,124.2878498649492,124.2878498649492 +124.2878498649492,124.2878498649492,124.2878498649492 +113.03676512629407,115.12768133538461,117.21859754447513 +112.89055138026127,114.93630208665057,116.98205279303987 +112.68025357449474,114.66104317857919,116.64183278266366 +112.39928130554219,114.29327842864129,116.1872755517404 +112.03731825806305,113.8195048062864,115.60169135450975 +111.57782753500113,113.21807715829961,114.85832678159808 +110.99243900016643,112.45186179856832,113.9112845969702 +110.22567787671223,111.44824776263349,112.67081764855476 +109.13557339495634,110.02140943572789,110.90724547649944 +106.26786689008574,106.26786689008574,106.26786689008574 +106.26786689008574,106.26786689008574,106.26786689008574 +106.26786689008574,106.26786689008574,106.26786689008574 +124.48180055179492,121.2125023312886,117.9432041107823 +124.81787583214145,121.65239144168983,118.48690705123822 +125.2668954199286,122.24011341523324,119.21333141053788 +125.84534573810114,122.99724733954284,120.14914894098453 +126.5796542726424,123.95838416485861,121.33711405707484 +127.5151591165428,125.18286694483298,122.85057477312316 +128.74051407725875,126.78673469446117,124.8329553116636 +130.4826015326069,129.06695387685406,127.6513062211012 +135.065460892756,135.065460892756,135.065460892756 +123.66972430432146,125.65112379312414,127.63252328192682 +123.34994395140984,125.23256312177384,127.11518229213785 +122.91229797272464,124.65972807113877,126.4071581695529 +122.32636091602875,123.89279475085618,125.45922858568362 +121.53160395199767,122.85253694453279,124.1734699370679 +120.37218247729751,121.33496956927081,122.2977566612441 +117.25536324735009,117.25536324735009,117.25536324735009 +117.25536324735009,117.25536324735009,117.25536324735009 +117.25536324735009,117.25536324735009,117.25536324735009 +117.25536324735009,117.25536324735009,117.25536324735009 +117.25536324735009,117.25536324735009,117.25536324735009 +117.25536324735009,117.25536324735009,117.25536324735009 +135.72830037838702,132.37885130585516,129.02940223332334 +136.01316038869857,132.75170472249332,129.4902490562881 +136.3911144324333,133.2464089682194,130.10170350400554 +136.87304025488316,133.87720192954126,130.88136360419932 +137.47544885260135,134.66569485849172,131.8559408643821 +138.22438541387888,135.64597831566127,133.06757121744369 +139.1641629801871,136.87605366423224,134.58794434827738 +140.38109660506578,138.46889872297396,136.55670084088214 diff --git a/testdata/golden/g_FibChannel.csv b/testdata/golden/g_FibChannel.csv new file mode 100644 index 00000000..5cf0a8de --- /dev/null +++ b/testdata/golden/g_FibChannel.csv @@ -0,0 +1,81 @@ +base,level_618,level_1000,level_1618 +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +126.11256849962119,111.69360385928405,102.78091050554816,88.36194586521103 +126.5687481582892,112.14978351795207,103.23709016421617,88.81812552387905 +127.02492781695719,112.60596317662007,103.69326982288416,89.27430518254704 +127.4811074756252,113.06214283528806,104.14944948155217,89.73048484121503 +127.93728713429319,113.51832249395605,104.60562914022016,90.18666449988302 +128.3934667929612,113.97450215262407,105.06180879888817,90.64284415855104 +128.84964645162918,114.43068181129206,105.51798845755616,91.09902381721903 +129.3058261102972,114.88686146996008,105.97416811622418,91.55520347588705 +129.7620057689652,115.34304112862807,106.43034777489217,92.01138313455505 +107.20692609595461,121.53513781516853,130.39173470309686,144.71994642231078 +107.67645569888904,122.00466741810295,130.86126430603127,145.1894760252452 +108.14598530182349,122.4741970210374,131.33079390896575,145.65900562817964 +108.61551490475792,122.94372662397183,131.80032351190016,146.12853523111409 +109.08504450769234,123.41325622690626,132.26985311483458,146.5980648340485 +109.55457411062679,123.8827858298407,132.73938271776905,147.06759443698294 +110.02410371356122,124.35231543277513,133.20891232070346,147.5371240399174 +110.49363331649566,124.82184503570957,133.6784419236379,148.0066536428518 +110.96316291943009,125.291374638644,134.14797152657235,148.47618324578625 +111.43269252236453,125.76090424157844,134.61750112950676,148.9457128487207 +111.90222212529896,126.23043384451287,135.0870307324412,149.4152424516551 +112.37175172823339,126.6999634474473,135.55656033537565,149.88477205458955 +136.53513512382057,122.06850383776266,113.12634663505372,98.6597153489958 +137.02502653417542,122.55839524811752,113.61623804540858,99.14960675935066 +137.51491794453025,123.04828665847235,114.10612945576341,99.63949816970549 +138.0048093548851,123.53817806882721,114.59602086611827,100.12938958006035 +138.49470076523997,124.02806947918207,115.08591227647312,100.6192809904152 +138.98459217559483,124.51796088953692,115.57580368682798,101.10917240077006 +139.47448358594968,125.00785229989178,116.06569509718284,101.59906381112492 +139.96437499630454,125.49774371024664,116.5555865075377,102.08895522147978 +140.4542664066594,125.9876351206015,117.04547791789255,102.57884663183464 +118.90348770093973,132.9657507827558,141.6579587071146,155.72022178893067 +119.45286251880296,133.51512560061903,142.20733352497783,156.2695966067939 +120.00223733666618,134.06450041848225,142.75670834284105,156.81897142465712 +120.5516121545294,134.61387523634545,143.30608316070425,157.36834624252032 +121.1009869723926,135.16325005420867,143.85545797856747,157.91772106038354 +121.65036179025583,135.7126248720719,144.4048327964307,158.46709587824677 +122.19973660811905,136.26199968993512,144.95420761429392,159.01647069611 +122.74911142598226,136.81137450779832,145.50358243215715,159.56584551397322 +123.29848624384547,137.36074932566154,146.05295725002034,160.1152203318364 +123.8478610617087,137.91012414352477,146.60233206788357,160.66459514969964 +124.39723587957192,138.459498961388,147.1517068857468,161.21396996756286 +124.94661069743513,139.0088737792512,147.70108170361,161.76334478542606 +148.21514229722695,134.16106328687997,125.47391412514443,111.41983511479744 +148.7630456890799,134.7089666787329,126.02181751699737,111.96773850665038 +149.31094908093286,135.25687007058588,126.56972090885034,112.51564189850335 +149.8588524727858,135.80477346243882,127.11762430070328,113.06354529035629 +150.40675586463877,136.3526768542918,127.66552769255625,113.61144868220926 +150.9546592564917,136.90058024614473,128.2134310844092,114.1593520740622 +151.50256264834468,137.4484836379977,128.76133447626216,114.70725546591517 +152.05046604019762,137.99638702985064,129.3092378681151,115.25515885776811 diff --git a/testdata/golden/g_FibConfluence.csv b/testdata/golden/g_FibConfluence.csv new file mode 100644 index 00000000..a84a6d52 --- /dev/null +++ b/testdata/golden/g_FibConfluence.csv @@ -0,0 +1,81 @@ +price,strength +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +107.56298845328456,4 +107.56298845328456,4 +107.56298845328456,4 +107.56298845328456,4 +107.56298845328456,4 +107.56298845328456,4 +107.56298845328456,4 +107.56298845328456,4 +107.56298845328456,4 +114.8229661795107,4 +114.8229661795107,4 +114.8229661795107,4 +114.8229661795107,4 +114.8229661795107,4 +114.8229661795107,4 +114.8229661795107,4 +114.8229661795107,4 +114.8229661795107,4 +114.8229661795107,4 +114.8229661795107,4 +114.8229661795107,4 +115.31208250342972,5 +115.31208250342972,5 +115.31208250342972,5 +115.31208250342972,5 +115.31208250342972,5 +115.31208250342972,5 +115.31208250342972,5 +115.31208250342972,5 +115.31208250342972,5 +120.69260571814182,5 +120.69260571814182,5 +120.69260571814182,5 +120.69260571814182,5 +120.69260571814182,5 +120.69260571814182,5 +120.69260571814182,5 +120.69260571814182,5 +120.69260571814182,5 +120.69260571814182,5 +120.69260571814182,5 +120.69260571814182,5 +126.20002355024693,5 +126.20002355024693,5 +126.20002355024693,5 +126.20002355024693,5 +126.20002355024693,5 +126.20002355024693,5 +126.20002355024693,5 +126.20002355024693,5 diff --git a/testdata/golden/g_FibExtension.csv b/testdata/golden/g_FibExtension.csv new file mode 100644 index 00000000..60d65e74 --- /dev/null +++ b/testdata/golden/g_FibExtension.csv @@ -0,0 +1,81 @@ +level_1272,level_1414,level_1618,level_2000,level_2618 +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +90.70873245555957,87.97863462417891,84.05652224670246,76.71217455946714,64.83048118064143 +90.70873245555957,87.97863462417891,84.05652224670246,76.71217455946714,64.83048118064143 +90.70873245555957,87.97863462417891,84.05652224670246,76.71217455946714,64.83048118064143 +90.70873245555957,87.97863462417891,84.05652224670246,76.71217455946714,64.83048118064143 +90.70873245555957,87.97863462417891,84.05652224670246,76.71217455946714,64.83048118064143 +90.70873245555957,87.97863462417891,84.05652224670246,76.71217455946714,64.83048118064143 +90.70873245555957,87.97863462417891,84.05652224670246,76.71217455946714,64.83048118064143 +90.70873245555957,87.97863462417891,84.05652224670246,76.71217455946714,64.83048118064143 +90.70873245555957,87.97863462417891,84.05652224670246,76.71217455946714,64.83048118064143 +90.70873245555957,87.97863462417891,84.05652224670246,76.71217455946714,64.83048118064143 +90.70873245555957,87.97863462417891,84.05652224670246,76.71217455946714,64.83048118064143 +90.70873245555957,87.97863462417891,84.05652224670246,76.71217455946714,64.83048118064143 +90.70873245555957,87.97863462417891,84.05652224670246,76.71217455946714,64.83048118064143 +131.9989503780717,136.0245984400695,141.8079238249114,152.63748410437023,170.15755806433242 +131.9989503780717,136.0245984400695,141.8079238249114,152.63748410437023,170.15755806433242 +131.9989503780717,136.0245984400695,141.8079238249114,152.63748410437023,170.15755806433242 +131.9989503780717,136.0245984400695,141.8079238249114,152.63748410437023,170.15755806433242 +131.9989503780717,136.0245984400695,141.8079238249114,152.63748410437023,170.15755806433242 +131.9989503780717,136.0245984400695,141.8079238249114,152.63748410437023,170.15755806433242 +131.9989503780717,136.0245984400695,141.8079238249114,152.63748410437023,170.15755806433242 +131.9989503780717,136.0245984400695,141.8079238249114,152.63748410437023,170.15755806433242 +131.9989503780717,136.0245984400695,141.8079238249114,152.63748410437023,170.15755806433242 +101.36643152092289,98.80759393849227,95.13151741162012,88.24788391522229,77.11153443675667 +101.36643152092289,98.80759393849227,95.13151741162012,88.24788391522229,77.11153443675667 +101.36643152092289,98.80759393849227,95.13151741162012,88.24788391522229,77.11153443675667 +101.36643152092289,98.80759393849227,95.13151741162012,88.24788391522229,77.11153443675667 +101.36643152092289,98.80759393849227,95.13151741162012,88.24788391522229,77.11153443675667 +101.36643152092289,98.80759393849227,95.13151741162012,88.24788391522229,77.11153443675667 +101.36643152092289,98.80759393849227,95.13151741162012,88.24788391522229,77.11153443675667 +101.36643152092289,98.80759393849227,95.13151741162012,88.24788391522229,77.11153443675667 +101.36643152092289,98.80759393849227,95.13151741162012,88.24788391522229,77.11153443675667 +101.36643152092289,98.80759393849227,95.13151741162012,88.24788391522229,77.11153443675667 +101.36643152092289,98.80759393849227,95.13151741162012,88.24788391522229,77.11153443675667 +101.36643152092289,98.80759393849227,95.13151741162012,88.24788391522229,77.11153443675667 +142.8984064614823,146.98766480986149,152.86237398640623,163.86305489542625,181.65996798907645 +142.8984064614823,146.98766480986149,152.86237398640623,163.86305489542625,181.65996798907645 +142.8984064614823,146.98766480986149,152.86237398640623,163.86305489542625,181.65996798907645 +142.8984064614823,146.98766480986149,152.86237398640623,163.86305489542625,181.65996798907645 +142.8984064614823,146.98766480986149,152.86237398640623,163.86305489542625,181.65996798907645 +142.8984064614823,146.98766480986149,152.86237398640623,163.86305489542625,181.65996798907645 +142.8984064614823,146.98766480986149,152.86237398640623,163.86305489542625,181.65996798907645 +142.8984064614823,146.98766480986149,152.86237398640623,163.86305489542625,181.65996798907645 +142.8984064614823,146.98766480986149,152.86237398640623,163.86305489542625,181.65996798907645 +112.41101668779969,109.88198282215205,106.24872290248923,99.44526560194419,88.43862525708334 +112.41101668779969,109.88198282215205,106.24872290248923,99.44526560194419,88.43862525708334 +112.41101668779969,109.88198282215205,106.24872290248923,99.44526560194419,88.43862525708334 +112.41101668779969,109.88198282215205,106.24872290248923,99.44526560194419,88.43862525708334 +112.41101668779969,109.88198282215205,106.24872290248923,99.44526560194419,88.43862525708334 +112.41101668779969,109.88198282215205,106.24872290248923,99.44526560194419,88.43862525708334 +112.41101668779969,109.88198282215205,106.24872290248923,99.44526560194419,88.43862525708334 +112.41101668779969,109.88198282215205,106.24872290248923,99.44526560194419,88.43862525708334 +112.41101668779969,109.88198282215205,106.24872290248923,99.44526560194419,88.43862525708334 +112.41101668779969,109.88198282215205,106.24872290248923,99.44526560194419,88.43862525708334 +112.41101668779969,109.88198282215205,106.24872290248923,99.44526560194419,88.43862525708334 +112.41101668779969,109.88198282215205,106.24872290248923,99.44526560194419,88.43862525708334 +154.54540285548256,158.70828463563572,164.68876268599658,175.88750099598604,194.00483156031456 +154.54540285548256,158.70828463563572,164.68876268599658,175.88750099598604,194.00483156031456 +154.54540285548256,158.70828463563572,164.68876268599658,175.88750099598604,194.00483156031456 +154.54540285548256,158.70828463563572,164.68876268599658,175.88750099598604,194.00483156031456 +154.54540285548256,158.70828463563572,164.68876268599658,175.88750099598604,194.00483156031456 +154.54540285548256,158.70828463563572,164.68876268599658,175.88750099598604,194.00483156031456 +154.54540285548256,158.70828463563572,164.68876268599658,175.88750099598604,194.00483156031456 +154.54540285548256,158.70828463563572,164.68876268599658,175.88750099598604,194.00483156031456 diff --git a/testdata/golden/g_FibFan.csv b/testdata/golden/g_FibFan.csv new file mode 100644 index 00000000..e6486331 --- /dev/null +++ b/testdata/golden/g_FibFan.csv @@ -0,0 +1,81 @@ +fan_382,fan_500,fan_618 +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +106.18783174052382,103.4150093734408,100.64218700635777 +105.37179310860878,102.34689598088185,99.32199885315491 +104.55575447669375,101.2787825883229,98.00181069995206 +103.73971584477871,100.21066919576396,96.6816225467492 +102.92367721286368,99.14255580320501,95.36143439354635 +102.10763858094865,98.07444241064607,94.04124624034348 +101.29159994903361,97.00632901808711,92.72105808714062 +100.47556131711858,95.93821562552817,91.40086993393777 +99.65952268520354,94.87010223296923,90.08068178073492 +98.8434840532885,93.80198884041027,88.76049362753206 +98.02744542137347,92.73387544785133,87.4403054743292 +97.21140678945844,91.66576205529239,86.12011732112634 +96.3953681575434,90.59764866273345,84.7999291679235 +110.70579782479021,115.26751169786068,119.82922557093116 +111.69030330474102,116.55613143601619,121.42195956729137 +112.67480878469182,117.84475117417169,123.01469356365155 +113.65931426464263,119.1333709123272,124.60742756001176 +114.64381974459343,120.42199065048268,126.20016155637195 +115.62832522454423,121.71061038863819,127.79289555273215 +116.61283070449502,122.99923012679369,129.38562954909236 +117.59733618444584,124.2878498649492,130.97836354545257 +118.58184166439663,125.5764696031047,132.57109754181275 +116.15264664193357,113.63967810707534,111.12670957221711 +115.52686177862468,112.82058797185427,110.11431416508387 +114.90107691531578,112.0014978366332,109.10191875795063 +114.27529205200688,111.18240770141213,108.08952335081739 +113.64950718869798,110.36331756619107,107.07712794368416 +113.02372232538909,109.54422743097001,106.06473253655092 +112.3979374620802,108.72513729574894,105.05233712941768 +111.7721525987713,107.90604716052788,104.03994172228444 +111.1463677354624,107.0869570253068,103.0275463151512 +110.52058287215351,106.26786689008574,102.01515090801797 +109.89479800884462,105.44877675486468,101.00275550088473 +109.26901314553572,104.6296866196436,99.99036009375149 +120.26873350156579,124.59360852814862,128.91848355473147 +121.26879540238579,125.90259007372455,130.53638474506332 +122.26885730320579,127.21157161930047,132.15428593539514 +123.26891920402579,128.5205531648764,133.772187125727 +124.2689811048458,129.82953471045232,135.39008831605884 +125.26904300566581,131.13851625602823,137.00798950639066 +126.26910490648581,132.44749780160416,138.62589069672248 +127.26916680730581,133.75647934718006,140.24379188705433 +128.2692287081258,135.065460892756,141.86169307738618 +125.99418449202925,123.1920624624854,120.38994043294153 +125.2382447919687,122.20261259329618,119.16698039462366 +124.48230509190813,121.21316272410695,117.94402035630578 +123.72636539184757,120.22371285491774,116.7210603179879 +122.970425691787,119.23426298572852,115.49810027967004 +122.21448599172645,118.2448131165393,114.27514024135218 +121.45854629166588,117.25536324735009,113.0521802030343 +120.70260659160532,116.26591337816087,111.82922016471642 +119.94666689154477,115.27646350897166,110.60626012639855 +119.1907271914842,114.28701363978243,109.38330008808069 +118.43478749142363,113.29756377059323,108.16034004976281 +117.67884779136307,112.308113901404,106.93738001144494 +131.25378613483693,135.57790629379883,139.90202645276074 +132.18701432733604,136.79940916356207,141.4118039997881 +133.12024251983516,138.02091203332532,142.92158154681547 +134.0534707123343,139.24241490308856,144.43135909384284 +134.98669890483342,140.46391777285183,145.94113664087024 +135.91992709733253,141.68542064261507,147.4509141878976 +136.85315528983165,142.9069235123783,148.96069173492498 +137.7863834823308,144.12842638214158,150.47046928195235 diff --git a/testdata/golden/g_FibProjection.csv b/testdata/golden/g_FibProjection.csv new file mode 100644 index 00000000..5ec71829 --- /dev/null +++ b/testdata/golden/g_FibProjection.csv @@ -0,0 +1,81 @@ +level_618,level_1000,level_1618,level_2618 +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +112.40615648612348,105.06180879888817,93.18011542006245,73.95407435400142 +112.40615648612348,105.06180879888817,93.18011542006245,73.95407435400142 +112.40615648612348,105.06180879888817,93.18011542006245,73.95407435400142 +112.40615648612348,105.06180879888817,93.18011542006245,73.95407435400142 +112.40615648612348,105.06180879888817,93.18011542006245,73.95407435400142 +112.40615648612348,105.06180879888817,93.18011542006245,73.95407435400142 +112.40615648612348,105.06180879888817,93.18011542006245,73.95407435400142 +112.40615648612348,105.06180879888817,93.18011542006245,73.95407435400142 +112.40615648612348,105.06180879888817,93.18011542006245,73.95407435400142 +123.78794085004793,134.61750112950676,152.13757508946895,180.48720932888997 +123.78794085004793,134.61750112950676,152.13757508946895,180.48720932888997 +123.78794085004793,134.61750112950676,152.13757508946895,180.48720932888997 +123.78794085004793,134.61750112950676,152.13757508946895,180.48720932888997 +123.78794085004793,134.61750112950676,152.13757508946895,180.48720932888997 +123.78794085004793,134.61750112950676,152.13757508946895,180.48720932888997 +123.78794085004793,134.61750112950676,152.13757508946895,180.48720932888997 +123.78794085004793,134.61750112950676,152.13757508946895,180.48720932888997 +123.78794085004793,134.61750112950676,152.13757508946895,180.48720932888997 +123.78794085004793,134.61750112950676,152.13757508946895,180.48720932888997 +123.78794085004793,134.61750112950676,152.13757508946895,180.48720932888997 +123.78794085004793,134.61750112950676,152.13757508946895,180.48720932888997 +123.92911141429038,117.04547791789254,105.90912843942692,87.88914546456348 +123.92911141429038,117.04547791789254,105.90912843942692,87.88914546456348 +123.92911141429038,117.04547791789254,105.90912843942692,87.88914546456348 +123.92911141429038,117.04547791789254,105.90912843942692,87.88914546456348 +123.92911141429038,117.04547791789254,105.90912843942692,87.88914546456348 +123.92911141429038,117.04547791789254,105.90912843942692,87.88914546456348 +123.92911141429038,117.04547791789254,105.90912843942692,87.88914546456348 +123.92911141429038,117.04547791789254,105.90912843942692,87.88914546456348 +123.92911141429038,117.04547791789254,105.90912843942692,87.88914546456348 +135.0522763410003,146.05295725002034,163.84987034367055,192.64746434634083 +135.0522763410003,146.05295725002034,163.84987034367055,192.64746434634083 +135.0522763410003,146.05295725002034,163.84987034367055,192.64746434634083 +135.0522763410003,146.05295725002034,163.84987034367055,192.64746434634083 +135.0522763410003,146.05295725002034,163.84987034367055,192.64746434634083 +135.0522763410003,146.05295725002034,163.84987034367055,192.64746434634083 +135.0522763410003,146.05295725002034,163.84987034367055,192.64746434634083 +135.0522763410003,146.05295725002034,163.84987034367055,192.64746434634083 +135.0522763410003,146.05295725002034,163.84987034367055,192.64746434634083 +135.0522763410003,146.05295725002034,163.84987034367055,192.64746434634083 +135.0522763410003,146.05295725002034,163.84987034367055,192.64746434634083 +135.0522763410003,146.05295725002034,163.84987034367055,192.64746434634083 +135.56479177680723,128.76133447626216,117.75469413140131,99.94459648599542 +135.56479177680723,128.76133447626216,117.75469413140131,99.94459648599542 +135.56479177680723,128.76133447626216,117.75469413140131,99.94459648599542 +135.56479177680723,128.76133447626216,117.75469413140131,99.94459648599542 +135.56479177680723,128.76133447626216,117.75469413140131,99.94459648599542 +135.56479177680723,128.76133447626216,117.75469413140131,99.94459648599542 +135.56479177680723,128.76133447626216,117.75469413140131,99.94459648599542 +135.56479177680723,128.76133447626216,117.75469413140131,99.94459648599542 diff --git a/testdata/golden/g_FibRetracement.csv b/testdata/golden/g_FibRetracement.csv new file mode 100644 index 00000000..b3e78c31 --- /dev/null +++ b/testdata/golden/g_FibRetracement.csv @@ -0,0 +1,81 @@ +level_0,level_236,level_382,level_500,level_618,level_786,level_1000 +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +95.93821562552817,100.47556131711858,103.28256331276349,105.55123615855868,107.81990900435389,111.04988390345214,115.1642566915892 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +124.2878498649492,117.59733618444584,113.45828958549036,110.11303274523868,106.767775904987,102.00503735276428,95.93821562552817 +106.26786689008574,110.52058287215351,113.15150038648358,115.27785837751748,117.40421636855136,120.43157350832841,124.2878498649492 +106.26786689008574,110.52058287215351,113.15150038648358,115.27785837751748,117.40421636855136,120.43157350832841,124.2878498649492 +106.26786689008574,110.52058287215351,113.15150038648358,115.27785837751748,117.40421636855136,120.43157350832841,124.2878498649492 +106.26786689008574,110.52058287215351,113.15150038648358,115.27785837751748,117.40421636855136,120.43157350832841,124.2878498649492 +106.26786689008574,110.52058287215351,113.15150038648358,115.27785837751748,117.40421636855136,120.43157350832841,124.2878498649492 +106.26786689008574,110.52058287215351,113.15150038648358,115.27785837751748,117.40421636855136,120.43157350832841,124.2878498649492 +106.26786689008574,110.52058287215351,113.15150038648358,115.27785837751748,117.40421636855136,120.43157350832841,124.2878498649492 +106.26786689008574,110.52058287215351,113.15150038648358,115.27785837751748,117.40421636855136,120.43157350832841,124.2878498649492 +106.26786689008574,110.52058287215351,113.15150038648358,115.27785837751748,117.40421636855136,120.43157350832841,124.2878498649492 +106.26786689008574,110.52058287215351,113.15150038648358,115.27785837751748,117.40421636855136,120.43157350832841,124.2878498649492 +106.26786689008574,110.52058287215351,113.15150038648358,115.27785837751748,117.40421636855136,120.43157350832841,124.2878498649492 +106.26786689008574,110.52058287215351,113.15150038648358,115.27785837751748,117.40421636855136,120.43157350832841,124.2878498649492 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +135.065460892756,128.2692287081258,124.06477998373596,120.66666389142087,117.26854779910578,112.43055200665717,106.26786689008574 +117.25536324735009,121.45854629166588,124.05882054789515,126.16041207005304,128.26200359221093,131.25409999663913,135.065460892756 +117.25536324735009,121.45854629166588,124.05882054789515,126.16041207005304,128.26200359221093,131.25409999663913,135.065460892756 +117.25536324735009,121.45854629166588,124.05882054789515,126.16041207005304,128.26200359221093,131.25409999663913,135.065460892756 +117.25536324735009,121.45854629166588,124.05882054789515,126.16041207005304,128.26200359221093,131.25409999663913,135.065460892756 +117.25536324735009,121.45854629166588,124.05882054789515,126.16041207005304,128.26200359221093,131.25409999663913,135.065460892756 +117.25536324735009,121.45854629166588,124.05882054789515,126.16041207005304,128.26200359221093,131.25409999663913,135.065460892756 +117.25536324735009,121.45854629166588,124.05882054789515,126.16041207005304,128.26200359221093,131.25409999663913,135.065460892756 +117.25536324735009,121.45854629166588,124.05882054789515,126.16041207005304,128.26200359221093,131.25409999663913,135.065460892756 +117.25536324735009,121.45854629166588,124.05882054789515,126.16041207005304,128.26200359221093,131.25409999663913,135.065460892756 +117.25536324735009,121.45854629166588,124.05882054789515,126.16041207005304,128.26200359221093,131.25409999663913,135.065460892756 +117.25536324735009,121.45854629166588,124.05882054789515,126.16041207005304,128.26200359221093,131.25409999663913,135.065460892756 +117.25536324735009,121.45854629166588,124.05882054789515,126.16041207005304,128.26200359221093,131.25409999663913,135.065460892756 +146.57143212166807,139.65283986732902,135.3726938116786,131.91339768450908,128.45410155733956,123.52900198645413,117.25536324735009 +146.57143212166807,139.65283986732902,135.3726938116786,131.91339768450908,128.45410155733956,123.52900198645413,117.25536324735009 +146.57143212166807,139.65283986732902,135.3726938116786,131.91339768450908,128.45410155733956,123.52900198645413,117.25536324735009 +146.57143212166807,139.65283986732902,135.3726938116786,131.91339768450908,128.45410155733956,123.52900198645413,117.25536324735009 +146.57143212166807,139.65283986732902,135.3726938116786,131.91339768450908,128.45410155733956,123.52900198645413,117.25536324735009 +146.57143212166807,139.65283986732902,135.3726938116786,131.91339768450908,128.45410155733956,123.52900198645413,117.25536324735009 +146.57143212166807,139.65283986732902,135.3726938116786,131.91339768450908,128.45410155733956,123.52900198645413,117.25536324735009 +146.57143212166807,139.65283986732902,135.3726938116786,131.91339768450908,128.45410155733956,123.52900198645413,117.25536324735009 diff --git a/testdata/golden/g_FibTimeZones.csv b/testdata/golden/g_FibTimeZones.csv new file mode 100644 index 00000000..4abe3c90 --- /dev/null +++ b/testdata/golden/g_FibTimeZones.csv @@ -0,0 +1,81 @@ +on_zone,bars_to_next +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +1,2 +0,1 +1,3 +0,2 +0,1 +1,5 +0,4 +0,3 +1,1 +1,2 +0,1 +1,3 +0,2 +0,1 +1,5 +0,4 +0,3 +0,2 +0,1 +1,8 +0,7 +0,1 +1,3 +0,2 +0,1 +1,5 +0,4 +0,3 +0,2 +0,1 +1,1 +1,2 +0,1 +1,3 +0,2 +0,1 +1,5 +0,4 +0,3 +0,2 +0,1 +1,8 +1,2 +0,1 +1,3 +0,2 +0,1 +1,5 +0,4 +0,3 +0,2 +1,2 +0,1 +1,3 +0,2 +0,1 +1,5 +0,4 +0,3 +0,2 +0,1 +1,8 +0,7 +1,2 +0,1 +1,3 +0,2 +0,1 +1,5 +0,4 +0,3 diff --git a/testdata/golden/g_FibonacciPivots.csv b/testdata/golden/g_FibonacciPivots.csv new file mode 100644 index 00000000..4c33caac --- /dev/null +++ b/testdata/golden/g_FibonacciPivots.csv @@ -0,0 +1,81 @@ +pp,r1,r2,r3,s1,s2,s3 +99.66666666666667,100.81266666666667,101.52066666666667,102.66666666666667,98.52066666666667,97.81266666666667,96.66666666666667 +103.16267454598328,104.50800224115021,105.33914709994443,106.68447479511136,101.81734685081635,100.98620199202213,99.6408742968552 +106.46632396532765,107.81316124302487,108.64523872348703,109.99207600118424,105.11948668763043,104.28740920716827,102.94057192947105 +109.30969002905226,110.43045761814919,111.1228690082719,112.24363659736883,108.18892243995533,107.49651104983262,106.37574346073569 +111.45910647185464,112.51004003677521,113.15930789363712,114.21024145855769,110.40817290693407,109.75890505007216,108.70797148515159 +112.74199773788952,113.94603379200588,114.68988852700971,115.89392458112607,111.53796168377316,110.79410694876933,109.59007089465297 +113.06847380764877,114.54359288641214,115.45492299789944,116.93004207666282,111.5933547288854,110.6820246173981,109.20690553863473 +112.44424589558567,113.94126924815325,114.86613184293323,116.36315519550081,110.94722254301809,110.0223599482381,108.52533659567052 +110.97251301246604,112.22734873130317,113.00258755236486,114.25742327120199,109.71767729362891,108.94243847256722,107.68760275373009 +108.84406406881523,109.69501097418281,110.22072686336278,111.07167376873036,107.99311716344765,107.46740127426767,106.6164543689001 +106.3166460187776,107.43997385433514,108.13396696740209,109.25729480295962,105.19331818322007,104.49932507015312,103.37599723459559 +103.68631980047041,105.09851191959069,105.9709656895184,107.38315780863867,102.27412768135014,101.40167391142244,99.98948179230216 +101.25473880483469,102.71198063722485,103.61226616718318,105.06950799957335,99.79749697244452,98.8972114424862,97.43996961009603 +99.29680919958425,100.5557612470298,101.33354314021608,102.59249518766164,98.03785715213868,97.26007525895241,96.00112321150685 +98.03294152441634,99.22492721294972,99.9613372194782,101.15332290801157,96.84095583588297,96.10454582935449,94.91256014082111 +97.60915371740403,98.84161218912618,99.60302632348856,100.83548479521072,96.37669524568187,95.61528111131949,94.38282263959734 +98.08685392291113,99.28048082836183,100.01790478042038,101.21153168587108,96.89322701746043,96.15580306540188,94.96217615995118 +99.44252381095095,100.67262073465109,101.43257590217266,102.6626728258728,98.2124268872508,97.45247171972923,96.22237479602909 +101.57606521173501,102.70096097581343,103.39592275676242,104.52081852084083,100.4511694476566,99.75620766670761,98.6313119026292 +104.32553529275576,105.72623070558188,106.59158179832262,107.99227721114875,102.92483987992964,102.0594887871889,100.65879337436277 +107.48553552770288,108.94847286168552,109.85227707849155,111.31521441247419,106.02259819372024,105.1187939769142,103.65585664293157 +110.82665131417549,112.09538171016656,112.87920467732336,114.14793507331443,109.55792091818442,108.77409795102763,107.50536755503656 +114.11393840247109,114.99542023137938,115.54000062829655,116.42148245720485,113.2324565735628,112.68787617664563,111.80639434773734 +117.12329605763098,118.21786975683891,118.89409853436005,119.98867223356798,116.02872235842305,115.3524935809019,114.25791988169398 +119.6553939855807,121.08079680464465,121.96141215883074,123.38681497789469,118.22999116651675,117.34937581233066,115.92397299326672 +121.54740034135453,123.06524841808958,124.00297654926622,125.52082462600127,120.02955226461948,119.09182413344284,117.57397605670779 +122.68295119326267,124.02464200193585,124.85353998844596,126.19523079711914,121.34126038458949,120.51236239807938,119.1706715894062 +123.0005912206809,124.01111238080749,124.63541341167102,125.64593457179761,121.99007006055432,121.36576902969078,120.3552478695642 +122.50041000814686,123.57715372836827,124.2423671262014,125.31911084642282,121.42366628792544,120.75845289009231,119.6817091698709 +121.2480003897514,122.52681822669399,123.3168732254334,124.595691062376,119.9691825528088,119.1791275540694,117.90030971712679 +119.37441415670385,120.74821739333669,121.59695447146589,122.97075770809873,118.00061092007101,117.1518738419418,115.77807060530897 +117.0706953893436,118.31811872494761,119.08877816788622,120.33620150349023,115.82327205373959,115.05261261080098,113.80518927519697 +114.57595201454465,115.85764420698057,116.64947498555355,117.93116717798947,113.29425982210874,112.50242904353576,111.22073685109984 +112.1587734147477,113.53305066522086,114.38208058959694,115.7563578400701,110.78449616427454,109.93546623989846,108.5611889894253 +110.09297423674845,111.33331363815832,112.09959661913405,113.33993602054392,108.85263483533858,108.08635185436285,106.84601245295298 +108.62989574587948,109.70362038823474,110.3669685966008,111.44069323895606,107.55617110352422,106.89282289515816,105.8190982528029 +107.97053212992039,109.01244659617436,109.65614244443599,110.69805691068996,106.92861766366642,106.28492181540479,105.24300734915082 +108.24129915337737,109.62936856606156,110.48691930269366,111.87498871537785,106.85322974069318,105.99567900406107,104.60760959137689 +109.47714653729103,110.99878600505967,111.93885646158691,113.46049592935555,107.9555070695224,107.01543661299516,105.49379714522652 +111.61489250420503,112.99893308070139,113.853994798118,115.23803537461436,110.23085192770867,109.37579021029207,107.9917496337957 +114.49824346605784,115.52161682480416,116.15385795743278,117.17723131617909,113.47487010731153,112.84262897468291,111.8192556159366 +117.8942032754348,118.8463348819451,119.4345627854436,120.3866943919539,116.94207166892451,116.353843765426,115.40171215891571 +121.51880689228612,122.83681533002809,123.65108232297861,124.96909076072058,120.20079845454416,119.38653146159363,118.06852302385167 +125.06867496722403,126.53917932961993,127.44765846450325,128.91816282689916,123.59817060482813,122.6896914699448,121.2191871075489 +128.2540554225371,129.6207276051981,130.46505911071645,131.83173129337746,126.88738323987609,126.04305173435776,124.67637955169674 +130.82894581221407,131.95862642680405,132.65654429340938,133.78622490799935,129.6992651976241,129.00134733101876,127.87166671642879 +132.61456770121885,133.8518666476291,134.61627123232233,135.85357017873258,131.3772687548086,130.61286417011536,129.3755652237051 +133.51372898547731,134.68194122456754,135.40366396913635,136.57187620822657,132.3455167463871,131.62379400181828,130.45558176272806 +133.51518476304713,134.75360785307896,135.5187069348787,136.75713002491054,132.2767616730153,131.51166259121555,130.27323950118372 +132.68866514679192,133.85800222461282,134.5804198957273,135.7497569735482,131.51932806897102,130.79691039785655,129.62757332003565 +131.17247746428333,132.4786827181627,133.2856576917636,134.59186294564296,129.86627221040396,129.05929723680308,127.7530919829237 +129.1563006939515,130.62431973540032,131.5312634364001,132.99928247784894,127.68828165250267,126.78133795150288,125.31331891005405 +126.86189674888487,128.24100825576338,129.09302478880875,130.47213629568728,125.48278524200636,124.630768708961,123.25165720208248 +124.52403581279573,125.58066475206525,126.23345121716368,127.29008015643319,123.46740687352622,122.81462040842779,121.75799146915827 +122.37315973892662,123.28723069491407,123.8519446886655,124.76601564465295,121.45908878293916,120.89437478918774,119.98030383320028 +120.62044223256866,121.93179534908126,122.74195067760738,124.05330379411997,119.30908911605607,118.49893378752995,117.18758067101736 +119.44519828628948,120.95798066124405,121.89257919655628,123.40536157151085,117.93241591133491,116.99781737602268,115.48503500106811 +118.98423170775713,120.42919204328321,121.3218900516187,122.76685038714477,117.53927137223106,116.64657336389557,115.2016130283695 +119.32275870519,120.46358046653928,121.16838134527862,122.3092031066279,118.18193694384071,117.47713606510138,116.33631430375209 +120.48694857241185,121.54953350218761,122.20599958445744,123.26858451423321,119.42436364263608,118.76789756036625,117.70531263059048 +122.4387103823207,123.61174566748154,124.33644809496309,125.50948338012392,121.26567509715987,120.54097266967833,119.36793738451749 +125.07389544503057,126.43676751660486,127.27875130951465,128.64162338108895,123.71102337345629,122.8690395805465,121.50616750897221 +128.2253492633656,129.54885944041897,130.36652541367707,131.69003559073047,126.90183908631221,126.08417311305409,124.76066293600071 +131.67207090888238,132.86158039196914,133.59646059617984,134.7859700792666,130.4825614257956,129.7476812215849,128.55817173849815 +135.15507483469676,136.51644647209432,137.35750329519857,138.71887493259612,133.7937031972992,132.95264637419496,131.5912747367974 +138.3994880837803,139.723623360016,140.54167552020348,141.86581079643918,137.07535280754462,136.25730064735714,134.93316537112145 +141.1411629574787,142.21505238350596,142.87850239539713,143.95239182142438,140.06727353145146,139.4038235195603,138.32993409353304 +143.154923777789,144.1913122149881,144.8315940767132,145.8679825139123,142.11853534058991,141.47825347886481,140.44186504166572 +144.28078575968826,145.54401992827184,146.32444732038107,147.58768148896465,143.01755159110468,142.23712419899545,140.97389003041187 +144.44430932083742,145.94230838771023,146.86777377980968,148.3657728466825,142.9463102539646,142.02084486186516,140.52284579499235 +143.66778712039107,145.14133105609014,146.051688042543,147.52523197824206,142.194243184692,141.28388619823914,139.81034226254008 +142.07015356602253,143.26337107532478,144.00054210201415,145.1937596113164,140.87693605672027,140.1397650300309,138.94654752072864 +139.85515947975856,140.71927248015686,141.25312239663327,142.11723539703158,138.99104647936025,138.45719656288384,137.59308356248553 +137.28916235919314,138.47495072253432,139.20753201506972,140.3933203784109,136.10337399585197,135.37079270331657,134.1850043399754 +134.6714977766173,136.10963458734548,136.99811701491578,138.43625382564397,133.2333609658891,132.3448785383188,130.9067417275906 +132.3015073284582,133.7408634139556,134.63009911075505,136.06945519625245,130.8621512429608,129.97291554616135,128.53355946066395 +130.44669455820846,131.65407127154833,132.3999898693185,133.60736658265836,129.2393178448686,128.49339924709844,127.28602253375857 +129.31610321851522,130.52676585095463,131.27471449298525,132.4853771254247,128.10544058607582,127.35749194404518,126.14682931160577 +129.04196344134022,130.26287172784006,131.0171501456777,132.23805843217755,127.82105515484035,127.06677673700274,125.84586845050288 +129.6711671025228,130.88464000249573,131.63432483075127,132.8477977307242,128.45769420254985,127.7080093742943,126.49453647432136 diff --git a/testdata/golden/g_FisherRsi.csv b/testdata/golden/g_FisherRsi.csv new file mode 100644 index 00000000..ae9d95e1 --- /dev/null +++ b/testdata/golden/g_FisherRsi.csv @@ -0,0 +1,81 @@ +FisherRsi +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-0.06318017015125481 +-0.08360197675615119 +-0.06952381947122988 +-0.015220401173314023 +0.07049190250284279 +0.1729124145667019 +0.2786644143578496 +0.3786009114106158 +0.46736206645770684 +0.5420153000632716 +0.6009112451609971 +0.6429345008510832 +0.6670352739774903 +0.6719045872446129 +0.6141795555761362 +0.5007259277633324 +0.36569885786242345 +0.2339092848800716 +0.11787803975922498 +0.02295067312280905 +-0.048487229505097 +-0.09467453590383078 +-0.11308441344021991 +-0.09604862695991823 +-0.03753067820549228 +0.05235523499869427 +0.1580383489610788 +0.2659510467057911 +0.3671191065298232 +0.456427386292352 +0.531141433226305 +0.5897429113590326 +0.6311901589600407 +0.6544618582037012 +0.6582380911130135 +0.5974595934405105 +0.48330765643089724 +0.3492099934069259 +0.21901125306628674 +0.1047135518935604 +0.011483154907680836 +-0.058314741043549924 +-0.10286955592725677 +-0.1195582255304932 +-0.09995579114760247 +-0.038815595252939095 +0.053025740236143606 +0.1597738803429037 +0.2680122755053287 +0.3690075753863228 +0.4578348697835627 +0.5318774876021457 +0.5896790517044318 +0.630222453819244 +0.6524850525463626 +0.6551241772484886 +0.590564592857024 +0.47448704902420363 +0.3401451968196574 +0.21063799755332405 +0.09744550246365963 +0.005492423596371665 +-0.06293196991746379 +-0.10600274040187528 +-0.1210142989395012 +-0.09893604314506885 diff --git a/testdata/golden/g_FisherTransform.csv b/testdata/golden/g_FisherTransform.csv new file mode 100644 index 00000000..9c63163d --- /dev/null +++ b/testdata/golden/g_FisherTransform.csv @@ -0,0 +1,81 @@ +FisherTransform +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-0.34282825441539394 +-0.6199597449214094 +-0.8658060132863536 +-1.0574882451924421 +-1.0689250504853132 +-0.8726416723040392 +-0.583576082499484 +-0.2528486207450387 +0.16111020674851917 +0.4685407154180056 +0.7295713826885482 +0.9667622860502596 +1.1903142100226254 +1.4055859726520978 +1.6156497781569188 +1.6746038003011499 +1.4736277314653923 +1.1593896280355824 +0.8397640619785476 +0.525734090122233 +0.19000487178620576 +-0.20711860648806452 +-0.5059947298405442 +-0.7628770443312327 +-0.9608480128141047 +-0.9911459143565967 +-0.8208091419754533 +-0.5482772237658021 +-0.22320639621196992 +0.1849677157679335 +0.48788242480860844 +0.7467363427100814 +0.9827237293305389 +1.205559485199784 +1.4203863225930524 +1.6301662793599325 +1.676136081538388 +1.4620689527013038 +1.1440355649400515 +0.8238634487053059 +0.5090134024776694 +0.1702389928691585 +-0.22053625791017706 +-0.5170364631797135 +-0.7727477376206586 +-0.9645273087797684 +-0.9834318400503937 +-0.8052499854788804 +-0.5303356383948696 +-0.20245822098975125 +0.19875284971008675 +0.49913705897400623 +0.7567583826876614 +0.9920606526233093 +1.2144874905390832 +1.429059820419456 +1.6386772229997433 +1.673133378280145 +1.4487304431423929 +1.1282358332558606 +0.8078787583191472 +0.49223004640659757 +0.1502144525910113 +-0.23430195379545096 +-0.5284186587029658 +-0.78294676923082 +-0.9683741996677836 diff --git a/testdata/golden/g_FlagPennant.csv b/testdata/golden/g_FlagPennant.csv new file mode 100644 index 00000000..5fb17be2 --- /dev/null +++ b/testdata/golden/g_FlagPennant.csv @@ -0,0 +1,81 @@ +FlagPennant +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Footprint.csv b/testdata/golden/g_Footprint.csv new file mode 100644 index 00000000..850bfb9b --- /dev/null +++ b/testdata/golden/g_Footprint.csv @@ -0,0 +1,81 @@ +footprint +100,0,1000 +100,0,1000,103,0,1019.8669330795061 +100,0,1000,103,0,1019.8669330795061,107,0,1038.941834230865 +100,0,1000,103,0,1019.8669330795061,107,0,1038.941834230865,109,0,1056.4642473395036 +100,0,1000,103,0,1019.8669330795061,107,0,1038.941834230865,109,0,1056.4642473395036,111,1071.7356090899523,0 +100,0,1000,103,0,1019.8669330795061,107,0,1038.941834230865,109,0,1056.4642473395036,111,1071.7356090899523,0,112,1084.1470984807897,0 +100,0,1000,103,0,1019.8669330795061,107,0,1038.941834230865,109,0,1056.4642473395036,111,1071.7356090899523,0,112,1084.1470984807897,0,113,1093.2039085967226,0 +100,0,1000,103,0,1019.8669330795061,107,0,1038.941834230865,109,0,1056.4642473395036,111,1071.7356090899523,0,112,2182.692071479636,0,113,1093.2039085967226,0 +100,0,1000,103,0,1019.8669330795061,107,0,1038.941834230865,109,0,1056.4642473395036,111,2171.692969394103,0,112,2182.692071479636,0,113,1093.2039085967226,0 +100,0,1000,103,0,1019.8669330795061,107,0,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,2171.692969394103,0,112,2182.692071479636,0,113,1093.2039085967226,0 +100,0,1000,103,0,1019.8669330795061,106,0,1090.929742682568,107,0,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,2171.692969394103,0,112,2182.692071479636,0,113,1093.2039085967226,0 +100,0,1000,103,0,1019.8669330795061,104,0,1080.849640381959,106,0,1090.929742682568,107,0,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,2171.692969394103,0,112,2182.692071479636,0,113,1093.2039085967226,0 +100,0,1000,102,0,1067.546318055115,103,0,1019.8669330795061,104,0,1080.849640381959,106,0,1090.929742682568,107,0,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,2171.692969394103,0,112,2182.692071479636,0,113,1093.2039085967226,0 +100,0,2051.5501371821465,102,0,1067.546318055115,103,0,1019.8669330795061,104,0,1080.849640381959,106,0,1090.929742682568,107,0,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,2171.692969394103,0,112,2182.692071479636,0,113,1093.2039085967226,0 +98,0,1033.4988150155905,100,0,2051.5501371821465,102,0,1067.546318055115,103,0,1019.8669330795061,104,0,1080.849640381959,106,0,1090.929742682568,107,0,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,2171.692969394103,0,112,2182.692071479636,0,113,1093.2039085967226,0 +98,0,2047.610815821577,100,0,2051.5501371821465,102,0,1067.546318055115,103,0,1019.8669330795061,104,0,1080.849640381959,106,0,1090.929742682568,107,0,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,2171.692969394103,0,112,2182.692071479636,0,113,1093.2039085967226,0 +98,1005.837414342758,2047.610815821577,100,0,2051.5501371821465,102,0,1067.546318055115,103,0,1019.8669330795061,104,0,1080.849640381959,106,0,1090.929742682568,107,0,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,2171.692969394103,0,112,2182.692071479636,0,113,1093.2039085967226,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,102,0,1067.546318055115,103,0,1019.8669330795061,104,0,1080.849640381959,106,0,1090.929742682568,107,0,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,2171.692969394103,0,112,2182.692071479636,0,113,1093.2039085967226,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,0,1080.849640381959,106,0,1090.929742682568,107,0,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,2171.692969394103,0,112,2182.692071479636,0,113,1093.2039085967226,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,0,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,2171.692969394103,0,112,2182.692071479636,0,113,1093.2039085967226,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,2171.692969394103,0,112,2182.692071479636,0,113,1093.2039085967226,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,3258.850546635462,0,112,2182.692071479636,0,113,1093.2039085967226,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,3258.850546635462,0,112,2182.692071479636,0,113,1093.2039085967226,0,114,0,1095.1602073889517 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,3258.850546635462,0,112,2182.692071479636,0,113,1093.2039085967226,0,114,0,1095.1602073889517,117,0,1099.3691003633464 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,3258.850546635462,0,112,2182.692071479636,0,113,1093.2039085967226,0,114,0,1095.1602073889517,117,0,1099.3691003633464,120,0,1099.616460883584 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,3258.850546635462,0,112,2182.692071479636,0,113,1093.2039085967226,0,114,0,1095.1602073889517,117,0,1099.3691003633464,120,0,1099.616460883584,122,0,1095.8924274663138 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,3258.850546635462,0,112,2182.692071479636,0,113,1093.2039085967226,0,114,0,1095.1602073889517,117,0,1099.3691003633464,120,0,1099.616460883584,122,0,1095.8924274663138,123,0,1088.3454655720152 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,3258.850546635462,0,112,2182.692071479636,0,113,1093.2039085967226,0,114,0,1095.1602073889517,117,0,1099.3691003633464,120,0,1099.616460883584,122,0,1095.8924274663138,123,0,2165.621914327614 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,3258.850546635462,0,112,2182.692071479636,0,113,1093.2039085967226,0,114,0,1095.1602073889517,117,0,1099.3691003633464,120,0,1099.616460883584,122,0,1095.8924274663138,123,0,3228.748578114846 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,3258.850546635462,0,112,2182.692071479636,0,113,1093.2039085967226,0,114,0,1095.1602073889517,117,0,1099.3691003633464,120,0,1099.616460883584,121,1046.4602179413757,0,122,0,1095.8924274663138,123,0,3228.748578114846 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,3258.850546635462,0,112,2182.692071479636,0,113,1093.2039085967226,0,114,0,1095.1602073889517,117,0,1099.3691003633464,119,1027.9415498198925,0,120,0,1099.616460883584,121,1046.4602179413757,0,122,0,1095.8924274663138,123,0,3228.748578114846 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,3258.850546635462,0,112,2182.692071479636,0,113,1093.2039085967226,0,114,0,1095.1602073889517,117,1008.3089402817496,1099.3691003633464,119,1027.9415498198925,0,120,0,1099.616460883584,121,1046.4602179413757,0,122,0,1095.8924274663138,123,0,3228.748578114846 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,3258.850546635462,0,112,2182.692071479636,0,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,117,1008.3089402817496,1099.3691003633464,119,1027.9415498198925,0,120,0,1099.616460883584,121,1046.4602179413757,0,122,0,1095.8924274663138,123,0,3228.748578114846 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,109,1097.3847630878195,1056.4642473395036,111,3258.850546635462,0,112,3213.846207830974,0,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,117,1008.3089402817496,1099.3691003633464,119,1027.9415498198925,0,120,0,1099.616460883584,121,1046.4602179413757,0,122,0,1095.8924274663138,123,0,3228.748578114846 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,109,1097.3847630878195,1056.4642473395036,110,1049.4113351138608,0,111,3258.850546635462,0,112,3213.846207830974,0,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,117,1008.3089402817496,1099.3691003633464,119,1027.9415498198925,0,120,0,1099.616460883584,121,1046.4602179413757,0,122,0,1095.8924274663138,123,0,3228.748578114846 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,109,1097.3847630878195,2122.1629072113824,110,1049.4113351138608,0,111,3258.850546635462,0,112,3213.846207830974,0,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,117,1008.3089402817496,1099.3691003633464,119,1027.9415498198925,0,120,0,1099.616460883584,121,1046.4602179413757,0,122,0,1095.8924274663138,123,0,3228.748578114846 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,2122.1629072113824,110,1049.4113351138608,0,111,3258.850546635462,0,112,3213.846207830974,0,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,117,1008.3089402817496,1099.3691003633464,119,1027.9415498198925,0,120,0,1099.616460883584,121,1046.4602179413757,0,122,0,1095.8924274663138,123,0,3228.748578114846 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,0,111,3258.850546635462,0,112,3213.846207830974,0,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,117,1008.3089402817496,1099.3691003633464,119,1027.9415498198925,0,120,0,1099.616460883584,121,1046.4602179413757,0,122,0,1095.8924274663138,123,0,3228.748578114846 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,0,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,117,1008.3089402817496,1099.3691003633464,119,1027.9415498198925,0,120,0,1099.616460883584,121,1046.4602179413757,0,122,0,1095.8924274663138,123,0,3228.748578114846 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,117,1008.3089402817496,1099.3691003633464,119,1027.9415498198925,0,120,0,1099.616460883584,121,1046.4602179413757,0,122,0,1095.8924274663138,123,0,3228.748578114846 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,119,1027.9415498198925,0,120,0,1099.616460883584,121,1046.4602179413757,0,122,0,1095.8924274663138,123,0,3228.748578114846 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,1027.9415498198925,0,120,0,1099.616460883584,121,1046.4602179413757,0,122,0,1095.8924274663138,123,0,3228.748578114846 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,1027.9415498198925,0,120,0,1099.616460883584,121,2131.920108750204,0,122,0,1095.8924274663138,123,0,3228.748578114846 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,1027.9415498198925,0,120,0,1099.616460883584,121,2131.920108750204,0,122,0,1095.8924274663138,123,0,3228.748578114846,125,1073.4397097874114,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,1027.9415498198925,0,120,0,1099.616460883584,121,2131.920108750204,0,122,0,1095.8924274663138,123,0,3228.748578114846,125,1073.4397097874114,0,128,1058.4917192891762,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,1027.9415498198925,0,120,0,1099.616460883584,121,2131.920108750204,0,122,0,1095.8924274663138,123,0,3228.748578114846,125,1073.4397097874114,0,128,1058.4917192891762,0,131,1041.2118485241756,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,1027.9415498198925,0,120,0,1099.616460883584,121,2131.920108750204,0,122,0,1095.8924274663138,123,0,3228.748578114846,125,1073.4397097874114,0,128,1058.4917192891762,0,131,1041.2118485241756,0,132,1022.2889914100246,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,1027.9415498198925,0,120,0,1099.616460883584,121,2131.920108750204,0,122,0,1095.8924274663138,123,0,3228.748578114846,125,1073.4397097874114,0,128,1058.4917192891762,0,131,1041.2118485241756,0,132,1022.2889914100246,0,133,1002.4775425453357,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,1027.9415498198925,0,120,0,1099.616460883584,121,2131.920108750204,0,122,0,1095.8924274663138,123,0,3228.748578114846,125,1073.4397097874114,0,128,1058.4917192891762,0,131,1041.2118485241756,0,132,1022.2889914100246,0,133,1002.4775425453357,0,134,0,1017.4326781222982 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,1027.9415498198925,0,120,0,1099.616460883584,121,2131.920108750204,0,122,0,1095.8924274663138,123,0,3228.748578114846,125,1073.4397097874114,0,128,1058.4917192891762,0,131,1041.2118485241756,0,132,1022.2889914100246,0,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,1027.9415498198925,0,120,0,1099.616460883584,121,2131.920108750204,0,122,0,1095.8924274663138,123,0,3228.748578114846,125,1073.4397097874114,0,128,1058.4917192891762,0,131,1041.2118485241756,0,132,1022.2889914100246,1054.402111088937,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,1027.9415498198925,0,120,0,1099.616460883584,121,2131.920108750204,0,122,0,1095.8924274663138,123,0,3228.748578114846,125,1073.4397097874114,0,128,1058.4917192891762,0,129,0,1069.9874687593544,131,1041.2118485241756,0,132,1022.2889914100246,1054.402111088937,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,1027.9415498198925,0,120,0,1099.616460883584,121,2131.920108750204,0,122,0,1095.8924274663138,123,0,3228.748578114846,125,1073.4397097874114,0,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,1069.9874687593544,131,1041.2118485241756,0,132,1022.2889914100246,1054.402111088937,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,1027.9415498198925,0,120,0,1099.616460883584,121,2131.920108750204,0,122,0,1095.8924274663138,123,0,3228.748578114846,125,1073.4397097874114,1092.2775421612807,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,1069.9874687593544,131,1041.2118485241756,0,132,1022.2889914100246,1054.402111088937,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,1027.9415498198925,0,120,0,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,1095.8924274663138,123,0,3228.748578114846,125,1073.4397097874114,1092.2775421612807,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,1069.9874687593544,131,1041.2118485241756,0,132,1022.2889914100246,1054.402111088937,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,1027.9415498198925,0,120,1099.9990206550704,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,1095.8924274663138,123,0,3228.748578114846,125,1073.4397097874114,1092.2775421612807,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,1069.9874687593544,131,1041.2118485241756,0,132,1022.2889914100246,1054.402111088937,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,2125.8593227350243,0,120,1099.9990206550704,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,1095.8924274663138,123,0,3228.748578114846,125,1073.4397097874114,1092.2775421612807,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,1069.9874687593544,131,1041.2118485241756,0,132,1022.2889914100246,1054.402111088937,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,3217.7921753014916,0,120,1099.9990206550704,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,1095.8924274663138,123,0,3228.748578114846,125,1073.4397097874114,1092.2775421612807,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,1069.9874687593544,131,1041.2118485241756,0,132,1022.2889914100246,1054.402111088937,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,1099.9990206550704,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,1095.8924274663138,123,0,3228.748578114846,125,1073.4397097874114,1092.2775421612807,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,1069.9874687593544,131,1041.2118485241756,0,132,1022.2889914100246,1054.402111088937,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,1095.8924274663138,123,0,3228.748578114846,125,1073.4397097874114,1092.2775421612807,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,1069.9874687593544,131,1041.2118485241756,0,132,1022.2889914100246,1054.402111088937,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,1092.2775421612807,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,1069.9874687593544,131,1041.2118485241756,0,132,1022.2889914100246,1054.402111088937,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,2128.1004703849635,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,1069.9874687593544,131,1041.2118485241756,0,132,1022.2889914100246,1054.402111088937,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,2128.1004703849635,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,2086.5478863041853,131,1041.2118485241756,0,132,1022.2889914100246,1054.402111088937,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,2128.1004703849635,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,2086.5478863041853,131,1041.2118485241756,0,132,1022.2889914100246,2057.764415811051,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,2128.1004703849635,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,2086.5478863041853,131,1041.2118485241756,0,132,1022.2889914100246,2057.764415811051,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982,135,0,1023.1509825101539 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,2128.1004703849635,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,2086.5478863041853,131,1041.2118485241756,0,132,1022.2889914100246,2057.764415811051,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982,135,0,1023.1509825101539,139,0,1042.016703682664 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,2128.1004703849635,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,2086.5478863041853,131,1041.2118485241756,0,132,1022.2889914100246,2057.764415811051,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982,135,0,1023.1509825101539,139,0,1042.016703682664,141,1059.2073514707224,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,2128.1004703849635,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,2086.5478863041853,131,1041.2118485241756,0,132,1022.2889914100246,2057.764415811051,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982,135,0,1023.1509825101539,139,0,1042.016703682664,141,1059.2073514707224,0,143,1074.037588995245,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,2128.1004703849635,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,2086.5478863041853,131,1041.2118485241756,0,132,1022.2889914100246,2057.764415811051,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982,135,0,1023.1509825101539,139,0,1042.016703682664,141,1059.2073514707224,0,143,1074.037588995245,0,144,1085.9161814856498,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,2128.1004703849635,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,2086.5478863041853,131,1041.2118485241756,0,132,1022.2889914100246,2057.764415811051,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982,135,0,1023.1509825101539,139,0,1042.016703682664,141,1059.2073514707224,0,143,1074.037588995245,0,144,2180.2857484300603,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,2128.1004703849635,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,2086.5478863041853,131,1041.2118485241756,0,132,1022.2889914100246,2057.764415811051,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982,135,0,1023.1509825101539,139,0,1042.016703682664,141,1059.2073514707224,0,143,2173.098324564732,0,144,2180.2857484300603,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,2128.1004703849635,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,2086.5478863041853,131,1041.2118485241756,0,132,1022.2889914100246,2057.764415811051,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982,135,0,1023.1509825101539,139,0,1042.016703682664,141,1059.2073514707224,0,142,1099.8026652716362,0,143,2173.098324564732,0,144,2180.2857484300603,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,2128.1004703849635,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,2086.5478863041853,131,1041.2118485241756,0,132,1022.2889914100246,2057.764415811051,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982,135,0,1023.1509825101539,139,0,1042.016703682664,140,1096.5657776549278,0,141,1059.2073514707224,0,142,1099.8026652716362,0,143,2173.098324564732,0,144,2180.2857484300603,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,2128.1004703849635,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,2086.5478863041853,131,1041.2118485241756,0,132,1022.2889914100246,2057.764415811051,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982,135,0,1023.1509825101539,137,0,1089.4791172140503,139,0,1042.016703682664,140,1096.5657776549278,0,141,1059.2073514707224,0,142,1099.8026652716362,0,143,2173.098324564732,0,144,2180.2857484300603,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,2128.1004703849635,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,2086.5478863041853,131,1041.2118485241756,0,132,1022.2889914100246,2057.764415811051,133,1002.4775425453357,1036.647912925193,134,0,1017.4326781222982,135,0,2101.9761892476854,137,0,1089.4791172140503,139,0,1042.016703682664,140,1096.5657776549278,0,141,1059.2073514707224,0,142,1099.8026652716362,0,143,2173.098324564732,0,144,2180.2857484300603,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,2128.1004703849635,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,2086.5478863041853,131,1041.2118485241756,0,132,1022.2889914100246,2057.764415811051,133,1002.4775425453357,2101.6766969409045,134,0,1017.4326781222982,135,0,2101.9761892476854,137,0,1089.4791172140503,139,0,1042.016703682664,140,1096.5657776549278,0,141,1059.2073514707224,0,142,1099.8026652716362,0,143,2173.098324564732,0,144,2180.2857484300603,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,2128.1004703849635,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,2086.5478863041853,131,1041.2118485241756,1048.6398688853799,132,1022.2889914100246,2057.764415811051,133,1002.4775425453357,2101.6766969409045,134,0,1017.4326781222982,135,0,2101.9761892476854,137,0,1089.4791172140503,139,0,1042.016703682664,140,1096.5657776549278,0,141,1059.2073514707224,0,142,1099.8026652716362,0,143,2173.098324564732,0,144,2180.2857484300603,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,2128.1004703849635,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,2086.5478863041853,130,0,1030.3118356745701,131,1041.2118485241756,1048.6398688853799,132,1022.2889914100246,2057.764415811051,133,1002.4775425453357,2101.6766969409045,134,0,1017.4326781222982,135,0,2101.9761892476854,137,0,1089.4791172140503,139,0,1042.016703682664,140,1096.5657776549278,0,141,1059.2073514707224,0,142,1099.8026652716362,0,143,2173.098324564732,0,144,2180.2857484300603,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,2128.1004703849635,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,3097.3232515341297,130,0,1030.3118356745701,131,1041.2118485241756,1048.6398688853799,132,1022.2889914100246,2057.764415811051,133,1002.4775425453357,2101.6766969409045,134,0,1017.4326781222982,135,0,2101.9761892476854,137,0,1089.4791172140503,139,0,1042.016703682664,140,1096.5657776549278,0,141,1059.2073514707224,0,142,1099.8026652716362,0,143,2173.098324564732,0,144,2180.2857484300603,0 +98,1005.837414342758,2047.610815821577,99,1025.5541102026832,0,100,0,2051.5501371821465,101,1044.2520443294852,0,102,0,1067.546318055115,103,0,1019.8669330795061,104,1061.185789094272,1080.849640381959,106,0,1090.929742682568,107,1075.680249530793,1038.941834230865,108,0,1079.3667863849153,109,1097.3847630878195,3212.033716792545,110,1049.4113351138608,1096.7919672031487,111,3258.850546635462,0,112,3213.846207830974,1099.8543345374605,113,1093.2039085967226,0,114,1011.6549204850494,1095.1602073889517,115,0,1098.9358246623383,117,1008.3089402817496,1099.3691003633464,118,1094.0730556679773,0,119,4300.075034798362,0,120,2169.3515291327826,1099.616460883584,121,2131.920108750204,0,122,1098.093623006649,2149.5497192663574,123,0,3228.748578114846,125,1073.4397097874114,2128.1004703849635,127,0,1082.7826469085653,128,1058.4917192891762,0,129,0,3097.3232515341297,130,1009.1906850227682,1030.3118356745701,131,1041.2118485241756,1048.6398688853799,132,1022.2889914100246,2057.764415811051,133,1002.4775425453357,2101.6766969409045,134,0,1017.4326781222982,135,0,2101.9761892476854,137,0,1089.4791172140503,139,0,1042.016703682664,140,1096.5657776549278,0,141,1059.2073514707224,0,142,1099.8026652716362,0,143,2173.098324564732,0,144,2180.2857484300603,0 diff --git a/testdata/golden/g_ForceIndex.csv b/testdata/golden/g_ForceIndex.csv new file mode 100644 index 00000000..1da41366 --- /dev/null +++ b/testdata/golden/g_ForceIndex.csv @@ -0,0 +1,81 @@ +ForceIndex +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-158.37918033438896 +-212.92058697886563 +-142.46637231453136 +41.09629305138054 +318.3308953003902 +660.8551891290905 +1033.5196192793098 +1397.5915556983925 +1714.6217481433237 +1950.5232615593275 +2079.3190720929283 +2086.0326504387763 +1968.3074623332332 +1736.5278600428335 +1412.440812539123 +1026.5022725829365 +614.3515349935487 +212.91959935338852 +-151.04398707952618 +-451.5375101931502 +-660.4558560540229 +-756.8619323888216 +-729.6900234557778 +-579.5267280454116 +-319.1301697811394 +27.4861634208295 +427.36620466079637 +842.0624632930617 +1231.7834884794445 +1559.6840078140588 +1795.7268286206886 +1919.6252545385341 +1922.5341178720382 +1807.3634112047782 +1588.5594683557683 +1280.120825046849 +904.9416921441841 +493.8920998335309 +83.01196557025621 +-290.1277092367916 +-590.4817458437064 +-789.4835212187861 +-868.3496574421436 +-820.2665866614574 +-651.1475780355869 +-378.8637781413099 +-31.083502960580415 +357.9432876705898 +751.1809961650259 +1115.7760659162868 +1434.779968177642 +1677.267444052394 +1818.1881720775357 +1841.3379457272692 +1741.5827348597434 +1525.9474982981917 +1213.3187357255763 +832.707040612145 +420.23773640167377 +15.241409445657391 +-344.0384764310725 +-624.5455908902511 +-801.783293174669 +-862.0539717198926 +-803.3505445463659 +-633.7614571785748 diff --git a/testdata/golden/g_FractalChaosBands.csv b/testdata/golden/g_FractalChaosBands.csv new file mode 100644 index 00000000..82f1945d --- /dev/null +++ b/testdata/golden/g_FractalChaosBands.csv @@ -0,0 +1,81 @@ +upper,lower +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,106.26786689008574 +124.2878498649492,106.26786689008574 +124.2878498649492,106.26786689008574 +124.2878498649492,106.26786689008574 +124.2878498649492,106.26786689008574 +124.2878498649492,106.26786689008574 +124.2878498649492,106.26786689008574 +124.2878498649492,106.26786689008574 +124.2878498649492,106.26786689008574 +124.2878498649492,106.26786689008574 +124.2878498649492,106.26786689008574 +135.065460892756,106.26786689008574 +135.065460892756,106.26786689008574 +135.065460892756,106.26786689008574 +135.065460892756,106.26786689008574 +135.065460892756,106.26786689008574 +135.065460892756,106.26786689008574 +135.065460892756,106.26786689008574 +135.065460892756,106.26786689008574 +135.065460892756,106.26786689008574 +135.065460892756,117.25536324735009 +135.065460892756,117.25536324735009 +135.065460892756,117.25536324735009 +135.065460892756,117.25536324735009 +135.065460892756,117.25536324735009 +135.065460892756,117.25536324735009 +135.065460892756,117.25536324735009 +135.065460892756,117.25536324735009 +135.065460892756,117.25536324735009 diff --git a/testdata/golden/g_Frama.csv b/testdata/golden/g_Frama.csv new file mode 100644 index 00000000..96f9f99f --- /dev/null +++ b/testdata/golden/g_Frama.csv @@ -0,0 +1,81 @@ +Frama +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +99.62233840816026 +99.5335657792623 +98.78283912404166 +98.0383539116416 +99.24185317672267 +101.27235512444012 +102.28220217480992 +102.57968502569744 +102.67572705245531 +103.0797760145054 +104.86788060351316 +111.99994967100825 +121.87999976774739 +122.98543345374605 +123.19889810845086 +122.5459890808828 +121.12969230082183 +119.12118485241757 +118.15682409331195 +117.73255050836593 +117.55515357366055 +117.44843128285508 +116.81118762945029 +112.80461059259196 +108.55447411796011 +109.80671474335324 +111.88016416080967 +112.79557975252199 +113.0747260950269 +113.1745456712887 +113.6147696265533 +115.5515396865062 +123.21478829321222 +132.43695669444105 +133.49309388747918 +133.65657776549278 +132.95746831142935 +131.50287840157117 +129.46740573130614 +128.56928314605898 +128.16712965999258 +127.99994678431212 +127.88262539315585 +127.18143998857522 +122.73863442371453 +119.07340619529367 +120.37417550208815 +122.49012753228324 +123.32065715431091 +123.58185493312557 +123.68999005454646 +124.16858782858263 +126.26308887407522 +134.48251610727058 +142.99124553647894 +143.9979290014267 +144.11152724502116 +143.36655638536055 +141.8742259615024 +139.81250491654941 +138.97627676486633 +138.5958992275394 +138.43867063976924 +138.30988648543527 +137.53884366071793 +132.61334678787998 +129.59514479102842 diff --git a/testdata/golden/g_FryPanBottom.csv b/testdata/golden/g_FryPanBottom.csv new file mode 100644 index 00000000..188edcad --- /dev/null +++ b/testdata/golden/g_FryPanBottom.csv @@ -0,0 +1,81 @@ +FryPanBottom +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_FundingBasis.csv b/testdata/golden/g_FundingBasis.csv new file mode 100644 index 00000000..6cf5347e --- /dev/null +++ b/testdata/golden/g_FundingBasis.csv @@ -0,0 +1,81 @@ +FundingBasis +0.005025125628140704 +0.004856481168154022 +0.004710474245865746 +0.004594183416081123 +0.004511805057907902 +0.004465284428331221 +0.004454800318425903 +0.0044789986784069145 +0.004534956870401571 +0.004617922392404337 +0.004720936025835783 +0.004834535926242437 +0.004946831672474743 +0.005044271634726057 +0.005113298302086592 +0.005142726139048963 +0.005126188621687648 +0.005063708892571905 +0.004961678223978869 +0.004831237876267005 +0.004685778927251883 +0.0045385172565910155 +0.004400811333625096 +0.004281393834171937 +0.004186318689532465 +0.004119294784616222 +0.004082118060094175 +0.004075016220260274 +0.00409681632117085 +0.004144916483357336 +0.004215098682601042 +0.004301277133392996 +0.004395344261249394 +0.004487337766882979 +0.004566157790299455 +0.004620942155677232 +0.004642929141119638 +0.004627295668055019 +0.004574284399398292 +0.004489129673737099 +0.004380805137736097 +0.004260116508326143 +0.0041378318244955905 +0.004023343620207788 +0.003924008124916932 +0.0038450345191749025 +0.0037896887462545714 +0.0037595937156182906 +0.0037549778493148824 +0.003774796592249654 +0.003816710030350015 +0.003876948575996886 +0.003950147978343445 +0.004029287628630878 +0.00410590676932255 +0.004170762822316785 +0.004214986937464313 +0.0042315737198540225 +0.0042167971389510915 +0.0041710401586143985 +0.0040986923295713495 +0.004007151511892075 +0.003905326653165511 +0.0038021591538924793 +0.003705538651084677 +0.003621734497298984 +0.0035552588131117216 +0.0035089875038813935 +0.003484370844090919 +0.0034816146697397815 +0.003499769383755054 +0.0035367125556263345 +0.0035890532605060014 +0.003652028203594035 +0.003719500953415725 +0.003784201951895383 +0.0038383280138162756 +0.0038745235149959946 +0.0038870925730076903 +0.003873112352980977 diff --git a/testdata/golden/g_FundingImpliedApr.csv b/testdata/golden/g_FundingImpliedApr.csv new file mode 100644 index 00000000..e9f26da6 --- /dev/null +++ b/testdata/golden/g_FundingImpliedApr.csv @@ -0,0 +1,81 @@ +FundingImpliedApr +0.1095 +0.09288589515790802 +0.05547593615084115 +0.007084507439169524 +-0.04093417050552226 +-0.07799534563640297 +-0.09615544038473492 +-0.09144750972306853 +-0.06462391262358431 +-0.02122031251258887 +0.029189605309118852 +0.07467036313878604 +0.10350859758197707 +0.1073417335167269 +0.08399342044972363 +0.03884030113159705 +-0.016251041624385773 +-0.06642389398614106 +-0.09851529921840942 +-0.10499764340310054 +-0.08570272676684325 +-0.04705174776028527 +0.0004246700022850818 +0.04512268651806895 +0.07704232727648126 +0.08964466013969215 +0.08079446466004972 +0.0528769442199781 +0.0122180460625886 +-0.03208478984396708 +-0.06983294076624762 +-0.09177358555011855 +-0.09177902350915929 +-0.0687180919827759 +-0.02739094752190464 +0.022104878981374206 +0.06683081003151473 +0.0947708297620624 +0.09859429447869361 +0.07788846204173867 +0.03898047717225209 +-0.007391517728004731 +-0.04942988072164789 +-0.0773844055034972 +-0.08559653004207997 +-0.0732560420530111 +-0.04405508642207771 +-0.005077887922877881 +0.03475145187758353 +0.06641359880330977 +0.082535613834711 +0.07893724616920116 +0.05574365677301937 +0.017765105105322584 +-0.02616151744913968 +-0.06502635590714662 +-0.08848347156158307 +-0.08994121216500622 +-0.06879143052866138 +-0.030775665500352614 +0.013789302128237698 +0.053235370507629304 +0.07793050877162475 +0.0826588954445327 +0.06744837468194563 +0.03696473539727221 +-0.0010300676124175927 +-0.03760251340467053 +-0.06452762601050586 +-0.07585716007281666 +-0.06902188275453723 +-0.04536568756493261 +-0.010022010565194393 +0.028941661702460576 +0.06211734117199826 +0.08093039395681546 +0.07997592787378653 +0.05883496087065313 +0.022610710264326952 +-0.019270266155549182 diff --git a/testdata/golden/g_FundingRate.csv b/testdata/golden/g_FundingRate.csv new file mode 100644 index 00000000..a0b941ad --- /dev/null +++ b/testdata/golden/g_FundingRate.csv @@ -0,0 +1,81 @@ +FundingRate +0.0001 +0.00008482730151407124 +0.000050662955388896024 +0.000006469869807460753 +-0.0000373828041146322 +-0.00007122862615196618 +-0.00008781318756596796 +-0.00008351370750965163 +-0.0000590172718023601 +-0.00001937928083341449 +0.000026657173798282056 +0.00006819211245551236 +0.0000945283996182439 +0.00009802898038057252 +0.00007670632004540971 +0.000035470594640727904 +-0.00001484113390354865 +-0.00006066109039830233 +-0.00008996830978850175 +-0.00009588825881561693 +-0.00007826733038067876 +-0.000042969632657794765 +0.00000038782648610509753 +0.000041207932893213654 +0.0000703582897502112 +0.00008186726953396543 +0.00007378489923292212 +0.00004828944677623571 +0.000011158032933870868 +-0.000029301177939695963 +-0.00006377437512899326 +-0.0000838114936530763 +-0.00008381645982571624 +-0.0000627562483860967 +-0.000025014563946944876 +0.000020187104092579183 +0.0000610327032251276 +0.00008654870297905242 +0.00009004045157871562 +0.00007113101556323166 +0.00003559860928972793 +-0.000006750244500460942 +-0.0000451414435814136 +-0.0000706706899575317 +-0.00007817034707039267 +-0.00006690049502558091 +-0.00004023295563660065 +-0.000004637340568838248 +0.000031736485732952994 +0.00006065168840484911 +0.00007537498980338905 +0.00007208880928694169 +0.00005090744910778025 +0.00001622384027883341 +-0.000023891796757205187 +-0.00005938479991520239 +-0.00008080682334391148 +-0.00008213809330137554 +-0.00006282322422708802 +-0.000028105630593929328 +0.000012592969980125752 +0.00004861677671929617 +0.00007116941440331027 +0.00007548757574843168 +0.00006159668920725629 +0.000033757749221253155 +-0.0000009407010159064774 +-0.00003434019489011007 +-0.000058929338822379785 +-0.00006927594527197868 +-0.00006303368288085592 +-0.0000414298516574727 +-0.000009152521064104468 +0.000026430741280785916 +0.00005672816545387969 +0.00007390903557700042 +0.00007303737705368633 +0.000053730557872742585 +0.00002064905046970498 +-0.000017598416580410212 diff --git a/testdata/golden/g_FundingRateMean.csv b/testdata/golden/g_FundingRateMean.csv new file mode 100644 index 00000000..f1b4ab10 --- /dev/null +++ b/testdata/golden/g_FundingRateMean.csv @@ -0,0 +1,81 @@ +FundingRateMean +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.0000010925018382607104 +-0.000007820864680773229 +-0.000014210711389366529 +-0.000016724467834506074 +-0.00001498756468021843 +-0.00000960050998697626 +-0.0000019457152026796793 +0.000006134189137264824 +0.000012724346851559192 +0.00001623311208837074 +0.000015737017233056665 +0.0000112154397866929 +0.0000036152594812634656 +-0.000005301983490934542 +-0.000013341244929268004 +-0.000018427289128885735 +-0.00001919146365629317 +-0.000015397771799859356 +-0.000008037282130991618 +0.0000009631559373692497 +0.000009314119656311678 +0.000015007416639832014 +0.000016818386047698705 +0.000014541922544322771 +0.000008947991401785503 +0.0000015215595607553095 +-0.000005916828667222007 +-0.000011617721410698146 +-0.000014264060777951846 +-0.000013235138137997739 +-0.000008737494820770485 +-0.00000178002657415137 +0.00000601498857284953 +0.000012751184019524354 +0.000016700188452770857 +0.000016756326812257842 +0.000012777731611868764 +0.000005685755283416808 +-0.0000027485845306045903 +-0.000010391768320894773 +-0.000015353600628752823 +-0.00001650388259423293 +-0.000013735531533245075 +-0.00000791998863400888 +-0.0000006120753487107115 +0.000006376276465171736 +0.00001140918867751344 +0.000013373801408548148 +0.000011888658692484558 +0.000007355367464717918 +0.0000008589857808765283 +-0.00000606144785333572 +-0.00001173738090055644 +-0.000014740379409150678 +-0.000014230034359053052 +-0.00001019903624849881 +-0.0000035343444738886685 +0.000004157865545991222 +0.000010951298104697129 +0.000015124911839536778 +0.000015650272540212736 diff --git a/testdata/golden/g_FundingRateZScore.csv b/testdata/golden/g_FundingRateZScore.csv new file mode 100644 index 00000000..c54e9ff6 --- /dev/null +++ b/testdata/golden/g_FundingRateZScore.csv @@ -0,0 +1,81 @@ +FundingRateZScore +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-1.3923282686570233 +-1.0389081256504133 +-0.44430459012160967 +0.27112504557353606 +0.8753335002148153 +1.2011183125927958 +1.2355637165193574 +1.0136447966375688 +0.5555812091872852 +-0.08202390786850157 +-0.7241373291145435 +-1.1629479597773447 +-1.3195951419362906 +-1.2002887114413792 +-0.7968695246862134 +-0.11262467212480486 +0.6803932801034287 +1.264028633086863 +1.491968729783641 +1.39396670124595 +1.0040057707129166 +0.3526436461424595 +-0.41267108519011525 +-1.0183191611562896 +-1.3034199988854673 +-1.2815125523309712 +-0.9994564773038728 +-0.4884671620740007 +0.16892090381037195 +0.7804663762698473 +1.1629550837160707 +1.2660364047183144 +1.1028307631553969 +0.670185762763741 +-0.008783085734840618 +-0.7500750694971777 +-1.2736298608483934 +-1.4658881307225105 +-1.3479122718492427 +-0.9326356804767906 +-0.24016442339852406 +0.5571675845757331 +1.152532996021978 +1.3972125751789302 +1.3243850063471885 +0.9845746440321352 +0.41577210066827724 +-0.27248706686974156 +-0.8651722751723753 +-1.1971673748399725 +-1.2446937135226956 +-1.0309982203462096 +-0.5632970779073802 +0.11014661635751366 +0.7958642304924574 +1.2556379509334779 +1.4070472263564253 +1.2650048942710534 +0.8280275700465966 +0.11313109030541504 +-0.686724193310382 diff --git a/testdata/golden/g_GainLossRatio.csv b/testdata/golden/g_GainLossRatio.csv new file mode 100644 index 00000000..f40b76d9 --- /dev/null +++ b/testdata/golden/g_GainLossRatio.csv @@ -0,0 +1,81 @@ +GainLossRatio +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf diff --git a/testdata/golden/g_GainToPainRatio.csv b/testdata/golden/g_GainToPainRatio.csv new file mode 100644 index 00000000..9e997e02 --- /dev/null +++ b/testdata/golden/g_GainToPainRatio.csv @@ -0,0 +1,81 @@ +GainToPainRatio +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_GapSideBySideWhite.csv b/testdata/golden/g_GapSideBySideWhite.csv new file mode 100644 index 00000000..7f6672ca --- /dev/null +++ b/testdata/golden/g_GapSideBySideWhite.csv @@ -0,0 +1,81 @@ +GapSideBySideWhite +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Garch11.csv b/testdata/golden/g_Garch11.csv new file mode 100644 index 00000000..32f63dda --- /dev/null +++ b/testdata/golden/g_Garch11.csv @@ -0,0 +1,81 @@ +Garch11 +nan +0.009999999999999995 +0.01433129156334974 +0.016584193045700253 +0.01749118797215877 +0.017426154130579383 +0.016729513621877815 +0.015774634782324434 +0.01496285577447647 +0.01463893579864185 +0.014938243790563186 +0.01570336321922669 +0.01658334485671981 +0.017211060107993892 +0.017330466834062887 +0.016869796564838908 +0.015990588989432602 +0.015101056474837588 +0.014750033003514657 +0.0153126370249051 +0.016692082785712086 +0.018432673036193767 +0.02005048125632841 +0.021210157254558097 +0.021746612282544712 +0.021637284657567313 +0.020972020781115295 +0.019929847088778374 +0.018757283611592627 +0.01773242721218425 +0.01709442496375025 +0.016944334312495646 +0.017183487281986258 +0.01755669787937118 +0.01777010002968007 +0.017604833787306942 +0.016995085500047188 +0.016074995880287074 +0.015183015667856506 +0.014765371317097186 +0.01512772746032317 +0.016202628364012827 +0.017618010616595195 +0.018954240111743778 +0.01990582221765354 +0.020314956939811946 +0.02015414601959156 +0.01950149933803416 +0.018519735491555948 +0.017434813635745675 +0.016499889050297506 +0.015927271804826264 +0.015797826783844213 +0.01601052516941529 +0.016328296416997786 +0.016486846200331872 +0.016295961114658856 +0.01570744103892593 +0.014854171611295274 +0.014049278899201186 +0.013693096257394191 +0.0140486755917635 +0.015042911771360105 +0.01633597611338898 +0.017548986745097948 +0.018405799680916043 +0.018763489586002706 +0.01859821524827469 +0.017984094119273552 +0.017074485680011922 +0.01608153224234333 +0.015240339644131885 +0.014742618608427585 +0.014652387447279073 +0.014864972342382425 +0.01515650363817801 +0.0152863373783884 +0.015088002412690194 +0.014528314090256149 +0.013739874588866646 diff --git a/testdata/golden/g_GarmanKlassVolatility.csv b/testdata/golden/g_GarmanKlassVolatility.csv new file mode 100644 index 00000000..0b9b6492 --- /dev/null +++ b/testdata/golden/g_GarmanKlassVolatility.csv @@ -0,0 +1,81 @@ +GarmanKlassVolatility +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +34.61067699106617 +34.96231047995739 +34.75433232778632 +34.14179159098413 +34.017831008836815 +34.32996157013985 +34.58469137686341 +34.28759793362541 +33.626293120675804 +33.32597745730496 +33.645199513930365 +33.75203204888395 +33.26693173020732 +32.739027341988525 +32.70650299578584 +32.60454494419057 +32.19876864321613 +31.80284460890284 +31.855949460776984 +32.335752792334375 +32.1949370746557 +31.52143241778412 +31.08248315531546 +31.465682402334355 +31.78514078170178 +31.57929414671246 +31.031851912241404 +30.832220525607525 +30.9130537220183 +30.967763831388552 +30.71208490041365 +30.46751409025226 +30.59646998322181 +30.585936900259934 +30.061381069567076 +29.546945267452628 +29.66877693474197 +30.12799468584525 +30.00679515736574 +29.294909338088754 +28.762550752854903 +28.86071833725245 +29.24044718821333 +29.135898125874405 +28.710519475475106 +28.642327051855442 +28.79995443892584 +28.595111942071895 +28.401972091371054 +28.307764764679305 +28.52268618440697 +28.579928010219696 +28.160683632756662 +27.561087815969092 +27.577799606417557 +28.008929131049637 +27.99690550787887 +27.429275277841253 +26.99282497261975 +27.01121082575485 +27.093879386693832 diff --git a/testdata/golden/g_Gartley.csv b/testdata/golden/g_Gartley.csv new file mode 100644 index 00000000..eba51cd8 --- /dev/null +++ b/testdata/golden/g_Gartley.csv @@ -0,0 +1,81 @@ +Gartley +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_GatorOscillator.csv b/testdata/golden/g_GatorOscillator.csv new file mode 100644 index 00000000..0f733171 --- /dev/null +++ b/testdata/golden/g_GatorOscillator.csv @@ -0,0 +1,81 @@ +upper,lower +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +2.6349370214363574,-1.2417370285297835 +3.2582430945126646,-1.7161484315750783 +3.527055938295831,-2.101651603981054 +3.406094373088436,-2.347055037602331 +2.902063232438252,-2.4161583680944148 +2.059649831032999,-2.29042850604408 +0.9537521055637939,-1.9695710517262626 +0.32049195790777674,-1.4702648945680323 +1.6582321269040108,-0.8235319154153871 +2.9546046588203865,-0.07128949183979216 +4.112701974898442,-0.7374146906020087 +5.0494872794945,-1.5501244487876846 +5.699836434341634,-2.3144681168787713 +6.019207442116652,-2.981392647881478 +5.985500561463482,-3.508196880195271 +5.600488544826817,-3.86141945269695 +4.890845835554558,-4.0195488296305655 +3.9084143665879765,-3.9753821275245116 +2.7290513492710744,-3.737716925602413 +1.4493254582583859,-3.3319713547313796 +0.18051948215619973,-2.7993368420659976 +0.9601572029396692,-2.194195388848428 +1.860633989409294,-1.5797687014942596 +2.426179691413296,-1.022269193031292 +2.591105378515337,-0.5841303708676975 +2.328124417277891,-0.31713646109820104 +1.653673325911285,-0.2563874638367878 +0.6280076651943745,-0.4159895305926682 +0.6503224261088008,-0.787148818782569 +2.05509212129445,-1.3390028421134303 +3.4467266371148924,-2.022109240556972 +4.68830705488719,-2.7741063525354406 +5.660963343437402,-3.526740388850129 +6.27650708607284,-4.2132796824930665 +6.485683807264607,-4.775335789949565 +6.281217319475459,-5.168275919368881 +5.695707130792158,-5.364699197877854 +4.79524162268136,-5.355795223836907 +3.67014909880173,-5.150733928514583 +2.4245326874144126,-4.774486845272094 +1.16611123183705,-4.264610610695101 +0.0025152939484058834,-3.6675245238841114 +0.9906124812918051,-3.0347076294664816 +1.7240593203516283,-2.419073673981387 +2.1484946912829344,-1.8716120181252336 +2.231431846878934,-1.438262175643132 +1.9638229626184938,-1.1569535138349778 +1.3612612305800837,-1.0547967563195755 +0.464616504465738,-1.1455382493385429 +0.6604490941078751,-1.427536625078389 +1.9258177117749113,-1.8826390916757134 +3.2257598277203243,-2.47637037829314 +4.444594410583775,-3.159769726882459 +5.466917861546506,-3.8730174846820233 +6.189513678168055,-4.5507115425596965 +6.5334870630628075,-5.128339947197702 +6.454826988557102,-5.549218305912518 +5.951591780653189,-5.770985740381576 +5.066279649510562,-5.770729396614627 +3.8826345232772326,-5.547952473564891 +2.51702513030736,-5.124895947070485 +1.105446625294519,-4.544118152759808 +0.21205668600680383,-3.86365537112934 +1.3073164383607434,-3.150450494593656 +2.0780543618149068,-2.472977040318 +2.4581055797513613,-1.8940598211993915 +2.4226716660780596,-1.4647943541294524 diff --git a/testdata/golden/g_GeneralizedDema.csv b/testdata/golden/g_GeneralizedDema.csv new file mode 100644 index 00000000..43fea235 --- /dev/null +++ b/testdata/golden/g_GeneralizedDema.csv @@ -0,0 +1,81 @@ +GeneralizedDema +nan +nan +nan +nan +nan +nan +nan +nan +111.70062523079051 +110.43857666326113 +108.5376426069617 +106.23983486823973 +103.81332245410297 +101.53161267157856 +99.65119751873199 +98.39001895814081 +97.90891318162203 +98.2978481138777 +99.56828737630265 +101.65243164030316 +104.40945074511049 +107.63818010446532 +111.09516729458474 +114.51647004342018 +117.64126726254082 +120.23517984266958 +122.1112218942237 +123.14651347716145 +123.29326361513267 +122.58304363572898 +121.12396985511779 +119.09104776162098 +116.71054054954769 +114.23975853150617 +111.94407492379204 +110.07322121098966 +108.83897961697984 +108.39626538900944 +108.82928878554264 +110.14403289451505 +112.26771922813755 +115.05530883905668 +118.30245823781078 +121.7637728015603 +125.1747271537685 +128.27529443413408 +130.83317372748002 +132.6645408152259 +133.65046864705886 +133.74755074126847 +132.9917785572266 +131.49532648600564 +129.4365316464329 +127.04396356161404 +124.57600672431411 +122.29777987984663 +120.45745375820745 +119.2640827219202 +118.86893056247564 +119.35195855635735 +120.71468276237023 +122.88003859663047 +125.69926478233134 +128.9651917515555 +132.430747485776 +135.83102772343068 +138.9069590686567 +141.4284412461582 +143.21490127350228 +144.15142350784856 +144.19901471807646 +143.39808723398977 +141.8648490332534 +139.78092322884524 +137.37712421729304 +134.91283971605583 +132.65286043124536 +130.84372709246216 +129.69170770368058 +129.34437223677168 diff --git a/testdata/golden/g_GeometricMa.csv b/testdata/golden/g_GeometricMa.csv new file mode 100644 index 00000000..caab9c8f --- /dev/null +++ b/testdata/golden/g_GeometricMa.csv @@ -0,0 +1,81 @@ +GeometricMa +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +106.9865678959533 +106.85439530264259 +106.42034859622568 +105.78252814356289 +105.05333338857288 +104.34587356940106 +103.76312863927049 +103.39084378851621 +103.29383781918385 +103.51462871686937 +104.07312181526694 +104.96641016267742 +106.1682898212837 +107.62873359900027 +109.27417152266665 +111.00983724202378 +112.72543347126242 +114.30474804625767 +115.63863739571632 +116.6393718068561 +117.25334561084429 +117.46913083667143 +117.31889836813372 +116.87296830526354 +116.22902882470669 +115.49873916244952 +114.79463075618031 +114.21948661206363 +113.8591434471001 +113.7784871746301 +114.0196949158057 +114.60161229385263 +115.51942062593494 +116.74425825719558 +118.22305543554126 +119.87938751108855 +121.61648486001971 +123.32346037209172 +124.88517776573026 +126.1950491163304 +127.16878815935037 +127.75631828987785 +127.94908890313906 +127.78105849849445 +127.32320801804227 +126.67306376502457 +125.94176250064861 +125.24135545538424 +124.67437666441657 +124.32658241401884 +124.26270077536279 +124.52436616413968 +125.1292496561565 +126.07063264359483 +127.31714303973962 +128.81292500073118 +130.47900325628214 +132.21687010295153 +133.9151892192757 +135.45986614522658 +136.746671825614 +137.69447758945475 +138.25646607309267 +138.42680245785093 +138.24122246798743 +137.77148903962424 +137.1151501729194 diff --git a/testdata/golden/g_GoldenPocket.csv b/testdata/golden/g_GoldenPocket.csv new file mode 100644 index 00000000..e918de78 --- /dev/null +++ b/testdata/golden/g_GoldenPocket.csv @@ -0,0 +1,81 @@ +low,mid,high +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +107.81990900435389,108.12752566141086,108.43514231846784 +107.81990900435389,108.12752566141086,108.43514231846784 +107.81990900435389,108.12752566141086,108.43514231846784 +107.81990900435389,108.12752566141086,108.43514231846784 +107.81990900435389,108.12752566141086,108.43514231846784 +107.81990900435389,108.12752566141086,108.43514231846784 +107.81990900435389,108.12752566141086,108.43514231846784 +107.81990900435389,108.12752566141086,108.43514231846784 +107.81990900435389,108.12752566141086,108.43514231846784 +107.81990900435389,108.12752566141086,108.43514231846784 +107.81990900435389,108.12752566141086,108.43514231846784 +107.81990900435389,108.12752566141086,108.43514231846784 +107.81990900435389,108.12752566141086,108.43514231846784 +105.86058760932553,106.31418175715626,106.767775904987 +105.86058760932553,106.31418175715626,106.767775904987 +105.86058760932553,106.31418175715626,106.767775904987 +105.86058760932553,106.31418175715626,106.767775904987 +105.86058760932553,106.31418175715626,106.767775904987 +105.86058760932553,106.31418175715626,106.767775904987 +105.86058760932553,106.31418175715626,106.767775904987 +105.86058760932553,106.31418175715626,106.767775904987 +105.86058760932553,106.31418175715626,106.767775904987 +117.40421636855136,117.69253609614918,117.98085582374699 +117.40421636855136,117.69253609614918,117.98085582374699 +117.40421636855136,117.69253609614918,117.98085582374699 +117.40421636855136,117.69253609614918,117.98085582374699 +117.40421636855136,117.69253609614918,117.98085582374699 +117.40421636855136,117.69253609614918,117.98085582374699 +117.40421636855136,117.69253609614918,117.98085582374699 +117.40421636855136,117.69253609614918,117.98085582374699 +117.40421636855136,117.69253609614918,117.98085582374699 +117.40421636855136,117.69253609614918,117.98085582374699 +117.40421636855136,117.69253609614918,117.98085582374699 +117.40421636855136,117.69253609614918,117.98085582374699 +116.34702479102033,116.80778629506305,117.26854779910578 +116.34702479102033,116.80778629506305,117.26854779910578 +116.34702479102033,116.80778629506305,117.26854779910578 +116.34702479102033,116.80778629506305,117.26854779910578 +116.34702479102033,116.80778629506305,117.26854779910578 +116.34702479102033,116.80778629506305,117.26854779910578 +116.34702479102033,116.80778629506305,117.26854779910578 +116.34702479102033,116.80778629506305,117.26854779910578 +116.34702479102033,116.80778629506305,117.26854779910578 +128.26200359221093,128.54696515453742,128.83192671686393 +128.26200359221093,128.54696515453742,128.83192671686393 +128.26200359221093,128.54696515453742,128.83192671686393 +128.26200359221093,128.54696515453742,128.83192671686393 +128.26200359221093,128.54696515453742,128.83192671686393 +128.26200359221093,128.54696515453742,128.83192671686393 +128.26200359221093,128.54696515453742,128.83192671686393 +128.26200359221093,128.54696515453742,128.83192671686393 +128.26200359221093,128.54696515453742,128.83192671686393 +128.26200359221093,128.54696515453742,128.83192671686393 +128.26200359221093,128.54696515453742,128.83192671686393 +128.26200359221093,128.54696515453742,128.83192671686393 +127.51598735336138,127.98504445535048,128.45410155733956 +127.51598735336138,127.98504445535048,128.45410155733956 +127.51598735336138,127.98504445535048,128.45410155733956 +127.51598735336138,127.98504445535048,128.45410155733956 +127.51598735336138,127.98504445535048,128.45410155733956 +127.51598735336138,127.98504445535048,128.45410155733956 +127.51598735336138,127.98504445535048,128.45410155733956 +127.51598735336138,127.98504445535048,128.45410155733956 diff --git a/testdata/golden/g_GrangerCausality.csv b/testdata/golden/g_GrangerCausality.csv new file mode 100644 index 00000000..1ae8c99d --- /dev/null +++ b/testdata/golden/g_GrangerCausality.csv @@ -0,0 +1,81 @@ +GrangerCausality +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.1960301901061728 +0.5287652024400787 +0.8014205024874232 +0.6717177599221922 +0.3032353687001835 +0.07130661600973114 +0.014712525429902241 +0.026401680364754522 +0.1065600444361977 +0.22029557462156785 +0.2109846780621332 +0.06881438388725461 +0.0037007220847754775 +0.16316269941036662 +0.42398462178588203 +0.5147308439901641 +0.3707546152761448 +0.1882533276632297 +0.1070328010278613 +0.13530732587291275 +0.28964015464915005 diff --git a/testdata/golden/g_GravestoneDoji.csv b/testdata/golden/g_GravestoneDoji.csv new file mode 100644 index 00000000..693f733b --- /dev/null +++ b/testdata/golden/g_GravestoneDoji.csv @@ -0,0 +1,81 @@ +GravestoneDoji +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Hammer.csv b/testdata/golden/g_Hammer.csv new file mode 100644 index 00000000..53e3a7a2 --- /dev/null +++ b/testdata/golden/g_Hammer.csv @@ -0,0 +1,81 @@ +Hammer +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_HangingMan.csv b/testdata/golden/g_HangingMan.csv new file mode 100644 index 00000000..016ac725 --- /dev/null +++ b/testdata/golden/g_HangingMan.csv @@ -0,0 +1,81 @@ +HangingMan +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Harami.csv b/testdata/golden/g_Harami.csv new file mode 100644 index 00000000..fee1a64b --- /dev/null +++ b/testdata/golden/g_Harami.csv @@ -0,0 +1,81 @@ +Harami +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_HaramiCross.csv b/testdata/golden/g_HaramiCross.csv new file mode 100644 index 00000000..646c4a12 --- /dev/null +++ b/testdata/golden/g_HaramiCross.csv @@ -0,0 +1,81 @@ +HaramiCross +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +0 diff --git a/testdata/golden/g_HasbrouckInformationShare.csv b/testdata/golden/g_HasbrouckInformationShare.csv new file mode 100644 index 00000000..c2d2e379 --- /dev/null +++ b/testdata/golden/g_HasbrouckInformationShare.csv @@ -0,0 +1,81 @@ +HasbrouckInformationShare +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.4386233330470387 +0.4271166077331938 +0.4121428454567875 +0.4007788506776602 +0.4073809981138519 +0.42947563915854026 +0.4517869265790891 +0.46947293770565 +0.4841608597247731 +0.49807367411883385 +0.5131467016983838 +0.5316326450701847 +0.5566912155736435 +0.5892222645290467 +0.612813315751421 +0.6057544257017794 +0.5860552413233616 +0.5701884875342916 +0.5585868932391468 +0.5489852345530649 +0.5399869273864619 +0.5308749450698338 +0.5209568269537417 +0.5088662706425271 +0.4933667719875535 +0.47826175479684213 +0.4688560472093111 +0.4634095005559194 +0.45907722083181535 +0.4546119896262304 +0.44930942607240676 +0.4423139333966859 +0.4323955445509127 +0.4185979996818053 +0.40411402479119535 +0.401957743362858 +0.4195204244642788 +0.4430484029586267 +0.462618065001458 +0.4782641102861628 +0.49225519652393257 +0.5066091818374007 +0.5233467879173332 +0.5452533486929168 +0.5752035281163626 +0.6061647460092116 +0.6119322072294604 +0.5941768829453558 +0.5761388046891737 +0.5630533067595134 +0.5528472936529963 +0.5437105721356389 +0.5347150441215666 +0.5252458403330071 +0.5142814797875918 +0.5001581082646622 +0.4840086120844271 +0.4720741123881303 +0.4654203722736213 +0.46084793982229993 +0.4565318668130636 +0.4516636324937998 +0.4454999764793352 +0.43696455091194225 +0.42478246722397733 +0.4096083895014818 diff --git a/testdata/golden/g_HeadAndShoulders.csv b/testdata/golden/g_HeadAndShoulders.csv new file mode 100644 index 00000000..36f16eff --- /dev/null +++ b/testdata/golden/g_HeadAndShoulders.csv @@ -0,0 +1,81 @@ +HeadAndShoulders +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_HeikinAshi.csv b/testdata/golden/g_HeikinAshi.csv new file mode 100644 index 00000000..1fc29fb5 --- /dev/null +++ b/testdata/golden/g_HeikinAshi.csv @@ -0,0 +1,81 @@ +open,high,low,close +99.5,101,98,99.5 +99.5,104.77731091023225,99.5,103.0164107856682 +101.2582053928341,108.13914959894458,101.2582053928341,106.37627358101629 +103.81723948692519,110.76487377959927,103.81723948692519,109.29790049544098 +106.55756999118309,112.90403177129735,106.55756999118309,111.52846427794583 +109.04301713456445,114.45148509543229,109.04301713456445,112.875521673814 +110.95926940418923,115.1642566915892,110.95926940418923,113.23347255708218 +112.0963709806357,114.55977666009171,110.64086736017657,112.60032201013415 +112.34834649538493,112.72390874531129,109.43899848657534,111.08145361594332 +111.71490005566412,111.71490005566412,107.76539185209613,108.8791967020537 +110.2970483788589,110.2970483788589,104.79904459577605,106.26936898786705 +108.28320868336297,108.28320868336297,101.71978916733775,103.56820817142187 +105.92570842739242,105.92570842739242,99.18732582635697,101.0947104237263 +103.51020942555937,103.51020942555937,97.48620160125755,99.13404459529625 +101.3221270104278,101.3221270104278,96.34710045689485,97.90729114869247 +99.61470907956013,99.61470907956013,95.93821562552817,97.55138116443152 +98.58304512199582,99.67344281002588,96.54876504706593,98.1111039285459 +98.34707452527087,101.15293363552601,97.93278462060415,99.54285912806507 +98.94496682666798,103.20029690993537,98.94496682666798,101.72792025538247 +100.33644354102523,106.32510161131832,100.33644354102523,104.49173065212182 +102.41408709657352,109.54022022493461,102.41408709657352,107.62538078254896 +105.01973393956123,112.56654934841096,105.01973393956123,110.90590746884149 +107.96282070420136,115.26697281350663,107.96282070420136,114.11320078613974 +111.03801074517055,118.47543335247398,111.03801074517055,117.0427452645055 +114.04037800483803,121.38046215528227,114.04037800483803,119.51475165912528 +116.77756483198166,123.36781277048146,116.77756483198166,121.3811006281581 +119.07933273006988,124.2878498649492,119.07933273006988,122.53171006302097 +120.80552139654543,124.22410945235427,120.80552139654543,122.90143777679592 +121.85347958667067,123.88697089091687,121.06827005264091,122.47762047177889 +122.16555002922479,122.98099977052848,119.63330909790388,121.30715443421617 +121.73635223172047,121.73635223172047,117.70285703314954,119.50102880884698 +120.61869052028374,120.61869052028374,115.60101790940676,117.23377096648008 +118.92623074338191,118.92623074338191,113.05795434620948,114.73556192793188 +116.83089633565689,116.83089633565689,110.47704737833695,112.27583959099815 +114.55336796332752,114.55336796332752,108.51535390119264,110.13883479309037 +112.34610137820894,112.34610137820894,107.18792367213928,108.59332241867756 +110.46971189844325,110.46971189844325,106.49671695482826,107.86047934521304 +109.16509562182814,109.90155645208623,106.26786689008574,108.08471167108598 +108.62490364645706,111.30403713029216,107.32068773822765,109.31236243425991 +108.96863304035848,113.29382811110736,108.96863304035848,111.4822566759027 +110.2254448581306,115.76972371414958,110.2254448581306,114.43022978908895 +112.32783732360977,119.15370942824079,112.32783732360977,117.90746386998124 +115.1176505967955,123.33523703654073,115.1176505967955,121.6100951023235 +118.3638728495595,127.14038418498515,118.3638728495595,125.21564025514759 +121.78975655235354,130.20955349568973,121.78975655235354,128.42071556026957 +125.10523605631155,132.45313613345562,125.10523605631155,130.97449658556297 +128.03986632093728,134.3228744433646,128.03986632093728,132.70337320460774 +130.37161976277253,135.053120145851,130.37161976277253,133.52404653447638 +131.94783314862445,135.065460892756,131.8235156308926,133.4444882618243 +132.69616070522437,134.08480947785137,131.0237176510951,132.55426356447325 +132.62521213484882,132.71696973631924,129.29758425495962,131.00727699563942 +131.81624456524412,131.81624456524412,127.07925728332546,129.00074817527417 +130.40849637025914,130.40849637025914,124.94895708842891,126.75407686183011 +128.58128661604462,128.58128661604462,123.1073244542458,124.49034662606454 +126.53581662105458,126.53581662105458,121.2254215875191,122.42184954038225 +124.47883308071842,124.47883308071842,119.02315927992295,120.73959006069859 +122.60921157070851,122.60921157070851,117.62555095473105,119.60563259734175 +121.10742208402513,121.10742208402513,117.25536324735009,119.14667258704391 +120.12704733553451,120.94065716085713,117.95421275941922,119.44743496013818 +119.78724114783634,121.93415307848436,119.152517136663,120.54333510757368 +120.16528812770501,123.94838830624106,120.16528812770501,122.41300180733944 +121.28914496752222,126.75625008370868,121.28914496752222,124.9723861156795 +123.13076554160085,129.80523536741393,123.13076554160085,128.0728922037315 +125.60182887266618,133.06294250948164,125.60182887266618,131.50599292428956 +128.55391089847785,136.79793765689536,128.55391089847785,135.0160376079457 +131.78497425321177,140.0546941334019,131.78497425321177,138.3215327770725 +135.05325351514213,142.5489901806554,135.05325351514213,141.14337574868256 +138.09831463191233,144.5932922665057,138.09831463191233,143.23676289844406 +140.6675387651782,146.0756620034572,140.6675387651782,144.42221413881902 +142.54487645199862,146.57143212166807,142.54487645199862,144.61070035874553 +143.57778840537208,145.7471249168318,141.88968005898082,143.81840248790633 +143.6980954466392,143.72992039092952,140.60631434563564,142.16811736828257 +142.93310640746088,142.93310640746088,138.7454488027266,139.8764867613631 +141.404796584412,141.404796584412,135.67655244818158,137.22863145779047 +139.31671402110123,139.31671402110123,132.66155074344638,134.54392876795973 +136.9303213945305,136.9303213945305,130.25415962109273,132.13813355498985 +134.53422747476017,134.53422747476017,128.70717960530897,130.28751561753393 +132.41087154614706,132.41087154614706,127.6154547134165,129.20009166687123 +130.80548160650915,130.80548160650915,127.39947545719488,128.99752295261356 +129.90150227956136,131.29749357237068,128.12086294416926,129.70917825826996 diff --git a/testdata/golden/g_HeikinAshiOscillator.csv b/testdata/golden/g_HeikinAshiOscillator.csv new file mode 100644 index 00000000..a73e4519 --- /dev/null +++ b/testdata/golden/g_HeikinAshiOscillator.csv @@ -0,0 +1,81 @@ +HeikinAshiOscillator +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.2603038586325478 +-0.22971477074983737 +-0.47419652333367374 +-0.47389581268250686 +-0.2512717572856119 +0.15329160084773533 +0.6868910022142485 +1.2901446933824066 +1.9029485381687865 +2.4692727440047326 +2.9406676473820945 +3.2784951149694486 +3.455167205797046 +3.4547952227509184 +3.2736113770841944 +2.9203486448207308 +2.416516079510151 +1.7962708125256655 +1.1054454303484227 +0.39929686424196315 +-0.26128361694479757 +-0.8150502240504445 +-1.2067473887812363 +-1.3937454107077667 +-1.3519638827123523 +-1.0800408599769915 +-0.6008855939074966 +0.039870476074616794 +0.7785046187808641 +1.5403632703471488 +2.2485504883792746 +2.832871624317509 +3.237723478308697 +3.427827932356933 +3.39110777760319 +3.1385140890160765 +2.7011259250471165 +2.12525111647958 +1.4664847822863094 +0.7836975435242642 +0.13374587239035093 +-0.43261585468467245 +-0.8734994767293598 +-1.1575100762810129 +-1.2646086657077076 +-1.1866091603328575 +-0.9275820776568309 +-0.5042093100179962 +0.054117417738707166 +0.7058519836576325 +1.398960259386399 +2.0740491193972574 +2.669050373325719 +3.1251932880210136 +3.393627285155775 +3.4417670302871146 +3.2583079471484213 +2.855948765199865 +2.271158519392332 +1.5607880973269848 +0.7958610008005166 +0.05337483360824679 +-0.5927001894782721 +-1.0799017451780017 +-1.3640188297243794 +-1.4232108062805398 +-1.2590925682819876 diff --git a/testdata/golden/g_HiLoActivator.csv b/testdata/golden/g_HiLoActivator.csv new file mode 100644 index 00000000..5d16a02a --- /dev/null +++ b/testdata/golden/g_HiLoActivator.csv @@ -0,0 +1,81 @@ +HiLoActivator +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +108.67272128360027 +108.56325570077813 +108.16234397171404 +107.5576506296484 +106.87108347650032 +106.1779595578316 +102.28721973971423 +101.8877806623991 +101.7880948216202 +102.03955412677716 +102.59988736423722 +103.51774426189381 +104.78021564178646 +106.32223310141045 +108.04313056569472 +109.8089283939623 +111.50143507056058 +113.01244164099512 +117.5477502695136 +118.49152688377924 +119.04506475466074 +119.20378585895027 +119.02036956015061 +118.58874591172857 +117.97632613312943 +117.2565814884873 +116.53701115567485 +112.69065658429177 +112.33940317075493 +112.25488053614531 +112.51613676667432 +113.15392395179573 +114.14641246095742 +115.43397800521753 +116.97097268698644 +118.63584138196502 +120.33839809474757 +121.96703147332838 +123.45355935855979 +128.00573160734035 +128.90427022782436 +129.46488121204547 +129.70076059870502 +129.575794684663 +129.13990880907392 +128.4778447851573 +127.72648885265934 +126.9854541285791 +123.11305134176006 +122.72141087098552 +122.64464842012855 +122.92583079898829 +123.60505323737526 +124.66139639653818 +126.00231847340508 +127.54112880816662 +129.2287580450166 +130.96191012389158 +132.62983520234056 +134.1149234911482 +138.5342932231849 +139.42557311505863 +139.9445629297142 +140.09189266273887 +139.92916309922774 +139.48613687002324 diff --git a/testdata/golden/g_HighLowIndex.csv b/testdata/golden/g_HighLowIndex.csv new file mode 100644 index 00000000..cb754047 --- /dev/null +++ b/testdata/golden/g_HighLowIndex.csv @@ -0,0 +1,81 @@ +HighLowIndex +nan +nan +nan +nan +nan +nan +nan +nan +nan +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 diff --git a/testdata/golden/g_HighLowRange.csv b/testdata/golden/g_HighLowRange.csv new file mode 100644 index 00000000..4c49be4f --- /dev/null +++ b/testdata/golden/g_HighLowRange.csv @@ -0,0 +1,81 @@ +HighLowRange +0.03 +0.03404178986437471 +0.033060199107961215 +0.02683489291565083 +0.02471366625159503 +0.02802336739861229 +0.03425244331347451 +0.03494904243535345 +0.029659348825287507 +0.0204792856776392 +0.027634767599225372 +0.035573013317089765 +0.037556257666504056 +0.03308179712239558 +0.03174854189583053 +0.03301448985418448 +0.03187199334024015 +0.03244748976208305 +0.029077563225298798 +0.03525945804805387 +0.03572266870456476 +0.030011200956343694 +0.020221142624183668 +0.024431009013128273 +0.031111591838899336 +0.032601118249248724 +0.028558500833982207 +0.02147213483019983 +0.023001167638506386 +0.027637242438548613 +0.03019062944891362 +0.027971380894437188 +0.029365579596052425 +0.03214291679811242 +0.029517498133711205 +0.025857578877380643 +0.0252103586666107 +0.0334734205248137 +0.03627600918008185 +0.03238413974081806 +0.02336986863490346 +0.02114651847224126 +0.028435726534496584 +0.030851498662265796 +0.027967912056845692 +0.022654572797832676 +0.024456938292434283 +0.022908654925077668 +0.024255785357242675 +0.023023090508809945 +0.02600236225185754 +0.029683006021400355 +0.028409738224262193 +0.02220092260532783 +0.019569336650844555 +0.028516367743743935 +0.0332439502189451 +0.03187796563024796 +0.025080700190433836 +0.023108245021982395 +0.025069555070827167 +0.028478734183252516 +0.02695619098710258 +0.02358938985537583 +0.02631409013694031 +0.025017594011145623 +0.01991847704736739 +0.01897360027842509 +0.022964883954988177 +0.027211310578769476 +0.026906169438027212 +0.02201672660502461 +0.0161793533319727 +0.022590444329369054 +0.027902245000582655 +0.028409842769432953 +0.02417061719078823 +0.024464065956745978 +0.02475082545322675 +0.024511957090087945 diff --git a/testdata/golden/g_HighLowVolumeNodes.csv b/testdata/golden/g_HighLowVolumeNodes.csv new file mode 100644 index 00000000..03424821 --- /dev/null +++ b/testdata/golden/g_HighLowVolumeNodes.csv @@ -0,0 +1,81 @@ +hvn,lvn +nan,nan +nan,nan +104.51802474217867,98.72422497135318 +107.36867266585102,106.01019222035171 +109.94309098265116,108.75871466719266 +111.1412061533575,108.30382420300766 +111.2267596218075,110.51085106366537 +111.61016507405071,110.96396659813462 +111.48373355979457,109.84794550121919 +110.1919578549517,114.0744634595206 +109.89360012047727,105.36510632074285 +108.22017032672409,102.31073290910014 +104.6852763965291,99.79820922304276 +99.18557851002508,103.71725026673847 +98.7238842298237,101.57602475733832 +97.66809846974488,100.4359110204916 +96.73862145077769,96.205017567278 +97.80061491481311,100.78045377766902 +99.87453097850064,97.02387446584231 +99.73113826147147,104.526747970451 +106.22426428775424,104.89788191288208 +109.02791018573753,103.36608752546002 +113.21916606921877,110.48875707683496 +115.17894486561615,109.9045632866436 +117.16994545702758,119.5759549988874 +117.27243337523937,122.813687370914 +120.96844551395874,118.12324178453835 +121.84111917539195,119.74392144148575 +121.52820160477626,121.0264473756539 +121.27288065306473,119.96122340893605 +120.7949139620332,118.1445794515615 +119.29100883996762,116.12815947091546 +116.00125657418624,119.53321924775837 +115.87028236454752,111.07629571013813 +110.2077429601487,112.46426170542347 +108.6636468431793,112.59890863261933 +108.37728792988534,110.63397309995386 +107.06733566332791,109.73223157413513 +107.34704622727283,110.94431068456313 +109.78084750059655,106.76972126301585 +112.75221086560603,107.92419030793636 +113.05747959339188,114.41219733446941 +119.67648661778631,121.13998678528807 +123.39782494453392,124.89484864071441 +123.57231042795752,127.997139139779 +126.56312482821917,127.87201622938282 +131.57608986532344,127.1812345404576 +132.27448859176067,129.89280440254038 +131.93706959304484,131.36827117491552 +131.88980548859385,131.31241359692802 +132.18152257385782,129.70957544337364 +130.58203338058843,133.5844128925281 +128.83296341237408,132.16211169004137 +124.78194901416947,129.24761450729923 +122.79694481202885,126.98767341072154 +123.42686539861172,119.51245995977726 +121.47801801520458,118.05360285033922 +119.11274095953729,122.08454529903682 +118.18329560290773,117.56467403253598 +118.92635961561233,117.58956252100253 +120.95130053283015,122.66392211763637 +120.7818884824585,125.12687873791317 +122.790676749647,125.34142533792588 +126.71510084830436,130.94699528908922 +133.06315600802168,131.5692433484722 +136.44553313543602,130.67087553869058 +139.22225710149132,137.8915638698257 +141.7343919644476,137.16015148115466 +142.9067116600835,140.19046850862026 +142.88549037137219,142.21531914404568 +142.89291264384238,142.22409092060133 +142.7367135513615,141.0323941867808 +140.24580797003486,144.24676574952355 +140.85371755423384,136.25179301552072 +139.21910172502393,133.25769174177162 +135.73551373657554,130.8631989672575 +130.3612782882727,134.77220810950934 +129.90354499037025,132.64925332271474 +128.99532409025343,131.54868190314716 +128.234765053304,131.01906370700098 diff --git a/testdata/golden/g_HighWave.csv b/testdata/golden/g_HighWave.csv new file mode 100644 index 00000000..85a282e8 --- /dev/null +++ b/testdata/golden/g_HighWave.csv @@ -0,0 +1,81 @@ +HighWave +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +1 +1 +1 +0 +0 +0 +0 +1 +1 diff --git a/testdata/golden/g_HighpassFilter.csv b/testdata/golden/g_HighpassFilter.csv new file mode 100644 index 00000000..6bcaef5b --- /dev/null +++ b/testdata/golden/g_HighpassFilter.csv @@ -0,0 +1,81 @@ +HighpassFilter +0 +0 +-0.19618137289058116 +-0.6589660857382711 +-1.3715118603176517 +-2.259529910988562 +-3.2154417432509836 +-4.118516941194851 +-4.8517177637110525 +-5.315409770794055 +-5.437799657885453 +-5.1818681010271 +-4.548622956416597 +-3.576659008307645 +-2.3382313077107666 +-0.9322906141644813 +0.5248433060982406 +1.9103109887056227 +3.1060677095173883 +4.009747977016184 +4.544073712280957 +4.6639721166938095 +4.360774521758229 +3.663128092344179 +2.634545268155776 +1.3678153639527244 +-0.023217799117406734 +-1.4137738716736856 +-2.679242588644061 +-3.7062843443942715 +-4.402931114611428 +-4.706783830907763 +-4.590572697997388 +-4.064582781169332 +-3.1757274283135692 +-2.003351703551977 +-0.6521402440135953 +0.7572372894066868 +2.09890782029586 +3.2530406386230277 +4.116552958942543 +4.6123190767791185 +4.696060585666091 +4.360302239523767 +3.6350401457152697 +2.5850626393055296 +1.3041631855946567 +-0.09323772330091695 +-1.4823132705964643 +-2.738980618698135 +-3.7509847822560904 +-4.427925974252987 +-4.709334707095102 +-4.570073320190927 +-4.022581428825916 +-3.115764712970712 +-1.9306263056456965 +-0.5730310147449362 +0.8357512720305881 +2.1698782702996295 +3.3101764193423975 +4.1547863042099955 +4.628261456011542 +4.688307761841988 +4.3295614730774385 +3.584068333915349 +2.5184210311129034 +1.2278106680715095 +-0.1724763725860532 +-1.557356617972145 +-2.803122838851918 +-3.798494447863367 +-4.454557862864304 +-4.712708892344134 +-4.549887673259134 +-3.9806385398798545 +-3.055810821698133 +-1.8580166242439367 +-0.4942513357219276 +0.9136639523692233 diff --git a/testdata/golden/g_Hikkake.csv b/testdata/golden/g_Hikkake.csv new file mode 100644 index 00000000..3470a6f9 --- /dev/null +++ b/testdata/golden/g_Hikkake.csv @@ -0,0 +1,81 @@ +Hikkake +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_HikkakeModified.csv b/testdata/golden/g_HikkakeModified.csv new file mode 100644 index 00000000..98dd5739 --- /dev/null +++ b/testdata/golden/g_HikkakeModified.csv @@ -0,0 +1,81 @@ +HikkakeModified +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_HilbertDominantCycle.csv b/testdata/golden/g_HilbertDominantCycle.csv new file mode 100644 index 00000000..c604baff --- /dev/null +++ b/testdata/golden/g_HilbertDominantCycle.csv @@ -0,0 +1,81 @@ +HilbertDominantCycle +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +19.84860528104536 +20.15609597776396 +20.500827473493562 +20.860311612807635 +21.21548350269272 +21.557084658282257 +21.883090403023246 +22.19025600171456 +22.46546961159677 +22.682888615198983 +22.809969424687296 +22.820191883818715 +22.70613246798076 +22.48546295093742 +22.195273731848353 +21.87695090524144 +21.56106545372095 +21.262712613564556 +20.989055541576704 +20.750221558647972 +20.56373016620198 +20.450195641478512 +20.42471318347659 +20.4898628642349 +20.6341668415094 +20.83649862254331 +21.07367897756247 +21.32646321065602 +21.58005500424173 +21.819290578534087 +22.0230393073157 diff --git a/testdata/golden/g_HistoricalVolatility.csv b/testdata/golden/g_HistoricalVolatility.csv new file mode 100644 index 00000000..8f9852e6 --- /dev/null +++ b/testdata/golden/g_HistoricalVolatility.csv @@ -0,0 +1,81 @@ +HistoricalVolatility +nan +nan +nan +1.2108770793050565 +1.639551444709694 +1.9276268574493751 +2.073255194612528 +2.0784887806284744 +1.9455859663299904 +1.6767646496094208 +1.2770712214334585 +0.762108984633307 +0.2256705192908266 +0.5976919794732475 +1.2479885175224514 +1.8182567418795708 +2.2143893696518457 +2.3693377279644188 +2.256549645788448 +1.8980496710711017 +1.357501557663045 +0.7244209823172383 +0.19151469548806369 +0.6044582658411939 +1.107654515312006 +1.500368974447654 +1.764761580510996 +1.8969469916055692 +1.8974539518243159 +1.7680939555661772 +1.5118212341988033 +1.1353562093864427 +0.6564553324105433 +0.186666483912715 +0.5851281600754706 +1.1693877705709483 +1.6729830483734724 +2.0159065528523583 +2.1423344186548734 +2.031631612018184 +1.7042766256162758 +1.2158064724896012 +0.644313648997051 +0.17231913791558717 +0.5634443769733517 +1.0249412102270374 +1.386192973685745 +1.6292310430085883 +1.7488739443529158 +1.7446314977580737 +1.6180586302491369 +1.372714322764998 +1.0165791783302895 +0.5690102139990427 +0.16304289243030495 +0.5731530921885 +1.1024456112489536 +1.551510411657372 +1.8513036390175632 +1.9546563406172694 +1.8454233345452618 +1.542878643590869 +1.0963408111261979 +0.5751241711250513 +0.15711653485742924 +0.5315785613159199 +0.9572270115940187 +1.2907953863726909 +1.5145994901242077 +1.6226556353425559 +1.6138043271477425 +1.489476684628267 +1.2537398481261175 +0.9155407239722755 +0.4954782371689187 +0.1515181908072041 +0.5618952458275578 +1.0447143791718267 +1.448341983441248 +1.7124721536487677 diff --git a/testdata/golden/g_Hma.csv b/testdata/golden/g_Hma.csv new file mode 100644 index 00000000..31e5131a --- /dev/null +++ b/testdata/golden/g_Hma.csv @@ -0,0 +1,81 @@ +Hma +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +97.04424902246974 +96.10952865458174 +96.25183651612734 +97.5031241805377 +99.7962813582744 +102.97113065912279 +106.78873576141123 +110.95274488201372 +115.13586299852643 +119.00908813885228 +122.27110014751784 +124.67517671775461 +126.05123236036168 +126.32101163389879 +125.50507947020569 +123.72098417028852 +121.17275716467925 +118.13268749340322 +114.91699903697877 +111.85760317896461 +109.2724501505821 +107.43712748349591 +106.56024259637931 +106.76478851548931 +108.07715727393536 +110.42478238996372 +113.64262101465133 +117.48789671806101 +121.66178598467862 +125.83611122808233 +129.68265591734252 +132.90248318221836 +135.25263895346734 +136.56785432627242 +136.77530853929716 +135.90113383641716 +134.06808115120322 +131.48455513160857 +128.42599797344846 +125.21028498938418 +122.16932975395545 +119.61943525248898 +117.8330394774487 +117.01437935395795 +117.28124686354711 +118.65446703725743 +121.05603771764041 +124.31609725917262 +128.1880977631597 +132.37082846724502 +136.53532200572985 +140.35424008460365 +143.53111363645243 +145.82682551929142 +147.0809701387077 +147.22618200188097 +146.29415327642573 +144.41280282344565 +141.7948495866455 +138.71881104262076 +135.5041240641679 +132.4826105758012 +129.9688368894846 +128.23201443284165 diff --git a/testdata/golden/g_HoltWinters.csv b/testdata/golden/g_HoltWinters.csv new file mode 100644 index 00000000..c276a2d2 --- /dev/null +++ b/testdata/golden/g_HoltWinters.csv @@ -0,0 +1,81 @@ +HoltWinters +nan +106.91040413322679 +110.22041753023815 +113.1744889882079 +115.55238069246471 +117.16473450645604 +117.88136172493871 +117.64902061011094 +116.49939968197846 +114.54789267234362 +111.98400517706914 +109.05465981249124 +106.04212017217228 +103.23863268436659 +100.92012135389054 +99.3213228358679 +98.61460267479156 +98.89435475189048 +100.16838178292615 +102.3570281627906 +105.30014241747739 +108.77124636760549 +112.49764402119108 +116.18467253349252 +119.54192759219795 +122.30911929495609 +124.27924769727397 +125.31702674634417 +125.37090987382217 +124.47764216888066 +122.75893172638463 +120.41053682189744 +117.68474311429726 +114.86779559513295 +112.25430074290627 +110.12088503777115 +108.70146246780767 +108.16631997464607 +108.6068887791972 +110.0275616592816 +112.3452868869525 +115.39697489393058 +118.95405586926834 +122.74288774262544 +126.46919142737399 +129.84433047087737 +132.61108751826964 +134.56663495694534 +135.58064775571737 +135.60694045585723 +134.6875887482838 +132.94916740851568 +130.59144059019968 +127.86951469247647 +125.07104799067042 +122.49055278919602 +120.40308557614635 +119.0396753307727 +118.56668487436697 +119.07094883094742 +120.55201575940197 +122.92218742657049 +126.01435169740847 +129.5969093395776 +133.39446136315863 +137.11240894614957 +140.46326849802864 +143.19235120659465 +145.1005131830931 +146.06194399623598 +146.03540459243337 +145.0679107470564 +143.2905330103661 +140.90668832232706 +138.1739691678548 +135.3811334167269 +132.8223102743858 +130.77072644670898 +129.45429947996993 +129.03527844827082 diff --git a/testdata/golden/g_HomingPigeon.csv b/testdata/golden/g_HomingPigeon.csv new file mode 100644 index 00000000..f8a9148e --- /dev/null +++ b/testdata/golden/g_HomingPigeon.csv @@ -0,0 +1,81 @@ +HomingPigeon +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_HtDcPhase.csv b/testdata/golden/g_HtDcPhase.csv new file mode 100644 index 00000000..1c09f3f8 --- /dev/null +++ b/testdata/golden/g_HtDcPhase.csv @@ -0,0 +1,81 @@ +HtDcPhase +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +145.7446610787406 +158.9067951586361 +164.8758461206464 +177.46482217077613 +189.94433713529133 +196.66172748929935 +209.5331877175866 +222.4816691859349 +235.61627434731952 +242.6506643320874 +255.94821315500553 +270.0455692464835 +285.7658387776771 +-41.79288280357116 +-16.213808561487326 +12.613020602827419 +40.790873540614825 +72.36708327679753 +91.75135067531025 +108.90872079076513 +124.46224451469178 +145.98582722011605 +159.40399892179036 +172.13463904952619 +178.37153622320665 +190.9678457889671 +203.56358525094748 +216.3184989963996 +223.68223768958615 +236.84624052798523 +250.4105503719851 diff --git a/testdata/golden/g_HtPhasor.csv b/testdata/golden/g_HtPhasor.csv new file mode 100644 index 00000000..f30e4a01 --- /dev/null +++ b/testdata/golden/g_HtPhasor.csv @@ -0,0 +1,81 @@ +inphase,quadrature +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +-3.4194743950682107,0.9300857692576248 +-2.665942545423593,1.49684059365119 +-1.6019842395412127,1.9298871057812015 +-0.32263970415044185,2.190542550440388 +1.0578110236116813,2.255523353054748 +2.4160563915632283,2.119024972055894 +3.6307683861810056,1.7932404012919623 +4.5934404027032425,1.3072710062010124 +5.218079816973131,0.7045269855076013 +5.44888945044704,0.03884966745714196 +5.265251765975809,-0.6444770169011927 +4.683570570994111,-1.3401619564119618 +3.755805714256918,-1.9306215082207492 +2.6613370532768963,-2.471266227331281 +1.322726244492126,-3.0175165194568967 +-0.1907617812821959,-3.4043568192556277 +-1.757818722826746,-3.548380039020859 +-3.2386943791722165,-3.348412262748095 +-4.484321228003876,-2.724612367746162 +-5.347361430080486,-1.6181369988280683 +-5.694659346758241,0.0006946726094663634 +-5.4203864294299,2.0885849289631406 +-4.4589747073703405,4.428355357994453 +-2.7967688278569796,6.6925097548577686 +-0.47393759441404437,8.368580927806578 +2.2622061856333753,9.008860150065475 +5.049065490896074,8.519494013089888 +7.500111693740454,7.074005291880749 +9.34885152443382,5.010870308886203 +10.490411944287734,2.621186084884627 +10.89465306353078,0.052293869863007096 +10.528896541254491,-2.603489316544948 +9.3856518624304,-5.180520383256194 +7.538468551234105,-7.445586136394753 +5.1382661441759705,-9.172445985953884 +2.3794315525373526,-10.175811598432318 +-0.5157896303450838,-10.31035989728936 +-3.295973470022199,-9.486214094923843 +-5.695502779190025,-7.710272542745025 +-7.47225486877235,-5.107799198354729 +-8.443481678614782,-1.9074598277602113 +-8.502800117173145,1.584318540754384 +-7.623616741583871,5.003466524524093 +-5.863008333797842,7.95638169301209 +-3.3708585172124605,10.078610403375171 +-0.39139611673172575,11.119572248836597 +2.7616485980767145,11.006920821541803 +5.758478240354275,9.845888213170658 +8.312823176265647,7.85846080193415 +10.216563113679324,5.3053815768740735 +11.338344328066283,2.4333839665213035 +11.607799260780379,-0.5339718914839366 +11.014464699726647,-3.3816678010785535 +9.62044020649672,-5.904677536838901 +7.560471369736373,-7.930999219350576 +5.0193845352724225,-9.334687054958719 +2.204760869216776,-10.0240627620174 +-0.6666984525271025,-9.925441012491884 +-3.370115351947886,-8.988433806335973 +-5.675652799551531,-7.216146766871635 +-7.366123516746621,-4.69963016657602 +-8.266743451543944,-1.6326427439775217 diff --git a/testdata/golden/g_HtTrendMode.csv b/testdata/golden/g_HtTrendMode.csv new file mode 100644 index 00000000..96413fe1 --- /dev/null +++ b/testdata/golden/g_HtTrendMode.csv @@ -0,0 +1,81 @@ +HtTrendMode +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +1 +1 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0 +1 +1 +1 diff --git a/testdata/golden/g_HurstChannel.csv b/testdata/golden/g_HurstChannel.csv new file mode 100644 index 00000000..7a6a7097 --- /dev/null +++ b/testdata/golden/g_HurstChannel.csv @@ -0,0 +1,81 @@ +upper,middle,lower +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +142.43897548923832,107.082865308575,71.72675512791169 +144.59462365481113,106.96031118542241,69.32599871603371 +145.0030716573113,106.55098952518925,68.0989073930672 +144.3882094557178,105.93612732359576,67.4840451914737 +143.66739403289267,105.21531190077062,66.76322976864856 +142.9496771946618,104.49759506253974,66.04551293041769 +142.34383395951772,103.89175182739567,65.43966969527361 +140.73968594718195,103.49656387805487,66.25344180892779 +136.96338192750358,103.39199568793734,69.8206094483711 +142.28956590886727,103.63205153291037,64.97453715695346 +149.3143869040551,104.23995145016349,59.165515996271864 +156.09055012094973,105.20605706144154,54.32156400193334 +161.34792683057526,106.48873254066868,51.629538250762096 +164.71733229713175,108.01806381828972,51.318795339447675 +166.40137227572393,109.7021037968819,53.00283531803986 +168.13435419036813,111.4350857115261,54.735817232684056 +168.58504059568355,113.10687095991703,57.6287013241505 +167.32291794437685,114.61278745568676,61.90265696699667 +163.92759220237946,115.86297967414018,67.7983671459009 +160.04941552271148,116.79043517866376,73.53145483461603 +154.51158769168006,117.35697064210828,80.2023535925365 +149.10163457719665,117.55664264968355,86.01165072217044 +151.61613099212053,117.41627860650068,83.21642622088085 +152.5753461456141,116.99308032537222,81.41081450513035 +152.40948030896186,116.36951435923494,80.32954840950804 +151.68591145930912,115.64594550958222,79.60597955985531 +150.971637487385,114.93167153765809,78.89170558793118 +150.2476450454987,114.33515992096163,78.42267479642457 +149.19256677818754,113.9543587765253,78.71615077486304 +148.00268774024445,113.86794744733447,79.73320715442449 +155.87334290074438,114.12830831094557,72.38327372114675 +162.6402208289146,114.75684761770661,66.87347440649863 +168.11262182090675,115.742083334167,63.37154484742726 +173.15068590548697,117.04067079892921,60.930655692371474 +176.15178108369062,118.58127457216008,61.010768060629545 +177.8661286233169,120.2709406179764,62.67575261263589 +179.59858761697018,122.00339961162967,64.40821160628917 +181.2637476671299,123.66855966178939,66.07337165644888 +180.6518868003708,125.16234049131411,69.67279418225742 +177.18552192254725,126.39597061843133,75.60641931431542 +171.25336710627585,127.30391704882051,83.35446699136519 +164.6582243048905,127.84973914282192,91.04125398075332 +160.1139469749142,128.0293437492481,95.94474052358203 +162.75117071043894,127.87135083438908,92.9915309583392 +163.05473223647277,127.43453694566097,91.81434165484916 +162.4227801684886,126.80258487767678,91.18238958686497 +161.69680382824373,126.07660853743191,90.4564132466201 +160.98631603094674,125.36612074013492,89.74592544932311 +160.3994460463934,124.7792507555816,89.15905546476979 +158.0719779035228,124.41308544252024,90.75419298151769 +155.96015529297182,124.34499676870873,92.72983824444562 +163.7108792225584,124.62573040346784,85.5405815843773 +170.8735345302779,125.27487275817427,79.67621098607063 +176.8663552570761,126.27910139046546,75.69184752385482 +182.2692330966496,127.59337505833837,72.91751702002715 +186.7855546323677,129.14495712015346,71.50435960793922 +189.4720506308403,130.83991288220435,72.20777513356839 +191.20363825378143,132.57150050514548,73.93936275650952 +191.4641446590945,134.2297059345968,76.99526721009912 +190.5489000989824,135.71107012897224,80.87324015896209 +188.31556437399772,136.92793074753726,85.5402971210768 +184.58207271426198,137.81625276622648,91.05043281819098 +178.80311469886897,138.34134853563094,97.87958237239292 +174.22948135812942,138.50097632541122,102.77247129269301 +176.23749538789545,138.3255405713923,100.41358575488917 +176.2192892668097,137.87537593786334,99.53146260891697 +175.5792711306549,137.23535780170852,98.89144447276215 diff --git a/testdata/golden/g_HurstExponent.csv b/testdata/golden/g_HurstExponent.csv new file mode 100644 index 00000000..cfe65d71 --- /dev/null +++ b/testdata/golden/g_HurstExponent.csv @@ -0,0 +1,81 @@ +HurstExponent +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan diff --git a/testdata/golden/g_Ichimoku.csv b/testdata/golden/g_Ichimoku.csv new file mode 100644 index 00000000..bdeaf984 --- /dev/null +++ b/testdata/golden/g_Ichimoku.csv @@ -0,0 +1,81 @@ +tenkan,kijun,senkou_a,senkou_b,chikou +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +106.5821283457946,nan,nan,nan,nan +108.20988367634669,nan,nan,nan,nan +109.8888271273386,nan,nan,nan,nan +108.44202292946348,nan,nan,nan,nan +107.17579125897308,nan,nan,nan,nan +106.32522914642337,nan,nan,nan,nan +105.75567857424203,nan,nan,nan,nan +105.24899614280994,nan,nan,nan,nan +104.33106218541974,nan,nan,nan,nan +102.96560858876973,nan,nan,nan,nan +101.83895450274312,nan,nan,nan,nan +101.13165861842324,nan,nan,nan,nan +102.7392179252314,nan,nan,nan,nan +104.25238248696957,nan,nan,nan,nan +105.6025942195174,nan,nan,nan,nan +107.20682448900108,nan,nan,nan,nan +108.96461360117411,nan,nan,nan,nan +110.6502986955428,109.65301419800483,nan,nan,100 +112.27169673288938,110.11303274523868,nan,nan,103.4552020666134 +113.47310477893726,110.11303274523868,nan,nan,106.64642473395035 +114.99919560255626,110.11303274523868,nan,nan,109.33326909627483 +116.76655772711061,110.11303274523868,nan,nan,111.32039085967226 +118.62363931186104,110.11303274523868,nan,nan,112.47494986604055 +119.94443388717798,110.11303274523868,nan,nan,112.73847630878196 +118.67290210557934,110.11303274523868,nan,nan,112.13209366648874 +117.38244862164308,110.11303274523868,nan,nan,110.75463180551151 +116.40160188307092,110.11303274523868,nan,nan,108.7737988023383 +115.70601656224677,110.11303274523868,nan,nan,106.41120008059868 +115.19184392287256,110.11303274523868,nan,nan,103.92254305856751 +114.62443333030711,110.11303274523868,nan,nan,101.57479556705148 +113.78353373731508,110.11303274523868,nan,nan,99.62233840816026 +112.56719545681958,110.11303274523868,nan,nan,98.28424227586412 +111.34051819987002,110.11303274523868,nan,nan,97.72469882334903 +112.71078815916326,110.41830745600757,nan,nan,98.0383539116416 +114.80155196331324,111.11031724277667,nan,nan,99.24185317672267 +116.70412553753545,113.69796389290735,nan,nan,101.27235512444012 +118.23871019288774,116.43395659430753,nan,nan,103.99314457402363 +119.36050151177068,119.08183873680946,nan,nan,107.20584501801073 +120.82178109079612,120.29537066672518,nan,nan,110.6681390048435 +122.36190269327452,120.66049351796838,nan,nan,114.11541363513378 +124.07809837839216,120.66666389142087,nan,nan,117.28439764388199 +125.86333960223885,120.66666389142087,nan,nan,119.93667863849153 +127.47520703043114,120.66666389142087,110.15165644677381,nan,121.87999976774739 +129.178178609033,120.66666389142087,111.19236473906403,nan,122.98543345374605 +130.00720899059246,120.66666389142087,111.79306876208797,nan,123.19889810845086 +129.08639267350088,120.66666389142087,112.55611417389747,nan,122.5459890808828 +128.14544124013753,120.66666389142087,113.43979523617465,nan,121.12969230082183 +127.04431008633946,120.66666389142087,114.36833602854986,nan,119.12118485241757 +126.34550592374353,120.66666389142087,115.02873331620833,nan,116.74454423507063 +125.67008636260073,120.66666389142087,114.39296742540901,nan,114.2567321877702 +124.98616649183467,120.66666389142087,113.74774068344088,nan,111.92464106224679 +124.0888011572865,120.66666389142087,113.2573173141548,nan,110.00125312406458 +122.9072799412907,120.66666389142087,112.90952465374272,nan,108.7030424002833 +122.00580666552938,120.66666389142087,112.65243833405563,nan,108.19063769933508 +123.53029930738201,120.66666389142087,112.3687330377729,nan,108.55447411796011 +125.15915287841587,121.19307431549183,111.94828324127688,nan,109.80671474335324 +127.02665045212272,123.23431144879669,111.34011410102913,nan,111.88016416080967 +128.655028690376,126.57271499871513,110.72677547255435,nan,114.63427081999565 +130.25160147003731,129.60510424618855,111.56454780758541,nan,117.86768208634197 +131.87290470158433,130.92432775692788,112.95593460304497,nan,121.33623047221137 +133.4766386559475,131.66551262540366,115.2010447152214,nan,124.77474439137693 +134.87997713465919,131.91339768450908,117.33633339359764,nan,127.92073514707224 +136.45599058085855,131.91339768450908,119.22117012429007,nan,130.5378442655162 +138.26023773038276,131.91339768450908,120.55857587876065,nan,132.43695669444105 +139.90278484033203,131.91339768450908,121.51119810562145,nan,133.49309388747918 +141.12399228492484,131.91339768450908,122.3723811349065,nan,133.65657776549278 +139.6164914325572,131.91339768450908,123.26500174682985,nan,132.95746831142935 +138.4127958713804,131.91339768450908,124.070935460926,nan,131.50287840157117 +137.63930586348852,131.91339768450908,124.92242125022693,115.50183825914209,129.46740573130614 +137.0934434175423,131.91339768450908,125.33693644100666,115.50183825914209,127.07753652299444 +136.57330018701333,131.91339768450908,124.87652828246087,115.50183825914209,124.59141418625812 +135.56469792406222,131.91339768450908,124.40605256577919,115.50183825914209,122.27578013601534 diff --git a/testdata/golden/g_IdenticalThreeCrows.csv b/testdata/golden/g_IdenticalThreeCrows.csv new file mode 100644 index 00000000..ecca7b2f --- /dev/null +++ b/testdata/golden/g_IdenticalThreeCrows.csv @@ -0,0 +1,81 @@ +IdenticalThreeCrows +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_ImbalanceBars.csv b/testdata/golden/g_ImbalanceBars.csv new file mode 100644 index 00000000..1e09ce57 --- /dev/null +++ b/testdata/golden/g_ImbalanceBars.csv @@ -0,0 +1,81 @@ +bars + + + + + +99,114.45148509543229,98,112.47494986604055,5,1 + + + + + + +113.7284688053824,115.1642566915892,99.18732582635697,101.57479556705148,-5,-1 + + + + + + + + + + +98.64575078243223,118.47543335247398,95.93821562552817,117.28439764388199,5,1 + + + + + + + + + + + + +119.09282467975903,124.2878498649492,106.49671695482826,108.19063769933508,-5,-1 + + + + +107.61494922421186,119.15370942824079,106.26786689008574,117.86768208634197,5,1 + + + + +121.88395973243564,134.3228744433646,119.88495316810628,132.43695669444105,5,1 + + + + + + + + +133.5549991814736,135.065460892756,119.02315927992295,120.38214657630877,-5,-1 + + + + + + + + +120.08693553049852,136.79793765689536,117.25536324735009,135.43314928819893,5,1 + + + + +138.08766685694894,146.57143212166807,136.58837142074304,144.11152724502116,5,1 + + + + +144.27024859045207,145.7471249168318,132.66155074344638,134.9266357939324,-5,-1 + + + + + diff --git a/testdata/golden/g_InNeck.csv b/testdata/golden/g_InNeck.csv new file mode 100644 index 00000000..3f877863 --- /dev/null +++ b/testdata/golden/g_InNeck.csv @@ -0,0 +1,81 @@ +InNeck +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Inertia.csv b/testdata/golden/g_Inertia.csv new file mode 100644 index 00000000..1cfd4c06 --- /dev/null +++ b/testdata/golden/g_Inertia.csv @@ -0,0 +1,81 @@ +Inertia +nan +nan +nan +nan +nan +nan +nan +nan +-0.32527861921401247 +-0.29937148143131653 +-0.1966123511005061 +-0.03424856147013358 +0.12362001167253622 +0.24697652778973817 +0.32164390652112107 +0.3239763395808253 +0.2371108165123203 +0.08764731367249243 +-0.08332315484484881 +-0.23318255250706182 +-0.3227258838260747 +-0.329698888488723 +-0.2642840692059935 +-0.12870647173747474 +0.04550877875237863 +0.192857329988609 +0.2872378173123019 +0.32656488429779407 +0.29558253223553954 +0.17868991647013546 +0.016007605119733148 +-0.14215137053123672 +-0.26952471727054833 +-0.3352645386170915 +-0.3147983607021423 +-0.21426485197828277 +-0.05730454526888526 +0.11616954999238427 +0.2517912918751436 +0.3181646647568727 +0.3183679954529428 +0.24801370938574852 +0.10424842828119038 +-0.06285549394228412 +-0.20121225211912025 +-0.29904301013631696 +-0.3350073594476015 +-0.2863204736197038 +-0.15682872954576343 +0.010749710681139946 +0.17359751261156547 +0.29238664651093865 +0.333900901137653 +0.29828671683301716 +0.1911307343617521 +0.02740752397139623 +-0.1373689463825491 +-0.25431531902365934 +-0.3170807887543129 +-0.31668659930785714 +-0.23434278927165794 +-0.08379105199040954 +0.07998748870561406 +0.22340417000141755 +0.3186970231976045 +0.33537680321151186 +0.26641508753458687 +0.12914307394273905 +-0.045207952397253615 +-0.20180871013252372 +-0.29791343148941885 +-0.3252808893607584 +-0.28709594868688876 +-0.1711222702203027 +-0.005084620698676545 +0.14733724463054076 +0.2638931498887199 +0.32821927878502105 +0.31616657533006 +0.21554147678710647 diff --git a/testdata/golden/g_InformationRatio.csv b/testdata/golden/g_InformationRatio.csv new file mode 100644 index 00000000..b4b33ad1 --- /dev/null +++ b/testdata/golden/g_InformationRatio.csv @@ -0,0 +1,81 @@ +InformationRatio +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.13231264988407043 +0.11212737773222785 +0.06360321661117962 +-0.005463216817515649 +-0.0725852194235697 +-0.11699504605045782 +-0.13290586581083913 +-0.1207462755709641 +-0.08005506053179323 +-0.015066594992522239 +0.05525999407295756 +0.10728832190435482 +0.13126466351411312 +0.12705644534268737 +0.09444575379974425 +0.035125718032078604 +-0.03635002563791013 +-0.09527243382406399 +-0.12737488956484075 +-0.1310876314953699 +-0.10660448443436187 +-0.054119895454932315 +0.01634088890334984 +0.08101741121517365 +0.12120813727006613 +0.1328687961172426 +0.11645628446112812 +0.0715560035450733 +0.004178143733166303 +-0.06468719542480379 +-0.11273418965755916 +-0.13241520865046416 +-0.12398996248635069 +-0.08707025046074951 +-0.024565841111823528 +0.04656666091730509 +0.10194101817150857 +0.1297228369587133 +0.12922782776410544 +0.10042942601680552 +0.044194592102536935 +-0.027073742858425343 +-0.08886184090710982 +-0.12476976872508229 +-0.13220134463440716 +-0.11151148911287238 +-0.06251228392818804 +0.006747613043944589 +0.07360681034526889 +0.11752474133089605 +0.13293421019072088 +0.12027538549205154 +0.07908461472364542 +0.013790445467384782 +-0.05639385621029537 +-0.10796311544132559 +-0.13143291324686174 +-0.126729095635527 +-0.09361032014280458 +-0.03389721475495768 +0.03757000298219025 +0.09609033284031297 +0.12768443647131605 +0.1309018113440137 +0.10591161109357897 +0.05297366485616294 +-0.017613172684014848 diff --git a/testdata/golden/g_InitialBalance.csv b/testdata/golden/g_InitialBalance.csv new file mode 100644 index 00000000..5197b84b --- /dev/null +++ b/testdata/golden/g_InitialBalance.csv @@ -0,0 +1,81 @@ +high,low +101,98 +104.77731091023225,98 +108.13914959894458,98 +110.76487377959927,98 +112.90403177129735,98 +114.45148509543229,98 +115.1642566915892,98 +115.1642566915892,98 +115.1642566915892,98 +115.1642566915892,98 +115.1642566915892,98 +115.1642566915892,98 +115.1642566915892,98 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 +115.1642566915892,97.48620160125755 diff --git a/testdata/golden/g_InstantaneousTrendline.csv b/testdata/golden/g_InstantaneousTrendline.csv new file mode 100644 index 00000000..621b610e --- /dev/null +++ b/testdata/golden/g_InstantaneousTrendline.csv @@ -0,0 +1,81 @@ +InstantaneousTrendline +100 +101.72760103330671 +103.38920721679429 +106.52033015769723 +109.15833844654307 +111.11225017041497 +112.77659345987408 +113.97948974717067 +114.59985047126017 +114.57684807290337 +113.91419271103365 +112.67880628523989 +110.99398950428592 +109.02767283046842 +106.97678400073045 +105.04911406819662 +103.44428937826314 +102.33553849651204 +101.85387359138272 +102.07609138601237 +103.0176587107183 +104.6311123138751 +106.81011083663186 +109.39877267134939 +112.20546185818169 +115.01978736617625 +117.63129451213726 +119.8481765029917 +121.51433262189745 +122.52324755329704 +122.82745054588042 +122.44270816349268 +121.4465749884825 +119.97143078538532 +118.19262527510801 +116.31278880772307 +114.54370981000125 +113.08739732180956 +112.11801980234058 +111.76633317552123 +112.10798878172743 +113.15676536894514 +114.86332944668268 +117.1196345280784 +119.76856611004152 +122.61797068043504 +125.45781545098453 +128.07894587487684 +130.29176529871074 +131.9431680677489 +132.930213429067 +133.20931872217332 +132.80015060409912 +131.7838666722381 +130.2958645167832 +128.513685875081 +126.64115634527464 +124.89017738694568 +123.46179705416128 +122.52825033801007 +122.21757338594725 +122.6021659507207 +123.69232373994753 +125.43531839260531 +127.72010725710103 +130.38725225336157 +133.24316179044894 +136.0773835464032 +138.68140339332797 +140.86727121190802 +142.48438980354967 +143.43296719382505 +143.67293067062258 +143.22750629047493 +142.18114410467206 +140.67197443703196 +138.87946907028743 +137.0084095294642 +135.27059452681343 +133.8659205869623 diff --git a/testdata/golden/g_IntradayIntensity.csv b/testdata/golden/g_IntradayIntensity.csv new file mode 100644 index 00000000..0f8be409 --- /dev/null +++ b/testdata/golden/g_IntradayIntensity.csv @@ -0,0 +1,81 @@ +IntradayIntensity +333.3333333333333 +254.1363429515297 +159.21218026367208 +25.471262948610985 +-162.11468557280506 +-275.5639865580575 +-280.2653200383195 +-262.50665874730413 +-218.8735932352261 +-103.84408831900444 +105.23375544225493 +207.1947618477897 +268.6994158475546 +311.5985125766722 +249.69931258968683 +108.95566116502461 +-46.836630492806 +-191.72894742709258 +-323.09994717772975 +-288.58996487537496 +-235.67842080969552 +-155.65775525995696 +2.100435879651156 +185.4312611006018 +248.6762296496047 +275.1982924441101 +281.1893417468346 +242.2725273795776 +51.57304408996733 +-110.94636927288005 +-217.14131571791896 +-302.1226541074004 +-288.7507591088784 +-201.32387334871783 +-88.93222193135111 +83.19947463053064 +261.3079552562619 +281.79643282662227 +272.2340363424082 +241.58046628196655 +167.39754796144638 +-34.92423888509019 +-172.31571826164188 +-245.88991850588297 +-295.848559948963 +-307.47694390172535 +-168.1719401970612 +-20.292897128175646 +133.12179835820857 +273.09298973661515 +305.6474161932076 +259.85953888632343 +194.02397184079686 +79.82072051333861 +-134.06397022724687 +-229.07272881151164 +-266.87336173284945 +-281.35196443601916 +-271.09489863939 +-130.0610520157447 +52.92744369611483 +176.82798574591337 +268.39107074462714 +321.0824376772539 +239.50177548911014 +140.60560160823164 +-5.002377587476302 +-194.38935986935482 +-278.65293252471673 +-278.61019779808186 +-257.4794083277237 +-206.95474896026698 +-62.03178317596654 +127.46867772081514 +219.3363825109581 +277.0703482141019 +316.87194783962406 +226.2879351762863 +84.32668869816054 +-72.45507985685082 diff --git a/testdata/golden/g_IntradayMomentumIndex.csv b/testdata/golden/g_IntradayMomentumIndex.csv new file mode 100644 index 00000000..e6f2d5be --- /dev/null +++ b/testdata/golden/g_IntradayMomentumIndex.csv @@ -0,0 +1,81 @@ +IntradayMomentumIndex +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +57.476921203536904 +56.33693541707007 +53.6564872063453 +49.67704045547719 +45.867744842366164 +43.42129710918247 +42.52307879646297 +43.211265651787336 +45.45808717118086 +49.10431770733598 +53.22189691226958 +56.11809366347835 +57.476921203536996 +57.23544397261692 +55.40209016924108 +52.08012776192419 +47.848644534883526 +44.54958931670427 +42.74331195582879 +42.53017141667933 +43.91756993714093 +46.84067803758888 +50.971504789446385 +54.59605087239636 +56.816620809171056 +57.47692120353693 +56.55050820333205 +54.077004765336625 +50.246905457047404 +46.28671482239088 +43.63432291345263 +42.52307879646299 +43.00234072320444 +45.053918278757706 +48.545713119857886 +52.727717062227846 +55.81071922853358 +57.37771196592039 +57.349327957099526 +55.726556664030895 +52.593499887361894 +48.39807901973505 +44.94657736477512 +42.94656584214307 +42.52307879646294 +43.691899681651975 +46.400560272435015 +50.39906431259461 +54.18734042062085 +56.60684447745997 +57.47692120353696 +56.760828263575334 +54.48767744845688 +50.81895394212537 +46.719166386973406 +43.85233925901189 +42.5230787964632 +42.79267397004157 +44.65161298392784 +47.99339415495049 +52.22007935700518 +55.49322190756392 +57.27100105641366 +57.45564848652203 +56.04074538901707 +53.09327528652761 +48.953811169643835 diff --git a/testdata/golden/g_IntradayVolatilityProfile.csv b/testdata/golden/g_IntradayVolatilityProfile.csv new file mode 100644 index 00000000..6af6ea46 --- /dev/null +++ b/testdata/golden/g_IntradayVolatilityProfile.csv @@ -0,0 +1,81 @@ +profile +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.002620254995739237,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.004712668651562525,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0071373411106064304,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.009736062303526107,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.012359827979438446,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.014869931245072498,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.017138108908942195,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01904812946289669,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.02050094187523742,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.02142514708916723,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.021793565300101406,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.02164422502836288,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.021099226306444573,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.020367343528465007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.019709579897858216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01935572296867032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.019403231441248392,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.019776533048703925,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.020286847071464876,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.020735782023100315,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.020987596694631194,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.02099123370911996,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.020770603888085708,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.02040245914068176,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.019991068535450726,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.019642055584813533,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01943664472122203,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.019410657139425587,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.019545450751559446,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01977551615044854,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.020010223757878746,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.020161849587524285,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.020171942068733274,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.020030041540628166,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.019779226379066234,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01950325190107801,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.019294825468539507,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0192159720933167,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.019271766590044054,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.019413474765477376,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01956637427037403,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01966244437516999,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01966186939510932,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01955960308619284,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.019380879429202018,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.019170599915962552,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.018979951868866248,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.018852526421644766,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.018812396720935813,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.018857190891470532,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01895868072312464,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01907128947671058,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01914628551045655,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.019147646936441793,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01906487312148049,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.018918008819742305,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.018751370835068833,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.018616294298371177,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.018549443915009064,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01855769231927336,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01861771875450166,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01868908227099608,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01873192555472436,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0187205807908882,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.018649420306147062,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.018531706986904994,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01839381431135032,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.018267031160766094,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01817874132645652,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01814472426062397,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.018164443507137563,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.018220875638613087,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01828536623765571,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.018326479767938067,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01832042503590735,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.018259757221959126,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.018156905073410723,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01804014715942914,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/testdata/golden/g_InverseFisherTransform.csv b/testdata/golden/g_InverseFisherTransform.csv new file mode 100644 index 00000000..bcb221d6 --- /dev/null +++ b/testdata/golden/g_InverseFisherTransform.csv @@ -0,0 +1,81 @@ +InverseFisherTransform +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 diff --git a/testdata/golden/g_InvertedHammer.csv b/testdata/golden/g_InvertedHammer.csv new file mode 100644 index 00000000..562958fc --- /dev/null +++ b/testdata/golden/g_InvertedHammer.csv @@ -0,0 +1,81 @@ +InvertedHammer +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_JarqueBera.csv b/testdata/golden/g_JarqueBera.csv new file mode 100644 index 00000000..862b052b --- /dev/null +++ b/testdata/golden/g_JarqueBera.csv @@ -0,0 +1,81 @@ +JarqueBera +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +1.2352177527425992 +1.1676857777285774 +1.3872952000667245 +1.5875275697068034 +1.6619013823216882 +1.5791093275377237 +1.3735027834325526 +1.1630441991807545 +1.2318841792099666 +1.126634559638478 +1.7188120653498946 +1.8081664845917613 +1.6414908993391153 +1.538942220680502 +1.5048721286786337 +1.5065513860740445 +1.5462475290830897 +1.6586187006657669 +1.8221507823144383 +1.665477626186974 +1.0960390487004994 +1.2359253107226642 +1.1738820150954095 +1.400887600207623 +1.5955488856760254 +1.6613839290041124 +1.5703051914439363 +1.359535721769023 +1.1600564851954769 +1.2258717885346535 +1.1483513390262627 +1.7416944268321448 +1.8001392301551162 +1.6333394484588633 +1.5356185579235726 +1.5041868371033988 +1.5075528114664685 +1.5502460793195265 +1.667570108860799 +1.8278705404062885 +1.6352063242184822 +1.0874480301348053 +1.2341789593483294 +1.1815093754062895 +1.41425938994456 +1.6031622365627598 +1.6603499868323022 +1.561126091587314 +1.3454252467657093 +1.1587891976210756 +1.2172581822230377 +1.1739722517797317 +1.7620048299106734 +1.7915678170967588 +1.6254748073486138 +1.5325029451528709 +1.5036001439242628 +1.5086677444613794 +1.5544863617201665 +1.6767578199151 +1.8325723923235764 +1.602732822347308 +1.083313610523131 +1.2302534923798945 +1.1904278264505421 +1.4273937667498269 +1.610356674878489 diff --git a/testdata/golden/g_Jma.csv b/testdata/golden/g_Jma.csv new file mode 100644 index 00000000..0d20742b --- /dev/null +++ b/testdata/golden/g_Jma.csv @@ -0,0 +1,81 @@ +Jma +100 +101.36584241686228 +103.8405483723897 +106.69819224779748 +109.32567052844614 +111.32786262238199 +112.49097823497682 +112.73621771168217 +112.08945839247329 +110.66197111197671 +108.63422768559371 +106.2381926524314 +103.73669442117509 +101.40046465041296 +99.48445543531021 +98.20543906351286 +97.72289455885762 +98.12491982434376 +99.42045845198402 +101.53855833781608 +104.3347435012746 +107.60393947418719 +111.09880347456013 +114.55182544138952 +117.699227743085 +120.30452985478139 +122.17967372944291 +123.20182319357046 +123.32433695665642 +122.58093518008842 +121.08268749423547 +119.00809155883877 +116.58712844445535 +114.08071913466614 +111.75741724680978 +109.86941994584559 +108.6300399277006 +108.19465083430565 +108.64680819054912 +109.99078563903326 +112.15119318885156 +114.97971157925815 +118.26834119767733 +121.7679820657229 +125.2106851984442 +128.33358768916634 +130.90239347009117 +132.73230228225245 +133.7045173322741 +133.77685705611947 +132.98752307258158 +131.4516877464516 +129.35120618418497 +126.91837165885237 +124.41516554388416 +122.10985529722846 +120.25303092830052 +119.05522053876172 +118.66808447420374 +119.17086795715953 +120.56332234738657 +122.76572735215926 +125.62601220259103 +128.933339682514 +132.43693958907318 +135.86850928809065 +138.96618038930424 +141.4979106697596 +143.28221171450684 +144.2043607361898 +144.22664841996743 +143.39174738430057 +141.81890036303471 +139.6932686071204 +137.24939198152245 +134.7502382176014 +132.46371278885508 +130.63872771286054 +129.48296698206684 +129.14433477128432 diff --git a/testdata/golden/g_JumpIndicator.csv b/testdata/golden/g_JumpIndicator.csv new file mode 100644 index 00000000..fd05c45a --- /dev/null +++ b/testdata/golden/g_JumpIndicator.csv @@ -0,0 +1,81 @@ +JumpIndicator +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_KRatio.csv b/testdata/golden/g_KRatio.csv new file mode 100644 index 00000000..fc18aa5f --- /dev/null +++ b/testdata/golden/g_KRatio.csv @@ -0,0 +1,81 @@ +KRatio +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +224.91732611607725 +167.19160299688033 +135.5502864318968 +121.81360905747555 +120.54969322992491 +131.6217608979034 +160.1029785937169 +213.0922643624841 +243.84884283509186 +183.92414187099277 +129.84820355206048 +100.9957878876785 +86.41319058309355 +80.0464220961964 +79.4517227834831 +84.15408694742236 +95.29045190810191 +116.31953915135024 +155.21991533091028 +224.96007607242984 +289.94266876444766 +242.39977627886037 +180.72434447591456 +147.52213726978934 +133.45437490167492 +132.9375940227355 +146.15231323074147 +179.05480233799972 +238.8318170007813 +267.35636967861245 +198.6471152752126 +140.68964930946476 +109.91531264385794 +94.3449284102332 +87.59008912272269 +87.09683051030261 +92.42181475332626 +104.89667553939205 +128.46820307903388 +172.18472533178073 +249.934474814157 +315.71383109889376 +259.1843470192975 +193.90847255286852 +159.34626794774363 +145.08271180689596 +145.44325482203476 +160.98109158729488 +198.59745313305362 +265.23136360662573 +290.0835551276036 +212.66549200049596 +151.16530049210445 +118.64233922842267 +102.18064819775311 +95.10239691942287 +94.7659385139607 +100.77602273431472 +114.68004460134628 +140.95296389162718 +189.78414023567348 +275.77927889460034 +340.9550858198303 +275.29700806115426 +206.76664506576512 +171.03632981305446 +156.70923807375598 diff --git a/testdata/golden/g_KagiBars.csv b/testdata/golden/g_KagiBars.csv new file mode 100644 index 00000000..ca00233f --- /dev/null +++ b/testdata/golden/g_KagiBars.csv @@ -0,0 +1,81 @@ +bars + + + + + + + + + +100,112.73847630878196,1 + + + + + + + + +112.73847630878196,97.72469882334903,-1 + + + + + + + + + + +97.72469882334903,123.19889810845086,1 + + + + + + + + + +123.19889810845086,108.19063769933508,-1 + + + + + + + + + + +108.19063769933508,133.65657776549278,1 + + + + + + + + + +133.65657776549278,118.65934994918358,-1 + + + + + + + + + + +118.65934994918358,144.11152724502116,1 + + + + + + + + diff --git a/testdata/golden/g_KalmanHedgeRatio.csv b/testdata/golden/g_KalmanHedgeRatio.csv new file mode 100644 index 00000000..f0574184 --- /dev/null +++ b/testdata/golden/g_KalmanHedgeRatio.csv @@ -0,0 +1,81 @@ +hedge_ratio,intercept,spread +0,0,100 +1.008449973750648,0.00983109160282488,103.4552020666134 +1.0049997664536972,0.009799693520450693,-0.36612273503502024 +1.0005581031693263,0.009761460750754965,-0.48534963346541815 +0.9961886417280781,0.009725012022283317,-0.48826881311569537 +0.9928419337093037,0.009697095634596278,-0.3791328516671655 +0.9912099923684018,0.009683032711546604,-0.18561367338674017 +0.9916321209566226,0.009686896076220222,0.04773370050111225 +0.9940457156310357,0.009710787303330751,0.2689204562593517 +0.9979762965545008,0.00975312966664966,0.4284186813611086 +1.0025803966415856,0.009806748158881879,0.48867971989730563 +1.0067704780669033,0.009858489939966577,0.4325302941445983 +1.009444702704938,0.009892431752796065,0.2691026830397476 +1.0097996151622775,0.009896874474320753,0.035015404729747956 +1.007628734953161,0.009871344031348338,-0.21175441898799363 +1.0034588074474962,0.009827585907170668,-0.40610746293197053 +0.9984185019458207,0.009782622241579072,-0.49492666496618654 +0.9938728653450748,0.009749410171835109,-0.45389164658156744 +0.9909881730039212,0.009732424957276402,-0.2947876975849226 +0.9904095798481317,0.009729638674842205,-0.06075001051739548 +0.99214391603899,0.009736817822232699,0.18739497720882525 +0.9956336675100396,0.00975020700049312,0.3878803040454528 +0.999953160618924,0.00976683874240007,0.4929220050790093 +1.0040540506178772,0.009783740241912073,0.47900881091034364 +1.007003395708264,0.009797329838168656,0.3512618790128528 +1.0081731949904238,0.00980351753030784,0.14141505822986744 +1.0073530782255193,0.009798460898698813,-0.10012392519114144 +1.0047726263658792,0.009779771621941515,-0.3163944345027261 +1.0010374402908397,0.009747949220724944,-0.45725617628146153 +0.9969985611568529,0.009707671602497723,-0.4907052519538837 +0.993582351053496,0.009668265178457702,-0.4095804763932449 +0.9916066168910642,0.009642419151820885,-0.2326168558421955 +0.9916043312769942,0.009642386208610054,-0.0002633705419157195 +0.9936776025048746,0.009674023680909213,0.2335398575954457 +0.997416510391237,0.009731281227542693,0.4123739774789783 +1.0019324572301234,0.009795920011063577,0.4899749416012611 +1.0060491490519257,0.009845978782587634,0.44272304197630774 +1.0086386989728893,0.009869360196252877,0.2787000468929932 +1.0089951379542212,0.00987128094160142,0.038789225690294415 +1.00707524517666,0.009867674908218702,-0.21327535665554365 +1.003486190577041,0.009870909256725435,-0.40996390415442363 +0.9992416794979224,0.009881809558258705,-0.5006210529208488 +0.9954249968241402,0.009893342413667613,-0.46518396424303887 +0.9929037587082408,0.009899358850871712,-0.3168060181433958 +0.9921668101463591,0.009900027099551153,-0.09500781911626177 +0.9932790575023459,0.009901297375280197,0.14616381106964127 +0.9959182793409985,0.009910552459890679,0.35094799288950185 +0.999462096989776,0.009931715223056282,0.47331835281764256 +1.0031089592811433,0.009962194819963757,0.4859134004653356 +1.0060265459989859,0.009992873408831541,0.38559503826863306 +1.007518028007402,0.010011248085731339,0.19467532210853733 +1.0071833759706115,0.01000667187232971,-0.043019029203236414 +1.0050379051982563,0.009975538776389325,-0.27128600709252737 +1.0015452619086804,0.009923885484371082,-0.4345018140025161 +0.9975360488873702,0.009865789970133865,-0.4914622305897609 +0.9940155266608885,0.009817878142306122,-0.42637558821022026 +0.9919025634997535,0.009792210629689003,-0.25376668039800165 +0.9917712683040671,0.009790881348360193,-0.01570880674589148 +0.993675052617112,0.009805350770485546,0.22813026536945813 +0.9971159274307868,0.009821561929342705,0.4153756157757016 +1.0011805182491096,0.009828426590661866,0.4972554323981342 +1.0048066025704907,0.009824249497470891,0.45205486791863336 +1.00709102030362,0.009816335154822543,0.29152101691460075 +1.0075312594045809,0.009814158092147399,0.05767289361065764 +1.0061248827783897,0.009821751411023661,-0.18929022432504894 +1.0033160000096213,0.009835149218942461,-0.38786068380409233 +0.9998362002540815,0.009846029700415029,-0.4911653446295361 +0.996509112104391,0.0098481269567445,-0.4773783925801638 +0.9940736528817733,0.009842023320121749,-0.3527755106966879 +0.9930522895407304,0.009835855028440778,-0.14821677028905356 +0.9936678943714319,0.009841825601432623,0.08881985497336586 +0.9958048163876181,0.009869985989086087,0.30445984845988505 +0.9990146688024579,0.009921748967058155,0.4492422849891966 +1.0025771909719787,0.009986443723443053,0.4883003822636738 +1.00563029767585,0.010044183862920606,0.4096685187588207 +1.0073693906146568,0.010075707107777731,0.22898095963250853 +1.0072798672783694,0.010074295287103322,-0.011622502484897268 +1.00532409201906,0.010050604195846033,-0.252030859015008 +1.0019914030425519,0.01002492976776852,-0.42949253851236335 +0.9981661477823007,0.010012567175871,-0.496622203074935 diff --git a/testdata/golden/g_Kama.csv b/testdata/golden/g_Kama.csv new file mode 100644 index 00000000..c869842e --- /dev/null +++ b/testdata/golden/g_Kama.csv @@ -0,0 +1,81 @@ +Kama +nan +nan +nan +100.58332931851717 +101.25439566483936 +101.95568030241444 +102.62960505281241 +102.93786343604955 +103.32532724174568 +103.66585671428273 +103.83744067467747 +103.84275957367059 +103.70101182325689 +103.44609473481336 +103.12347895612903 +102.78605519783028 +102.56268955433413 +102.44640060339485 +102.37302276096018 +102.47428037427665 +102.77000316451003 +103.26363665453087 +103.94187271581855 +104.77578052382252 +105.72333665598933 +106.7331281004742 +107.74889718505369 +108.71452224276601 +109.12723213974711 +109.75215225994047 +110.3377167969703 +110.73814351185158 +110.95805530409649 +111.01846691398089 +110.95489105211112 +110.81415051137188 +110.65018096061958 +110.5569152245099 +110.52873072516142 +110.61319531488944 +110.86451253395857 +111.30221063098254 +111.92933687105935 +112.7321748410792 +113.68145986020376 +114.73498388553578 +115.84135718609237 +116.94459072992905 +117.98908991965178 +118.39651792627866 +119.11133676501673 +119.75859107540983 +120.21602516588386 +120.48948697965726 +120.60113030192964 +120.58744381907835 +120.4959991843975 +120.38120860719664 +120.32636226040033 +120.32827913556177 +120.46339466035687 +120.76423962556785 +121.24961611038447 +121.92177928336469 +122.76623990866682 +123.7530623329499 +124.83954202308247 +125.97402349266976 +127.10051758696707 +128.16370569059546 +128.53752498156723 +129.2975789440376 +129.9547618173196 +130.42072821386202 +130.70234743761642 +130.82271665247757 +130.81911263917007 +130.73967599433465 +130.63912402086333 +130.59804092965973 diff --git a/testdata/golden/g_KaseDevStop.csv b/testdata/golden/g_KaseDevStop.csv new file mode 100644 index 00000000..d2e6f0a9 --- /dev/null +++ b/testdata/golden/g_KaseDevStop.csv @@ -0,0 +1,81 @@ +value,direction +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +92.23266539024749,1 +92.4167143858698,1 +93.00163753883135,1 +94.74050055464248,1 +96.7603536585142,1 +99.65705906766864,1 +102.4871780247512,1 +105.18161252174927,1 +107.787947719904,1 +110.9699072009077,1 +113.83019792880239,1 +115.8577337678614,1 +116.90716471889924,1 +116.90716471889924,1 +116.90716471889924,1 +116.90716471889924,1 +116.90716471889924,1 +123.14557821060232,-1 +120.6539562447185,-1 +118.05196888045276,-1 +115.82436103133132,-1 +114.14769660863513,-1 +113.38678673360214,-1 +113.11044903274333,-1 +112.98768247406758,-1 +112.98768247406758,-1 +108.7809489978316,1 +112.04331871276543,1 +116.10957825767942,1 +119.53747842983569,1 +122.36476817446261,1 +124.5973164568571,1 +126.49949966040191,1 +127.23018458983033,1 +127.23018458983033,1 +127.23018458983033,1 +127.23018458983033,1 +127.24523424202567,1 +132.83831227878318,-1 +130.94512308334382,-1 +128.97047467694617,-1 +126.6629531809711,-1 +124.99948742023929,-1 +124.09178142739512,-1 +123.57743447072203,-1 +123.35309630333431,-1 +123.34939344688001,-1 +120.42120390360911,1 +123.16862041006345,1 +126.07897965334799,1 +129.47041591478114,1 +132.4885412667311,1 +134.9847932230295,1 +137.05491375630925,1 +138.51377453938449,1 +138.96613376163583,1 +138.96721735266985,1 +138.96721735266985,1 +139.04017882852963,1 +143.14769586495942,-1 +140.21238110488136,-1 +137.84589224542788,-1 +136.12086339366473,-1 +134.82436053990637,-1 +134.4100620327772,-1 +134.0139169592718,-1 diff --git a/testdata/golden/g_KasePermissionStochastic.csv b/testdata/golden/g_KasePermissionStochastic.csv new file mode 100644 index 00000000..b1fe815d --- /dev/null +++ b/testdata/golden/g_KasePermissionStochastic.csv @@ -0,0 +1,81 @@ +fast,slow +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +32.45362805890103,41.920277092145845 +33.56092803656679,39.83043982825108 +39.226991550958545,39.67957775892795 +45.258288715993814,41.07425549819442 +51.69748429590247,43.730062697621435 +56.82641113752357,47.00414980759697 +61.33424962710335,50.586674762473564 +66.21068417845896,54.49267711646991 +71.6454891033392,58.78088011318724 +75.50818491828083,62.96270631446063 +77.34489658275601,66.55825388153448 +78.21407371351536,69.4722088395297 +78.75599910017475,71.79315640469096 +78.50369927975811,73.47079212345776 +71.47941085748869,72.9729468069655 +61.75837255119319,70.16930324302243 +52.05253469300779,65.64011110551877 +42.913144706336055,59.95836950572309 +35.821377227568895,53.92412143618454 +31.17975159803672,48.238028976647584 +28.088326975287117,43.20060347630747 +26.566401108586824,39.04205288437731 +27.96719463750689,36.273338322659704 +36.29767245457218,36.27942185563782 +44.790411945208476,38.40716937803049 +53.5626646632475,42.19604319933474 +61.812287113232316,47.10010417780913 +67.96887456265196,52.31729677401984 +71.09841311966247,57.012575860430495 +72.68013594857409,60.92946588246639 +73.96795438187091,64.18908800731752 +75.249918695176,66.95429567928214 +75.30716165478819,69.04251217315866 +74.4624101152477,70.39748665868092 +72.00057086330969,70.79825770983811 +65.96154581820551,69.58907973692996 +59.02967753722452,66.9492291870036 +52.794600081391806,63.41057191060065 +46.44641340041422,59.169532283054046 +39.582429843711566,54.272756673218424 +33.26737449156396,49.02141112780481 +29.910186820884146,44.243605051074645 +28.685130946929437,40.353986525038344 +28.262930784964876,37.331222590019976 +31.693131045713734,35.92169970394342 +40.434479349696794,37.04989461538176 +49.243868909198746,40.098388188836005 +57.06905391699704,44.341054620876264 +64.23148845256677,49.31366307879889 +70.49316626585438,54.60853887556276 +74.60713765599111,59.60818857066984 +77.24630108215892,64.01771669854212 +79.14440066385328,67.7993876898699 +79.35498203636267,70.6882862764931 +76.32056928379882,72.09635702831953 +69.13127783613974,71.35508723027459 +59.73480256302499,68.45001606346219 +50.11496018740293,63.866252094447375 +41.396222547237294,58.24874470764486 +36.42898891999502,52.793805760732404 +34.106704885572476,48.12203054194242 +32.54091852778273,44.2267525384025 +31.070538380603182,40.93769899895267 +30.844562730145068,38.41441493175077 +32.82021258814852,37.015864345850204 +38.697118971297606,37.43617800221205 diff --git a/testdata/golden/g_KellyCriterion.csv b/testdata/golden/g_KellyCriterion.csv new file mode 100644 index 00000000..f3891b6b --- /dev/null +++ b/testdata/golden/g_KellyCriterion.csv @@ -0,0 +1,81 @@ +KellyCriterion +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 diff --git a/testdata/golden/g_Keltner.csv b/testdata/golden/g_Keltner.csv new file mode 100644 index 00000000..74c281f0 --- /dev/null +++ b/testdata/golden/g_Keltner.csv @@ -0,0 +1,81 @@ +upper,middle,lower +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +119.68877290115522,111.92763996530223,104.16650702944925 +119.95803096115085,112.18594293044396,104.41385489973706 +119.17956350027117,111.579227971455,103.97889244263882 +117.58028788866766,110.2116460201351,102.84300415160256 +115.7157688229306,108.26414601945635,100.8125232159821 +113.70274128815872,105.97523290996338,98.24772453176804 +111.59148367648376,103.61498585739903,95.6384880383143 +109.46106536364826,101.45589752849165,93.45072969333503 +107.54177422837834,99.744419526454,91.94706482452965 +106.28204238866608,98.67678662192901,91.07153085519194 +105.79337600475469,98.38182027242007,90.97026454008545 +106.18497667366428,98.91217204168551,91.63936740970674 +107.60893509218141,100.24411862671026,92.87930216123911 +110.04116864067348,102.28482695973301,94.52848527879254 +113.11835287049863,104.88518124371794,96.65200961693725 +116.4445503391588,107.85591627894672,99.26728221873465 +119.66056619479444,110.98492734070891,102.30928848662337 +122.73609349334045,114.05411169916994,105.37212990499943 +125.46675566920727,116.85475284237532,108.24275001554336 +127.71805738190567,119.20107659186493,110.6840958018242 +129.24579159941487,120.9420138925638,112.63823618571276 +129.84463869138517,121.97130255662236,114.09796642185954 +129.7897732088316,122.23585628238462,114.68193935593764 +129.17319732234387,121.74192833606801,114.31065934979215 +127.95535710644951,120.55817124638594,113.16098538632237 +126.16064032449377,118.81443331786477,111.46822631123577 +124.04525292584705,116.69519266620472,109.34513240656239 +121.80694463715056,114.42698304047622,107.04702144380187 +119.55974205320581,112.25997863861232,104.96021522401884 +117.50568567673326,110.4449371922459,103.38418870775854 +116.03909758514934,109.20773466108315,102.37637173701697 +115.61816785985854,108.72451690723025,101.83086595460196 +116.14777522224618,109.10083172226064,102.05388822227509 +117.43328307619454,110.35786211323284,103.28244115027114 +119.60400205885249,112.42805278964533,105.25210352043818 +122.6032098656448,115.16112803254006,107.71904619943533 +126.28105330513108,118.33996746241309,110.39888161969509 +130.16929585508362,121.70432121481855,113.23934657455348 +133.78768346870868,124.97918831867783,116.17069316864696 +136.74917747586767,127.90406706544596,119.05895665502425 +138.92227778593627,130.25931738333242,121.59635698072856 +140.1856741645651,131.88652318440487,123.58737220424463 +140.7406820315386,132.700853973726,124.6610259159134 +140.46063841745726,132.69475956025894,124.92888070306063 +139.63576726314676,131.93361851227115,124.23146976139553 +138.41069313764635,130.54495960311132,122.6792260685763 +136.7364708178502,128.7034281759981,120.67038553414604 +134.63354342134116,126.61373199439691,118.59392056745267 +132.329282117968,124.49344586666177,116.65760961535555 +130.25419271117806,122.55694404961523,114.85969538805237 +128.7301881022123,121.00107116795235,113.27195423369237 +127.69835700418832,119.99265143785473,112.28694587152114 +127.11586538593342,119.65770507152237,112.19954475711133 +127.28239191523106,120.07232682196711,112.86226172870316 +128.45677805469956,121.25551860214391,114.05425914958826 +130.55610728332792,123.16470702358724,115.77330676384656 +133.32432015573448,125.6950281434764,118.06573613121833 +136.51799385864285,128.68354952617938,120.84910519371591 +140.00418183078597,131.91931218043806,123.83444253009016 +143.40972978817965,135.15940013210917,126.90907047603869 +146.36301881669988,138.15028154479393,129.93754427288798 +148.67967886333503,140.65260266129147,132.6255264592479 +150.29187259203476,142.46669421048986,134.64151582894496 +151.283215671515,143.45550176566366,135.62778785981232 +151.3732406074288,143.56164444302738,135.75004827862594 +150.40401172981018,142.81589900452497,135.22778627923975 +148.7335621948936,141.33552924214177,133.93749628938994 +146.83521760827412,139.31234580066746,131.7894739930608 +144.79686145760581,136.99192178864237,129.18698211967893 +142.67165603847315,134.6467145585503,126.62177307862741 +140.54553304690924,132.54670455837936,124.5478760698495 +138.693049423447,130.93140388844728,123.16975835344755 +137.55269269227563,129.98668366489375,122.42067463751188 +137.2216847295217,129.82892538370828,122.43616603789485 diff --git a/testdata/golden/g_KendallTau.csv b/testdata/golden/g_KendallTau.csv new file mode 100644 index 00000000..c7c26328 --- /dev/null +++ b/testdata/golden/g_KendallTau.csv @@ -0,0 +1,81 @@ +KendallTau +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.978021978021978 +0.978021978021978 +0.978021978021978 +0.978021978021978 +0.9560439560439561 +0.9340659340659341 +0.9340659340659341 +0.9340659340659341 +0.9340659340659341 +0.9340659340659341 +0.9340659340659341 +0.9340659340659341 +0.9340659340659341 +0.9560439560439561 +0.978021978021978 +0.978021978021978 +0.9560439560439561 +0.9340659340659341 +0.9120879120879121 +0.9120879120879121 +0.9120879120879121 +0.9120879120879121 +0.9120879120879121 +0.9120879120879121 +0.9340659340659341 +0.9560439560439561 +0.978021978021978 +0.978021978021978 +0.978021978021978 +0.978021978021978 +0.978021978021978 +0.978021978021978 +0.978021978021978 +1 +1 +0.978021978021978 +0.9560439560439561 +0.9340659340659341 +0.9120879120879121 +0.9120879120879121 +0.9120879120879121 +0.9120879120879121 +0.9120879120879121 +0.9120879120879121 +0.9120879120879121 +0.9340659340659341 +0.9560439560439561 +0.9560439560439561 +0.978021978021978 +0.978021978021978 +0.978021978021978 +0.978021978021978 +0.978021978021978 +0.978021978021978 +0.978021978021978 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0.978021978021978 +0.9560439560439561 diff --git a/testdata/golden/g_Kicking.csv b/testdata/golden/g_Kicking.csv new file mode 100644 index 00000000..44b02ec0 --- /dev/null +++ b/testdata/golden/g_Kicking.csv @@ -0,0 +1,81 @@ +Kicking +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_KickingByLength.csv b/testdata/golden/g_KickingByLength.csv new file mode 100644 index 00000000..7108529c --- /dev/null +++ b/testdata/golden/g_KickingByLength.csv @@ -0,0 +1,81 @@ +KickingByLength +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Kst.csv b/testdata/golden/g_Kst.csv new file mode 100644 index 00000000..a5e07a30 --- /dev/null +++ b/testdata/golden/g_Kst.csv @@ -0,0 +1,81 @@ +kst,signal +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan diff --git a/testdata/golden/g_Kurtosis.csv b/testdata/golden/g_Kurtosis.csv new file mode 100644 index 00000000..bc5b9b14 --- /dev/null +++ b/testdata/golden/g_Kurtosis.csv @@ -0,0 +1,81 @@ +Kurtosis +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-1.3100572627043754 +-1.13989619744644 +-1.259994123305713 +-1.563010584629038 +-1.6878152318298405 +-1.54891453735593 +-1.2435613612634493 +-1.147584151707778 +-1.305060323134112 +-0.7675450222558533 +-0.4360345304100588 +-0.7320517490620331 +-1.14675174272681 +-1.4458249954183744 +-1.589782376958436 +-1.581309871517996 +-1.4199627794723113 +-1.1042464857865468 +-0.6852257727519881 +-0.4332243276783445 +-0.8463862799719903 +-1.3118965243650904 +-1.1337789961507823 +-1.2769605449336887 +-1.5764680128859327 +-1.6869517348280045 +-1.5342124328150104 +-1.2277661995012281 +-1.156736918866764 +-1.2967562911043862 +-0.729738971167615 +-0.4407433590231409 +-0.7558828673081308 +-1.1673992911195825 +-1.4580141573170562 +-1.5933029899775877 +-1.5763561692672134 +-1.4062898237786705 +-1.0824200659476688 +-0.6623809599820096 +-0.43534162349699956 +-0.8867320076680629 +-1.3107772818553265 +-1.129308858639935 +-1.2943596265468669 +-1.5892572059267984 +-1.685225942387731 +-1.5189399686927714 +-1.212714839969911 +-1.1672176523324156 +-1.2850501390840887 +-0.6934233878271092 +-0.4474981487818699 +-0.7799007486037719 +-1.1876253972801023 +-1.4697090553062266 +-1.596347574984342 +-1.5709228338361823 +-1.3921228811148862 +-1.0602350629926485 +-0.6400232156094043 +-0.4399380679881655 +-0.9271979663708412 +-1.3069426013001615 +-1.126534181657227 +-1.3120938448626394 +-1.6013513085754802 diff --git a/testdata/golden/g_Kvo.csv b/testdata/golden/g_Kvo.csv new file mode 100644 index 00000000..8dca6f9c --- /dev/null +++ b/testdata/golden/g_Kvo.csv @@ -0,0 +1,81 @@ +Kvo +nan +nan +nan +nan +nan +nan +nan +-84123.8576058255 +-108080.90106480508 +-108153.5651651083 +-97237.05820274277 +-82446.69726278726 +-67336.34561208662 +-53496.77863307044 +-41506.57105594099 +-31456.34795562559 +47327.87441407362 +79871.86803109669 +86935.35600501516 +81884.71720865776 +72027.74036091051 +61027.16943992756 +50551.1229965001 +41238.616396440775 +33229.73843945304 +26445.106985951774 +20727.339050781302 +15908.725853822252 +-63774.01481005323 +-94075.88617937273 +-97430.49518549663 +-88364.44101143625 +-75796.87195148173 +-63691.14590872271 +-52925.39000152344 +-43712.354405611 +-35958.68032057953 +47586.83300974118 +82161.20465019601 +89407.33273049917 +83537.41939210921 +72422.17439677357 +60065.10899410643 +48331.593867911 +37970.29557526909 +29178.083212485333 +21899.985644287895 +15982.49865432005 +12843.505383656418 +-62494.913674054886 +-92255.68405775748 +-96942.81749033037 +-89834.0209799177 +-78183.04357360568 +-65611.09707596424 +-53755.25367623713 +-43234.0737173394 +-34176.76022638782 +49948.7437436383 +83746.18829085468 +89718.25441765256 +82571.33358065333 +70417.68195873895 +57644.78526343485 +47360.04499950074 +39104.82541305691 +32471.433795905934 +27103.698375258333 +22700.211245426646 +19014.462624788546 +-62398.96455298627 +-94407.88242623702 +-99157.42140650317 +-91068.10049046703 +-78064.05238748986 +-64136.13320116981 +-51116.70182753404 +-39721.24774598569 +-30119.848505004134 +48168.44321139456 diff --git a/testdata/golden/g_KylesLambda.csv b/testdata/golden/g_KylesLambda.csv new file mode 100644 index 00000000..99eb2dc2 --- /dev/null +++ b/testdata/golden/g_KylesLambda.csv @@ -0,0 +1,81 @@ +KylesLambda +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-0.0004977765312341823 +-0.0008035694842155044 +-0.0007997846696566234 +-0.0007903028563622996 +-0.0005746423330615954 +-0.0004535078689545149 +-0.0004309881523040625 +-0.0005157840761241483 +-0.0007212939824280072 +-0.0008024195767383015 +-0.0004928167042391016 +-0.00018487782429826957 +0.00011196058886982724 +0.0003831649697342193 +0.0006111425379391801 +0.0005364086071627128 +0.0004525718328193577 +0.00047826097484182493 +0.0006087631480111685 +0.0008414062288690497 +0.0011784673876752856 +0.0011626042232374034 +0.0007811202683119452 +0.0004738724737662462 +0.00023911324593559166 +0.00007797535378738186 +-0.000006400200470925284 +-0.000008170279419501032 +0.00001606083936134529 +-0.00013520936309462122 +-0.00034048172085256986 +-0.0005869609003712925 +-0.0008688494189153918 +-0.0011837187044231802 +-0.0011749007002650916 +-0.0009198872461104331 +-0.0007617602464897324 +-0.0007046059556445632 +-0.0007582715094613824 +-0.0009384911171362607 +-0.0010218087161878466 +-0.0007235755538420832 +-0.0004193435494168768 +-0.00011987057840633567 +0.0001640283021323103 +0.0004138818301489865 +0.0003461845987542306 +0.00026793174047838494 +0.00024603465053210465 +0.0003269282342689951 +0.0005029582559537123 +0.000768742432852376 +0.0011240181558140922 +0.0010980859328261424 +0.0007292276112195703 +0.0004477475993850513 +0.0002488662995424269 +0.00013152858202476305 +0.00009747921968753652 +0.00012131552505892753 diff --git a/testdata/golden/g_LadderBottom.csv b/testdata/golden/g_LadderBottom.csv new file mode 100644 index 00000000..74e68ebc --- /dev/null +++ b/testdata/golden/g_LadderBottom.csv @@ -0,0 +1,81 @@ +LadderBottom +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_LaguerreRsi.csv b/testdata/golden/g_LaguerreRsi.csv new file mode 100644 index 00000000..4a541de6 --- /dev/null +++ b/testdata/golden/g_LaguerreRsi.csv @@ -0,0 +1,81 @@ +LaguerreRsi +50 +71.42857142857129 +79.99999999999986 +82.57066074189984 +89.60442250781891 +99.99999999999999 +100 +100 +100 +85.67585165930305 +69.56781282591528 +50.396840303590245 +30.91966558154355 +13.972232968969635 +0 +0 +0 +0 +11.868876605795137 +29.746589016295456 +49.41792359239618 +69.33061813578165 +84.73635256179159 +99.10403769874776 +100 +100 +100 +100 +100 +100 +88.20083221592306 +73.29599265706518 +54.93774504885039 +34.19937060650347 +16.248035791085503 +0 +0 +0 +0 +12.937623706167054 +30.824369983591897 +50.72641156303693 +70.3093299683677 +85.57004520504915 +99.94179228694132 +100 +100 +100 +100 +100 +100 +87.39887070836814 +72.39569683094302 +53.646038452568945 +33.15955768879592 +15.241830091070746 +0 +0 +0 +0 +13.955324182915048 +31.847924492880605 +51.99633846671225 +71.23501393957129 +86.37638589371466 +99.99999999999999 +100 +100 +100 +100 +100 +100 +86.59521842735309 +71.48464822064606 +52.345651361868136 +32.12733605031235 +14.231025420253303 +0 +0 +0 diff --git a/testdata/golden/g_LeadLagCrossCorrelation.csv b/testdata/golden/g_LeadLagCrossCorrelation.csv new file mode 100644 index 00000000..62be1843 --- /dev/null +++ b/testdata/golden/g_LeadLagCrossCorrelation.csv @@ -0,0 +1,81 @@ +lag,correlation +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +0,0.9976382990004041 +0,0.9974659375588608 +0,0.9972494331136188 +0,0.9971519869703265 +0,0.9972489314355814 +0,0.9974449522748713 +0,0.9973734786552113 +0,0.9965104129143885 +0,0.9947250427833076 +0,0.9927788018662151 +0,0.991710853977949 +0,0.9916140895990827 +0,0.9917602990666555 +0,0.9918630747694356 +0,0.9924866557864209 +0,0.9940369880696082 +0,0.9959483040943093 +0,0.9973339714924837 +0,0.9978480271511195 +0,0.9977374653418406 +0,0.9974484995607668 +0,0.997301913846679 +0,0.9973904421189078 +0,0.9976237600234386 +0,0.9978073446890965 +0,0.997710097689769 +0,0.9971509967603918 +0,0.9961377672205726 +0,0.9949970264529114 +0,0.9942702429070414 +0,0.9941340690240082 +0,0.9938562213722398 +0,0.992736469521403 +0,0.9916628009636298 +0,0.9921581176992423 +0,0.9942211350281356 +0,0.9961891235601922 +0,0.9968283179993804 +0,0.9965564237498713 +0,0.9963246774183444 +0,0.9965213968586414 diff --git a/testdata/golden/g_LinRegAngle.csv b/testdata/golden/g_LinRegAngle.csv new file mode 100644 index 00000000..fc0cfbf4 --- /dev/null +++ b/testdata/golden/g_LinRegAngle.csv @@ -0,0 +1,81 @@ +LinRegAngle +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-11.075302203778927 +-34.24056859933313 +-46.670025249752904 +-52.43427263832729 +-54.0597722226052 +-52.234478128642145 +-46.184299422255876 +-33.26006277047396 +-9.441319369794806 +20.947730394156107 +43.301230657236324 +55.6363096176509 +62.19833453829079 +65.61352319875428 +67.06086151334027 +66.97837705615629 +65.34219849020684 +61.65166250967871 +54.60942648457206 +41.37116985330913 +17.73496862537031 +-12.680521536335748 +-35.18598235267645 +-47.13548308919502 +-52.621527569413864 +-54.04928140525553 +-52.0218865158092 +-45.67764306733665 +-32.243650712288414 +-7.781099550366625 +22.50784776120696 +44.21725714261676 +56.123170713976045 +62.45723627599498 +65.7401161535437 +67.09504522247272 +66.93000480944708 +65.1972084411475 +61.36327956540155 +54.06807698164874 +40.35538112631513 +16.086667035132773 +-14.254728367692314 +-36.09715762522699 +-47.581308434128644 +-52.79648323301115 +-54.02828683724365 +-51.79622255287625 +-45.149366506926306 +-31.190569740796175 +-6.0974346589100055 +24.0347013526309 +45.10182756234597 +56.5931543278178 +62.706900720397655 +65.86082392254403 +67.12456398610358 +66.87682449139328 +65.04581611813903 +61.06443283694295 +53.50719444507356 +39.304648277048756 +14.413777987178827 +-15.795957283868264 +-36.97497673345388 +-48.008109964228154 +-52.95936320856254 diff --git a/testdata/golden/g_LinRegChannel.csv b/testdata/golden/g_LinRegChannel.csv new file mode 100644 index 00000000..2e6498f9 --- /dev/null +++ b/testdata/golden/g_LinRegChannel.csv @@ -0,0 +1,81 @@ +upper,middle,lower +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +114.709239255337,105.81052548732032,96.91181171930364 +110.23623540887868,102.5361845205411,94.83613363220351 +105.70627127098922,99.66058289617811,93.614894521367 +101.83378015041194,97.485253053946,93.13672595748005 +99.78911685364302,96.249174240847,92.70923162805097 +100.5394740379344,96.10742520677661,91.67537637561882 +103.26232122322703,97.11733148165823,90.97234174008942 +107.01509487460477,99.23334465658591,91.45159443856706 +111.2589830025895,102.31111108753633,93.36323917248316 +115.5793437135608,106.12036657646888,96.66138943937696 +119.61173244164287,110.36550518635131,101.11927793105976 +123.04960956482736,114.71198483912633,106.3743601134253 +125.68084377112113,118.81621096319454,111.95157815526794 +127.46864123409571,122.35622877318336,117.24381631227101 +128.7871271285593,125.06048253206338,121.33383793556747 +130.56031347434052,126.73207281637531,122.90383215841008 +132.57400685349435,127.26634495531178,121.95868305712919 +133.71104954193856,126.66023752077254,119.60942549960653 +133.48356377886597,125.01255579561924,116.54154781237249 +131.82120513974277,122.51514579202414,113.2090864443055 +128.8730523757377,119.43575721856833,109.99846206139895 +124.94161711106352,116.09412619620025,107.24663528133698 +120.4502852002249,112.83341418280601,105.21654316538712 +115.93567123746477,109.98955438219666,104.04343752692854 +112.12888677291534,107.86124383150641,103.59360089009749 +110.22936715212776,106.68326168445915,103.13715621679054 +111.12346718162857,106.60549708879844,102.08752699596832 +113.92348426002772,107.67956003512641,101.43563581022511 +117.71609538730209,109.85417119015123,101.99224699300038 +121.97468658754964,112.97974252680737,103.9847984660651 +126.28811169527889,116.82173957720215,107.35536745912542 +130.29461858272253,121.08163169813083,111.86864481353913 +133.6917628561867,125.42355892433378,117.15535499248084 +136.27440702674176,129.50433333891905,122.73425965109635 +138.02020546528408,133.00409502787733,127.98798459047056 +139.3382394257592,135.6548842135778,131.97152900139636 +141.1506203848056,137.26457730365246,133.37853422249933 +143.14034972305322,137.73404871930973,132.32774771556623 +144.20832911959224,137.06602548806697,129.9237218565417 +143.89975087051178,135.3648436465045,126.82993642249725 +142.15975465689607,132.8271282128569,123.49450176881774 +139.1472461436855,129.72422925973203,120.30121237577858 +135.1722087414485,126.3779830202745,117.58375729910051 +130.66422041007482,123.13196321596729,115.59970602185976 +126.16716749814368,120.32079063934128,114.47441378053888 +122.42988566159619,118.24024247516277,114.05059928872936 +120.67922362327108,117.1208314054171,113.56243918756313 +121.71327680535876,117.10721459795151,112.50115239054426 +124.58767163859434,118.24527191249732,111.90287218640029 +128.41853731093414,120.47800758944088,112.53747786794762 +132.69055147555986,123.65064151128308,114.61073154700631 +136.99590073930312,127.52443524956087,118.05296975981861 +140.97556618818285,131.79801785763928,122.62046952709572 +144.3313144481823,136.13430643981556,127.93729843144882 +146.86524203374992,140.19061676247512,133.5159914912003 +148.57018413125232,143.64927421608036,138.7283643009084 +149.89137551397923,146.2459907419256,142.60060596987196 +151.74163690380394,147.7934728973059,143.84530889080784 +153.7035763836742,148.19815222094596,142.6927280582177 +154.7011920877801,147.4685434249762,140.23589476217228 +154.31138862099,145.71448380105656,137.11757898112313 +152.4942678747596,143.13732178223626,133.7803756897129 +149.41838554408412,140.01193108709475,130.6054766301054 +145.40109870938852,136.6621570691049,127.92321542882127 +140.8781464435939,133.43188857569947,125.98563070780507 +136.4009147221618,130.65433938171788,124.90776404127396 +132.73706570974431,128.62228319529356,124.50750068084282 diff --git a/testdata/golden/g_LinRegIntercept.csv b/testdata/golden/g_LinRegIntercept.csv new file mode 100644 index 00000000..9c0f6c88 --- /dev/null +++ b/testdata/golden/g_LinRegIntercept.csv @@ -0,0 +1,81 @@ +LinRegIntercept +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +108.35520512982964 +111.38443785030367 +113.44139615420032 +114.38700159324542 +114.1814495606941 +112.88776491830286 +110.66617217313296 +107.75978309952373 +104.47288028833819 +101.14373648935164 +98.11439771397548 +95.70012928375651 +94.16125411814266 +93.67989886339585 +94.34372506170014 +96.13809860667662 +98.94739696452199 +102.56533739060073 +106.71340355266082 +111.0657245653032 +115.27818406564799 +119.01915910316663 +121.99914303019521 +123.99660626854765 +124.87778488696337 +124.60862933470513 +123.25784598651764 +120.99075980679676 +118.05454636289926 +114.75615236786152 +111.43487704468892 +108.4320635372824 +106.0606077440002 +104.57700825893941 +104.15845411644288 +104.88699702237507 +106.742221919607 +109.60307060426923 +113.2586554945614 +117.42709759035816 +121.78070588478408 +125.97524902591188 +129.68070447822188 +132.610738452811 +134.54828325198073 +135.36492728019098 +135.0323856694469 +133.6250268823184 +131.31322959866603 +128.34816329559968 +125.03935202613447 +121.72702555737492 +118.75172765870934 +116.42389634111537 +114.99613335420172 +114.64064002422677 +115.43383502248322 +117.34952811298528 +120.26125964824796 +123.9535968329685 +128.1413776940182 +132.49518375021708 +136.67076598416747 +140.33979558171785 +143.21919256708543 +145.09641249400912 +145.84843240812387 diff --git a/testdata/golden/g_LinRegSlope.csv b/testdata/golden/g_LinRegSlope.csv new file mode 100644 index 00000000..e0a3779d --- /dev/null +++ b/testdata/golden/g_LinRegSlope.csv @@ -0,0 +1,81 @@ +LinRegSlope +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-0.1957445878853321 +-0.6806348715201926 +-1.0600625583093948 +-1.3001345030230251 +-1.3794057938343829 +-1.290795362425095 +-1.0422185147288157 +-0.6558798802259798 +-0.16628993852320786 +0.3828176990090365 +0.9423928824904629 +1.462450427336158 +1.896535141927079 +2.2058715315221327 +2.3628274977202706 +2.353382631515305 +2.1783806146761613 +1.853453856167079 +1.4076270956122074 +0.8807247097477784 +0.319813319455428 +-0.22500253130508743 +-0.705056065183774 +-1.0774655297192968 +-1.3089646965736053 +-1.3788744346342934 +-1.280949915209162 +-1.0239384439746353 +-0.6307980902113782 +-0.13664691085031502 +0.4143740409625613 +0.9730437046806478 +1.489457783102587 +1.9174865446138152 +2.2188954547257236 +2.366760553169434 +2.3478734910804113 +2.163921393464638 +1.8313361533465715 +1.379826619703565 +0.8497247944671418 +0.2883830949092365 +-0.25405549676519573 +-0.7291365566802978 +-1.0944225086645791 +-1.317283446540646 +-1.3778118664638472 +-1.2706009449513014 +-1.0052275143206826 +-0.605396592781451 +-0.10682388575780688 +0.4459545917066017 +1.003560784533066 +1.5161853922077044 +1.9380371852517928 +2.231433399373339 +2.37016582457248 +2.3418419064861813 +2.1489917363613635 +1.808842045539035 +1.3517773928490904 +0.8186260024629887 +0.2570127002251487 +-0.2828952702010227 +-0.7528695377989437 +-1.1109287009455042 +-1.3250884009869766 diff --git a/testdata/golden/g_LinearRegression.csv b/testdata/golden/g_LinearRegression.csv new file mode 100644 index 00000000..954734d0 --- /dev/null +++ b/testdata/golden/g_LinearRegression.csv @@ -0,0 +1,81 @@ +LinearRegression +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +105.81052548732032 +102.53618452054117 +99.66058289617818 +97.48525305394608 +96.24917424084713 +96.10742520677663 +97.11733148165835 +99.233344656586 +102.31111108753649 +106.12036657646911 +110.3655051863515 +114.71198483912656 +118.81621096319469 +122.35622877318357 +125.06048253206366 +126.73207281637559 +127.26634495531208 +126.66023752077277 +125.01255579561952 +122.51514579202431 +119.43575721856855 +116.09412619620049 +112.83341418280615 +109.98955438219679 +107.8612438315065 +106.68326168445931 +106.60549708879853 +107.6795600351265 +109.85417119015135 +112.97974252680743 +116.82173957720221 +121.08163169813082 +125.42355892433383 +129.50433333891903 +133.0040950278773 +135.6548842135777 +137.26457730365235 +137.73404871930953 +137.06602548806683 +135.3648436465045 +132.82712821285693 +129.72422925973194 +126.37798302027434 +123.13196321596713 +120.32079063934121 +118.24024247516259 +117.1208314054169 +117.10721459795147 +118.24527191249715 +120.47800758944081 +123.65064151128297 +127.52443524956074 +131.7980178576392 +136.13430643981553 +140.19061676247503 +143.6492742160802 +146.24599074192545 +147.79347289730563 +148.19815222094567 +147.46854342497596 +145.71448380105636 +143.13732178223594 +140.0119310870944 +136.66215706910455 +133.43188857569916 +130.65433938171756 +128.62228319529316 diff --git a/testdata/golden/g_LiquidationFeatures.csv b/testdata/golden/g_LiquidationFeatures.csv new file mode 100644 index 00000000..46bf0327 --- /dev/null +++ b/testdata/golden/g_LiquidationFeatures.csv @@ -0,0 +1,81 @@ +long,short,net,total,imbalance +1,2,-1,3,-0.3333333333333333 +1.3221088436188495,2.1996914055092276,-0.8775825618903781,3.521800249128077,-0.24918578562417015 +1.49272486499423,2.0330271708623684,-0.5403023058681384,3.5257520358565984,-0.1532445561608729 +1.4316046833244371,1.5023418849921342,-0.07073720166769704,2.9339465683165713,-0.024109914758360565 +1.5836409116250962,1.167494075077954,0.41614683654714213,2.7511349867030503,0.15126369246092533 +1.976535229391743,1.175391613844809,0.801143615546934,3.151926843236552,0.25417582811797773 +2.425780382807247,1.4357878862067963,0.9899924966004505,3.861568269014043,0.2563705799388135 +2.4276829936029714,1.4912263063121713,0.9364566872908,3.9189092999151427,0.238958499833379 +1.9692769397997836,1.3156333189361646,0.6536436208636189,3.284910258735948,0.19898370712725183 +1.2192027496729594,1.0084069502421755,0.21079579943078386,2.227609699915135,0.09462869525070507 +1.328493299359394,1.6121554848226225,-0.2836621854632284,2.9406487841820166,-0.09646244971146158 +1.4940841169384953,2.2027538912297615,-0.7086697742912662,3.696838008168257,-0.191696193537678 +1.427299454044146,2.387469740694513,-0.9601702866503672,3.814769194738659,-0.251698133657637 +1.1595491811746825,2.1361368069027122,-0.9765876257280297,3.2956859880773948,-0.29632302023341184 +1.1832395646259641,1.9371418189692662,-0.753902254343302,3.1203813835952303,-0.24160580444005647 +1.4398478799858339,1.786483197820857,-0.3466353178350232,3.226331077806691,-0.1074394752043461 +1.6350888983842822,1.4895888645756656,0.14550003380861654,3.124677762959948,0.04656481238909804 +1.9110804588033403,1.3090685561185182,0.6020119026848221,3.2201490149218586,0.18695156649433217 +1.9279417854952499,1.0168115236105706,0.9111302618846793,2.9447533091058204,0.30940801019469627 +2.3319570372946856,1.334784881098301,0.9971721561963847,3.6667419183929866,0.2719504613058267 +2.3343752069238803,1.4953036778474313,0.839071529076449,3.8296788847713117,0.21909709777835693 +1.8984103435674626,1.4228734155714733,0.47553692799598934,3.321283759138936,0.14317865093203458 +1.1515591783728496,1.155984876360904,-0.004425697988054367,2.3075440547337536,-0.0019179256746909683 +1.191035708591997,1.6743404673450044,-0.4833047587530075,2.8653761759370013,-0.1686706139360438 +1.4437835167907451,2.2876374755232405,-0.8438539587324954,3.7314209923139856,-0.2261481511924474 +1.4878130027340717,2.485611281912668,-0.9977982791785962,3.9734242846467396,-0.2511179797823444 +1.30241641120314,2.20986319265333,-0.9074467814501901,3.51227960385647,-0.2583640495061432 +1.0252113439034076,1.6201320072133,-0.5949206633098925,2.6453433511167077,-0.22489355230909897 +1.3409818100340658,1.4777190282418928,-0.13673721820782703,2.8187008382759586,-0.04851072393034144 +1.8513074697066543,1.4963832029179542,0.35492426678870004,3.3476906726246085,0.10602062779905451 +2.178015732126852,1.418327819268029,0.7596879128588228,3.596343551394881,0.21123897147261406 +2.1219797884827614,1.1435263256638706,0.9784534628188908,3.265506114146632,0.29963302122758023 +2.1564373218840984,1.1987778415607124,0.957659480323386,3.355215163444811,0.28542416318247493 +2.1499907414125516,1.4475936839098438,0.7023970575027079,3.5975844253223954,0.19524129928924822 +1.7610625609235342,1.4858992228719359,0.2751633380515983,3.24696178379547,0.08474486500729668 +1.2956787649325605,1.5151187281440173,-0.21943996321145676,2.810797493076578,-0.07807035681224662 +1.0336040362627443,1.6939207445068263,-0.660316708244082,2.7275247807695706,-0.242093752144673 +1.3470823341261138,2.28660722787437,-0.9395248937482563,3.633689562000484,-0.2585594827839427 +1.4973223869389187,2.4860270051255924,-0.9887046181866737,3.983349392064511,-0.24820936374708588 +1.413663950297689,2.2094789201116356,-0.7958149698139465,3.6231428704093247,-0.21964769214967206 +1.1354528941539286,1.543534955967317,-0.40808206181338846,2.6789878501212456,-0.15232695504569738 +1.2860273418988157,1.2064637746202749,0.07956356727854086,2.4924911165190906,0.031921304253094404 +1.9990065643293633,1.4512773041050906,0.5477292602242727,3.450283868434454,0.15874904242960208 +2.3656397936082243,1.4838480660668978,0.8817917275413265,3.849487859675122,0.229067283671274 +2.2888183486174967,1.2888575222228695,0.9999608263946271,3.577675870840366,0.2795001175329348 +1.915291867939402,1.0419872278458797,0.8733046400935223,2.9572790957852817,0.2953068046022972 +1.8859177489235606,1.3530847285901757,0.5328330203333849,3.2390024775137363,0.16450528334957878 +1.5600262583718347,1.4981209643774207,0.061905293994414023,3.0581472227492554,0.020242744866534435 +1.4088831272632092,1.8330621346001976,-0.42417900733698843,3.241945261863407,-0.13084089121639847 +1.1273411664220134,1.9337506603342547,-0.8064094939122413,3.061091826756268,-0.2634385178724825 +1.2140913347480762,2.20529414661155,-0.9912028118634737,3.419385481359626,-0.28987746987489366 +1.45483333591676,2.388148447980683,-0.9333151120639229,3.842981783897443,-0.2428622264031086 +1.4816601122368667,2.1285794345655233,-0.6469193223286567,3.61023954680239,-0.17919013792357263 +1.2819546116251388,1.4840897320123219,-0.20213512038718306,2.7660443436374607,-0.07307732461055456 +1.3424973572300871,1.0503585484962485,0.2921388087338386,2.3928559057263357,0.12208792348704414 +2.073874265165486,1.3589872963858198,0.7148869687796662,3.432861561551306,0.20824812068932066 +2.461384575767468,1.4987787094539016,0.9626058663135666,3.9601632852213697,0.24307226671835522 +2.37863197755415,1.4039867018334888,0.9746452757206612,3.782618679387639,0.2576641629334006 +1.867250965563457,1.1191934358744504,0.7480575296890066,2.9864444014379075,0.25048433157799066 +1.5599775763962072,1.2216583654251565,0.33831921097105067,2.7816359418213636,0.1216259848690068 +1.458260773957818,1.6125122238453997,-0.15425144988758177,3.0707729978032177,-0.050232123962901463 +1.4793359799759997,2.0883919560823614,-0.6090559761063616,3.567727936058361,-0.17071256189429312 +1.2749719847801657,2.1897143425847077,-0.9147423578045419,3.4646863273648734,-0.26401880902744373 +1.0587156314135484,2.055183538970681,-0.9964679075571325,3.1138991703842294,-0.32000647838387675 +1.3647883686964235,2.1990117292029367,-0.8342233605065132,3.5638000978993603,-0.2340825348195698 +1.4992954362058981,1.967027276452967,-0.46773184024706893,3.466322712658865,-0.13493603424139705 +1.4122528055843588,1.3989760583613133,0.013276747223045504,2.811228863945672,0.004722755729112378 +1.602046730026757,1.11101200609653,0.49103472393022685,2.713058736123287,0.1809893451226458 +2.0777330020304987,1.2291627272458925,0.8485702747846062,3.306895729276391,0.2566062991560634 +2.4599048766469025,1.4615586491981674,0.9983462274487351,3.92146352584507,0.25458511111195226 +2.380568531471255,1.4768763263797382,0.9036922050915166,3.857444857850993,0.23427222899952724 +1.8556944294271318,1.2679116158667512,0.5877828135603806,3.123606045293883,0.18817443846542414 +1.195019803450208,1.0670561138228152,0.1279636896273928,2.262075917273023,0.05656914016469241 +1.3704863054008456,1.7336717138169035,-0.36318540841605795,3.104158019217749,-0.11699965213355376 +1.4996709985406653,2.2650850504860216,-0.7654140519453563,3.764756049026687,-0.20331039833065437 +1.3938526134920721,2.3740952543021763,-0.9802426408101041,3.7679478677942484,-0.2601529201580851 +1.1027991902012957,2.057872834248599,-0.9550736440473031,3.1606720244498945,-0.3021742327768193 +1.2366022985227687,1.9326716083866842,-0.6960693098639155,3.169273906909453,-0.21963053062292553 +1.4647260292387045,1.7313689615986334,-0.26664293235992886,3.196094990837338,-0.08342772449640856 +1.7023487813422662,1.4742818468591565,0.22806693448310966,3.1766306282014227,0.07179523248890883 diff --git a/testdata/golden/g_LogReturn.csv b/testdata/golden/g_LogReturn.csv new file mode 100644 index 00000000..994acef8 --- /dev/null +++ b/testdata/golden/g_LogReturn.csv @@ -0,0 +1,81 @@ +LogReturn +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-0.017306474066620822 +-0.056984358938089445 +-0.08416015244617657 +-0.0968408998452909 +-0.09459897481932036 +-0.07840554958163955 +-0.050319995900311255 +-0.013141599656154614 +0.029893106348736258 +0.07533124881022993 +0.11965309021534941 +0.15939110883868668 +0.19127049191283457 +0.21241368648479947 +0.2206226686788853 +0.2147074789912459 +0.1947825664869689 +0.16242833280001825 +0.12063448012705054 +0.07350081776175862 +0.025740986192436786 +-0.01791620172198416 +-0.053315501635056974 +-0.0773496218078033 +-0.08824224398180608 +-0.08560861658562634 +-0.07031911428423536 +-0.044237450090307495 +-0.00992092439856273 +0.029648258010936037 +0.07126948039852563 +0.11167501395776239 +0.14765878057034684 +0.17622394814926068 +0.19478189996172393 +0.2014095072483073 +0.1951339054275279 +0.1761770436739297 +0.1460757424512295 +0.10761136134048321 +0.06453217971121591 +0.021108580585394252 +-0.01839772140644977 +-0.05025328424578291 +-0.07167065372118209 +-0.08105815841096818 +-0.07807629850180921 +-0.06352314537761981 +-0.03910926841437008 +-0.007195346069605131 +0.02944941502577963 +0.0678410799809569 +0.10493176510603268 +0.13774371139448147 +0.16351993095701664 +0.17991625693719887 +0.18523694710037023 +0.1786841498914219 +0.16056211269931903 +0.1323657679959051 +0.09670075699480236 +0.05702353863289139 +0.01723783082766982 +-0.01878149994704571 +-0.04765196726005548 +-0.06685491606172492 diff --git a/testdata/golden/g_LongLeggedDoji.csv b/testdata/golden/g_LongLeggedDoji.csv new file mode 100644 index 00000000..2b5321af --- /dev/null +++ b/testdata/golden/g_LongLeggedDoji.csv @@ -0,0 +1,81 @@ +LongLeggedDoji +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 diff --git a/testdata/golden/g_LongLine.csv b/testdata/golden/g_LongLine.csv new file mode 100644 index 00000000..00f79e45 --- /dev/null +++ b/testdata/golden/g_LongLine.csv @@ -0,0 +1,81 @@ +LongLine +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_LongShortRatio.csv b/testdata/golden/g_LongShortRatio.csv new file mode 100644 index 00000000..282ba5f7 --- /dev/null +++ b/testdata/golden/g_LongShortRatio.csv @@ -0,0 +1,81 @@ +LongShortRatio +1.5 +1.4999999999999998 +1.4999999999999998 +1.4999999999999998 +1.5 +1.4999999999999998 +1.4999999999999998 +1.4999999999999998 +1.5 +1.5 +1.4999999999999998 +1.4999999999999998 +1.5 +1.4999999999999998 +1.4999999999999998 +1.5 +1.4999999999999998 +1.4999999999999998 +1.4999999999999998 +1.4999999999999998 +1.5 +1.4999999999999998 +1.4999999999999998 +1.5 +1.5 +1.5 +1.5 +1.4999999999999998 +1.4999999999999998 +1.5 +1.4999999999999998 +1.4999999999999998 +1.4999999999999998 +1.5 +1.4999999999999998 +1.5 +1.4999999999999998 +1.5 +1.4999999999999998 +1.5 +1.5 +1.5 +1.5 +1.5 +1.4999999999999998 +1.4999999999999998 +1.4999999999999998 +1.4999999999999998 +1.5 +1.4999999999999998 +1.4999999999999998 +1.5 +1.5 +1.4999999999999998 +1.5 +1.5 +1.5 +1.4999999999999998 +1.4999999999999998 +1.4999999999999998 +1.4999999999999998 +1.4999999999999998 +1.5 +1.5 +1.4999999999999998 +1.4999999999999998 +1.5 +1.5 +1.5 +1.5 +1.4999999999999998 +1.5 +1.5 +1.5 +1.4999999999999998 +1.4999999999999998 +1.4999999999999998 +1.4999999999999998 +1.5 +1.5 diff --git a/testdata/golden/g_M2Measure.csv b/testdata/golden/g_M2Measure.csv new file mode 100644 index 00000000..80df60bb --- /dev/null +++ b/testdata/golden/g_M2Measure.csv @@ -0,0 +1,81 @@ +M2Measure +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +13.204383519359931 +12.696874135845398 +11.623752825131113 +10.82563369318145 +10.522093779477505 +10.731987441982785 +11.43195771551129 +12.395492794152679 +12.798679388204528 +11.84294889794525 +10.232414235346983 +8.886885772212892 +8.007409324282953 +7.520889677027021 +7.346726823914614 +7.448164045818522 +7.835520212711124 +8.567616377448608 +9.747810502818025 +11.449715080148563 +13.36242636362492 +14.329360516477843 +13.702060952772223 +12.526315908547211 +11.681527059559853 +11.38508901669881 +11.654025254714012 +12.458176945716525 +13.521628193792981 +13.895471390711792 +12.763429233389642 +10.97940078734489 +9.517670336564851 +8.568581210409066 +8.046557542373915 +7.864493263937235 +7.9841935623646645 +8.419138825976681 +9.23606061564543 +10.549145805183478 +12.42968709112574 +14.495019103372352 +15.449636530737404 +14.69461006178041 +13.419544380156442 +12.533838787756219 +12.250353863020804 +12.584097484006794 +13.496602344031448 +14.655767717068247 +14.982780226753187 +13.663807003982749 +11.709216897943652 +10.136963759475197 +9.122929263044878 +8.568990026775534 +8.382053919789891 +8.523010645646131 +9.009018917467849 +9.915240397533696 +11.366764692541757 +13.429784026406077 +15.64016972422957 +16.563824372471796 +15.674409213741423 +14.303860538763779 +13.38306040650218 diff --git a/testdata/golden/g_MaEnvelope.csv b/testdata/golden/g_MaEnvelope.csv new file mode 100644 index 00000000..f48d5bae --- /dev/null +++ b/testdata/golden/g_MaEnvelope.csv @@ -0,0 +1,81 @@ +upper,middle,lower +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +321.248595925725,107.082865308575,-107.082865308575 +320.8809335562672,106.96031118542241,-106.96031118542241 +319.65296857556774,106.55098952518925,-106.55098952518925 +317.80838197078725,105.93612732359576,-105.93612732359576 +315.6459357023118,105.21531190077062,-105.21531190077062 +313.49278518761923,104.49759506253974,-104.49759506253974 +311.675255482187,103.89175182739567,-103.89175182739567 +310.4896916341646,103.49656387805487,-103.49656387805487 +310.17598706381204,103.39199568793734,-103.39199568793734 +310.8961545987311,103.63205153291037,-103.63205153291037 +312.71985435049044,104.23995145016349,-104.23995145016349 +315.61817118432464,105.20605706144154,-105.20605706144154 +319.466197622006,106.48873254066868,-106.48873254066868 +324.05419145486917,108.01806381828972,-108.01806381828972 +329.1063113906457,109.7021037968819,-109.7021037968819 +334.3052571345783,111.4350857115261,-111.4350857115261 +339.3206128797511,113.10687095991703,-113.10687095991703 +343.83836236706026,114.61278745568676,-114.61278745568676 +347.5889390224205,115.86297967414018,-115.86297967414018 +350.37130553599127,116.79043517866376,-116.79043517866376 +352.0709119263248,117.35697064210828,-117.35697064210828 +352.66992794905065,117.55664264968355,-117.55664264968355 +352.24883581950206,117.41627860650068,-117.41627860650068 +350.97924097611667,116.99308032537222,-116.99308032537222 +349.10854307770484,116.36951435923494,-116.36951435923494 +346.93783652874663,115.64594550958222,-115.64594550958222 +344.7950146129743,114.93167153765809,-114.93167153765809 +343.0054797628849,114.33515992096163,-114.33515992096163 +341.8630763295759,113.9543587765253,-113.9543587765253 +341.6038423420034,113.86794744733447,-113.86794744733447 +342.3849249328367,114.12830831094557,-114.12830831094557 +344.2705428531198,114.75684761770661,-114.75684761770661 +347.22625000250105,115.742083334167,-115.742083334167 +351.1220123967876,117.04067079892921,-117.04067079892921 +355.7438237164803,118.58127457216008,-118.58127457216008 +360.81282185392917,120.2709406179764,-120.2709406179764 +366.010198834889,122.00339961162967,-122.00339961162967 +371.00567898536815,123.66855966178939,-123.66855966178939 +375.4870214739423,125.16234049131411,-125.16234049131411 +379.18791185529403,126.39597061843133,-126.39597061843133 +381.91175114646154,127.30391704882051,-127.30391704882051 +383.54921742846574,127.84973914282192,-127.84973914282192 +384.0880312477443,128.0293437492481,-128.0293437492481 +383.6140525031672,127.87135083438908,-127.87135083438908 +382.3036108369829,127.43453694566097,-127.43453694566097 +380.4077546330303,126.80258487767678,-126.80258487767678 +378.2298256122957,126.07660853743191,-126.07660853743191 +376.09836222040474,125.36612074013492,-125.36612074013492 +374.3377522667448,124.7792507555816,-124.7792507555816 +373.2392563275607,124.41308544252024,-124.41308544252024 +373.0349903061262,124.34499676870873,-124.34499676870873 +373.8771912104035,124.62573040346784,-124.62573040346784 +375.8246182745228,125.27487275817427,-125.27487275817427 +378.83730417139634,126.27910139046546,-126.27910139046546 +382.7801251750151,127.59337505833837,-127.59337505833837 +387.4348713604604,129.14495712015346,-129.14495712015346 +392.51973864661306,130.83991288220435,-130.83991288220435 +397.71450151543644,132.57150050514548,-132.57150050514548 +402.6891178037904,134.2297059345968,-134.2297059345968 +407.13321038691674,135.71107012897224,-135.71107012897224 +410.78379224261175,136.92793074753726,-136.92793074753726 +413.4487582986794,137.81625276622648,-137.81625276622648 +415.02404560689286,138.34134853563094,-138.34134853563094 +415.50292897623365,138.50097632541122,-138.50097632541122 +414.97662171417693,138.3255405713923,-138.3255405713923 +413.62612781359,137.87537593786334,-137.87537593786334 +411.70607340512555,137.23535780170852,-137.23535780170852 diff --git a/testdata/golden/g_MacdExt.csv b/testdata/golden/g_MacdExt.csv new file mode 100644 index 00000000..53a18d51 --- /dev/null +++ b/testdata/golden/g_MacdExt.csv @@ -0,0 +1,81 @@ +macd,signal,histogram +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +8.275241006281377,4.985484156055459,3.289756850225918 +7.961370400158174,5.846893427555405,2.114476972602769 +7.248978863270665,6.498661698810023,0.7503171644606415 +6.2017022099280155,6.882568451277783,-0.6808662413497677 +4.9130905445203865,6.9643204381314865,-2.0512298936111 +3.498251709309386,6.736614997863451,-3.2383632885540647 +2.0835690436989296,6.219792379288811,-4.136223335589881 +0.7954119369276214,5.460018807697257,-4.664606870769636 +-0.2511523731120917,4.525162593442496,-4.776314966554588 +-0.9626374135358162,3.498731657907252,-4.461369071443068 +-1.275488344663657,2.4724140195937157,-3.7479023642573726 +-1.161759124566629,1.5378875765006828,-2.6996467010673117 +-0.6316088457618463,0.7786307925351426,-1.4102396382969888 +0.2676057462658008,0.2624658149512997,0.005139931314501078 +1.4555604900974117,0.03550012392774704,1.4200603661696647 +2.826138926494181,0.118007888682775,2.7081310378114063 +4.256911365659661,0.5026189363196684,3.754292429339993 +5.620071166802973,1.1549771074213422,4.465094059381631 +6.793851324720265,2.0168091894497957,4.777042135270469 +7.673401553717028,3.0111302892698717,4.662271264447156 +8.180154251358488,4.049120664372662,4.131033586985826 +8.268842708401152,5.038059725946329,3.230782982454823 +7.931544649113917,5.889608492929453,2.0419361561844642 +7.19838990457454,6.527700650093578,0.670689254480962 +6.134869004593753,6.895337325437975,-0.7604683208442218 +4.835983103734421,6.959678629668504,-2.1236955259340835 +3.417757811111784,6.714977145702816,-3.2972193345910323 +2.0068789682846244,6.183091328321079,-4.1762123600364545 +0.7293761803310588,5.411532953500416,-4.682156773169357 +-0.30063503342520903,4.469223032968894,-4.769858066394103 +-0.9911468388914955,3.440335305491933,-4.431482144383429 +-1.2804778730031643,2.4167772474789238,-3.697255120482088 +-1.1427830561834469,1.4899802518391472,-2.632763308022594 +-0.5903622563291293,0.742732333958827,-1.3330945902879563 +0.32743842175673876,0.24178292485019565,0.08565549690654312 +1.5286345769416698,0.031880343275738535,1.4967542336659312 +2.9059269341469474,0.13177456170488552,2.774152372442062 +4.336286069026045,0.5325423271154395,3.8037437419106053 +5.6919422600290375,1.1983842486103558,4.493558011418681 +6.851798777098338,2.069822650387004,4.781976126711334 +7.712249091908205,3.069014535377156,4.643234556531049 +8.196431740473884,4.106705068339082,4.089726672134802 +8.261096128816547,5.0902004444663795,3.1708956843501674 +7.9004659797123225,5.931647950905888,1.9688180288064343 +7.14675531033356,6.555883587949432,0.5908717223841284 +6.067290850036102,6.907146245270449,-0.8398553952343475 +4.758497944141993,6.954058675838888,-2.1955607316968946 diff --git a/testdata/golden/g_MacdFix.csv b/testdata/golden/g_MacdFix.csv new file mode 100644 index 00000000..7ad5a00c --- /dev/null +++ b/testdata/golden/g_MacdFix.csv @@ -0,0 +1,81 @@ +macd,signal,histogram +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +3.553825374871522,4.7567646581597245,-1.2029392832882024 +2.8208654161048656,4.369584809748753,-1.5487193936438874 +2.1109014543067843,3.9178481386603594,-1.806946684353575 +1.4897304373886868,3.4322245984060253,-1.9424941610173385 +1.0151049910054155,2.9488006769259036,-1.9336956859204881 +0.7315731385597957,2.5053551692526823,-1.7737820306928866 +0.6664991548332893,2.137583966368804,-1.4710848115355146 +0.8276206486027746,1.8755913028155982,-1.0479706542128235 +1.2023598043004569,1.74094500311257,-0.5385851988121131 +1.7589500704087442,1.744546016571805,0.014404053836939212 +2.449277456832604,1.885492304623965,0.563785152208639 +3.2131824784813148,2.1510303393954353,1.0621521390858795 +3.9838383370451567,2.5175919389253796,1.466246398119777 +4.693724820711168,2.9528185152825377,1.7409063054286302 +5.280664208546995,3.418387653935429,1.8622765546115656 +5.693379944743711,3.8733861120970854,1.8199938326466256 +5.896081491642136,4.277925188006096,1.6181563036360398 +5.871665770714699,4.596673304547816,1.274992466166883 +5.623249186369037,4.801988480912061,0.821260705456976 +5.17389335937969,4.876369456605587,0.29752390277410345 +4.564549053715282,4.814005376027526,-0.2494563223122439 +3.8504019492156516,4.621284690665152,-0.7708827414495003 +3.0959466751243525,4.316217087556993,-1.2202704124326402 +2.369229123514458,3.926819494748486,-1.5575903712340278 +1.735771359392487,3.488609867677286,-1.7528385082847988 +1.252721799050505,3.0414322539519296,-1.7887104549014246 +0.9637532073126067,2.6258964446240656,-1.6621432373114589 +0.8951642651140048,2.2797500087220537,-1.3845857436080489 +1.0535329484060725,2.0345065966588574,-0.9809736482527849 +1.4251313413431745,1.9126315455957208,-0.48750020425254625 +1.9771541634642489,1.9255360691694265,0.051618094294822336 +2.6606512771767967,2.072559110770901,0.5880921664058958 +3.414902230493496,2.34102773471542,1.073874495778076 +4.17284207727586,2.707390603227508,1.4654514740483515 +4.867053809684606,3.139323244518928,1.727730565165678 +5.4357921236225195,3.5986170203396464,1.8371751032828731 +5.828500438890558,4.044593704049829,1.7839067348407287 +6.010328361604678,4.437740635560799,1.5725877260438788 +5.965246063689932,4.743241721186626,1.2220043425033058 +5.697477387222705,4.934088854393842,0.7633885328288628 +5.231123664416998,4.9934958163984735,0.23762784801852455 +4.608011861752942,4.916399025469367,-0.30838716371642505 +3.883959272298,4.709911074835094,-0.8259518025370935 +3.123788425025225,4.39268654487312,-1.2688981198478952 +2.395537519050208,3.993256739708538,-1.59771922065833 +1.764383551803462,3.547482102127523,-1.7830985503240608 +1.286820974089835,3.0953498765199856,-1.8085289024301505 diff --git a/testdata/golden/g_MacdHistogram.csv b/testdata/golden/g_MacdHistogram.csv new file mode 100644 index 00000000..0824845a --- /dev/null +++ b/testdata/golden/g_MacdHistogram.csv @@ -0,0 +1,81 @@ +MacdHistogram +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +1.0615124333142125 +1.910610960117232 +2.5878864251115843 +3.0331226298914604 +3.206760790686512 +3.0934506067926417 +2.7034345151813484 +2.0716425664952984 +1.254579588202871 +0.32528330516524173 +-0.6331957491252509 +-1.5352097676562053 +-2.300161986490191 +-2.859704388527902 +-3.1638417001890997 +-3.185396320482466 +-2.9224352620634706 +-2.3984422516117068 +-1.6602195703181717 +-0.77370702227725 +0.18190851606706548 +1.1212668085176125 +1.9604593747424335 +2.624524891068433 +3.05414534291119 +3.2109447877266306 +3.0809174104686576 +2.675678657107656 +2.0314276888467675 +1.2057138399240177 +0.2722959232142479 +-0.6854464122993806 +-1.5819607275006184 +-2.337163930138524 +-2.8835958530107924 +-3.172445265118249 +-3.1779100298717236 +-2.8995019301833165 +-2.3620902771119594 +-1.6136804065038075 +-0.7211255038060885 +0.2358451931039276 +1.1717483702785507 +2.0029826083572533 +2.6552962490409433 +3.070420075140455 +3.2112723266663554 +3.065271104392483 +2.6454582737617853 +1.9893344741569154 +1.155509298697206 +0.21846587403094997 +-0.7380924953764332 +-1.6287192940025084 +-2.373857477900864 +-2.9069460683954667 +-3.1803658459845776 +-3.169693033323393 +-2.8758809984509086 +-2.3251750932080766 +-1.5667682340766393 diff --git a/testdata/golden/g_MacdIndicator.csv b/testdata/golden/g_MacdIndicator.csv new file mode 100644 index 00000000..7ad5a00c --- /dev/null +++ b/testdata/golden/g_MacdIndicator.csv @@ -0,0 +1,81 @@ +macd,signal,histogram +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +3.553825374871522,4.7567646581597245,-1.2029392832882024 +2.8208654161048656,4.369584809748753,-1.5487193936438874 +2.1109014543067843,3.9178481386603594,-1.806946684353575 +1.4897304373886868,3.4322245984060253,-1.9424941610173385 +1.0151049910054155,2.9488006769259036,-1.9336956859204881 +0.7315731385597957,2.5053551692526823,-1.7737820306928866 +0.6664991548332893,2.137583966368804,-1.4710848115355146 +0.8276206486027746,1.8755913028155982,-1.0479706542128235 +1.2023598043004569,1.74094500311257,-0.5385851988121131 +1.7589500704087442,1.744546016571805,0.014404053836939212 +2.449277456832604,1.885492304623965,0.563785152208639 +3.2131824784813148,2.1510303393954353,1.0621521390858795 +3.9838383370451567,2.5175919389253796,1.466246398119777 +4.693724820711168,2.9528185152825377,1.7409063054286302 +5.280664208546995,3.418387653935429,1.8622765546115656 +5.693379944743711,3.8733861120970854,1.8199938326466256 +5.896081491642136,4.277925188006096,1.6181563036360398 +5.871665770714699,4.596673304547816,1.274992466166883 +5.623249186369037,4.801988480912061,0.821260705456976 +5.17389335937969,4.876369456605587,0.29752390277410345 +4.564549053715282,4.814005376027526,-0.2494563223122439 +3.8504019492156516,4.621284690665152,-0.7708827414495003 +3.0959466751243525,4.316217087556993,-1.2202704124326402 +2.369229123514458,3.926819494748486,-1.5575903712340278 +1.735771359392487,3.488609867677286,-1.7528385082847988 +1.252721799050505,3.0414322539519296,-1.7887104549014246 +0.9637532073126067,2.6258964446240656,-1.6621432373114589 +0.8951642651140048,2.2797500087220537,-1.3845857436080489 +1.0535329484060725,2.0345065966588574,-0.9809736482527849 +1.4251313413431745,1.9126315455957208,-0.48750020425254625 +1.9771541634642489,1.9255360691694265,0.051618094294822336 +2.6606512771767967,2.072559110770901,0.5880921664058958 +3.414902230493496,2.34102773471542,1.073874495778076 +4.17284207727586,2.707390603227508,1.4654514740483515 +4.867053809684606,3.139323244518928,1.727730565165678 +5.4357921236225195,3.5986170203396464,1.8371751032828731 +5.828500438890558,4.044593704049829,1.7839067348407287 +6.010328361604678,4.437740635560799,1.5725877260438788 +5.965246063689932,4.743241721186626,1.2220043425033058 +5.697477387222705,4.934088854393842,0.7633885328288628 +5.231123664416998,4.9934958163984735,0.23762784801852455 +4.608011861752942,4.916399025469367,-0.30838716371642505 +3.883959272298,4.709911074835094,-0.8259518025370935 +3.123788425025225,4.39268654487312,-1.2688981198478952 +2.395537519050208,3.993256739708538,-1.59771922065833 +1.764383551803462,3.547482102127523,-1.7830985503240608 +1.286820974089835,3.0953498765199856,-1.8085289024301505 diff --git a/testdata/golden/g_Mama.csv b/testdata/golden/g_Mama.csv new file mode 100644 index 00000000..c8f9228e --- /dev/null +++ b/testdata/golden/g_Mama.csv @@ -0,0 +1,81 @@ +mama,fama +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +115.49040099775118,111.94765361474765 +113.70752102999899,112.38762046856048 +113.52220763470226,112.41598514771403 +113.2812493729813,112.43761675334571 +113.026718789299,112.45234430424455 +112.80310655573204,112.46111336053173 +112.6532869651131,112.46591770064626 +112.61463082489792,112.46963552875255 +112.7156128246528,112.47578496115004 +112.97321628773724,112.48822074431472 +113.39136699696094,112.51079940063087 +119.08305569416893,114.1538634740154 +119.52493966681409,114.28814037883537 +120.07558489674919,114.4328264917832 +120.69365348663378,114.58934716665446 +121.33362550667604,114.757954125155 +121.94977311961688,114.93774960001653 +122.50015787920749,115.1268098069963 +122.95029390532567,115.32239690945454 +123.27614949662468,115.52124072413379 +123.46621884794317,115.71986517722902 +123.52247861485891,115.91493051316976 +122.89912937543713,117.6609802287366 +122.7732802354807,117.7887877289052 +122.5908327069159,117.90883885335546 +122.39425856902928,118.0209743462473 +122.2282159503425,118.12615538634968 +122.1355139279298,118.22638934988917 +122.15324460814746,118.32456073134564 +122.30942808292671,118.42418241513518 +122.62046984791206,118.52908960095459 +123.08965769941986,118.64310380341622 +129.26140349380938,121.29767872601451 +129.72610325397872,121.50838933921361 +130.29663496003334,121.7280954797341 +130.93136548885562,121.95817722996213 +131.58469366448418,122.19884014082518 +132.211035343511,122.44914502089233 +132.76881139560348,122.70713668026012 +133.2240821238984,122.97006031635108 +133.55350326353093,123.23464639003058 +133.74633930845428,123.49743871299117 +133.80535413272818,123.75513659848458 +133.21680450406154,126.12055357487883 +133.09421690083633,126.29489515802776 +132.91691237188468,126.46044558837417 +132.72760897423012,126.61712467302056 +132.57098576507005,126.7659712003218 diff --git a/testdata/golden/g_MarketFacilitationIndex.csv b/testdata/golden/g_MarketFacilitationIndex.csv new file mode 100644 index 00000000..e85c5359 --- /dev/null +++ b/testdata/golden/g_MarketFacilitationIndex.csv @@ -0,0 +1,81 @@ +MarketFacilitationIndex +0.003 +0.0034531958384942823 +0.003393599063673025 +0.0027771375848308507 +0.0025669903690511264 +0.002907287071702108 +0.0035323403425907033 +0.0035673635547365606 +0.0029863978162095605 +0.0020299258517560335 +0.0026955436900556375 +0.0034203073860133216 +0.003573399233570033 +0.003134121590159163 +0.003019240407690413 +0.0031814346691908754 +0.0031065435809043735 +0.0031399113736528747 +0.002819964131357433 +0.0034553251240977993 +0.0035602391012029837 +0.003055015968859481 +0.002107037891958594 +0.00260638231053609 +0.003393384079859668 +0.0036257429881445887 +0.003227173461884621 +0.0024555845012414782 +0.002651331148289285 +0.003199061574658112 +0.003498587591896643 +0.0032385968066832357 +0.003316560909757761 +0.0034888910382032505 +0.003094079199595434 +0.0026375162125234345 +0.00252696749165756 +0.003334055311929045 +0.003631818531842613 +0.0032942024744876995 +0.0024378019079907584 +0.0022781761269107578 +0.003178637826832535 +0.0035861239570105815 +0.0033799753041459154 +0.002840228047708984 +0.0031683824287750953 +0.003050589258074033 +0.0031863978143954566 +0.0029528751166039958 +0.00324296152805332 +0.003591613823621096 +0.0033342236847902253 +0.0025323640163509276 +0.0021791000836290683 +0.0031207860162520613 +0.0036069762079782705 +0.0034641495312619374 +0.002759393605130399 +0.002601233849239471 +0.002914394482628389 +0.003444341536421292 +0.003408244377380628 +0.003103464377453007 +0.0034831614872284917 +0.0033265519644822316 +0.0026540873796261385 +0.0025260370436954033 +0.003045258727752084 +0.003583308275644204 +0.0035097649593061183 +0.002840151368902525 +0.0020628729834252253 +0.0028492129589005 +0.0034896812064779815 +0.0035378835993400367 +0.0030140681450624564 +0.003076033679487388 +0.00316202303774019 +0.0031477010988560155 diff --git a/testdata/golden/g_MartinRatio.csv b/testdata/golden/g_MartinRatio.csv new file mode 100644 index 00000000..0f17ec7f --- /dev/null +++ b/testdata/golden/g_MartinRatio.csv @@ -0,0 +1,81 @@ +MartinRatio +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Marubozu.csv b/testdata/golden/g_Marubozu.csv new file mode 100644 index 00000000..69e605a1 --- /dev/null +++ b/testdata/golden/g_Marubozu.csv @@ -0,0 +1,81 @@ +Marubozu +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_MassIndex.csv b/testdata/golden/g_MassIndex.csv new file mode 100644 index 00000000..0033fa1b --- /dev/null +++ b/testdata/golden/g_MassIndex.csv @@ -0,0 +1,81 @@ +MassIndex +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +6.891609319773189 +6.99655269717135 +7.070171607976835 +7.025089946276542 +6.948042052493669 +6.9347259813380475 +7.017515203380686 +7.056727229506029 +6.9917559330940815 +6.967874321647217 +7.0080319238470645 +7.030601181426416 +6.9546630012802275 +6.922770524173647 +6.9731343426987245 +7.066665679369205 +7.057669118775377 +6.950793909692683 +6.892894580388496 +6.9854150298999205 +7.069045401356183 +7.033463227668939 +6.97050946833536 +6.967998310917018 +7.020188701375519 +7.028659825211703 +6.972077096400162 +6.968364295289801 +7.026516702832012 +7.05170181458103 +6.975136481974051 +6.897349781571126 +6.951825178350038 +7.063065632014629 +7.065611218050116 +6.972526040678481 +6.92658899189823 +6.959251534028738 +7.038491746450153 +7.016490611454693 +6.974400605663545 +6.98971348313491 +7.043310711712646 +7.010075177350414 +6.941868843328283 +6.95364975265419 +7.0342953446564636 +7.068057281290564 +6.994609790030569 +6.912336239973796 +6.93273201869931 +7.048534325756252 +7.064474317385372 +6.98746542189016 +6.956262865000127 +6.993623017361101 +7.007086535044541 +6.978644729608512 +6.956301314651476 +6.995087288928703 +7.058005397722045 +7.0255917437417965 +6.913586647556063 +6.926058867439536 +7.029337962544259 +7.077870265565264 +7.011143162045219 +6.940469947390425 +6.94009784428063 +7.027222875843668 diff --git a/testdata/golden/g_MatHold.csv b/testdata/golden/g_MatHold.csv new file mode 100644 index 00000000..548d5961 --- /dev/null +++ b/testdata/golden/g_MatHold.csv @@ -0,0 +1,81 @@ +MatHold +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_MatchingLow.csv b/testdata/golden/g_MatchingLow.csv new file mode 100644 index 00000000..5dbfd26d --- /dev/null +++ b/testdata/golden/g_MatchingLow.csv @@ -0,0 +1,81 @@ +MatchingLow +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_MaxDrawdown.csv b/testdata/golden/g_MaxDrawdown.csv new file mode 100644 index 00000000..1d51bc9e --- /dev/null +++ b/testdata/golden/g_MaxDrawdown.csv @@ -0,0 +1,81 @@ +MaxDrawdown +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.11634127345040222 +0.12821030145315085 +0.1331735000951348 +0.1331735000951348 +0.1331735000951348 +0.1331735000951348 +0.1331735000951348 +0.12848591667244894 +0.11764684482941928 +0.10157868991104642 +0.08163145656350326 +0.059639073995000014 +0.03790405604273088 +0.019048334089855002 +0.005693114578271463 +0.005299633662253274 +0.016795651904350065 +0.033098617914940426 +0.052389704554812816 +0.07258316476831601 +0.0915126451559611 +0.10712469987165406 +0.11766221882444922 +0.12182138508985806 +0.12182138508985806 +0.12182138508985806 +0.12182138508985806 +0.12182138508985806 +0.11714256410361094 +0.106819842069383 +0.09175989280684736 +0.07327028934655701 +0.053091790499189634 +0.0333617631244852 +0.016459952712424047 +0.0047138027568846995 +0.005230640090830808 +0.01611368029862617 +0.03134280485272303 +0.04922347521153511 +0.06782429814370941 +0.08514955133331055 +0.09931745531053977 +0.10872826720736029 +0.11220718102346297 +0.11220718102346297 +0.11220718102346297 +0.11220718102346297 +0.11220718102346297 +0.10753903894104662 +0.09766728005121854 +0.08348090178429443 +0.06624448981419782 +0.047612143066346396 +0.02957601401364172 +0.014311064191176653 +0.003903314430496008 +0.005169405070518737 +0.015524790599955774 +0.029831217603866415 +0.046500812330085135 +0.06373460629192022 +0.07968323276528869 +0.09261212521030097 +0.10105646093429439 +0.10395200934035767 +0.10395200934035767 diff --git a/testdata/golden/g_McClellanOscillator.csv b/testdata/golden/g_McClellanOscillator.csv new file mode 100644 index 00000000..88995985 --- /dev/null +++ b/testdata/golden/g_McClellanOscillator.csv @@ -0,0 +1,81 @@ +McClellanOscillator +0 +0 +0 +0 +-20 +-37 +-51.35000000000002 +-63.362499999999955 +-73.316375 +-81.46035625000002 +-68.01615843750005 +-56.181288515625056 +-45.781568289843904 +-36.66089965535173 +-28.67942347458404 +-21.711864222654867 +-35.646041741142085 +-47.38153331074295 +-57.178470936198096 +-65.26896025128121 +-71.85998381442073 +-77.13600904183306 +-61.261330566061474 +-47.38217381644631 +-35.27858392644316 +-24.753621650858236 +-15.631010796978899 +-7.7530234629271035 +-0.9785791749982309 +-15.181536412943956 +-27.24915716932287 +-37.43072713018023 +-45.94881581106233 +-53.002037554161234 +-58.76753195674007 +-43.403192011161195 +-30.04966539763541 +-18.48215181608282 +-8.499516944774882 +0.07813345491717882 +7.411633879379451 +-6.355281427102227 +-18.094217607008545 +-28.040536952793445 +-36.4044373086756 +-43.37354992641144 +-49.115273464943584 +-53.77887072306385 +-37.497352025141254 +-23.389166778291724 +-11.20972255834397 +-0.7402491374969031 +8.21485188301483 +15.830388996137344 +2.262521282876378 +-9.349318218376197 +-19.230694400855214 +-27.583117564870577 +-34.5865237822793 +-40.40150347925237 +-25.171303602768035 +-12.023626190360119 +-0.7222438717994919 +8.944049229928737 +17.164009585756844 +24.106255642061 +9.921344741990765 +-2.256360801279243 +-12.657017236768752 +-21.486293402928368 +-28.927893057980214 +-35.14582129775965 +-40.28642083628222 +-24.48020133753755 +-10.843482659423216 +0.8701292236615927 +10.880916737580833 +19.385735478293782 +26.56042682421196 +12.56198579085094 diff --git a/testdata/golden/g_McClellanSummationIndex.csv b/testdata/golden/g_McClellanSummationIndex.csv new file mode 100644 index 00000000..df45a215 --- /dev/null +++ b/testdata/golden/g_McClellanSummationIndex.csv @@ -0,0 +1,81 @@ +McClellanSummationIndex +0 +0 +0 +0 +-20 +-57 +-108.35000000000002 +-171.71249999999998 +-245.02887499999997 +-326.48923125 +-394.50538968750004 +-450.6866782031251 +-496.468246492969 +-533.1291461483207 +-561.8085696229048 +-583.5204338455596 +-619.1664755867017 +-666.5480088974447 +-723.7264798336428 +-788.995440084924 +-860.8554238993447 +-937.9914329411778 +-999.2527635072393 +-1046.6349373236856 +-1081.9135212501287 +-1106.667142900987 +-1122.298153697966 +-1130.051177160893 +-1131.0297563358913 +-1146.2112927488351 +-1173.460449918158 +-1210.8911770483382 +-1256.8399928594006 +-1309.8420304135618 +-1368.6095623703018 +-1412.0127543814629 +-1442.0624197790983 +-1460.544571595181 +-1469.0440885399557 +-1468.9659550850386 +-1461.554321205659 +-1467.9096026327613 +-1486.00382023977 +-1514.0443571925634 +-1550.448794501239 +-1593.8223444276505 +-1642.937617892594 +-1696.716488615658 +-1734.2138406407992 +-1757.6030074190908 +-1768.8127299774346 +-1769.5529791149315 +-1761.3381272319166 +-1745.5077382357792 +-1743.2452169529029 +-1752.594535171279 +-1771.825229572134 +-1799.4083471370045 +-1833.9948709192838 +-1874.3963743985362 +-1899.567678001304 +-1911.5913041916642 +-1912.3135480634637 +-1903.369498833535 +-1886.2054892477781 +-1862.099233605717 +-1852.1778888637264 +-1854.4342496650056 +-1867.0912669017744 +-1888.5775603047027 +-1917.505453362683 +-1952.6512746604426 +-1992.9376954967247 +-2017.4178968342621 +-2028.2613794936854 +-2027.3912502700236 +-2016.510333532443 +-1997.1245980541491 +-1970.564171229937 +-1958.0021854390861 diff --git a/testdata/golden/g_McGinleyDynamic.csv b/testdata/golden/g_McGinleyDynamic.csv new file mode 100644 index 00000000..b5fe0bdb --- /dev/null +++ b/testdata/golden/g_McGinleyDynamic.csv @@ -0,0 +1,81 @@ +McGinleyDynamic +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +107.082865308575 +105.6068876499359 +104.32715526404151 +103.3671049159074 +102.78911385781412 +102.59748448982594 +102.75489306216927 +103.20210131492199 +103.87426434932321 +104.71126157794693 +105.66225372532783 +106.68590195975727 +107.74782730355182 +108.81652983885866 +109.8586152437515 +110.83412704341947 +111.69326414369274 +112.37676629687549 +112.82318359188112 +112.98543905916084 +112.8542974603082 +112.47801748207826 +111.96286165397501 +111.44780450415185 +111.06514376992176 +110.90834415913078 +111.02006933658812 +111.3985826499578 +112.01305766580222 +112.81917277860813 +113.77046938575114 +114.82446723249097 +115.94437499743339 +117.0977520955522 +118.2533326545144 +119.37696736991994 +120.42764073741445 +121.35497743336853 +122.10049894239091 +122.60549296751418 +122.8271951559419 +122.76035835199285 +122.45419338373708 +122.01156430466804 +121.56544746479075 +121.24314958581078 +121.13668061029765 +121.29080106129638 +121.7077641334356 +122.36076800656132 +123.20832902049064 +124.20516466147988 +125.30833990715657 +126.4792330757849 +127.68249401647766 +128.88315338869853 +130.04290230416242 +131.11664262446416 +132.05087022379357 +132.7861538855208 +133.26619685644616 +133.45431594730576 +133.35350234257456 +133.02022068388948 +132.56074943041463 +132.10728560696438 +131.78434932135139 diff --git a/testdata/golden/g_MedianAbsoluteDeviation.csv b/testdata/golden/g_MedianAbsoluteDeviation.csv new file mode 100644 index 00000000..7d846685 --- /dev/null +++ b/testdata/golden/g_MedianAbsoluteDeviation.csv @@ -0,0 +1,81 @@ +MedianAbsoluteDeviation +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +4.021239205553876 +4.021239205553876 +4.104775303960615 +4.711022324796154 +6.039268841474794 +4.587371219056642 +4.0634789023672795 +4.059853236495208 +4.059853236495208 +4.059853236495208 +4.059853236495208 +4.460801371073309 +4.622671976784694 +7.438196702264328 +10.173944285133729 +9.821218104326462 +7.065805627806554 +4.56292001916465 +4.215287722874514 +4.016718336697792 +4.016718336697792 +4.016718336697792 +4.016718336697792 +4.144628446556304 +4.832846723570327 +6.036642512197076 +4.461928365886784 +4.02075091739367 +4.02075091739367 +4.02075091739367 +4.02075091739367 +4.02075091739367 +4.461928365886784 +4.65660398419093 +7.6222181940471145 +10.347077707458396 +9.641725071141053 +6.87754133022969 +4.53121066026506 +4.091361960026212 +4.01099115037168 +4.01099115037168 +4.01099115037168 +4.01099115037168 +4.183027062585616 +4.952809972303982 +6.135442193379831 +4.441902929531366 +3.97660342940474 +3.97660342940474 +3.97660342940474 +3.97660342940474 +3.97660342940474 +4.441902929531366 +4.7846528882686385 +7.8047208134439074 +10.38128093649145 +9.460212877786233 +6.6879687006961746 +4.498290886520934 +3.994949154047049 +3.994949154047049 +3.994949154047049 +3.994949154047049 +3.994949154047049 +4.219960295714074 +5.070878154119683 diff --git a/testdata/golden/g_MedianChannel.csv b/testdata/golden/g_MedianChannel.csv new file mode 100644 index 00000000..cc34b1eb --- /dev/null +++ b/testdata/golden/g_MedianChannel.csv @@ -0,0 +1,81 @@ +upper,middle,lower +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +115.75259017925208,107.71011176814433,99.66763335703658 +115.75259017925208,107.71011176814433,99.66763335703658 +115.91966237606556,107.71011176814433,99.5005611602231 +117.0145440910608,107.59249944146849,98.17045479187618 +117.24540925253268,105.1668715695831,93.0883338866335 +111.92341175092278,102.7486693128095,93.57392687469621 +110.87562711754406,102.7486693128095,94.62171150807494 +110.86837578579991,102.7486693128095,94.62896283981908 +110.86837578579991,102.7486693128095,94.62896283981908 +110.86837578579991,102.7486693128095,94.62896283981908 +110.86837578579991,102.7486693128095,94.62896283981908 +111.67027205495611,102.7486693128095,93.82706657066288 +112.02931402410694,102.78397007053755,93.53862611696816 +120.47588820054584,105.59949479601718,90.72310139148853 +129.28488058169458,108.93699201142712,88.58910344115966 +132.03421252864155,112.39177631998864,92.74934011133571 +129.83151689512098,115.69990563950788,101.56829438389477 +127.32863128647908,118.20279124814978,109.07695120982048 +126.63336669389881,118.20279124814978,109.77221580240075 +126.23622792154536,118.20279124814978,110.1693545747542 +126.23622792154536,118.20279124814978,110.1693545747542 +126.23622792154536,118.20279124814978,110.1693545747542 +126.23622792154536,118.20279124814978,110.1693545747542 +126.49204814126239,118.20279124814978,109.91353435503717 +127.59855799088476,117.9328645437441,108.26717109660345 +127.57392323581456,115.50063821142041,103.42735318702626 +122.01454335678206,113.09068662500849,104.16682989323492 +121.13218845979583,113.09068662500849,105.04918479022115 +121.13218845979583,113.09068662500849,105.04918479022115 +121.13218845979583,113.09068662500849,105.04918479022115 +121.13218845979583,113.09068662500849,105.04918479022115 +121.13218845979583,113.09068662500849,105.04918479022115 +122.01454335678206,113.09068662500849,104.16682989323492 +122.59266390950309,113.27945594112123,103.96624797273937 +131.49541284126303,116.25097645316882,101.00654006507459 +140.29611169419346,119.60195627927666,98.90780086435987 +142.33893757407625,123.05548743179415,103.77203728951204 +140.10282242968395,126.34773976922457,112.5926571087652 +137.75649175971932,128.6940704391892,119.63164911865908 +136.87679435924161,128.6940704391892,120.51134651913678 +136.71605273993256,128.6940704391892,120.67208813844584 +136.71605273993256,128.6940704391892,120.67208813844584 +136.71605273993256,128.6940704391892,120.67208813844584 +136.71605273993256,128.6940704391892,120.67208813844584 +137.06012456436042,128.6940704391892,120.32801631401797 +138.17809107175825,128.27247112715028,118.36685118254232 +138.10535974138594,125.83447535462628,113.56359096786662 +132.4245767183334,123.54077085927068,114.65696500020795 +131.49397771808015,123.54077085927068,115.5875640004612 +131.49397771808015,123.54077085927068,115.5875640004612 +131.49397771808015,123.54077085927068,115.5875640004612 +131.49397771808015,123.54077085927068,115.5875640004612 +131.49397771808015,123.54077085927068,115.5875640004612 +132.4245767183334,123.54077085927068,114.65696500020795 +133.45282659454523,123.88352081800795,114.31421504147067 +142.51303037007102,126.90358874318322,111.2941471162954 +151.02980700333384,130.26724513035094,109.50468325736804 +152.63911383870598,133.71868808313351,114.79826232756105 +150.3702113940898,136.99427399269746,123.61833659130511 +148.18053357991457,139.1839518068727,130.18737003383083 +147.1738501149668,139.1839518068727,131.1940534987786 +147.1738501149668,139.1839518068727,131.1940534987786 +147.1738501149668,139.1839518068727,131.1940534987786 +147.1738501149668,139.1839518068727,131.1940534987786 +147.1738501149668,139.1839518068727,131.1940534987786 +147.62387239830085,139.1839518068727,130.74403121544455 +148.75312084751332,138.61136453927395,128.46960823103458 diff --git a/testdata/golden/g_MedianMa.csv b/testdata/golden/g_MedianMa.csv new file mode 100644 index 00000000..482d9e71 --- /dev/null +++ b/testdata/golden/g_MedianMa.csv @@ -0,0 +1,81 @@ +MedianMa +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +107.71011176814433 +107.71011176814433 +107.71011176814433 +107.59249944146849 +105.1668715695831 +102.7486693128095 +102.7486693128095 +102.7486693128095 +102.7486693128095 +102.7486693128095 +102.7486693128095 +102.7486693128095 +102.78397007053755 +105.59949479601718 +108.93699201142712 +112.39177631998864 +115.69990563950788 +118.20279124814978 +118.20279124814978 +118.20279124814978 +118.20279124814978 +118.20279124814978 +118.20279124814978 +118.20279124814978 +117.9328645437441 +115.50063821142041 +113.09068662500849 +113.09068662500849 +113.09068662500849 +113.09068662500849 +113.09068662500849 +113.09068662500849 +113.09068662500849 +113.27945594112123 +116.25097645316882 +119.60195627927666 +123.05548743179415 +126.34773976922457 +128.6940704391892 +128.6940704391892 +128.6940704391892 +128.6940704391892 +128.6940704391892 +128.6940704391892 +128.6940704391892 +128.27247112715028 +125.83447535462628 +123.54077085927068 +123.54077085927068 +123.54077085927068 +123.54077085927068 +123.54077085927068 +123.54077085927068 +123.54077085927068 +123.88352081800795 +126.90358874318322 +130.26724513035094 +133.71868808313351 +136.99427399269746 +139.1839518068727 +139.1839518068727 +139.1839518068727 +139.1839518068727 +139.1839518068727 +139.1839518068727 +139.1839518068727 +138.61136453927395 diff --git a/testdata/golden/g_MedianPrice.csv b/testdata/golden/g_MedianPrice.csv new file mode 100644 index 00000000..b018aa00 --- /dev/null +++ b/testdata/golden/g_MedianPrice.csv @@ -0,0 +1,81 @@ +MedianPrice +99.5 +103.0164107856682 +106.37627358101628 +109.29790049544098 +111.52846427794583 +112.875521673814 +113.23347255708218 +112.60032201013414 +111.08145361594332 +108.87919670205369 +106.26936898786707 +103.56820817142187 +101.0947104237263 +99.13404459529625 +97.90729114869247 +97.55138116443152 +98.1111039285459 +99.54285912806509 +101.72792025538246 +104.49173065212182 +107.62538078254896 +110.90590746884149 +114.11320078613974 +117.04274526450548 +119.51475165912528 +121.3811006281581 +122.53171006302097 +122.90143777679592 +122.47762047177889 +121.30715443421619 +119.50102880884698 +117.23377096648008 +114.73556192793188 +112.27583959099815 +110.13883479309038 +108.59332241867756 +107.86047934521304 +108.08471167108598 +109.31236243425991 +111.4822566759027 +114.43022978908895 +117.90746386998124 +121.6100951023235 +125.21564025514759 +128.42071556026954 +130.97449658556297 +132.70337320460774 +133.52404653447638 +133.4444882618243 +132.55426356447322 +131.00727699563942 +129.00074817527417 +126.7540768618301 +124.49034662606454 +122.42184954038225 +120.7395900606986 +119.60563259734174 +119.14667258704391 +119.44743496013817 +120.54333510757368 +122.41300180733944 +124.9723861156795 +128.0728922037315 +131.50599292428953 +135.0160376079457 +138.3215327770725 +141.14337574868256 +143.23676289844406 +144.42221413881902 +144.61070035874553 +143.81840248790633 +142.1681173682826 +139.8764867613631 +137.22863145779047 +134.54392876795973 +132.13813355498985 +130.28751561753393 +129.20009166687123 +128.99752295261356 +129.70917825826996 diff --git a/testdata/golden/g_Mfi.csv b/testdata/golden/g_Mfi.csv new file mode 100644 index 00000000..6caca3ec --- /dev/null +++ b/testdata/golden/g_Mfi.csv @@ -0,0 +1,81 @@ +Mfi +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +43.441981459237745 +37.02436165544147 +36.549545768295765 +36.004666396940316 +35.455086480363676 +34.97441447880375 +34.63694380024107 +42.55010943361493 +50.59109483334291 +58.60383732391514 +66.43375437805835 +73.95261677341539 +81.0766642768904 +87.77423538445005 +86.25192823466496 +84.83263488087908 +77.90733563675882 +71.30929367421761 +64.82909949210318 +58.32001540737921 +51.71602794475086 +44.95230147839556 +37.975134807021234 +37.58730279248199 +37.16863031270294 +36.78359901782899 +36.49683776507518 +36.364767434747485 +44.11289629830282 +51.810133823325806 +59.33192217735862 +66.56935937794762 +73.5571926396974 +80.35917952049323 +87.03148682487704 +85.98578738346141 +84.96565730906268 +77.68005192008997 +70.54984689739456 +63.543658256665324 +56.61404925176538 +49.707511473572886 +42.77466345666138 +35.779643634354926 +35.55442090926026 +35.30135741777359 +35.07459624251884 +34.92548234409945 +34.73352438715381 +41.9495678588182 +49.396789501540454 +56.97814034961856 +64.58203705024881 +72.09953890093468 +79.440813736338 +86.5471023267043 +85.36993603257983 +84.24262432295068 +76.83168015490202 +69.73024295255598 +62.89973112823589 +56.284149522108244 +49.82030306392667 +43.42272196434557 +36.89427436502772 +36.48378785250935 diff --git a/testdata/golden/g_Microprice.csv b/testdata/golden/g_Microprice.csv new file mode 100644 index 00000000..dd2a17ea --- /dev/null +++ b/testdata/golden/g_Microprice.csv @@ -0,0 +1,81 @@ +Microprice +100.00526315789473 +103.46046522450813 +106.65168789184509 +109.33853225416956 +111.32565401756699 +112.48021302393528 +112.74373946667671 +112.13735682438349 +110.75989496340625 +108.77906196023305 +106.41646323849342 +103.92780621646223 +101.58005872494623 +99.62760156605499 +98.28950543375886 +97.72996198124378 +98.04361706953632 +99.24711633461742 +101.27761828233487 +103.99840773191836 +107.21110817590547 +110.67340216273824 +114.12067679302852 +117.28966080177672 +119.94194179638629 +121.88526292564214 +122.9906966116408 +123.2041612663456 +122.55125223877754 +121.13495545871658 +119.12644801031232 +116.74980739296537 +114.26199534566493 +111.92990422014152 +110.0065162819593 +108.70830555817803 +108.19590085722982 +108.55973727585484 +109.81197790124797 +111.88542731870439 +114.6395339778904 +117.87294524423672 +121.34149363010611 +124.78000754927169 +127.92599830496697 +130.54310742341096 +132.4422198523358 +133.49835704537392 +133.66184092338753 +132.96273146932407 +131.5081415594659 +129.4726688892009 +127.08279968088917 +124.59667734415284 +122.28104329391006 +120.38740973420352 +119.12959282207969 +118.6646131070783 +119.0786693531884 +120.37943865998288 +122.49539069017797 +125.28217726162742 +128.5355265405285 +132.00949003596284 +135.43841244609365 +138.56066185509076 +141.1420005329658 +142.99650869437366 +144.00319215932146 +144.11679040291588 +143.37181954325527 +141.87948911939714 +139.81776807444416 +137.41548731989323 +134.93189895182712 +132.63351803328965 +130.7703155974523 +129.55338947969793 +129.13610757668826 +129.60040794892316 diff --git a/testdata/golden/g_MidPoint.csv b/testdata/golden/g_MidPoint.csv new file mode 100644 index 00000000..215b9c5f --- /dev/null +++ b/testdata/golden/g_MidPoint.csv @@ -0,0 +1,81 @@ +MidPoint +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +106.18040735847111 +105.51135929232304 +105.23158756606549 +105.23158756606549 +105.23158756606549 +105.23158756606549 +105.23158756606549 +104.92839624491889 +104.23966531443027 +105.9200562292414 +107.50454823361551 +108.83068873092029 +109.80234929554821 +110.35506613854754 +110.46179846589995 +110.46179846589995 +110.61862601004623 +111.22037564258676 +112.2356266164455 +113.59602134123725 +115.2023715632308 +116.60007561625773 +115.95097025436708 +115.69476790389297 +115.69476790389297 +115.69476790389297 +115.69476790389297 +115.69476790389297 +115.36831339010894 +114.76343408577323 +116.482691045356 +118.05568642320367 +119.36424098242566 +120.31379719688806 +120.84186579340712 +120.92360773241393 +120.92360773241393 +121.10552594172646 +121.73164625442301 +122.76837096315123 +124.14542429274422 +125.76212992591738 +127.01936217090078 +126.39045371483887 +126.15796385733819 +126.15796385733819 +126.15796385733819 +126.15796385733819 +126.15796385733819 +125.80840913030647 +125.33178841362584 +127.04624961869126 +128.6073743231898 +129.89804366212732 +130.82529774283125 +131.32863947530515 +131.38543859710236 +131.38543859710236 +131.5924667201574 +132.24285137355466 +133.3008273886522 +134.69422067437694 +136.32089531382746 +137.43828984228935 +136.82982678341216 +136.62118583190733 +136.62118583190733 diff --git a/testdata/golden/g_MidPrice.csv b/testdata/golden/g_MidPrice.csv new file mode 100644 index 00000000..7c65c94a --- /dev/null +++ b/testdata/golden/g_MidPrice.csv @@ -0,0 +1,81 @@ +MidPrice +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +106.32522914642337 +105.75567857424203 +105.55123615855868 +105.55123615855868 +105.55123615855868 +105.55123615855868 +105.55123615855868 +105.24899614280994 +104.33106218541974 +105.6025942195174 +107.20682448900108 +108.65933889040522 +109.65301419800483 +110.11303274523868 +110.11303274523868 +110.11303274523868 +110.41830745600757 +111.11031724277667 +112.27169673288938 +113.47310477893726 +114.99919560255626 +116.40160188307092 +115.73788676854423 +115.39228340988873 +115.27785837751748 +115.27785837751748 +115.27785837751748 +115.24598817122 +115.0774188905013 +114.80155196331324 +116.70412553753545 +118.23871019288774 +119.36050151177068 +120.29537066672518 +120.66049351796838 +120.66666389142087 +120.66666389142087 +120.66666389142087 +121.19307431549183 +122.36807306672702 +124.07809837839216 +125.86333960223885 +127.04431008633946 +126.34550592374353 +126.16041207005304 +126.16041207005304 +126.16041207005304 +126.16041207005304 +126.16041207005304 +125.67008636260073 +125.15915287841587 +127.02665045212272 +128.655028690376 +129.90217671400274 +130.92432775692788 +131.66551262540366 +131.91339768450908 +131.91339768450908 +132.26282244054363 +132.86197462916553 +133.72452371505295 +134.87997713465919 +136.45599058085855 +137.63930586348852 +137.0934434175423 +136.98545378943146 +136.98545378943146 diff --git a/testdata/golden/g_MinusDi.csv b/testdata/golden/g_MinusDi.csv new file mode 100644 index 00000000..322f6165 --- /dev/null +++ b/testdata/golden/g_MinusDi.csv @@ -0,0 +1,81 @@ +MinusDi +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +27.13167719894609 +26.274367812862433 +24.744082422242826 +23.241755333923404 +21.512654439106367 +19.51672130830116 +17.58751877526003 +15.94696163552514 +14.681717870443906 +13.581521745517911 +12.624400372898108 +11.758712766748756 +11.038175327410752 +10.51553170206367 +10.906948307963743 +12.883060473369223 +15.606658308025656 +18.50628500756431 +21.990805693589266 +25.269437743189002 +27.34663879718962 +28.419972295720065 +28.255382095825222 +26.24217101526044 +24.206077112686202 +22.49633154108633 +20.797978949255484 +19.002819811263755 +17.08189161927664 +15.312333278446436 +13.864063299710923 +12.778588478409224 +11.937994453509367 +11.291691494482587 +10.942263455121635 +11.790866997951634 +14.165199105275695 +17.056390539549085 +19.499990165743316 +21.41861333571675 +23.528371409730532 +26.085794270270323 +26.753559469925122 +25.575479039846915 +24.149775639951073 +22.836532180755725 +21.279561359099215 +19.564946484191104 +17.914862734831026 +16.421886804841026 +14.998303176938437 +13.75986552582622 +12.777991517838071 +11.981093863498268 +11.257736731480932 +10.451870979556956 +11.104415435913893 +12.840589537363048 +15.58241905716853 +20.10967847345435 +23.891333482064333 +26.22784634752717 +27.16675703876092 +27.59047661188655 +26.35196828602853 +24.775436644747092 diff --git a/testdata/golden/g_MinusDm.csv b/testdata/golden/g_MinusDm.csv new file mode 100644 index 00000000..d7ed5294 --- /dev/null +++ b/testdata/golden/g_MinusDm.csv @@ -0,0 +1,81 @@ +MinusDm +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +14.955587965680309 +14.296216513784106 +13.275058191370956 +12.326839749130173 +11.446351195620874 +10.628754681647955 +9.8695579186731 +9.164589495910736 +8.509975960488541 +7.9021205347393595 +7.337683353686548 +6.813563114137509 +6.326880034556258 +5.874960032087954 +5.965816078392607 +6.974647313244457 +8.406910284195614 +9.908255816210133 +11.743586821106689 +13.485666158900177 +14.484097767551615 +14.776949584637006 +14.41265990304538 +13.383184195684995 +12.427242467421781 +11.539582291177368 +10.715326413236127 +9.949945955147832 +9.23923552978013 +8.579290134795835 +7.966483696596133 +7.397449146839266 +6.869059922065032 +6.378412784774673 +6.0942691637856505 +6.4587622033127365 +7.7235554420687365 +9.390199882126554 +10.849771514014064 +11.916420468624745 +12.947150444735396 +14.224616291993296 +14.606180596328528 +13.933069689686025 +12.937850426137024 +12.013718252841521 +11.155595520495698 +10.35876726903172 +9.618855321243739 +8.931794226869187 +8.293808924949959 +7.7013940017392475 +7.151294430186444 +6.6404876851731265 +6.166167136232189 +5.725726626501318 +6.077034690021978 +6.926326496937013 +8.292454432921978 +10.769032613686855 +13.014817703158707 +14.492578989572458 +15.004374791815328 +15.024358627149558 +14.167169410003348 +13.155228737860252 diff --git a/testdata/golden/g_ModifiedMaStop.csv b/testdata/golden/g_ModifiedMaStop.csv new file mode 100644 index 00000000..fee6bcc7 --- /dev/null +++ b/testdata/golden/g_ModifiedMaStop.csv @@ -0,0 +1,81 @@ +value,direction +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +107.082865308575,-1 +106.45439223480993,-1 +105.83084270541985,-1 +105.27423636300712,-1 +104.8433518497011,-1 +104.5882806550396,-1 +104.54577093496702,-1 +104.735776226613,1 +105.15951642505802,1 +105.79922336863486,1 +106.61959295972393,1 +107.57081336535019,1 +108.59289810837856,1 +109.62093634733337,1 +110.59079075884175,1 +111.44473349613041,1 +112.1365162678941,1 +112.63542116678863,1 +112.9289299573802,1 +113.02377297383664,1 +112.94526355158023,-1 +112.73497709247195,-1 +112.44698175731561,-1 +112.14295718174559,-1 +111.88663696290378,-1 +111.73807109007875,-1 +111.74822059513096,1 +111.95436703976415,1 +112.37674668594829,1 +113.0167098135385,1 +113.85656942624124,1 +114.86115269201488,1 +115.9809163758364,1 +117.1563478271653,1 +118.32325826004487,1 +119.41849536757685,1 +120.38556486356632,1 +121.17965868770953,1 +121.77164061939501,1 +122.15063318393784,1 +122.32497468410358,1 +122.32146078781156,-1 +122.1829383441328,-1 +121.96446629556509,-1 +121.72838655653784,-1 +121.53874510216326,-1 +121.45556155930076,-1 +121.52945912879952,1 +121.79713448415188,1 +122.27807226261487,1 +122.9727975922901,1 +123.86282271342644,1 +124.91229242655285,1 +126.07118135144701,1 +127.27975736466358,1 +128.47391248157524,1 +129.5908849646785,1 +130.57486149472723,1 +131.38195895663975,1 +131.984140810919,1 +132.37171819313897,1 +132.55421230748135,1 +132.55950106233232,1 +132.43132616070554,-1 +132.22538331506965,-1 +132.0043448224785,-1 +131.83225910594632,-1 diff --git a/testdata/golden/g_Mom.csv b/testdata/golden/g_Mom.csv new file mode 100644 index 00000000..3d1604ca --- /dev/null +++ b/testdata/golden/g_Mom.csv @@ -0,0 +1,81 @@ +Mom +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-1.7157577241358837 +-5.730503243264366 +-8.608070822308761 +-10.091415919552162 +-10.048035735232133 +-8.481805292016915 +-5.532631290771221 +-1.4639546616452463 +3.360781829622269 +8.510598841543683 +13.525478557892853 +17.95745670917988 +21.410637886694573 +23.576559700290602 +24.26174680501869 +23.4049934774728 +21.082830940775978 +17.502691058347963 +12.984377063330072 +7.931496488223161 +2.7954081060538414 +-1.9650966045602019 +-5.924775935798692 +-8.729923525921876 +-10.129963895138289 +-9.999835606937722 +-8.351162633750405 +-5.33121602210889 +-1.2097586086714358 +3.6450520905550974 +8.799550294654665 +13.793300030445579 +18.180224506670854 +21.568452825232384 +23.65532464142821 +24.254425911146058 +23.312240702236082 +20.912931613346032 +17.270821779641196 +12.71125002544845 +7.641509316019693 +2.514464489966798 +-2.2119008080264138 +-6.115394442193349 +-8.847328951778564 +-10.163668763428063 +-9.946829162157812 +-8.216179783746497 +-5.126314382859022 +-0.9532414333612564 +3.930270886627767 +9.087992965889867 +14.059200852076614 +18.399831350220822 +21.72214886541137 +23.729380668712395 +24.242226721175598 +23.21487601231881 +20.739098721255743 +17.036048659910335 +12.436508261649166 +7.3513407716622226 +2.234789056923802 +-2.4561005562649143 +-6.302304869405418 +-8.960253906167594 diff --git a/testdata/golden/g_MorningDojiStar.csv b/testdata/golden/g_MorningDojiStar.csv new file mode 100644 index 00000000..ccc0f404 --- /dev/null +++ b/testdata/golden/g_MorningDojiStar.csv @@ -0,0 +1,81 @@ +MorningDojiStar +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_MorningEveningStar.csv b/testdata/golden/g_MorningEveningStar.csv new file mode 100644 index 00000000..45606b65 --- /dev/null +++ b/testdata/golden/g_MorningEveningStar.csv @@ -0,0 +1,81 @@ +MorningEveningStar +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +-1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_MurreyMathLines.csv b/testdata/golden/g_MurreyMathLines.csv new file mode 100644 index 00000000..7aaa8143 --- /dev/null +++ b/testdata/golden/g_MurreyMathLines.csv @@ -0,0 +1,81 @@ +mm8_8,mm7_8,mm6_8,mm5_8,mm4_8,mm3_8,mm2_8,mm1_8,mm0_8 +nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan +115.1642566915892,112.95449980529774,110.74474291900628,108.53498603271483,106.32522914642337,104.11547226013192,101.90571537384047,99.695958487549,97.48620160125755 +115.1642566915892,112.8121121622524,110.4599676329156,108.10782310357882,105.75567857424203,103.40353404490523,101.05138951556845,98.69924498623165,96.34710045689485 +115.1642566915892,112.76100155833157,110.35774642507394,107.95449129181631,105.55123615855868,103.14798102530106,100.74472589204343,98.3414707587858,95.93821562552817 +115.1642566915892,112.76100155833157,110.35774642507394,107.95449129181631,105.55123615855868,103.14798102530106,100.74472589204343,98.3414707587858,95.93821562552817 +115.1642566915892,112.76100155833157,110.35774642507394,107.95449129181631,105.55123615855868,103.14798102530106,100.74472589204343,98.3414707587858,95.93821562552817 +115.1642566915892,112.76100155833157,110.35774642507394,107.95449129181631,105.55123615855868,103.14798102530106,100.74472589204343,98.3414707587858,95.93821562552817 +115.1642566915892,112.76100155833157,110.35774642507394,107.95449129181631,105.55123615855868,103.14798102530106,100.74472589204343,98.3414707587858,95.93821562552817 +114.55977666009171,112.23208153077127,109.90438640145084,107.57669127213039,105.24899614280994,102.9213010134895,100.59360588416905,98.26591075484862,95.93821562552817 +112.72390874531129,110.6256971053384,108.52748546536552,106.42927382539263,104.33106218541974,102.23285054544684,100.13463890547395,98.03642726550106,95.93821562552817 +115.26697281350663,112.85087816500932,110.43478351651201,108.0186888680147,105.6025942195174,103.1864995710201,100.77040492252279,98.35431027402548,95.93821562552817 +118.47543335247398,115.65828113660575,112.84112892073753,110.02397670486931,107.20682448900108,104.38967227313285,101.57252005726463,98.7553678413964,95.93821562552817 +121.38046215528227,118.20018133906301,115.01990052284376,111.83961970662449,108.65933889040522,105.47905807418596,102.29877725796669,99.11849644174744,95.93821562552817 +123.36781277048146,119.9391131273623,116.51041348424314,113.08171384112399,109.65301419800483,106.22431455488565,102.79561491176649,99.36691526864733,95.93821562552817 +124.2878498649492,120.74414558502157,117.20044130509393,113.65673702516631,110.11303274523868,106.56932846531106,103.02562418538344,99.4819199054558,95.93821562552817 +124.2878498649492,120.74414558502157,117.20044130509393,113.65673702516631,110.11303274523868,106.56932846531106,103.02562418538344,99.4819199054558,95.93821562552817 +124.2878498649492,120.74414558502157,117.20044130509393,113.65673702516631,110.11303274523868,106.56932846531106,103.02562418538344,99.4819199054558,95.93821562552817 +124.2878498649492,120.82046426271378,117.35307866047837,113.88569305824296,110.41830745600757,106.95092185377216,103.48353625153675,100.01615064930134,96.54876504706593 +124.2878498649492,120.99346670940606,117.69908355386293,114.4047003983198,111.11031724277667,107.81593408723354,104.52155093169041,101.22716777614728,97.93278462060415 +124.2878498649492,121.28381158193423,118.27977329891928,115.27573501590433,112.27169673288938,109.26765844987442,106.26362016685947,103.2595818838445,100.25554360082955 +124.2878498649492,121.58416359344622,118.88047732194323,116.17679105044024,113.47310477893726,110.76941850743428,108.06573223593129,105.36204596442832,102.65835969292533 +124.2878498649492,121.96568629935095,119.64352273375272,117.32135916815449,114.99919560255626,112.67703203695801,110.35486847135978,108.03270490576153,105.7105413401633 +124.2878498649492,122.31628786947962,120.34472587401005,118.37316387854048,116.40160188307092,114.43003988760135,112.45847789213178,110.48691589666221,108.51535390119264 +124.2878498649492,122.15035909084796,120.01286831674672,117.87537754264548,115.73788676854423,113.60039599444299,111.46290522034175,109.32541444624052,107.18792367213928 +124.2878498649492,122.06395825118408,119.84006663741896,117.61617502365384,115.39228340988873,113.16839179612361,110.9445001823585,108.72060856859338,106.49671695482826 +124.2878498649492,122.03535199309127,119.78285412123333,117.5303562493754,115.27785837751748,113.02536050565953,110.77286263380161,108.52036476194367,106.26786689008574 +124.2878498649492,122.03535199309127,119.78285412123333,117.5303562493754,115.27785837751748,113.02536050565953,110.77286263380161,108.52036476194367,106.26786689008574 +124.2878498649492,122.03535199309127,119.78285412123333,117.5303562493754,115.27785837751748,113.02536050565953,110.77286263380161,108.52036476194367,106.26786689008574 +124.22410945235427,121.97957913207071,119.73504881178714,117.49051849150356,115.24598817122,113.00145785093645,110.75692753065287,108.5123972103693,106.26786689008574 +123.88697089091687,121.68458289081298,119.48219489070908,117.2798068906052,115.0774188905013,112.87503089039741,110.67264289029353,108.47025489018964,106.26786689008574 +123.33523703654073,121.20181576823386,119.06839449992698,116.9349732316201,114.80155196331324,112.66813069500637,110.5347094266995,108.40128815839262,106.26786689008574 +127.14038418498515,124.53131952312273,121.9222548612603,119.31319019939787,116.70412553753545,114.09506087567303,111.4859962138106,108.87693155194816,106.26786689008574 +130.20955349568973,127.21684266998923,124.22413184428873,121.23142101858824,118.23871019288774,115.24599936718724,112.25328854148674,109.26057771578624,106.26786689008574 +132.45313613345562,129.17997747803437,125.90681882261315,122.63366016719192,119.36050151177068,116.08734285634944,112.81418420092821,109.54102554550698,106.26786689008574 +134.3228744433646,130.81599849920474,127.3091225550449,123.80224661088504,120.29537066672518,116.78849472256532,113.28161877840546,109.7747428342456,106.26786689008574 +135.053120145851,131.45496348888037,127.8568068319097,124.25865017493904,120.66049351796838,117.06233686099772,113.46418020402706,109.8660235470564,106.26786689008574 +135.065460892756,131.46576164242222,127.86606239208842,124.26636314175465,120.66666389142087,117.06696464108708,113.46726539075331,109.86756614041953,106.26786689008574 +135.065460892756,131.46576164242222,127.86606239208842,124.26636314175465,120.66666389142087,117.06696464108708,113.46726539075331,109.86756614041953,106.26786689008574 +135.065460892756,131.46576164242222,127.86606239208842,124.26636314175465,120.66666389142087,117.06696464108708,113.46726539075331,109.86756614041953,106.26786689008574 +135.065460892756,131.59736424843996,128.1292676041239,124.66117095980786,121.19307431549183,117.72497767117578,114.25688102685973,110.7887843825437,107.32068773822765 +135.065460892756,131.89111393624876,128.7167669797415,125.54242002323426,122.36807306672702,119.19372611021977,116.01937915371252,112.84503219720528,109.67068524069803 +135.065460892756,132.31862026416502,129.57177963557407,126.82493900698312,124.07809837839216,121.33125774980121,118.58441712121025,115.83757649261929,113.09073586402833 +135.065460892756,132.7649305701267,130.46440024749742,128.16386992486812,125.86333960223885,123.56280927960955,121.26227895698027,118.96174863435098,116.6612183117217 +135.065460892756,133.06017319115188,131.05488548954773,129.0495977879436,127.04431008633946,125.03902238473535,123.03373468313121,121.02844698152708,119.02315927992295 +135.065460892756,132.88547215050286,130.70548340824976,128.52549466599663,126.34550592374353,124.1655171814904,121.98552843923729,119.80553969698417,117.62555095473105 +135.065460892756,132.83919868708026,130.61293648140452,128.38667427572878,126.16041207005304,123.9341498643773,121.70788765870157,119.48162545302583,117.25536324735009 +135.065460892756,132.83919868708026,130.61293648140452,128.38667427572878,126.16041207005304,123.9341498643773,121.70788765870157,119.48162545302583,117.25536324735009 +135.065460892756,132.83919868708026,130.61293648140452,128.38667427572878,126.16041207005304,123.9341498643773,121.70788765870157,119.48162545302583,117.25536324735009 +135.065460892756,132.83919868708026,130.61293648140452,128.38667427572878,126.16041207005304,123.9341498643773,121.70788765870157,119.48162545302583,117.25536324735009 +135.065460892756,132.83919868708026,130.61293648140452,128.38667427572878,126.16041207005304,123.9341498643773,121.70788765870157,119.48162545302583,117.25536324735009 +134.08480947785137,131.98112869903872,129.87744792022605,127.77376714141339,125.67008636260073,123.56640558378807,121.46272480497541,119.35904402616275,117.25536324735009 +133.06294250948164,131.0869951017152,129.11104769394876,127.13510028618231,125.15915287841587,123.18320547064943,121.20725806288297,119.23131065511653,117.25536324735009 +136.79793765689536,134.3551158557022,131.91229405450903,129.46947225331587,127.02665045212272,124.58382865092956,122.14100684973641,119.69818504854325,117.25536324735009 +140.0546941334019,137.20477777264543,134.35486141188895,131.50494505113247,128.655028690376,125.80511232961952,122.95519596886305,120.10527960810657,117.25536324735009 +142.5489901806554,139.38728681399223,136.2255834473291,133.0638800806659,129.90217671400274,126.74047334733959,123.57876998067641,120.41706661401325,117.25536324735009 +144.5932922665057,141.17605113911125,137.7588100117168,134.34156888432236,130.92432775692788,127.50708662953345,124.08984550213899,120.67260437474454,117.25536324735009 +146.0756620034572,142.47312465894382,138.87058731443042,135.26804996991703,131.66551262540366,128.06297528089027,124.46043793637688,120.85790059186348,117.25536324735009 +146.57143212166807,142.9069235123783,139.24241490308856,135.57790629379883,131.91339768450908,128.24888907521932,124.58438046592958,120.91987185663984,117.25536324735009 +146.57143212166807,142.9069235123783,139.24241490308856,135.57790629379883,131.91339768450908,128.24888907521932,124.58438046592958,120.91987185663984,117.25536324735009 +146.57143212166807,142.99427970138697,139.41712728110585,135.83997486082475,132.26282244054363,128.68567002026253,125.10851759998144,121.53136517970033,117.95421275941922 +146.57143212166807,143.14406774854243,139.71670337541678,136.28933900229117,132.86197462916553,129.4346102560399,126.00724588291426,122.57988150978863,119.152517136663 +146.57143212166807,143.3597050200143,140.1479779183605,136.93625081670672,133.72452371505295,130.5127966133992,127.3010695117454,124.08934241009162,120.87761530843784 +146.57143212166807,143.64856837491584,140.72570462816364,137.8028408814114,134.87997713465919,131.957113387907,129.03424964115476,126.11138589440253,123.18852214765032 +146.57143212166807,144.04257173646567,141.5137113512633,138.98485096606095,136.45599058085855,133.9271301956562,131.3982698104538,128.86940942525143,126.34054904004905 +146.57143212166807,144.33840055712318,142.1053689925783,139.8723374280334,137.63930586348852,135.40627429894363,133.17324273439874,130.94021116985385,128.70717960530897 +146.57143212166807,144.20193494563662,141.83243776960518,139.46294059357373,137.0934434175423,134.72394624151084,132.3544490654794,129.98495188944796,127.6154547134165 +146.57143212166807,144.17493753860893,141.77844295554976,139.38194837249063,136.98545378943146,134.58895920637232,132.19246462331319,129.79597004025402,127.39947545719488 +146.57143212166807,144.17493753860893,141.77844295554976,139.38194837249063,136.98545378943146,134.58895920637232,132.19246462331319,129.79597004025402,127.39947545719488 diff --git a/testdata/golden/g_NakedPoc.csv b/testdata/golden/g_NakedPoc.csv new file mode 100644 index 00000000..d0c0cdaa --- /dev/null +++ b/testdata/golden/g_NakedPoc.csv @@ -0,0 +1,81 @@ +NakedPoc +nan +nan +104.51802474217867 +104.51802474217867 +104.51802474217867 +111.1412061533575 +111.1412061533575 +104.51802474217867 +111.48373355979457 +111.48373355979457 +104.51802474217867 +108.22017032672409 +108.22017032672409 +108.22017032672409 +98.7238842298237 +108.22017032672409 +108.22017032672409 +97.80061491481311 +97.80061491481311 +108.22017032672409 +106.22426428775424 +106.22426428775424 +106.22426428775424 +115.17894486561615 +115.17894486561615 +115.17894486561615 +120.96844551395874 +120.96844551395874 +120.96844551395874 +121.27288065306473 +115.17894486561615 +115.17894486561615 +116.00125657418624 +116.00125657418624 +106.22426428775424 +108.6636468431793 +106.22426428775424 +106.22426428775424 +107.34704622727283 +116.00125657418624 +116.00125657418624 +116.00125657418624 +116.00125657418624 +116.00125657418624 +123.57231042795752 +123.57231042795752 +123.57231042795752 +132.27448859176067 +123.57231042795752 +123.57231042795752 +132.18152257385782 +132.18152257385782 +123.57231042795752 +124.78194901416947 +124.78194901416947 +116.00125657418624 +121.47801801520458 +116.00125657418624 +121.47801801520458 +118.92635961561233 +124.78194901416947 +118.92635961561233 +132.18152257385782 +122.790676749647 +122.790676749647 +136.44553313543602 +136.44553313543602 +136.44553313543602 +142.9067116600835 +136.44553313543602 +136.44553313543602 +142.7367135513615 +142.7367135513615 +142.7367135513615 +139.21910172502393 +139.21910172502393 +122.790676749647 +129.90354499037025 +122.790676749647 +122.790676749647 diff --git a/testdata/golden/g_Natr.csv b/testdata/golden/g_Natr.csv new file mode 100644 index 00000000..baa926d7 --- /dev/null +++ b/testdata/golden/g_Natr.csv @@ -0,0 +1,81 @@ +Natr +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +3.932494457264858 +3.9393465077403502 +3.9147268498340764 +3.8511307756322304 +3.7644512725444774 +3.704669828995394 +3.697100125319913 +3.6997299421231977 +3.673979867334773 +3.5963503266504646 +3.514770904865433 +3.4354840798722135 +3.3720929193515246 +3.307073909624069 +3.2189059187197704 +3.1692030387480097 +3.1746490286343505 +3.213240210438459 +3.2598411975284196 +3.3233751373453253 +3.3915053467224334 +3.425699907942408 +3.40386032173911 +3.355771041605323 +3.344724989811879 +3.329511549691481 +3.2657070115028692 +3.2019456271674605 +3.165552675342359 +3.177279782655955 +3.2012913546923656 +3.2029906982125222 +3.1625837556687153 +3.098715481717489 +3.0182473879336382 +2.9724857885275533 +2.9391293673090826 +2.9581742501807136 +3.034118153974549 +3.1243563661889677 +3.1866922063592917 +3.211737320999343 +3.2329284199394355 +3.27115949353049 +3.2771077969107743 +3.211594944931802 +3.119722795758557 +3.055268999643017 +3.0171651881031 +2.9823921055740383 +2.9417495604801656 +2.915289098156154 +2.884304104331859 +2.8314111848516847 +2.7677345094599968 +2.7161070368881752 +2.71447780986831 +2.7258711021268174 +2.715052896722799 +2.718143378226062 +2.783111106649466 +2.8832760449141768 +2.975366427089211 +3.0163897348189725 +3.0019875621021317 +2.9733593937936083 +2.9261702402043355 diff --git a/testdata/golden/g_NewHighsNewLows.csv b/testdata/golden/g_NewHighsNewLows.csv new file mode 100644 index 00000000..3991f364 --- /dev/null +++ b/testdata/golden/g_NewHighsNewLows.csv @@ -0,0 +1,81 @@ +NewHighsNewLows +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 diff --git a/testdata/golden/g_NewPriceLines.csv b/testdata/golden/g_NewPriceLines.csv new file mode 100644 index 00000000..ae5228fe --- /dev/null +++ b/testdata/golden/g_NewPriceLines.csv @@ -0,0 +1,81 @@ +NewPriceLines +nan +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Nrtr.csv b/testdata/golden/g_Nrtr.csv new file mode 100644 index 00000000..5ee7cc3a --- /dev/null +++ b/testdata/golden/g_Nrtr.csv @@ -0,0 +1,81 @@ +value,direction +98,1 +101.38609802528113,1 +104.51349623927135,1 +107.14660371434934,1 +109.09398304247881,1 +110.22545086871973,1 +110.48370678260632,1 +110.48370678260632,1 +110.48370678260632,1 +110.94927477838507,-1 +108.53942408221064,-1 +106.00099391973886,-1 +103.6062914783925,-1 +101.61478517632347,-1 +100.2499271213814,-1 +99.67919279981601,-1 +99.67919279981601,-1 +99.67919279981601,-1 +99.24690802195133,1 +101.91328168254316,1 +105.06172811765052,1 +108.45477622474662,1 +111.8331053624311,1 +114.93870969100435,1 +117.5379450657217,1 +119.44239977239245,1 +120.52572478467113,1 +120.73492014628184,1 +120.73492014628184,1 +120.73492014628184,1 +121.50360854946592,-1 +119.07943511977204,-1 +116.54186683152561,-1 +114.16313388349172,-1 +112.20127818654586,-1 +110.87710324828896,-1 +110.35445045332179,-1 +110.35445045332179,-1 +110.35445045332179,-1 +109.64256087759348,1 +112.34158540359573,1 +115.51032844461513,1 +118.90950586276713,1 +122.27924950354938,1 +125.36232044413079,1 +127.92708738020589,1 +129.78821756055223,1 +130.8232320097296,1 +130.98344621018293,1 +130.98344621018293,1 +130.98344621018293,1 +132.05675384593226,-1 +129.61908725345432,-1 +127.08324246998329,-1 +124.72129573873565,-1 +122.78978950783495,-1 +121.50681625746866,-1 +121.03253694816725,-1 +121.03253694816725,-1 +121.03253694816725,-1 +120.04032498163757,1 +122.77137582165803,1 +125.95965811498108,1 +129.36414234050673,1 +132.72448630243494,1 +135.7842907232521,1 +138.31400262756964,1 +140.13142062574937,1 +141.11797042139818,1 +141.22929670012073,1 +141.22929670012073,1 +141.22929670012073,1 +142.60875501488042,-1 +140.15842864523844,-1 +137.62516850981106,-1 +135.2808199729028,-1 +133.38035348834873,-1 +132.13908884823925,-1 +131.71346130716938,-1 +131.71346130716938,-1 diff --git a/testdata/golden/g_Nvi.csv b/testdata/golden/g_Nvi.csv new file mode 100644 index 00000000..8fe06dea --- /dev/null +++ b/testdata/golden/g_Nvi.csv @@ -0,0 +1,81 @@ +Nvi +1000 +1000 +1000 +1000 +1000 +1000 +1000 +1000 +1000 +982.1151226735907 +960.7832949818295 +938.3132909606765 +917.1155545478215 +899.4868818046373 +887.4052549644534 +882.3531551705806 +885.1851368509798 +885.1851368509798 +885.1851368509798 +885.1851368509798 +885.1851368509798 +885.1851368509798 +885.1851368509798 +885.1851368509798 +885.1851368509798 +899.5276966022858 +907.686280612852 +909.261743113004 +904.4429889714032 +893.9900993857354 +879.166436093034 +861.6257890283197 +861.6257890283197 +861.6257890283197 +861.6257890283197 +861.6257890283197 +861.6257890283197 +861.6257890283197 +861.6257890283197 +861.6257890283197 +882.8360664808845 +907.7376257028955 +934.4500528983186 +960.9311748282745 +985.1594800643628 +1005.3146945839925 +1019.9403814275861 +1028.0740398745443 +1028.0740398745443 +1028.0740398745443 +1028.0740398745443 +1028.0740398745443 +1028.0740398745443 +1028.0740398745443 +1028.0740398745443 +1028.0740398745443 +1017.3321736506358 +1013.3612062966174 +1016.8972827812136 +1028.0059662049082 +1046.0763812434411 +1069.8757818211843 +1097.6596686466498 +1127.3276201386425 +1127.3276201386425 +1127.3276201386425 +1127.3276201386425 +1127.3276201386425 +1127.3276201386425 +1127.3276201386425 +1127.3276201386425 +1127.3276201386425 +1110.9452570755498 +1091.856818512596 +1072.1223125062993 +1053.8594583937418 +1039.0545172312857 +1029.3848650099944 +1026.0691576539982 +1029.7584721162536 diff --git a/testdata/golden/g_OIPriceDivergence.csv b/testdata/golden/g_OIPriceDivergence.csv new file mode 100644 index 00000000..d1012afd --- /dev/null +++ b/testdata/golden/g_OIPriceDivergence.csv @@ -0,0 +1,81 @@ +OIPriceDivergence +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.0036217993506855867 +-0.0037405617113483586 +-0.015923876984767195 +-0.03211203784243174 +-0.05138613086654069 +-0.07278535863787278 +-0.09533561687770825 +-0.11805498441219385 +-0.13994753402436408 +-0.15999792219130232 +-0.17718025490855474 +-0.19049487951238284 +-0.17720819325330864 +-0.14288552635205795 +-0.10381881132935658 +-0.061470699142046184 +-0.03045156325302706 +-0.03112354002570726 +-0.03395791529604584 +-0.03940272941969571 +-0.047671826152954 +-0.058694183130447636 +-0.07213387817342139 +-0.08745051903618273 +-0.10396809996180476 +-0.12093174640302322 +-0.13754515278982768 +-0.15299087521650473 +-0.13364539977592643 +-0.10702221802625915 +-0.07820068537471049 +-0.04781008338448028 +-0.04190220486215229 +-0.05389564467372217 +-0.06519524648122121 +-0.07525465648403112 +-0.0838725857586982 +-0.0911937541793074 +-0.09761961408717931 +-0.10365322443827447 +-0.10973190235640859 +-0.11610212350851465 +-0.12276497837231941 +-0.12322330858236744 +-0.09211492809147127 +-0.06064638897059162 +-0.029576549142348134 +0.00023230747332693424 +-0.010062449488981204 +-0.028210872921646514 +-0.04786165595538571 +-0.06796468532488538 +-0.08748479796854738 +-0.10544879349948354 +-0.12100881632760135 +-0.13351809997501424 +-0.14260215935510628 +-0.14819798220700509 +-0.15053516983273127 +-0.13286260208084055 diff --git a/testdata/golden/g_OIWeighted.csv b/testdata/golden/g_OIWeighted.csv new file mode 100644 index 00000000..18651b94 --- /dev/null +++ b/testdata/golden/g_OIWeighted.csv @@ -0,0 +1,81 @@ +OIWeighted +100 +101.74459330817128 +103.4095282943056 +104.93025859470323 +106.25058265659464 +107.32664103385501 +108.13000205529053 +108.64950189923064 +108.89164208106095 +108.87951108430151 +108.65036348405658 +108.25213619221921 +107.739288013935 +107.1684024878446 +106.59398981750905 +106.06486483895647 +105.61645842655456 +105.27292402269651 +105.06481782538602 +105.01101067395477 +105.11730548852593 +105.37632029514994 +105.76866593765328 +106.26527576902856 +106.83059581959517 +107.42624254299194 +108.01469519085106 +108.56261342460513 +109.0434495157514 +109.43914191086729 +109.74081195756203 +109.94851628246069 +110.07300170083101 +110.12597567920015 +110.12244702490358 +110.08280488284123 +110.03075368523058 +109.99085605275351 +109.98598048649764 +110.03497260326347 +110.15083752906418 +110.33964372093057 +110.60025045450924 +110.92484281346 +111.3001499715669 +111.709142053314 +112.13295871371108 +112.55282189811281 +112.96559924786015 +113.35622892276575 +113.7098488437623 +114.01540940096942 +114.2667977697926 +114.46342613642602 +114.61019168104862 +114.71680735207961 +114.79659510759214 +114.86491002183833 +114.93741089981361 +115.02840366437694 +115.14945803826636 +115.3084429867133 +115.50905394029914 +115.75243635214117 +116.04415854225473 +116.37893574260812 +116.74762355209207 +117.13801474977384 +117.53600685243848 +117.92701164389075 +118.29743393952833 +118.63603105102986 +118.93498029617442 +119.19052636593027 +119.40314464549917 +119.57722836793981 +119.72037362897404 +119.84238557565807 +119.95415426675795 +120.0686080454448 diff --git a/testdata/golden/g_Obv.csv b/testdata/golden/g_Obv.csv new file mode 100644 index 00000000..35c306e0 --- /dev/null +++ b/testdata/golden/g_Obv.csv @@ -0,0 +1,81 @@ +Obv +0 +1019.8669330795061 +2058.808767310371 +3115.2730146498743 +4187.008623739826 +5271.155722220616 +6364.359630817338 +5265.814657818492 +4165.857297514342 +3068.472534426522 +1977.542791743954 +896.693151361995 +-170.8531666931201 +-1222.4033038752666 +-2255.9021188908573 +-3270.014119696844 +-2264.1767053540857 +-1238.6225951514025 +-194.37055082191728 +866.8152382723547 +1942.4954878031476 +3029.6530650445065 +4124.813272433458 +5224.182372796805 +6323.798833680389 +7419.691261146703 +8508.036726718718 +9585.313175474315 +8522.186511687083 +7475.726293745707 +6447.784743925815 +5439.475803644065 +4427.820883159016 +3396.6667468076785 +2347.2554116938177 +1281.5567518219389 +202.1899654370236 +1292.0607750181862 +2388.8527422213347 +3488.707076758795 +4587.6429014211335 +5681.715957089111 +6767.175847897939 +7840.615557685351 +8899.107276974526 +9940.319125498701 +10962.608116908727 +11965.085659454062 +12982.51833757636 +11945.870424651168 +10891.46831356223 +9821.480844802876 +8738.698197894311 +7646.420655733031 +6548.327032726382 +5448.328012071312 +4350.41023915618 +3258.4773865897123 +4340.760246086583 +5410.112754564295 +6463.770046364339 +7499.592974588021 +8516.153392132852 +9519.515696854965 +10542.66667936512 +11584.683383047784 +12643.890734518507 +13717.928323513752 +14803.8445049994 +15898.21407194381 +14799.153336374324 +13699.350671102688 +12602.784893447759 +11513.305776233708 +10434.480569496176 +9369.451785480465 +8320.811916595085 +7290.500080920515 +6279.7247156905705 +7288.915400713338 diff --git a/testdata/golden/g_OiToVolumeRatio.csv b/testdata/golden/g_OiToVolumeRatio.csv new file mode 100644 index 00000000..ed4af3f9 --- /dev/null +++ b/testdata/golden/g_OiToVolumeRatio.csv @@ -0,0 +1,81 @@ +OiToVolumeRatio +10 +9.999999999999998 +10 +10 +10 +10 +10 +9.999999999999998 +10 +10 +9.999999999999998 +10 +10 +10 +10 +9.999999999999998 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +9.999999999999998 +10 +10 +10 +9.999999999999998 +10 +10 +10 +9.999999999999998 +10 +9.999999999999998 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +9.999999999999998 +10 +10 +10 +9.999999999999998 +9.999999999999998 +9.999999999999998 +9.999999999999998 +10 +10 +9.999999999999998 +9.999999999999998 +9.999999999999998 +10 +10 +10 +10 +10 +10 +10 +10 +10 +10 +9.999999999999998 +9.999999999999998 +9.999999999999998 +9.999999999999998 diff --git a/testdata/golden/g_OmegaRatio.csv b/testdata/golden/g_OmegaRatio.csv new file mode 100644 index 00000000..8d1467d7 --- /dev/null +++ b/testdata/golden/g_OmegaRatio.csv @@ -0,0 +1,81 @@ +OmegaRatio +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf diff --git a/testdata/golden/g_OnNeck.csv b/testdata/golden/g_OnNeck.csv new file mode 100644 index 00000000..0f44c95d --- /dev/null +++ b/testdata/golden/g_OnNeck.csv @@ -0,0 +1,81 @@ +OnNeck +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_OpenInterestDelta.csv b/testdata/golden/g_OpenInterestDelta.csv new file mode 100644 index 00000000..a32bb991 --- /dev/null +++ b/testdata/golden/g_OpenInterestDelta.csv @@ -0,0 +1,81 @@ +OpenInterestDelta +nan +198.6693307950609 +190.74901151358972 +175.22413108638466 +152.71361750448705 +124.11489390837414 +90.56810115932967 +53.410644021234475 +14.123873053045827 +-25.72597216331269 +-64.55020405251344 +-100.80102300608996 +-133.03322326843954 +-159.9618087296858 +-180.5132216655602 +-193.86814209603835 +-82.74586463228661 +197.16695859925312 +186.9793412680192 +169.33744764786752 +144.94460436520967 +114.77327710565987 +80.02630147592754 +42.08892974394803 +2.4736052023763477 +-37.240334172702205 +-75.46961894298693 +-110.69016816416479 +-141.49784968366657 +-166.66445845856288 +-185.1866812148328 +-196.32609538142788 +33.45980203299587 +194.99215866288614 +182.57198762522785 +162.87324758018076 +136.6812651303644 +105.04023196247363 +69.21157621986094 +30.623673343117844 +-9.18509875122254 +-48.62768994360886 +-86.1316485914922 +-120.20181021416647 +-149.4799049823523 +-172.7987076500067 +-189.22857114150975 +-198.11448864688828 +149.55135576962493 +192.15234802894702 +177.5419816374415 +155.85357670417397 +127.95178149210733 +94.94895252715469 +58.160808453683785 +19.0539764842124 +-20.812477399385898 +-59.84920348664127 +-96.49993069596894 +-129.3035101915848 +-156.95216677668577 +-178.3436357636092 +-192.62510678851868 +-131.9811282271694 +197.88677788039968 +188.65721172510166 +171.90647788058413 +148.30237524522454 +118.78592490404844 +84.5338545876075 +46.91168625076352 +7.4192970214935485 +-32.36887616708373 +-70.86660440877495 +-106.53910476518831 +-137.96422721819908 +-163.8891513033177 +-183.28033210809735 +-195.36470444625957 +-15.846802071759157 diff --git a/testdata/golden/g_OpenInterestMomentum.csv b/testdata/golden/g_OpenInterestMomentum.csv new file mode 100644 index 00000000..7e7131ea --- /dev/null +++ b/testdata/golden/g_OpenInterestMomentum.csv @@ -0,0 +1,81 @@ +OpenInterestMomentum +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +9.092974268256803 +5.979476863546756 +2.7532324603548273 +-0.4651468490043314 +-3.567745043652131 +-6.459925758501116 +-7.9917839267618 +-6.644321770178401 +-5.06431594396189 +-3.2986583385476207 +-1.3978437432897362 +0.5836091000752649 +2.586668968531907 +4.54747343853153 +6.3974573465762745 +8.064240103196742 +8.20292127263632 +5.0433553957180655 +1.8074773767731767 +-1.3876525019680623 +-4.438000951651185 +-7.252733054548181 +-7.62493800820185 +-6.204919165861876 +-4.565694272108447 +-2.755176223294346 +-0.8249842969098927 +1.1690927468164796 +3.1666314619547706 +5.102355128331872 +6.906450552065412 +8.505737870603697 +7.295468922188624 +4.100800447321861 +0.865283599622097 +-2.2977237627986784 +-5.288081465435792 +-8.018681321450574 +-7.235582631337 +-5.74679933764581 +-4.052439876285283 +-2.2014605682723416 +-0.2466460458771933 +1.754903624498852 +3.7413522463895394 +5.6460337263949025 +7.397984536720263 +8.92342284237119 +6.373903922002522 +3.1548412093199594 +-0.07063901722695107 +-3.1929851080672367 +-6.115930057874898 +-8.14035206319732 +-6.824795165579556 +-5.271124417717816 +-3.5258033342175934 +-1.6388611743993082 +0.33570909461396375 +2.3394585291908636 +4.30912822630184 +6.176706008783894 +7.870202176799659 +8.5828231822788 +5.44144756532305 +2.2084176051803164 +-0.9976783649272772 +-4.071156705193155 +-6.919577913730405 +-7.783374510264412 diff --git a/testdata/golden/g_OpeningMarubozu.csv b/testdata/golden/g_OpeningMarubozu.csv new file mode 100644 index 00000000..7356e98a --- /dev/null +++ b/testdata/golden/g_OpeningMarubozu.csv @@ -0,0 +1,81 @@ +OpeningMarubozu +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_OpeningRange.csv b/testdata/golden/g_OpeningRange.csv new file mode 100644 index 00000000..3304372c --- /dev/null +++ b/testdata/golden/g_OpeningRange.csv @@ -0,0 +1,81 @@ +high,low,breakout_distance +101,98,0.5 +104.77731091023225,98,2.066546611497273 +108.13914959894458,98,3.576849934478062 +110.76487377959927,98,4.950832206475198 +112.90403177129735,98,5.868374974023581 +114.45148509543229,98,6.249207318324395 +115.1642566915892,98,6.156347962987354 +115.1642566915892,98,5.549965320694142 +115.1642566915892,98,4.172503459716907 +115.1642566915892,98,2.1916704565437044 +115.1642566915892,98,-0.17092826519592563 +115.1642566915892,98,-2.659585287227088 +115.1642566915892,98,-5.00733277874312 +115.1642566915892,97.48620160125755,-6.7028907382631076 +115.1642566915892,97.48620160125755,-8.040986870559252 +115.1642566915892,97.48620160125755,-8.600530323074338 +115.1642566915892,97.48620160125755,-8.286875234781775 +115.1642566915892,97.48620160125755,-7.083375969700697 +115.1642566915892,97.48620160125755,-5.052874021983243 +115.1642566915892,97.48620160125755,-2.3320845723997365 +115.1642566915892,97.48620160125755,0.8806158715873664 +115.1642566915892,97.48620160125755,4.342909858420128 +115.1642566915892,97.48620160125755,7.790184488710409 +115.1642566915892,97.48620160125755,10.95916849745862 +115.1642566915892,97.48620160125755,13.61144949206816 +115.1642566915892,97.48620160125755,15.554770621324025 +115.1642566915892,97.48620160125755,16.660204307322687 +115.1642566915892,97.48620160125755,16.873668962027494 +115.1642566915892,97.48620160125755,16.220759934459437 +115.1642566915892,97.48620160125755,14.804463154398462 +115.1642566915892,97.48620160125755,12.795955705994203 +115.1642566915892,97.48620160125755,10.419315088647267 +115.1642566915892,97.48620160125755,7.931503041346829 +115.1642566915892,97.48620160125755,5.599411915823424 +115.1642566915892,97.48620160125755,3.676023977641208 +115.1642566915892,97.48620160125755,2.3778132538599266 +115.1642566915892,97.48620160125755,1.8654085529117168 +115.1642566915892,97.48620160125755,2.229244971536744 +115.1642566915892,97.48620160125755,3.481485596929872 +115.1642566915892,97.48620160125755,5.554935014386302 +115.1642566915892,97.48620160125755,8.309041673572281 +115.1642566915892,97.48620160125755,11.542452939918604 +115.1642566915892,97.48620160125755,15.011001325788001 +115.1642566915892,97.48620160125755,18.44951524495356 +115.1642566915892,97.48620160125755,21.595506000648868 +115.1642566915892,97.48620160125755,24.212615119092845 +115.1642566915892,97.48620160125755,26.111727548017683 +115.1642566915892,97.48620160125755,27.16786474105581 +115.1642566915892,97.48620160125755,27.331348619069416 +115.1642566915892,97.48620160125755,26.632239165005984 +115.1642566915892,97.48620160125755,25.1776492551478 +115.1642566915892,97.48620160125755,23.142176584882776 +115.1642566915892,97.48620160125755,20.752307376571068 +115.1642566915892,97.48620160125755,18.266185039834753 +115.1642566915892,97.48620160125755,15.950550989591974 +115.1642566915892,97.48620160125755,14.056917429885402 +115.1642566915892,97.48620160125755,12.799100517761588 +115.1642566915892,97.48620160125755,12.33412080276021 +115.1642566915892,97.48620160125755,12.748177048870303 +115.1642566915892,97.48620160125755,14.048946355664782 +115.1642566915892,97.48620160125755,16.16489838585987 +115.1642566915892,97.48620160125755,18.95168495730931 +115.1642566915892,97.48620160125755,22.205034236210395 +115.1642566915892,97.48620160125755,25.678997731644728 +115.1642566915892,97.48620160125755,29.107920141775566 +115.1642566915892,97.48620160125755,32.230169550772644 +115.1642566915892,97.48620160125755,34.81150822864768 +115.1642566915892,97.48620160125755,36.666016390055574 +115.1642566915892,97.48620160125755,37.672699855003344 +115.1642566915892,97.48620160125755,37.7862980985978 +115.1642566915892,97.48620160125755,37.041327238937185 +115.1642566915892,97.48620160125755,35.54899681507902 +115.1642566915892,97.48620160125755,33.48727577012605 +115.1642566915892,97.48620160125755,31.084995015575117 +115.1642566915892,97.48620160125755,28.601406647509037 +115.1642566915892,97.48620160125755,26.303025728971534 +115.1642566915892,97.48620160125755,24.439823293134197 +115.1642566915892,97.48620160125755,23.222897175379813 +115.1642566915892,97.48620160125755,22.805615272370147 +115.1642566915892,97.48620160125755,23.26991564460505 diff --git a/testdata/golden/g_OrderBookImbalanceFull.csv b/testdata/golden/g_OrderBookImbalanceFull.csv new file mode 100644 index 00000000..4c491fbe --- /dev/null +++ b/testdata/golden/g_OrderBookImbalanceFull.csv @@ -0,0 +1,81 @@ +OrderBookImbalanceFull +0.052631578947368356 +0.05263157894736847 +0.05263157894736848 +0.0526315789473684 +0.05263157894736836 +0.05263157894736837 +0.05263157894736842 +0.05263157894736835 +0.0526315789473683 +0.05263157894736836 +0.0526315789473684 +0.052631578947368494 +0.052631578947368404 +0.052631578947368376 +0.052631578947368356 +0.052631578947368446 +0.05263157894736834 +0.052631578947368356 +0.052631578947368245 +0.052631578947368356 +0.05263157894736838 +0.052631578947368356 +0.05263157894736837 +0.052631578947368404 +0.05263157894736844 +0.052631578947368515 +0.05263157894736844 +0.05263157894736844 +0.0526315789473684 +0.05263157894736842 +0.0526315789473685 +0.052631578947368474 +0.05263157894736847 +0.052631578947368446 +0.05263157894736841 +0.05263157894736846 +0.05263157894736846 +0.05263157894736838 +0.05263157894736848 +0.052631578947368446 +0.052631578947368446 +0.05263157894736844 +0.05263157894736836 +0.05263157894736851 +0.05263157894736836 +0.052631578947368494 +0.05263157894736841 +0.0526315789473685 +0.05263157894736834 +0.052631578947368494 +0.05263157894736827 +0.05263157894736846 +0.05263157894736835 +0.052631578947368286 +0.052631578947368404 +0.052631578947368404 +0.052631578947368425 +0.05263157894736844 +0.05263157894736834 +0.052631578947368376 +0.05263157894736842 +0.05263157894736841 +0.05263157894736848 +0.05263157894736839 +0.05263157894736837 +0.052631578947368404 +0.052631578947368376 +0.05263157894736846 +0.05263157894736834 +0.05263157894736848 +0.05263157894736835 +0.05263157894736848 +0.05263157894736838 +0.052631578947368404 +0.05263157894736838 +0.05263157894736851 +0.05263157894736849 +0.052631578947368425 +0.05263157894736842 +0.05263157894736843 diff --git a/testdata/golden/g_OrderBookImbalanceTop1.csv b/testdata/golden/g_OrderBookImbalanceTop1.csv new file mode 100644 index 00000000..2a4ab33a --- /dev/null +++ b/testdata/golden/g_OrderBookImbalanceTop1.csv @@ -0,0 +1,81 @@ +OrderBookImbalanceTop1 +0.05263157894736842 +0.05263157894736844 +0.052631578947368404 +0.0526315789473684 +0.05263157894736842 +0.0526315789473684 +0.052631578947368404 +0.05263157894736839 +0.052631578947368425 +0.05263157894736843 +0.05263157894736839 +0.05263157894736838 +0.05263157894736842 +0.0526315789473684 +0.05263157894736841 +0.052631578947368404 +0.05263157894736841 +0.05263157894736839 +0.0526315789473684 +0.05263157894736838 +0.05263157894736843 +0.05263157894736841 +0.052631578947368404 +0.05263157894736843 +0.052631578947368425 +0.052631578947368425 +0.05263157894736842 +0.05263157894736838 +0.05263157894736841 +0.05263157894736843 +0.0526315789473684 +0.05263157894736842 +0.052631578947368404 +0.05263157894736842 +0.052631578947368404 +0.05263157894736842 +0.05263157894736838 +0.05263157894736843 +0.05263157894736841 +0.05263157894736842 +0.05263157894736843 +0.05263157894736842 +0.052631578947368425 +0.052631578947368425 +0.05263157894736841 +0.0526315789473684 +0.05263157894736842 +0.05263157894736842 +0.05263157894736839 +0.05263157894736838 +0.0526315789473684 +0.05263157894736843 +0.05263157894736842 +0.05263157894736838 +0.05263157894736843 +0.05263157894736844 +0.052631578947368425 +0.052631578947368404 +0.05263157894736838 +0.05263157894736838 +0.05263157894736841 +0.0526315789473684 +0.05263157894736843 +0.052631578947368404 +0.0526315789473684 +0.05263157894736841 +0.05263157894736843 +0.05263157894736843 +0.05263157894736842 +0.05263157894736842 +0.05263157894736839 +0.05263157894736842 +0.05263157894736842 +0.05263157894736842 +0.05263157894736839 +0.05263157894736841 +0.05263157894736841 +0.05263157894736841 +0.05263157894736839 +0.052631578947368404 diff --git a/testdata/golden/g_OrderBookImbalanceTopN.csv b/testdata/golden/g_OrderBookImbalanceTopN.csv new file mode 100644 index 00000000..65a76b3d --- /dev/null +++ b/testdata/golden/g_OrderBookImbalanceTopN.csv @@ -0,0 +1,81 @@ +OrderBookImbalanceTopN +0.052631578947368356 +0.05263157894736847 +0.05263157894736848 +0.0526315789473684 +0.05263157894736836 +0.05263157894736837 +0.05263157894736842 +0.05263157894736835 +0.0526315789473683 +0.05263157894736836 +0.0526315789473684 +0.052631578947368494 +0.052631578947368404 +0.052631578947368376 +0.052631578947368356 +0.052631578947368446 +0.05263157894736834 +0.052631578947368356 +0.052631578947368245 +0.052631578947368356 +0.05263157894736838 +0.052631578947368356 +0.05263157894736837 +0.052631578947368404 +0.05263157894736844 +0.052631578947368515 +0.05263157894736844 +0.05263157894736844 +0.0526315789473684 +0.05263157894736842 +0.0526315789473685 +0.052631578947368474 +0.05263157894736847 +0.052631578947368446 +0.05263157894736841 +0.05263157894736846 +0.05263157894736846 +0.05263157894736838 +0.05263157894736848 +0.052631578947368446 +0.052631578947368446 +0.05263157894736844 +0.05263157894736836 +0.05263157894736851 +0.05263157894736836 +0.052631578947368494 +0.05263157894736841 +0.0526315789473685 +0.05263157894736834 +0.052631578947368494 +0.05263157894736827 +0.05263157894736846 +0.05263157894736835 +0.052631578947368286 +0.052631578947368404 +0.052631578947368404 +0.052631578947368425 +0.05263157894736844 +0.05263157894736834 +0.052631578947368376 +0.05263157894736842 +0.05263157894736841 +0.05263157894736848 +0.05263157894736839 +0.05263157894736837 +0.052631578947368404 +0.052631578947368376 +0.05263157894736846 +0.05263157894736834 +0.05263157894736848 +0.05263157894736835 +0.05263157894736848 +0.05263157894736838 +0.052631578947368404 +0.05263157894736838 +0.05263157894736851 +0.05263157894736849 +0.052631578947368425 +0.05263157894736842 +0.05263157894736843 diff --git a/testdata/golden/g_OrderFlowImbalance.csv b/testdata/golden/g_OrderFlowImbalance.csv new file mode 100644 index 00000000..4536cef4 --- /dev/null +++ b/testdata/golden/g_OrderFlowImbalance.csv @@ -0,0 +1,81 @@ +OrderFlowImbalance +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +3472.35457744587 +3607.7574461854365 +3724.537399089191 +3818.038787955312 +3884.5340074704022 +3921.372103070195 +3927.0844561324593 +8065.766208198556 +8120.182359307029 +8202.845146455747 +8310.4590651786 +8438.733888131464 +8561.576846044733 +8635.824644362527 +8641.899377104892 +8579.558863847318 +4623.891881160869 +4754.38501537729 +4864.8099676915845 +4950.76444372107 +5008.821709751485 +5036.667205796494 +5033.1908198003275 +4998.531144302281 +4934.069951189532 +4842.377104812427 +4727.108109602512 +4592.858376646457 +8546.611289223665 +8601.136349403163 +8587.134149277204 +8505.162912378315 +8379.469430119547 +8253.330638467083 +8148.393173553632 +8068.84056095597 +8017.844312295583 +3875.886054743045 +3863.2327857235414 +3819.6727627281434 +3746.942586412075 +3647.9417793917155 +3526.617191427853 +3394.530260424958 +3296.119859087168 +3265.1180511445364 +3302.760780847874 +3407.547351352411 +3540.434896520681 +7562.544826557149 +7464.630410505437 +7393.138109163834 +7350.9180949798265 +7339.653546685972 +7359.793546275408 +7410.535175519949 +7489.8555257860835 +7594.592345018542 +3589.5602538303306 +3465.0416855351523 diff --git a/testdata/golden/g_OuHalfLife.csv b/testdata/golden/g_OuHalfLife.csv new file mode 100644 index 00000000..4e916a19 --- /dev/null +++ b/testdata/golden/g_OuHalfLife.csv @@ -0,0 +1,81 @@ +OuHalfLife +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +5.870174076431376 +5.22397456935036 +5.010183360635332 +5.363740134757065 +6.109772751339193 +6.514744049252506 +6.077273847475933 +5.375245867857027 +5.014883353346482 +5.207379635103874 +5.891516158303275 +6.48590840885565 +6.264661901022263 +5.556639947315159 +5.065051705027592 +5.093921540868245 +5.668955352218673 +6.381843863900842 +6.4115028254845345 +5.758723302162206 +5.158207389573967 +5.0267099401365 +5.46204375929687 +6.215943632690861 +6.4982265225633595 +5.968435767048839 +5.290657299024382 +5.006609759796516 +5.28544930577267 +6.009449498003835 +6.511014388335512 +6.168817550234489 +5.457020794351222 +5.03286443379514 +5.148580703920001 +5.78639853048429 +6.445915396230979 +6.339812331206664 +5.649493806652258 +5.1035582775974495 +5.056559465705095 +5.568994614103005 +6.310611562951343 +6.4606700058722115 +5.857020046272717 +5.215680948742395 +5.011437791829534 +5.374803733957325 +6.122745161901734 +6.513933815557083 +6.064694585431547 +5.364825943312838 +5.013237099202329 +5.215948658551087 +5.9055182421557 +6.48999841666535 +6.2539174075123505 +5.544579334074684 +5.060624678840011 +5.0996791071491385 +5.682591767933023 +6.390349312180306 +6.403900899954017 +5.745711463430283 +5.151186980598446 +5.029530502110871 +5.474214523011905 diff --git a/testdata/golden/g_OvernightGap.csv b/testdata/golden/g_OvernightGap.csv new file mode 100644 index 00000000..3e932d1d --- /dev/null +++ b/testdata/golden/g_OvernightGap.csv @@ -0,0 +1,81 @@ +OvernightGap +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan diff --git a/testdata/golden/g_OvernightIntradayReturn.csv b/testdata/golden/g_OvernightIntradayReturn.csv new file mode 100644 index 00000000..c01a9a97 --- /dev/null +++ b/testdata/golden/g_OvernightIntradayReturn.csv @@ -0,0 +1,81 @@ +overnight,intraday +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan diff --git a/testdata/golden/g_PainIndex.csv b/testdata/golden/g_PainIndex.csv new file mode 100644 index 00000000..31d4b79b --- /dev/null +++ b/testdata/golden/g_PainIndex.csv @@ -0,0 +1,81 @@ +PainIndex +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.02913058755736545 +0.03828846623259051 +0.04780085909652871 +0.0571145271274589 +0.06566568500183324 +0.07293036235813541 +0.07847120850875947 +0.07701211585434466 +0.06647700414464972 +0.0520217300749377 +0.036265298983462646 +0.021787630884776674 +0.010734476568939794 +0.0037285136246666137 +0.0005853516567916236 +0.00037854526158951957 +0.00157823468332881 +0.003942421677253126 +0.007684543431168327 +0.012869055200333756 +0.019405672711473834 +0.02705743698802055 +0.035461881189766925 +0.044163408696185354 +0.0526539901956582 +0.06041854443084567 +0.06698094887336258 +0.0719465703312265 +0.07010943702683661 +0.06007195627926033 +0.046632509355740794 +0.03227374297411312 +0.019214996549441556 +0.009197234337381269 +0.003084473650735296 +0.0004343241449867052 +0.0003736171493450577 +0.0015245943135326415 +0.003763366088727144 +0.007279328603836795 +0.012123921328387466 +0.018206032137909646 +0.025300136088662488 +0.03306644088918822 +0.04108123953372129 +0.0488747587871075 +0.05597312262879761 +0.06194068218644117 +0.0664189309521818 +0.06426403102754188 +0.054703686533454324 +0.04208782393777232 +0.028919455829513302 +0.017061817589245586 +0.008041244832965361 +0.0025498115297833183 +0.00030934257951155945 +0.0003692432193227669 +0.0014781568336053221 +0.0036089580910243523 +0.006930444686030433 +0.011482916564024734 +0.01717457604725964 +0.023789727847995424 +0.031008046486159308 +0.03843319001047057 +0.045628204044542604 diff --git a/testdata/golden/g_PairSpreadZScore.csv b/testdata/golden/g_PairSpreadZScore.csv new file mode 100644 index 00000000..eaa62b19 --- /dev/null +++ b/testdata/golden/g_PairSpreadZScore.csv @@ -0,0 +1,81 @@ +PairSpreadZScore +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-0.6421402645646551 +-0.015349624188921275 +0.4929531295687218 +0.8673672888612143 +1.2985965802322759 +1.814164323869887 +2.093437739221512 +2.0272326108365575 +1.7606472463422436 +1.4036331570400788 +1.0185047041305424 +0.6640340080532453 +0.4001533027915833 +0.2656043362520283 +0.2571100017329249 +0.32772362916069275 +0.4025437584909993 +0.38650943425726947 +0.11367514423825409 +-0.7762144897346667 +-2.2866667385125683 +-3.001478790312411 +-2.876325954250426 +-2.4569841218876736 +-2.078965690493498 +-1.9106920005792265 +-1.8420034421860616 +-1.659169053234382 +-1.2713793349653655 +-0.7372610710777782 +-0.18797765054076834 +0.24899900750853882 +0.508417771217583 +0.6038966372973317 +0.6023397917052284 +0.5946754133303235 +0.6786471489035887 +0.9360370415301581 +1.3661096393614678 +1.7987709176084858 +2.0317655070753537 +2.0575233402079416 diff --git a/testdata/golden/g_PairwiseBeta.csv b/testdata/golden/g_PairwiseBeta.csv new file mode 100644 index 00000000..6677c438 --- /dev/null +++ b/testdata/golden/g_PairwiseBeta.csv @@ -0,0 +1,81 @@ +PairwiseBeta +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.8817534370078305 +0.8606176971177785 +0.8331627325394575 +0.8137736665402807 +0.8262623537441857 +0.8637224127024673 +0.9016163524396359 +0.9312495585779166 +0.9548835247765869 +0.9771739390181917 +1.0031029732010859 +1.0385476164815852 +1.0912940396181625 +1.16480423050052 +1.2194257553006147 +1.199708910451165 +1.1612675957296876 +1.1370001846681614 +1.1185536418084436 +1.098171833701204 +1.0737368484193057 +1.046259764609412 +1.0172323011621207 +0.9864926700872014 +0.954141415109249 +0.9287153396471761 +0.9165716180637373 +0.9121329287245704 +0.9096490697708844 +0.905860503049458 +0.8984782000003231 +0.8855941646546305 +0.8658228543832615 +0.8397170938859263 +0.8148960931162663 +0.8115517362389887 +0.8403067725329852 +0.879404043139221 +0.9125929366686147 +0.9411219961791998 +0.9695048779972087 +1.000817312061721 +1.0378689701779948 +1.0860020690579095 +1.1542212729662473 +1.231014297782957 +1.2455992962441749 +1.2020374528590654 +1.1599191335057446 +1.1298884826858993 +1.1072851457505013 +1.0882041888250769 +1.0699463509070184 +1.0497619407181082 +1.0239195915953554 +0.9896296881631066 +0.9553048577989182 +0.9367623640766266 +0.9296003157629905 +0.9235040142892624 +0.9156238216079079 +0.9060159126256949 +0.8942931065961487 +0.8786011612444667 +0.8562152585095407 +0.8287008816470112 diff --git a/testdata/golden/g_ParkinsonVolatility.csv b/testdata/golden/g_ParkinsonVolatility.csv new file mode 100644 index 00000000..6bf88f94 --- /dev/null +++ b/testdata/golden/g_ParkinsonVolatility.csv @@ -0,0 +1,81 @@ +ParkinsonVolatility +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +29.970031991902303 +30.23966939013508 +30.034578088493006 +29.508101965804684 +29.41457638138676 +29.696256681382177 +29.91879856408316 +29.6583294657627 +29.07943807838762 +28.80864028855531 +29.07796705754689 +29.187168476796366 +28.79654498227429 +28.344039638197128 +28.281016987783484 +28.162915867957732 +27.818727209487992 +27.510751693027114 +27.57986215235003 +27.98073665247529 +27.838074723998137 +27.24546733696484 +26.867515569638783 +27.20046203857539 +27.487874230363495 +27.323119632459857 +26.851747712086816 +26.659858951323162 +26.712042691835062 +26.76352642931669 +26.56895585591417 +26.37625876356797 +26.472238493074702 +26.43450508348824 +25.972164529807817 +25.542400969489254 +25.665264431345935 +26.066686605834484 +25.959801001629756 +25.336999868564142 +24.862743206254137 +24.9368340994896 +25.27011056011206 +25.204262042976396 +24.855172481441652 +24.78245307655656 +24.890598626969208 +24.708203440774657 +24.55523369442971 +24.494143778794577 +24.680916112612096 +24.716024006413083 +24.34100665555195 +23.822233722533504 +23.839397616248245 +24.218596399455866 +24.22304639421475 +23.74181419726439 +23.34972251928603 +23.338781664737994 +23.404212119508973 diff --git a/testdata/golden/g_PearsonCorrelation.csv b/testdata/golden/g_PearsonCorrelation.csv new file mode 100644 index 00000000..2fa966a0 --- /dev/null +++ b/testdata/golden/g_PearsonCorrelation.csv @@ -0,0 +1,81 @@ +PearsonCorrelation +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.9992210766897024 +0.9988035705752873 +0.9983659545895526 +0.9978922630645869 +0.9969840476674284 +0.9955695914031276 +0.9938158347180364 +0.9921794994643595 +0.9914915961140432 +0.9922773109322062 +0.9937884719725528 +0.9951513846883672 +0.996282712183533 +0.9972756860408124 +0.9981058209961743 +0.9986494197732788 +0.9987430220840745 +0.9982284673186705 +0.9969925092404305 +0.9950666207795056 +0.9928887563177252 +0.9913592158933262 +0.9911197848177553 +0.9915440704914825 +0.991918065359652 +0.9922070451802137 +0.9924949920036696 +0.9927993222204371 +0.9932539726730257 +0.9941585287406995 +0.9953716412261289 +0.9967206014196698 +0.9979359964424875 +0.9987258804722031 +0.9990102586260482 +0.9988318516569747 +0.9982809779421392 +0.997453262303606 +0.9963992626488489 +0.9950436864375244 +0.9931240805762607 +0.9906050792339133 +0.9889891664372734 +0.989859650874319 +0.9921090194534722 +0.9943483278260293 +0.9960460362590803 +0.9970425513016775 +0.9974748950971611 +0.9980290371783617 +0.9985243388750389 +0.9976973257396069 +0.9973489990231194 +0.9974095953097989 +0.9973469593460186 +0.9972117429205647 +0.997161873139488 +0.9972767785178096 +0.9975321985798016 +0.9978212588145787 +0.998032870347827 +0.9982668344310404 +0.9988741799446781 +0.999199224972868 +0.9987140937368172 +0.9983031344755235 +0.9977757105869344 diff --git a/testdata/golden/g_PercentAboveMa.csv b/testdata/golden/g_PercentAboveMa.csv new file mode 100644 index 00000000..52113940 --- /dev/null +++ b/testdata/golden/g_PercentAboveMa.csv @@ -0,0 +1,81 @@ +PercentAboveMa +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 +60 diff --git a/testdata/golden/g_PercentB.csv b/testdata/golden/g_PercentB.csv new file mode 100644 index 00000000..184da5fd --- /dev/null +++ b/testdata/golden/g_PercentB.csv @@ -0,0 +1,81 @@ +PercentB +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.08724921636597555 +0.041206649484513615 +0.078442436419676 +0.15202633056308598 +0.24408815207197784 +0.35743142722525223 +0.5048700346342506 +0.6971268760054101 +0.9020967534575391 +1.026814197996279 +1.0449975778222251 +1.0100363301457913 +0.959149893288629 +0.9044241025515163 +0.8476616478704312 +0.7870154729137795 +0.7186392494308037 +0.6364283431940512 +0.5311252547471764 +0.39177413590053467 +0.2223640529919293 +0.08172217408200275 +0.04160790222593556 +0.0819095562059954 +0.15673687547517778 +0.24979128361013456 +0.36464651429418493 +0.5144489025448215 +0.7089685481005752 +0.9120587124177126 +1.030276018581018 +1.0439399284256363 +1.0074131872275192 +0.956140339268789 +0.9013029662688072 +0.8443926190298889 +0.7834326579419186 +0.7144677444268832 +0.6312400376072678 +0.5243044956646512 +0.3828508389469328 +0.2128487433674956 +0.07654866425768145 +0.04226407823732502 +0.08547534006350321 +0.16149991621777077 +0.2555604450928836 +0.37197106737776287 +0.5241792337661383 +0.7208628306160157 +0.9217246194465866 +1.0333877636169786 +1.042734289210176 +1.0047500111289869 +0.953121749284433 +0.8981760809454461 +0.8411113313082413 +0.7798252710620592 +0.710252306519804 +0.6259780558041289 +0.5173724643044644 +0.37382046988592255 +0.20343091382698064 +0.0717333962113779 +0.04316403692979783 +0.08913463321959818 +0.16631506556447204 diff --git a/testdata/golden/g_PercentageTrailingStop.csv b/testdata/golden/g_PercentageTrailingStop.csv new file mode 100644 index 00000000..25458409 --- /dev/null +++ b/testdata/golden/g_PercentageTrailingStop.csv @@ -0,0 +1,81 @@ +PercentageTrailingStop +98 +101.38609802528113 +104.51349623927135 +107.14660371434934 +109.09398304247881 +110.22545086871973 +110.48370678260632 +110.48370678260632 +110.48370678260632 +110.94927477838507 +108.53942408221064 +106.00099391973886 +103.6062914783925 +101.61478517632347 +100.2499271213814 +99.67919279981601 +99.67919279981601 +99.67919279981601 +99.24690802195133 +101.91328168254316 +105.06172811765052 +108.45477622474662 +111.8331053624311 +114.93870969100435 +117.5379450657217 +119.44239977239245 +120.52572478467113 +120.73492014628185 +120.73492014628185 +120.73492014628185 +121.50360854946592 +119.07943511977204 +116.5418668315256 +114.16313388349172 +112.20127818654586 +110.87710324828896 +110.35445045332179 +110.35445045332179 +110.35445045332179 +109.64256087759348 +112.34158540359573 +115.51032844461513 +118.90950586276715 +122.2792495035494 +125.36232044413079 +127.92708738020589 +129.78821756055223 +130.8232320097296 +130.98344621018293 +130.98344621018293 +130.98344621018293 +132.05675384593226 +129.61908725345432 +127.08324246998328 +124.72129573873565 +122.78978950783494 +121.50681625746866 +121.03253694816725 +121.03253694816725 +121.03253694816725 +120.04032498163757 +122.77137582165803 +125.95965811498108 +129.36414234050673 +132.72448630243497 +135.7842907232521 +138.31400262756964 +140.13142062574937 +141.11797042139818 +141.22929670012076 +141.22929670012076 +141.22929670012076 +142.60875501488042 +140.15842864523844 +137.62516850981106 +135.2808199729028 +133.3803534883487 +132.13908884823925 +131.71346130716938 +131.71346130716938 diff --git a/testdata/golden/g_PerpetualPremiumIndex.csv b/testdata/golden/g_PerpetualPremiumIndex.csv new file mode 100644 index 00000000..656109e3 --- /dev/null +++ b/testdata/golden/g_PerpetualPremiumIndex.csv @@ -0,0 +1,81 @@ +PerpetualPremiumIndex +0.005025125628140704 +0.004856481168154022 +0.004710474245865746 +0.004594183416081123 +0.004511805057907902 +0.004465284428331221 +0.004454800318425903 +0.0044789986784069145 +0.004534956870401571 +0.004617922392404337 +0.004720936025835783 +0.004834535926242437 +0.004946831672474743 +0.005044271634726057 +0.005113298302086592 +0.005142726139048963 +0.005126188621687648 +0.005063708892571905 +0.004961678223978869 +0.004831237876267005 +0.004685778927251883 +0.0045385172565910155 +0.004400811333625096 +0.004281393834171937 +0.004186318689532465 +0.004119294784616222 +0.004082118060094175 +0.004075016220260274 +0.00409681632117085 +0.004144916483357336 +0.004215098682601042 +0.004301277133392996 +0.004395344261249394 +0.004487337766882979 +0.004566157790299455 +0.004620942155677232 +0.004642929141119638 +0.004627295668055019 +0.004574284399398292 +0.004489129673737099 +0.004380805137736097 +0.004260116508326143 +0.0041378318244955905 +0.004023343620207788 +0.003924008124916932 +0.0038450345191749025 +0.0037896887462545714 +0.0037595937156182906 +0.0037549778493148824 +0.003774796592249654 +0.003816710030350015 +0.003876948575996886 +0.003950147978343445 +0.004029287628630878 +0.00410590676932255 +0.004170762822316785 +0.004214986937464313 +0.0042315737198540225 +0.0042167971389510915 +0.0041710401586143985 +0.0040986923295713495 +0.004007151511892075 +0.003905326653165511 +0.0038021591538924793 +0.003705538651084677 +0.003621734497298984 +0.0035552588131117216 +0.0035089875038813935 +0.003484370844090919 +0.0034816146697397815 +0.003499769383755054 +0.0035367125556263345 +0.0035890532605060014 +0.003652028203594035 +0.003719500953415725 +0.003784201951895383 +0.0038383280138162756 +0.0038745235149959946 +0.0038870925730076903 +0.003873112352980977 diff --git a/testdata/golden/g_Pgo.csv b/testdata/golden/g_Pgo.csv new file mode 100644 index 00000000..25cee1d0 --- /dev/null +++ b/testdata/golden/g_Pgo.csv @@ -0,0 +1,81 @@ +Pgo +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-1.9043407023317034 +-2.2641163765501484 +-2.352902909248512 +-2.1533350829342095 +-1.6556052943659971 +-0.8824803831926914 +0.026396494511560963 +0.9116844666365034 +1.7157145504229485 +2.4444666975870772 +3.0349116132189655 +3.448834442188537 +3.637319235293741 +3.619159905595468 +3.4282863154318335 +2.933339360076119 +2.1513986335772257 +1.214737976678761 +0.23917111171079578 +-0.6873844639092769 +-1.4687941609201374 +-2.064350757205931 +-2.4564710973753483 +-2.560499306413088 +-2.256136218518591 +-1.6526917986802168 +-0.8607528403095028 +0.08329272357002147 +1.0534236512934414 +1.8913968416060727 +2.5373018416492465 +3.018446611273373 +3.3749606086571085 +3.5771039794090274 +3.6036378225287296 +3.3309885923065314 +2.8153327875023684 +2.0295825386380106 +1.093987525458934 +0.16984073078038084 +-0.6768955099272351 +-1.4212879840199486 +-1.982896641440076 +-2.259984394673988 +-2.2741379364449634 +-2.0653065134130544 +-1.5731561442148045 +-0.7948934912498763 +0.13434054408074347 +1.0793959683428114 +1.9588251127671463 +2.6831217188796415 +3.2335718404936853 +3.630947224204033 +3.8425258715821977 +3.7949784248242047 +3.3900574671850037 +2.7628565622509984 +2.0102726678192173 +1.1046541314158886 +0.1279537544859838 +-0.740953072973677 +-1.4272458543548376 +-1.9378700023964777 +-2.2608919450467826 +-2.306784542112883 +-2.059967109265578 diff --git a/testdata/golden/g_PiercingDarkCloud.csv b/testdata/golden/g_PiercingDarkCloud.csv new file mode 100644 index 00000000..348357b0 --- /dev/null +++ b/testdata/golden/g_PiercingDarkCloud.csv @@ -0,0 +1,81 @@ +PiercingDarkCloud +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Pin.csv b/testdata/golden/g_Pin.csv new file mode 100644 index 00000000..0f49a902 --- /dev/null +++ b/testdata/golden/g_Pin.csv @@ -0,0 +1,81 @@ +Pin +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0.1 +0.2 +0.2 +0.2 +0.1 +0 +0.1 +0.2 +0.3 +0.3 +0.2 +0.1 +0 +0.1 +0.2 +0.2 +0.1 +0 +0.1 +0.2 +0.3 +0.3 +0.2 +0.1 +0 +0.1 +0.2 +0.3 +0.3 +0.2 +0.1 +0 +0.1 +0.2 +0.2 +0.1 +0 +0.1 +0.2 +0.3 +0.3 +0.2 +0.1 +0 +0.1 +0.2 +0.2 +0.2 +0.1 +0 +0.1 +0.2 +0.3 +0.3 +0.2 +0.1 +0 +0.1 +0.2 +0.2 diff --git a/testdata/golden/g_PivotReversal.csv b/testdata/golden/g_PivotReversal.csv new file mode 100644 index 00000000..609a6d1f --- /dev/null +++ b/testdata/golden/g_PivotReversal.csv @@ -0,0 +1,81 @@ +PivotReversal +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_PlusDi.csv b/testdata/golden/g_PlusDi.csv new file mode 100644 index 00000000..3e96fac4 --- /dev/null +++ b/testdata/golden/g_PlusDi.csv @@ -0,0 +1,81 @@ +PlusDi +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +25.69608371139216 +24.172427353035427 +23.71312261504318 +25.062909658874464 +27.04620446274735 +30.27469714537213 +33.01141316167591 +35.19812380445209 +37.06434664258708 +39.801316194660245 +41.99449389059172 +42.544553900228 +41.542696024136426 +39.5757019682593 +37.536261624936586 +35.215165462446194 +32.86410166086221 +30.70333902684003 +28.583754140794692 +26.55934622279741 +24.849750313093512 +23.505186308008465 +22.24831894567969 +21.991214452481188 +23.0167314852192 +25.270075861089534 +28.167925277844184 +32.199512135355 +36.67556284467224 +39.66767810504092 +41.25710485757308 +41.90255145462447 +42.395628716412624 +41.39315313749411 +38.98369312390027 +36.80520205991526 +34.33471861125097 +31.575896425438806 +29.011655429985023 +26.941362744011517 +25.293388618220902 +23.70108159294569 +21.9818825371455 +20.4556018343849 +19.315305653157523 +20.15346427198841 +22.621623373749483 +26.102172398824052 +29.5794011460886 +33.103914522491884 +36.988461875248944 +39.75301194225335 +41.37315229671887 +42.48135161688847 +42.62294720176041 +40.47684671425082 +37.62379013468778 +35.445073236866044 +33.361147221464314 +30.784559395666363 +28.101022653590128 +25.724805235133402 +23.898483996930594 +22.507592062957475 +21.169522519356338 +21.224977830554703 diff --git a/testdata/golden/g_PlusDm.csv b/testdata/golden/g_PlusDm.csv new file mode 100644 index 00000000..c7917bad --- /dev/null +++ b/testdata/golden/g_PlusDm.csv @@ -0,0 +1,81 @@ +PlusDm +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +14.164256691589202 +13.152524070761402 +12.721954172398027 +13.292733985584018 +14.390616261023094 +16.487519800904387 +18.524958428741797 +20.228076235879442 +21.483637112698005 +23.157552143615508 +24.40847007902269 +24.652358545720258 +23.811512886922255 +22.110690537856378 +20.531355499438064 +19.06483010662106 +17.7030565275767 +16.43855248989265 +15.264370169186032 +14.174058014244173 +13.161625298941017 +12.221509206159515 +11.348544262862408 +11.215248674860632 +11.816640162005092 +12.962385416962785 +14.512396347364804 +16.859782322358527 +19.837039764775717 +22.22525550145044 +23.70690656205142 +24.257138731099342 +24.39422427450124 +23.382025385951838 +21.711880715526707 +20.161032092989085 +18.720958372061293 +17.383747059771203 +16.14205084121612 +14.989047209700681 +13.918400980436347 +12.924229481833752 +12.00107023313134 +11.143850930764817 +10.34786157856733 +10.602224526296892 +11.859158002175242 +13.819937065201776 +15.881783987106898 +18.00507798723841 +20.453996135563663 +22.249752888101384 +23.15478087191907 +23.54517003834657 +23.345741915416184 +22.17395903966874 +20.590104822549545 +19.11938304951029 +17.753712831688127 +16.485590486567546 +15.308048308955579 +14.214616286887324 +13.199286552109658 +12.256480369816112 +11.381017486257818 +11.270010790149295 diff --git a/testdata/golden/g_Pmo.csv b/testdata/golden/g_Pmo.csv new file mode 100644 index 00000000..ee4fbe2c --- /dev/null +++ b/testdata/golden/g_Pmo.csv @@ -0,0 +1,81 @@ +Pmo +nan +34.552020666134055 +33.846192065781615 +32.03009093977964 +28.958602846162346 +24.686894883715294 +19.413837576695606 +13.435966052483616 +7.113569119039062 +0.8466276690859071 +-4.943962224131471 +-9.83566641133502 +-13.43000630817205 +-15.389012984445529 +-15.48261927192009 +-13.640238922528583 +-9.992087909453293 +-4.881977988471788 +1.1617844397749795 +7.496828509296135 +13.46165963637431 +18.469304759965148 +22.07690650888233 +24.020256350734048 +24.2151192232349 +22.73537675111747 +19.78010021690252 +15.639432534218711 +10.665165715204092 +5.247972045662337 +-0.19982350007122857 +-5.259132654908101 +-9.521014985996374 +-12.610026674275828 +-14.21686613931524 +-14.13943079005717 +-12.325636081534304 +-8.905483873736756 +-4.197622776655784 +1.3195522450995858 +7.07069384191171 +12.46584738963761 +16.98119416027582 +20.219615698811392 +21.941858151939027 +22.069435137035295 +20.66722614886913 +17.91573161141169 +14.081362450867184 +9.489940738033152 +4.505277371458995 +-0.4879887984288379 +-5.099956123917202 +-8.953065701969285 +-11.705283778830804 +-13.080820553972103 +-12.906941332619391 +-11.150564965226188 +-7.943805230892305 +-3.5864050813336195 +1.4824097750022578 +6.740451770732028 +11.654997468065972 +15.753388801804594 +18.676332325030568 +20.206075570819667 +20.270166218760096 +18.927260443455808 +16.343314319123657 +12.765341188233272 +8.497300679211364 +3.8798633097468818 +-0.7265545582527876 +-4.957721651746752 +-8.46353099151639 +-10.930775109658303 +-12.112029775629797 +-11.858837683127522 +-10.153262298599007 +-7.128345683106629 diff --git a/testdata/golden/g_PointAndFigureBars.csv b/testdata/golden/g_PointAndFigureBars.csv new file mode 100644 index 00000000..05d81b60 --- /dev/null +++ b/testdata/golden/g_PointAndFigureBars.csv @@ -0,0 +1,81 @@ +bars + + + + + + + + + + +1,112,100 + + + + + + + + +-1,110,96 + + + + + + + + + + + +1,122,98 + + + + + + + + +-1,120,108 + + + + + + + + + + + +1,132,110 + + + + + + + + +-1,130,118 + + + + + + + + + + +1,144,120 + + + + + + + diff --git a/testdata/golden/g_PolarizedFractalEfficiency.csv b/testdata/golden/g_PolarizedFractalEfficiency.csv new file mode 100644 index 00000000..9bb8edeb --- /dev/null +++ b/testdata/golden/g_PolarizedFractalEfficiency.csv @@ -0,0 +1,81 @@ +PolarizedFractalEfficiency +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-21.897076413750277 +-45.970739559511905 +-61.923887425167976 +-69.39625076253182 +-69.3424955915967 +-64.1772114862132 +-27.147376160199734 +-0.0719691760294479 +22.85629733561923 +42.88315086109084 +59.599631319393104 +72.40103060534108 +81.30344857732553 +86.76307527167502 +88.5611734096115 +86.21019481731919 +79.80304746706982 +70.77503429033668 +62.84343846678159 +23.44907039545287 +-8.056525436413791 +-33.957620008167154 +-54.09701589669279 +-67.23562541326893 +-72.69184870905598 +-71.23294500270146 +-65.20167862925031 +-27.816992762790086 +-0.27995199425660866 +23.00391604533937 +43.21294081382307 +59.957039452554035 +72.68659334290562 +81.49042012741428 +86.82751142848632 +88.44991383744846 +85.8914202335378 +79.3027520490032 +70.22790964579349 +31.122535579609917 +2.0412739864582243 +-22.63189075999327 +-43.901420394213694 +-60.801859951374034 +-71.5901517548371 +-75.34357792303774 +-72.69392312178262 +-65.94938254366646 +-28.2857511372264 +-0.3469917245878637 +23.244380067460437 +43.600003244097884 +60.34710666931064 +72.98996690699312 +81.68697189348596 +86.89370768456901 +88.3342600859971 +85.56555142931869 +78.7978938757647 +69.68728995631491 +30.709829519858012 +1.4986773099780824 +-23.295312662515034 +-44.56388183266691 +-61.30866202184053 +-71.80328494861499 diff --git a/testdata/golden/g_Ppo.csv b/testdata/golden/g_Ppo.csv new file mode 100644 index 00000000..48a53000 --- /dev/null +++ b/testdata/golden/g_Ppo.csv @@ -0,0 +1,81 @@ +Ppo +nan +nan +nan +nan +nan +nan +3.427247333392876 +2.6458648802656 +1.7116877707850764 +0.7000113838015978 +-0.3103676772762951 +-1.2385118816233818 +-2.004159499741735 +-2.532884848199042 +-2.7639571061245882 +-2.66020457174185 +-2.2177582573548014 +-1.472326002677201 +-0.4985925651933884 +0.5988729162257349 +1.7016456902485186 +2.6959751606063342 +3.48857031775159 +4.016048472259589 +4.247331104403681 +4.180655799302973 +3.837842989426646 +3.258151323303545 +2.4931380645491634 +1.6029958815266483 +0.6541376845984285 +-0.282626073307268 +-1.13419013908827 +-1.8284477235028416 +-2.299493422828301 +-2.4949249526334167 +-2.3845031708520517 +-1.9682637041558837 +-1.2812877433050927 +-0.3924679859392787 +0.6038200207718523 +1.6016685236979002 +2.499517984179839 +3.213708998058924 +3.68678306050652 +3.889891540335941 +3.8205966509676488 +3.4981854335870692 +2.9584361732777458 +2.2490650840605584 +1.4263021767788209 +0.5524385755790973 +-0.30619868530885885 +-1.0815837546942522 +-1.7073978015187519 +-2.1240563167503 +-2.2854084087474336 +-2.1663416542728156 +-1.7695727023026886 +-1.1292623592614555 +-0.3093345473429873 +0.6042263918993275 +1.5157163116496828 +2.3335554336236597 +2.982104611392536 +3.4090317752241375 +3.5876631197799513 +3.5153366582037866 +3.2094994591727595 +2.703183225407344 +2.04092744938108 +1.2755678477273091 +0.4657795930982008 +-0.32608147689081307 +-1.03646937894479 +-1.6041002525584358 +-1.9747868539488793 +-2.107604861573472 +-1.9816217432113048 +-1.6016341506831484 diff --git a/testdata/golden/g_PpoHistogram.csv b/testdata/golden/g_PpoHistogram.csv new file mode 100644 index 00000000..0461887f --- /dev/null +++ b/testdata/golden/g_PpoHistogram.csv @@ -0,0 +1,81 @@ +PpoHistogram +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +1.0713784966158348 +1.8842644345534694 +2.494781384256447 +2.8490596692148094 +2.9263327805597674 +2.7366000243433444 +2.3139347566769515 +1.7083056872272078 +0.978132151623559 +0.18470304048662056 +-0.6113805901977754 +-1.3522069488425292 +-1.9837746125151292 +-2.45729352118998 +-2.731344291523945 +-2.77540465873615 +-2.574724696735764 +-2.135729192960479 +-1.4902244294290696 +-0.6961486727678414 +0.16698160665157624 +1.0081669982476795 +1.7385467676838973 +2.2848767310770577 +2.5991920456286572 +2.6626306269994195 +2.4836405592516613 +2.09243291389892 +1.5340188036492284 +0.861700270894584 +0.13201862412041043 +-0.5986450454064836 +-1.2761741603920465 +-1.8501698984426689 +-2.275480972117654 +-2.5144556830832 +-2.5402989718727818 +-2.341430922020593 +-1.926048945206512 +-1.3253759941382002 +-0.5937235642840382 +0.19604368128317268 +0.9616573377887558 +1.6233942898672296 +2.1157356235957123 +2.395713494515977 +2.4462885705679014 +2.2749305931072197 +1.9089235806602476 +1.3893415307453243 +0.765288590715921 +0.08929510606436941 +-0.5859225628441478 +-1.2096160418101554 +-1.7346134968926132 +-2.119001212420378 +-2.328414474562821 +-2.3392209324928293 +-2.1424337481017655 +-1.7475905457743188 +-1.1852558928133408 diff --git a/testdata/golden/g_ProfileShape.csv b/testdata/golden/g_ProfileShape.csv new file mode 100644 index 00000000..fe33e610 --- /dev/null +++ b/testdata/golden/g_ProfileShape.csv @@ -0,0 +1,81 @@ +ProfileShape +nan +nan +0 +0 +0 +0 +-1 +-1 +0 +0 +0 +1 +0 +-1 +0 +0 +-1 +0 +0 +-1 +0 +0 +1 +0 +0 +-1 +0 +0 +-1 +0 +0 +0 +0 +0 +-1 +-1 +0 +-1 +-1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +-1 +0 +0 +0 +-1 +-1 +0 +0 +0 +-1 +0 +0 +-1 +-1 +0 +0 +0 +0 +0 +0 +-1 +-1 +0 +-1 +0 +1 +0 +-1 +0 +0 +-1 diff --git a/testdata/golden/g_ProfitFactor.csv b/testdata/golden/g_ProfitFactor.csv new file mode 100644 index 00000000..d6af1751 --- /dev/null +++ b/testdata/golden/g_ProfitFactor.csv @@ -0,0 +1,81 @@ +ProfitFactor +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf +inf diff --git a/testdata/golden/g_ProjectionBands.csv b/testdata/golden/g_ProjectionBands.csv new file mode 100644 index 00000000..ac1c6628 --- /dev/null +++ b/testdata/golden/g_ProjectionBands.csv @@ -0,0 +1,81 @@ +upper,middle,lower +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +113.8045003699604,104.54687745272422,95.28925453548804 +109.58834446131766,100.80265640568064,92.01696835004361 +105.73137258544978,97.95811486967872,90.18485715390767 +102.43807993053402,96.31009197555684,90.18210402057967 +101.15293363552601,96.3952831412468,91.63763264696757 +103.20029690993537,97.08205154990796,90.96380618988056 +106.32510161131832,98.74923025127755,91.17335889123679 +109.54022022493461,101.02448272711607,92.5087452292975 +112.56654934841096,103.82953633151823,95.0925233146255 +115.69836508697227,107.32489981199782,98.95143453702337 +120.40202707582095,111.99972940585766,103.59743173589438 +124.66452783954973,116.58165386569567,108.49877989184161 +127.79864914989635,120.48080911490588,113.16296907991541 +129.4082417178064,123.46432309831053,117.52040447881465 +129.7321146392649,125.43747666771824,121.1428386961716 +130.57271332152703,125.82049168708397,121.06827005264091 +132.00479581067057,125.81905245428723,119.63330909790388 +132.44635454156398,125.07460578735676,117.70285703314954 +131.71237924833557,123.65669857887116,115.60101790940676 +129.59995897658118,121.32895666139532,113.05795434620948 +126.7942948778254,118.51062148599158,110.22694809415778 +123.08057899058991,114.92727840165531,106.77397781272073 +119.37075752643509,111.86638264101096,104.36200775558683 +115.63939236114135,108.98925399752484,102.33911563390834 +112.57506336658413,106.84996120992213,101.12485905326011 +111.30403713029216,106.35987020388689,101.4157032774816 +113.29382811110736,107.59131674208338,101.8888053730594 +115.76972371414958,108.77734215728796,101.78496060042634 +119.15370942824079,111.13987970628673,103.12604998433268 +123.33523703654073,114.37459844066903,105.41395984479733 +127.14038418498515,117.86746021378345,108.59453624258174 +131.5239583211111,122.26317820342675,113.00239808574239 +136.0418427539746,126.96508114762591,117.8883195412772 +139.54120274047224,131.26176870344332,122.98233466641439 +141.31237627643532,134.5201103503305,127.7278444242257 +141.44709173259244,136.41767450915506,131.38825728571766 +142.0922473683251,136.5579825097101,131.0237176510951 +143.2705650373237,136.28407464614168,129.29758425495962 +143.4139698734944,135.24661357840995,127.07925728332546 +142.47851793380696,133.71373751111793,124.94895708842891 +140.01626463401234,131.56179454412907,123.1073244542458 +136.65826259411963,128.25247826806745,119.84669394201525 +132.88933008603223,124.58160079508266,116.27387150413311 +129.0447671163465,121.3277727085923,113.6107783008381 +125.47030957663841,118.90216657381366,112.3340235709889 +122.60248519855102,117.60953078085618,112.61657636316134 +121.93415307848436,117.78458242044341,113.63501176240247 +123.94838830624106,118.35727489887847,112.76616149151589 +126.75625008370868,119.79442519617082,112.83260030863296 +129.80523536741393,121.97773992340092,114.15024447938791 +133.06294250948164,124.86211825912076,116.66129400875988 +136.79793765689536,128.50670541931237,120.21547318172941 +141.17735680745923,132.89133533022786,124.60531385299647 +145.02476283911022,137.18252717157645,129.34029150404268 +148.1117317596141,141.13112843775878,134.15052511590346 +150.805952192229,144.71254863479115,138.6191450773533 +152.194876753372,147.1659401531304,142.13700355288884 +152.02936260629815,146.9595213326395,141.88968005898082 +153.56768879576896,147.08700157070228,140.60631434563564 +153.87654383128736,146.31099631700698,138.7454488027266 +153.02808320320702,144.35231782569429,135.67655244818158 +151.1720742912439,141.91681251734514,132.66155074344638 +148.23551607612958,139.03157686851836,129.82763766090716 +144.5576763198128,135.31599694385065,126.07431756788849 +140.28885608701628,131.64610859509116,123.00336110316601 +136.5053385771158,128.98395371754629,121.46256885797676 +133.41315696537814,127.58448579848505,121.75581463159196 diff --git a/testdata/golden/g_ProjectionOscillator.csv b/testdata/golden/g_ProjectionOscillator.csv new file mode 100644 index 00000000..6e2eaf48 --- /dev/null +++ b/testdata/golden/g_ProjectionOscillator.csv @@ -0,0 +1,81 @@ +ProjectionOscillator +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +23.40278876883572 +35.66751907267713 +48.498595731258725 +64.10138163441597 +79.91571195591924 +84.24432437695982 +84.60931471464335 +86.29375783646532 +89.13581598255062 +90.54781145047905 +81.44775658755859 +70.75390995609028 +59.56013417997141 +45.97159992236666 +23.937517270388323 +15.547665301758123 +12.095419391864754 +9.620022782644067 +7.097639371421983 +7.246871635857935 +10.24722298782706 +19.791219985951482 +28.923359446821667 +43.99549111219207 +64.88630998535577 +84.85768776391653 +87.60490020259577 +91.88078564563092 +91.97619997854636 +88.8456244332277 +87.24436973194737 +80.54579026685794 +69.68082490671209 +57.097030942826684 +42.43980967452863 +22.55053000181229 +17.47070938721021 +15.78256050702473 +14.620082445882709 +12.142799544956988 +8.776952997847864 +14.448896734547326 +24.725619530304225 +35.72343759771758 +48.151558023891596 +64.65941096167 +81.20314479555472 +86.95912005614547 +89.37537209084279 +91.85581139012129 +93.54506572088191 +91.76968917533131 +84.17842557210399 +75.21098811060162 +63.32346942632018 +44.136120916428204 +19.631622439199877 +14.565311285514325 +9.782231203525715 +7.052074630479082 +9.991462645535115 +12.236742221996932 +15.214231381340332 +25.37815196158936 +37.862758484798384 +50.97648706980037 +67.24800503383973 diff --git a/testdata/golden/g_Psar.csv b/testdata/golden/g_Psar.csv new file mode 100644 index 00000000..42dc690c --- /dev/null +++ b/testdata/golden/g_Psar.csv @@ -0,0 +1,81 @@ +Psar +nan +98 +98.27109243640929 +98.86317586616141 +99.81531169923645 +101.12418370644254 +102.72345987312131 +104.46517142770682 +105.96304336465036 +107.2512132304218 +115.1642566915892 +114.95695244967294 +114.42746591837954 +113.51305751285818 +112.23090903993013 +110.6425281816266 +108.8780106748948 +107.3252352689708 +105.95879291175768 +95.93821562552817 +96.14595334524398 +96.6817240204316 +97.63481354011036 +99.04538628198206 +100.98839098903126 +103.43543952898138 +106.22597178279139 +109.11587227593664 +111.54338869017865 +113.58250247814193 +115.29535806003109 +124.2878498649492 +124.11411322583835 +123.6718668706532 +122.88017770111423 +121.73099179712051 +120.27668498462239 +118.62308882104709 +116.8933577507125 +115.40578903022475 +106.26786689008574 +106.45790402656702 +106.96573624263397 +107.94790629026838 +109.48330452184572 +111.55592941923013 +114.06359422493719 +116.89989345551703 +119.80440972597047 +122.55139893599187 +124.80393008820941 +126.6510056330278 +135.065460892756 +134.86313081666944 +134.3928985621725 +133.6028499436933 +132.43647469059167 +130.95538231700561 +129.31138002864697 +127.86465801489135 +126.5915426427864 +117.25536324735009 +117.44538098407726 +117.93977515941073 +118.84716520041498 +120.28322699693341 +122.26037371058025 +124.69500768698927 +127.48076752812158 +130.4559506441753 +133.35673731012398 +135.73538237620193 +137.68587133038582 +146.57143212166807 +146.35353452819834 +145.80585517680825 +144.8727534434653 +143.57950753641282 +141.9831022541132 +140.233067038483 diff --git a/testdata/golden/g_Pvi.csv b/testdata/golden/g_Pvi.csv new file mode 100644 index 00000000..c9cb59a4 --- /dev/null +++ b/testdata/golden/g_Pvi.csv @@ -0,0 +1,81 @@ +Pvi +1000 +1034.552020666134 +1066.4642473395036 +1093.3326909627483 +1113.2039085967226 +1124.7494986604056 +1127.3847630878197 +1121.3209366648875 +1107.546318055115 +1107.546318055115 +1107.546318055115 +1107.546318055115 +1107.546318055115 +1107.546318055115 +1107.546318055115 +1107.546318055115 +1107.546318055115 +1121.1423355996762 +1144.0810617845839 +1174.8180154038305 +1211.1121228197796 +1250.2259063967358 +1289.1700152252445 +1324.9702549357955 +1354.9332636239549 +1354.9332636239549 +1354.9332636239549 +1354.9332636239549 +1354.9332636239549 +1354.9332636239549 +1354.9332636239549 +1354.9332636239549 +1326.0598004688418 +1298.993629107451 +1276.6708532263892 +1261.603863121029 +1255.6569113529526 +1259.8795846208377 +1274.4130473065973 +1298.4774316815672 +1298.4774316815672 +1298.4774316815672 +1298.4774316815672 +1298.4774316815672 +1298.4774316815672 +1298.4774316815672 +1298.4774316815672 +1298.4774316815672 +1300.0676272479639 +1293.2674413960895 +1279.1187531358967 +1259.3198613117884 +1236.0737806248046 +1211.8914528905132 +1189.367452084838 +1170.9482187780848 +1170.9482187780848 +1170.9482187780848 +1170.9482187780848 +1170.9482187780848 +1170.9482187780848 +1170.9482187780848 +1170.9482187780848 +1170.9482187780848 +1201.364597733735 +1229.0606228574084 +1251.9584799821862 +1268.408960998342 +1277.3387827020272 +1278.3464599873623 +1271.738169315224 +1258.500398881864 +1258.500398881864 +1258.500398881864 +1258.500398881864 +1258.500398881864 +1258.500398881864 +1258.500398881864 +1258.500398881864 +1258.500398881864 diff --git a/testdata/golden/g_Qqe.csv b/testdata/golden/g_Qqe.csv new file mode 100644 index 00000000..e041d1a9 --- /dev/null +++ b/testdata/golden/g_Qqe.csv @@ -0,0 +1,81 @@ +rsi_ma,trailing_line +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +35.930862145084035,18.830590440348864 +48.29410290300643,30.391660241019007 +59.26715678400074,40.558897574345515 +68.33562367886918,49.33270438357475 +75.57249801162841,56.94185985935833 +81.23795820101282,63.58385808714259 +85.6218327195316,69.38912185348715 +88.98678395663832,74.44166924427545 +91.5510294708851,78.80224901392174 +93.48341103862265,82.52011439755776 +90.40376158791501,82.52011439755776 +80.53476225069144,90.70325793202198 +67.5040922138752,79.67513724080148 +54.607988336107724,69.18251781981085 +43.31044334937383,59.84436153495163 +33.9784071238569,51.61984853976301 +26.514320576572587,44.34652028136489 +20.66950621953593,37.90397949819777 +16.18858230365668,32.23821878771572 +15.667629460242955,29.52314616923057 +23.354545704208803,29.52314616923057 +35.59020377717422,21.630437252428703 +48.16336335462405,32.55588546785338 +59.22875215910787,42.16414703119301 +68.33672515447026,50.49658115684578 +75.5891079315098,57.77487759663053 +81.25909004544292,64.17573979478519 +85.64252569286334,69.80806425250596 +89.00487693677461,74.73767262905457 +91.56552450373697,79.01109105205524 +93.49320611482402,82.66656751354904 +90.04931664408515,82.66656751354904 +79.87821947695237,90.15472885427455 +66.7679277095395,79.10730340292254 +53.924472723405714,68.66373725491407 +42.72746590453222,59.38387537590057 +33.502366337508455,51.21015018911227 +26.135399376219638,43.98003296025853 +20.37355121290307,37.576680538312466 +15.963297921145772,31.94991171584264 +15.896259214006246,29.58080650834001 +23.97608537582024,29.58080650834001 +36.31307446761109,22.40498462590284 +48.82857271478802,33.25275033643872 +59.786893992980595,42.76532157856463 +68.78527059674094,51.01278918928371 +75.94145759988503,58.2196952400949 +81.53219875188822,64.55967597503722 +85.85235784773305,70.13863095053959 +89.16495801341567,75.02053223671759 +91.68661403744389,79.25089028414837 +93.58296570862566,82.86700067805707 +89.74995257214049,82.86700067805707 +79.26810366338816,89.65174661124507 +66.07164387191447,78.57671631769999 +53.273309364814715,68.17586120617005 +42.16965680192121,58.94939429513333 +33.04542646539114,50.82266015718939 +25.770755519154594,43.632666210399435 +20.08817461239413,37.26585853920147 +15.745944613517766,31.675836208457923 +16.13443030423887,29.826089727960508 diff --git a/testdata/golden/g_Qstick.csv b/testdata/golden/g_Qstick.csv new file mode 100644 index 00000000..178ce0a3 --- /dev/null +++ b/testdata/golden/g_Qstick.csv @@ -0,0 +1,81 @@ +Qstick +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.10068092037709826 +0.0831025099730484 +0.04517770682623734 +-0.003808174579245157 +-0.05186168203299652 +-0.08721764098567775 +-0.10121967960349565 +-0.0904396104946384 +-0.05751677054500907 +-0.010511819198460972 +0.03906679210038127 +0.0790804901910432 +0.09973252625442289 +0.09596656159726738 +0.06870463571025757 +0.024621418843437937 +-0.025489980058256582 +-0.06936054284755702 +-0.09624922571427622 +-0.09957274131704098 +-0.0785173771246355 +-0.038238220622860454 +0.011402985891957127 +0.05825234376738767 +0.0908394962670483 +0.10118597194234676 +0.08675859270201565 +0.05108968415652981 +0.002912239114498862 +-0.04597822363065112 +-0.08361161368441015 +-0.10077396465125434 +-0.09326333445658516 +-0.06291858731444222 +-0.017169175635278373 +0.03278384903533497 +0.074710244085391 +0.09834496577249041 +0.09790140993789517 +0.07348817451946436 +0.031082470988981266 +-0.018933305478677807 +-0.0643135484430439 +-0.09394759173513632 +-0.10057998803366022 +-0.08258689541182918 +-0.04437365047450977 +0.004703811684130699 +0.05262961669132896 +0.0876698560104389 +0.101245456985074 +0.0900326390310054 +0.05677669104408726 +0.009619828933252401 +-0.03989230280370545 +-0.07963740752161742 +-0.09988449742655092 +-0.09567637876783307 +-0.06804334575638446 +-0.023750928609126327 +0.026356544204238577 +0.07001101577979389 +0.09652434897291837 +0.09940515513311661 +0.07794811244074294 +0.037406653287415485 +-0.012293259193311559 diff --git a/testdata/golden/g_QuartileBands.csv b/testdata/golden/g_QuartileBands.csv new file mode 100644 index 00000000..45cecc3c --- /dev/null +++ b/testdata/golden/g_QuartileBands.csv @@ -0,0 +1,81 @@ +upper,middle,lower +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +111.17895109613207,107.71011176814433,103.57203731460193 +111.17895109613207,107.71011176814433,103.57203731460193 +111.17895109613207,107.71011176814433,102.16173243993049 +111.17895109613207,107.59249944146849,100.11045269788306 +111.17895109613207,105.1668715695831,99.33697448458207 +110.25942355471821,102.7486693128095,99.33697448458207 +108.1831491219034,102.7486693128095,99.33697448458207 +107.00718378365772,102.7486693128095,99.33697448458207 +107.00718378365772,102.7486693128095,99.33697448458207 +107.00718378365772,102.7486693128095,99.33697448458207 +107.00718378365772,102.7486693128095,99.33697448458207 +109.8025655081353,102.7486693128095,99.33697448458207 +113.2535949775612,102.78397007053755,99.33697448458207 +116.49215164169493,105.59949479601718,99.33697448458207 +119.27360838983914,108.93699201142712,99.74947866365204 +121.39416948543342,112.39177631998864,101.952552486836 +121.692422901016,115.69990563950788,104.7963196850204 +121.692422901016,118.20279124814978,108.07141851471893 +121.692422901016,118.20279124814978,111.52995766241607 +121.692422901016,118.20279124814978,114.15074327329287 +121.692422901016,118.20279124814978,114.15074327329287 +121.692422901016,118.20279124814978,114.15074327329287 +121.692422901016,118.20279124814978,114.15074327329287 +121.692422901016,118.20279124814978,112.50766384362764 +121.692422901016,117.9328645437441,110.48210010861013 +121.692422901016,115.50063821142041,109.85534933853107 +120.62756543872077,113.09068662500849,109.85534933853107 +118.52702469808084,113.09068662500849,109.85534933853107 +117.58689762352414,113.09068662500849,109.85534933853107 +117.58689762352414,113.09068662500849,109.85534933853107 +117.58689762352414,113.09068662500849,109.85534933853107 +117.58689762352414,113.09068662500849,109.85534933853107 +120.46909337574402,113.09068662500849,109.85534933853107 +123.91511591158553,113.27945594112123,109.85534933853107 +127.1342374581484,116.25097645316882,109.85534933853107 +129.88356698590522,119.60195627927666,110.32507709771735 +131.96217858720985,123.05548743179415,112.56869082560617 +132.20343712122357,126.34773976922457,115.44262363658223 +132.20343712122357,128.6940704391892,118.73481918280932 +132.20343712122357,128.6940704391892,122.19585895200277 +132.20343712122357,128.6940704391892,124.63724673753782 +132.20343712122357,128.6940704391892,124.63724673753782 +132.20343712122357,128.6940704391892,124.63724673753782 +132.20343712122357,128.6940704391892,124.63724673753782 +132.20343712122357,128.6940704391892,122.85468864857603 +132.20343712122357,128.27247112715028,120.85555496623542 +132.20343712122357,125.83447535462628,120.3761682706433 +130.99401023400492,123.54077085927068,120.3761682706433 +128.86993842922823,123.54077085927068,120.3761682706433 +128.16708166772392,123.54077085927068,120.3761682706433 +128.16708166772392,123.54077085927068,120.3761682706433 +128.16708166772392,123.54077085927068,120.3761682706433 +128.16708166772392,123.54077085927068,120.3761682706433 +131.13573600420952,123.54077085927068,120.3761682706433 +134.57591868566624,123.88352081800795,120.3761682706433 +137.77483634494675,126.90358874318322,120.3761682706433 +140.4914027056023,130.26724513035094,120.90316350963693 +142.52761849612696,133.71868808313351,123.1868241751456 +142.7119906427348,136.99427399269746,126.09025142345794 +142.7119906427348,139.1839518068727,129.39875425649234 +142.7119906427348,139.1839518068727,132.8614574806008 +142.7119906427348,139.1839518068727,135.05326416749904 +142.7119906427348,139.1839518068727,135.05326416749904 +142.7119906427348,139.1839518068727,135.05326416749904 +142.7119906427348,139.1839518068727,135.05326416749904 +142.7119906427348,139.1839518068727,133.20285010502928 +142.7119906427348,138.61136453927395,131.2308530485169 diff --git a/testdata/golden/g_QuotedSpread.csv b/testdata/golden/g_QuotedSpread.csv new file mode 100644 index 00000000..5a3a3664 --- /dev/null +++ b/testdata/golden/g_QuotedSpread.csv @@ -0,0 +1,81 @@ +QuotedSpread +19.999999999998863 +19.332038989321326 +18.753558827586243 +18.292693674409026 +17.966160418184636 +17.78173719910005 +17.740172348276566 +17.836106814775338 +18.05793552284068 +18.38678084263885 +18.795014044433604 +19.245102565212907 +19.689923950471037 +20.075818656311146 +20.34914197523432 +20.46565529575245 +20.400179319640696 +20.152787719899102 +19.748726071812513 +19.232036959669596 +18.65569922669686 +18.072048721379097 +17.526116203675816 +17.052566583260397 +16.67546594339342 +16.40958322785572 +16.262088475315835 +16.233911428650156 +16.320403588891402 +16.511228271206605 +16.789624805006262 +17.131421541830615 +17.504439009450003 +17.8691660837008 +18.18161105623217 +18.398749067529998 +18.485887896861687 +18.423929702119853 +18.213822393962015 +17.87626980172472 +17.44678956557751 +16.96817961122558 +16.48312290744791 +16.02888476955361 +15.634681880935554 +15.32122742836056 +15.101524906029761 +14.982048447282814 +14.96372294904174 +15.042404352309418 +15.20879257024682 +15.44790357621472 +15.738422814310615 +16.05247049375315 +16.35646894074326 +16.613759239889536 +16.78918156885286 +16.854971823597513 +16.796361705817528 +16.614859388716578 +16.327846499080266 +15.964633342930464 +15.560537630315899 +15.151029988208485 +14.767433309432448 +14.43465948498159 +14.170654906701463 +13.98687026255506 +13.889088640851707 +13.878140341955076 +13.950254860164238 +14.09699320962348 +14.304872094192406 +14.554957698358786 +14.822870134066038 +15.079743014630624 +15.294606339291835 +15.438278088498164 +15.488166355619441 +15.432676920303438 diff --git a/testdata/golden/g_RSquared.csv b/testdata/golden/g_RSquared.csv new file mode 100644 index 00000000..9e6830ba --- /dev/null +++ b/testdata/golden/g_RSquared.csv @@ -0,0 +1,81 @@ +RSquared +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.03049226503319932 +0.33681388284645564 +0.6664900280193394 +0.8531656114655028 +0.908001343332696 +0.8464702259944182 +0.6515402347428637 +0.31588873706179366 +0.021956541719355373 +0.09622128074356971 +0.4030650998534808 +0.6666467008762456 +0.8322529726298856 +0.9236700718984009 +0.9631406005557407 +0.9608825682933541 +0.9163109755863558 +0.8179028732449146 +0.6421938867385699 +0.3679632330834886 +0.06946173268965886 +0.04034262195566351 +0.35771398824783945 +0.6809483851112043 +0.8594509192665735 +0.9076457512975249 +0.8393588755687768 +0.6361013147897244 +0.29500167272165706 +0.014779156584313393 +0.11075259247346549 +0.4203118126872692 +0.6783887440750794 +0.839079337696669 +0.9271083728960086 +0.9640766548246262 +0.95955879649135 +0.9123843009783225 +0.8103687853446583 +0.6294770488879731 +0.35016108960957365 +0.05738611789261385 +0.05145563922463247 +0.3785303710585666 +0.6949144852193657 +0.8653318380049347 +0.906934181037186 +0.8318255070632402 +0.620177257936412 +0.27422010080153686 +0.008994929550700722 +0.12594958920684046 +0.4373253828074645 +0.6898127397824713 +0.8456799837290042 +0.9303895504621628 +0.9648850926672575 +0.9581038189276319 +0.9082887415823117 +0.8025882895402664 +0.6164301871208643 +0.3322321610092634 +0.046279812091119456 +0.06377181295789891 +0.399208866223261 +0.7083888164876965 +0.8708138287845426 diff --git a/testdata/golden/g_RangeBars.csv b/testdata/golden/g_RangeBars.csv new file mode 100644 index 00000000..d76fefe4 --- /dev/null +++ b/testdata/golden/g_RangeBars.csv @@ -0,0 +1,81 @@ +bars + +100,102,1 +102,104,1,104,106,1 +106,108,1 +108,110,1 +110,112,1 + + + +112,110,-1 +110,108,-1 +108,106,-1,106,104,-1 +104,102,-1 +102,100,-1 + +100,98,-1 + + +98,100,1 +100,102,1 +102,104,1,104,106,1 +106,108,1,108,110,1 +110,112,1,112,114,1 +114,116,1 +116,118,1 +118,120,1 +120,122,1 + + + +122,120,-1 +120,118,-1 +118,116,-1 +116,114,-1,114,112,-1 + +112,110,-1 + + + + +110,112,1,112,114,1 +114,116,1 +116,118,1,118,120,1 +120,122,1,122,124,1 +124,126,1 +126,128,1,128,130,1 +130,132,1 + + + + +132,130,-1 +130,128,-1 +128,126,-1 +126,124,-1 +124,122,-1 +122,120,-1 + + + +120,122,1 +122,124,1 +124,126,1,126,128,1 +128,130,1,130,132,1 +132,134,1 +134,136,1,136,138,1 +138,140,1 +140,142,1 + +142,144,1 + +144,142,-1 +142,140,-1 +140,138,-1 +138,136,-1 +136,134,-1 +134,132,-1 +132,130,-1 + + diff --git a/testdata/golden/g_RealizedSpread.csv b/testdata/golden/g_RealizedSpread.csv new file mode 100644 index 00000000..43462900 --- /dev/null +++ b/testdata/golden/g_RealizedSpread.csv @@ -0,0 +1,81 @@ +RealizedSpread +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-1532.7398557887354 +-1446.5084437332482 +-1403.8423796642367 +-1410.7272204285803 +1469.4653696712678 +1578.0482127656355 +1729.7418392431866 +1912.8442828676675 +2110.701342962045 +2302.2498349570346 +-2463.518670133967 +-2570.5239364343092 +-2603.650835086947 +-2552.806401573627 +-2421.5954456798554 +-2228.28697361209 +2002.2454218280686 +1776.6936919074608 +1580.6884264685211 +1433.4363217338478 +1342.5057767135215 +1305.4894965214728 +-1313.5520545489826 +-1355.2728267509017 +-1419.7472368893523 +-1498.5029416854425 +-1586.1918104078563 +-1680.2323248288203 +-1779.6719333639733 +1883.5774883907334 +1989.286998061708 +2090.8998898803443 +2178.46053378111 +2238.3632328366425 +2255.443584390797 +-2216.8117509120575 +-2116.622319371004 +-1959.9808900479943 +-1763.8847065596674 +-1554.1793295321027 +-1359.5587462650544 +1205.1321936958996 +1107.911596623925 +1075.1450089136738 +1105.0090213122253 +1188.580787019304 +1312.162433251426 +1459.4628104607405 +-1613.5003421353083 +-1758.2583515539884 +-1880.1282445928682 +-1969.0911590248934 +-2019.4932668430592 +-2030.232482120264 +2004.2416738521165 +1947.3292849132702 +1866.6655927368217 +1769.3724027394885 +1661.67097026935 +1548.8210522549737 diff --git a/testdata/golden/g_RealizedVolatility.csv b/testdata/golden/g_RealizedVolatility.csv new file mode 100644 index 00000000..7df157aa --- /dev/null +++ b/testdata/golden/g_RealizedVolatility.csv @@ -0,0 +1,81 @@ +RealizedVolatility +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.07591973508826433 +0.0681362168116254 +0.061072530295269996 +0.05709304148811546 +0.05783946270618862 +0.06278376080051255 +0.06972842126942848 +0.07644125889472238 +0.08143343044393014 +0.08400004331516142 +0.0841061747208868 +0.08229312833900229 +0.07957097351404087 +0.07718703007942533 +0.07617880053409253 +0.07684883393004942 +0.07858148058540058 +0.08020182909783814 +0.0805363530747043 +0.07879414640432458 +0.0747211991418162 +0.06865785925394784 +0.061606094575402295 +0.05528375464029279 +0.05184377443524752 +0.05271976543896102 +0.05735189126264994 +0.06371776480160174 +0.06980601851278992 +0.07428762219963035 +0.0765449139563891 +0.0765710900350697 +0.07488502762928853 +0.07242641425839895 +0.07033217273542193 +0.06952103367416183 +0.07022721041661371 +0.07186053710970744 +0.0733452604518489 +0.07362035111991824 +0.07197591478805014 +0.06819393386499445 +0.0626064998925583 +0.05616020045301631 +0.0504584458983905 +0.04747569577338848 +0.04846617882946654 +0.05283896749555176 +0.058717584828222404 +0.06427687387677601 +0.06832371483106699 +0.07031544591368888 +0.07026986142830248 +0.06868695866106132 +0.0664466056690459 +0.06459234808657385 +0.06394301687230183 +0.06467537330305785 +0.06621978775501888 +0.06758250903732281 +0.06779700096014615 +0.06622344382095234 +0.06267704415493934 +0.05748534629318843 +0.05154947313853975 +0.04637619108977799 diff --git a/testdata/golden/g_RecoveryFactor.csv b/testdata/golden/g_RecoveryFactor.csv new file mode 100644 index 00000000..15d9c075 --- /dev/null +++ b/testdata/golden/g_RecoveryFactor.csv @@ -0,0 +1,81 @@ +RecoveryFactor +0 +0 +0 +0 +0 +0 +0 +22.555951621946285 +6.111672568170245 +2.494893233580322 +1.1423381915553983 +0.5016162386072223 +0.15903361698938098 +-0.03246153154759318 +-0.1338237025176041 +-0.17085239743834676 +-0.1473000324356624 +-0.056929255650390864 +0.09554116423546717 +0.29984528237006985 +0.5410870040107917 +0.8010707083032677 +1.0599266089011845 +1.297885662803379 +1.4970454800879622 +1.6429694910862174 +1.7259765221553853 +1.7420055860871966 +1.6929786380005554 +1.5866288928148216 +1.4358100401925318 +1.2573480627233558 +1.0705382210113612 +0.8954214655113988 +0.7509942381119368 +0.653511576557358 +0.6150351003378267 +0.6423555821427741 +0.7363863483611712 +0.8920816943553245 +1.0988876022287766 +1.3416844998124917 +1.6021378470168206 +1.8603359056928486 +2.0965683958990766 +2.293087156506436 +2.4356915355734543 +2.5149968922910952 +2.5272728989963937 +2.474776760232751 +2.3655515833905807 +2.2127079118785344 +2.0332525993272776 +1.8465696380053704 +1.672688644520288 +1.530495673820124 +1.43604618415249 +1.4011308507964377 +1.4322223401553806 +1.5298971257444995 +1.688783993528519 +1.8980438364746495 +2.1423378797022434 +2.403197847560162 +2.660675679687525 +2.8951254318354107 +3.088958189556053 +3.2282132335462697 +3.3038051091242653 +3.3123352028376014 +3.256395330480982 +3.144336217910381 +2.989521555572893 +2.809134259839521 +2.622641574260792 +2.450056118678741 +2.310148221499023 +2.218769222157184 +2.187435518176169 +2.2222998396743066 diff --git a/testdata/golden/g_RectangleRange.csv b/testdata/golden/g_RectangleRange.csv new file mode 100644 index 00000000..dbdfd459 --- /dev/null +++ b/testdata/golden/g_RectangleRange.csv @@ -0,0 +1,81 @@ +RectangleRange +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Reflex.csv b/testdata/golden/g_Reflex.csv new file mode 100644 index 00000000..f8f39b73 --- /dev/null +++ b/testdata/golden/g_Reflex.csv @@ -0,0 +1,81 @@ +Reflex +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-5 +-3.385482056923723 +-2.6933854076555868 +-2.183183285664844 +-1.6427226091118519 +-0.975987385825991 +-0.13827239018431678 +0.824799507759891 +1.7169573970959862 +2.30563457835879 +2.5375407075158716 +2.507584467559783 +2.3152681351291626 +2.0158846911286785 +1.629841768389788 +1.1590889426861846 +0.6022629640112501 +-0.026272757926818435 +-0.674219904054194 +-1.2482642943093243 +-1.656034590021234 +-1.8594084066861092 +-1.8768643701760812 +-1.7472905802939223 +-1.5026917782253666 +-1.161665687814177 +-0.7347214413827442 +-0.23549053524356808 +0.30475840140807847 +0.8276205582320917 +1.2589633341165647 +1.5417825968818117 +1.659382024778229 +1.6272333211045082 +1.4707241693246076 +1.2108228465105308 +0.8616959077246454 +0.4362938087544306 +-0.04337244746573797 +-0.5359314711030764 +-0.980757088186182 +-1.316929180590919 +-1.5087871932652852 +-1.5535008089284128 +-1.4679040285761527 +-1.272292939186766 +-0.9827752231340486 +-0.6123852122175479 +-0.1780654764002961 +0.289768265067833 +0.7419365889935694 +1.1191923518389275 +1.3742227618265426 +1.4882488490020152 +1.4679238520872389 +1.3308125677827545 +1.0940783937288026 +0.7715115675477808 +0.37740769085957565 +-0.0653872806102197 +-0.5178100125625481 +-0.9257347675749884 +-1.23563735449514 +-1.4148891773280394 +-1.45833286081002 +-1.3785132057268719 diff --git a/testdata/golden/g_RegimeLabel.csv b/testdata/golden/g_RegimeLabel.csv new file mode 100644 index 00000000..f7890139 --- /dev/null +++ b/testdata/golden/g_RegimeLabel.csv @@ -0,0 +1,81 @@ +RegimeLabel +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +-1 +-1 +-1 +-1 +0 +1 +1 +1 +1 +0 +-1 +-1 +-1 +-1 +0 +1 +1 +1 +1 +0 +0 +-1 +-1 +-1 +-1 +0 +1 +1 +1 +1 +0 +-1 +-1 +-1 +-1 +0 +1 +1 +1 +1 +0 +-1 +-1 +-1 +-1 +0 +0 +1 +1 +1 +0 +0 +-1 +-1 +-1 +-1 +0 +1 +1 +1 +1 +0 +-1 +-1 +-1 +-1 +0 +0 +1 +1 diff --git a/testdata/golden/g_RelativeStrengthAB.csv b/testdata/golden/g_RelativeStrengthAB.csv new file mode 100644 index 00000000..5c9ce616 --- /dev/null +++ b/testdata/golden/g_RelativeStrengthAB.csv @@ -0,0 +1,81 @@ +ratio,ratio_ma,ratio_rsi +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +1.0077299254178438,1.001101527902105,47.00474897115976 +1.003559685881568,1.0007446981455275,42.21484268569747 +0.9985180859381477,1.0002751261704002,37.27015827002299 +0.9939704667662251,0.9997982019505665,33.46270297105181 +0.9910833902519574,0.9994273268055605,31.278098549084703 +0.990502246423747,0.9992540934263401,30.841623878463228 +0.9922340489872953,0.9993211596714497,33.806022560339 +0.9957214216283135,0.9996071328594045,39.43581475626989 +1.0000387841527627,1.0000289818095953,45.603850610987585 +1.0041378444911326,1.0004626978291067,50.733986928910205 +1.00708568262615,1.0007779007008082,54.087468988024625 +1.0082543026755924,1.0008770628798267,55.38403097018546 +1.0074333367234023,1.0007263691546702,54.225514464073825 +1.0048523765354684,1.0003658284642574,50.63922332414034 +1.0011170497011226,0.9998934801987772,45.90712318928487 +0.997078442713023,0.999430534258167,41.40228806381883 +0.9936629764587528,0.9990837407239245,38.00564422337914 +0.9916885104698924,0.998920743845615,36.158825271795315 +0.9916880220738206,0.9989639318328909,36.15835722195286 +0.9937635130140252,0.9991968794464823,39.72879157857047 +0.9975047852761326,0.9995733606099707,45.63145310471504 +1.002022793844247,1.0000234586253944,51.773788755202204 +1.0061407489734806,1.0004593132554458,56.58789735962104 +1.0087304310462555,1.0007873551522404,59.33694500506314 +1.009085854603015,1.0009302245791594,59.714004591000744 +1.0071640602443972,1.0008523501197881,56.65490987131541 +1.003572578812704,1.0005765816975956,51.359617958814646 +0.9993254309005892,1.0001817998665328,45.896502386420586 +0.9955061415675478,0.9997810207141345,41.61015116250623 +0.9929825239913758,0.9994884550911597,39.017224670765955 +0.992243597361587,0.9993870708699335,38.265326899884144 +0.9933544098246885,0.9995060636809904,40.133054899144334 +0.9959928264797866,0.999813549709988,44.43323743045732 +0.9995364808927122,1.0002259045584656,49.662976161858325 +1.0031837526854632,1.0006315450877035,54.41806966080533 +1.0061021795899932,1.0009229297838282,57.84924023988153 +1.0075947443581947,1.001026786597022,59.527201315188215 +1.007261226244084,1.0009218433968667,58.96236540907548 +1.005116793199719,1.000638339010917,55.327207110391086 +1.0016250204350823,1.0002426933102517,49.929337394341594 +0.9976165148984415,0.9998172601735186,44.555260949615615 +0.9940965773656751,0.9994437706353104,40.43914883953237 +0.9919840916744096,0.9991921956429434,38.160656641948364 +0.9918531076899305,0.999111523049983,38.01762253824275 +0.9937568987522472,0.9992196160064587,41.452549579003154 +0.9971973140661597,0.9994941091665639,47.152250363023654 +1.0012608848264895,0.9998703990484712,52.97531490233398 +1.0048854290532758,1.0002524667742259,57.47610165041397 +1.007167955358867,1.000537052679469,60.06807122484348 +1.007606174744058,1.0006444809047594,60.56505085696511 +1.0061978455976288,1.0005447024218619,58.064000021934916 +1.0033872093786016,1.0002679869314701,53.330711631168185 +0.999905938746761,0.9998957830419731,48.1004546511982 +0.9965777326437868,0.9995352624854521,43.689064180203566 +0.9941415893444104,0.9992870535173071,40.74354133683618 +0.9931200668599705,0.9992173027668997,39.53974424051918 +0.9937361152841923,0.9993424473104557,40.678056703575464 +0.9958741083421865,0.9996296616427597,44.57792898526234 +0.9990855848140147,1.000010282075743,49.90526661382926 +1.0026500784819516,1.0003997652482997,55.06780072153848 +1.0057051809905053,1.0007172149743007,58.97061999832174 +1.0074459357507306,1.0009001083098332,61.04677907809826 +1.007357474771272,1.0009136454107193,60.87819123715923 +1.0054020814723927,1.0007562101770289,57.12292288138808 +1.0020691777024513,1.0004613053273732,51.31288450153303 +0.9982432499438905,1.0000938796534653,45.581543117736 diff --git a/testdata/golden/g_RenkoBars.csv b/testdata/golden/g_RenkoBars.csv new file mode 100644 index 00000000..1ebe3210 --- /dev/null +++ b/testdata/golden/g_RenkoBars.csv @@ -0,0 +1,81 @@ +bars + +100,102,1 +102,104,1,104,106,1 +106,108,1 +108,110,1 +110,112,1 + + + + +110,108,-1 +108,106,-1,106,104,-1 +104,102,-1 +102,100,-1 + +100,98,-1 + + + +100,102,1 +102,104,1,104,106,1 +106,108,1,108,110,1 +110,112,1,112,114,1 +114,116,1 +116,118,1 +118,120,1 +120,122,1 + + + + +120,118,-1 +118,116,-1 +116,114,-1,114,112,-1 + +112,110,-1 + + + + +112,114,1 +114,116,1 +116,118,1,118,120,1 +120,122,1,122,124,1 +124,126,1 +126,128,1,128,130,1 +130,132,1 + + + + + +130,128,-1 +128,126,-1 +126,124,-1 +124,122,-1 +122,120,-1 + + + + +122,124,1 +124,126,1,126,128,1 +128,130,1,130,132,1 +132,134,1 +134,136,1,136,138,1 +138,140,1 +140,142,1 + +142,144,1 + + +142,140,-1 +140,138,-1 +138,136,-1 +136,134,-1 +134,132,-1 +132,130,-1 + + diff --git a/testdata/golden/g_RenkoTrailingStop.csv b/testdata/golden/g_RenkoTrailingStop.csv new file mode 100644 index 00000000..d54876ba --- /dev/null +++ b/testdata/golden/g_RenkoTrailingStop.csv @@ -0,0 +1,81 @@ +RenkoTrailingStop +98 +100 +104 +106 +108 +110 +110 +110 +110 +110.7737988023383 +108.7737988023383 +106.7737988023383 +104.7737988023383 +102.7737988023383 +100.7737988023383 +100.7737988023383 +100.7737988023383 +100.7737988023383 +99.27235512444012 +101.27235512444012 +103.27235512444012 +107.27235512444012 +111.27235512444012 +115.27235512444012 +117.27235512444012 +119.27235512444012 +119.27235512444012 +119.27235512444012 +119.27235512444012 +119.27235512444012 +121.12118485241757 +119.12118485241757 +117.12118485241757 +115.12118485241757 +113.12118485241757 +111.12118485241757 +111.12118485241757 +111.12118485241757 +111.12118485241757 +109.88016416080967 +111.88016416080967 +113.88016416080967 +117.88016416080967 +121.88016416080967 +125.88016416080967 +127.88016416080967 +129.88016416080967 +129.88016416080967 +129.88016416080967 +129.88016416080967 +129.88016416080967 +131.46740573130614 +129.46740573130614 +127.46740573130614 +125.46740573130614 +123.46740573130614 +121.46740573130614 +121.46740573130614 +121.46740573130614 +121.46740573130614 +120.49012753228324 +122.49012753228324 +126.49012753228322 +128.49012753228322 +132.49012753228322 +136.49012753228322 +138.49012753228322 +140.49012753228322 +140.49012753228322 +140.49012753228322 +140.49012753228322 +140.49012753228322 +141.81250491654941 +139.81250491654941 +137.81250491654941 +135.81250491654941 +133.81250491654941 +131.81250491654941 +131.81250491654941 +131.81250491654941 diff --git a/testdata/golden/g_RickshawMan.csv b/testdata/golden/g_RickshawMan.csv new file mode 100644 index 00000000..4bdf2275 --- /dev/null +++ b/testdata/golden/g_RickshawMan.csv @@ -0,0 +1,81 @@ +RickshawMan +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +1 +1 diff --git a/testdata/golden/g_RisingThreeMethods.csv b/testdata/golden/g_RisingThreeMethods.csv new file mode 100644 index 00000000..169c225b --- /dev/null +++ b/testdata/golden/g_RisingThreeMethods.csv @@ -0,0 +1,81 @@ +RisingThreeMethods +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Rmi.csv b/testdata/golden/g_Rmi.csv new file mode 100644 index 00000000..38845b52 --- /dev/null +++ b/testdata/golden/g_Rmi.csv @@ -0,0 +1,81 @@ +Rmi +nan +nan +nan +nan +nan +nan +nan +nan +nan +100 +83.10421958594375 +50.62300047226055 +27.16075435859532 +14.789095992068187 +8.591504124451108 +5.398472197157103 +3.6993393001405557 +2.8125700352731684 +2.4825952718473903 +15.975805902422819 +49.10221679995837 +74.10722898633728 +86.89205235562707 +92.98913918895929 +95.9943393165111 +97.55791888468671 +98.41383909347718 +98.90056781329008 +99.18066029503481 +99.33151563676458 +99.37660044912701 +84.51730448996247 +55.03752428857932 +31.286824025218944 +17.652648827330562 +10.472424700728501 +6.669115598333039 +4.615688135086289 +3.5417029007363454 +3.1634823242664174 +18.118000546507965 +51.04214849383906 +75.13085712099553 +87.36876762956672 +93.21619450959948 +96.10873071627964 +97.61885971291477 +98.447797119548 +98.91996997195224 +99.1915030804843 +99.33639115193772 +99.37501188163874 +83.13768943176679 +53.440856048556675 +30.259734270671483 +17.0960897898616 +10.176261087190971 +6.507779926702955 +4.526803539210992 +3.4970203897475396 +3.1591090940550592 +19.7680909389226 +52.76222748757032 +76.08299517351243 +87.82486860026559 +93.43768519438986 +96.2219617543711 +97.67992216360831 +98.48221478898739 +98.93988141618337 +99.2028186157902 +99.34166296811135 +99.37360231138571 +81.74022584101499 +51.86501827320087 +29.254112931940718 +16.549886113596393 +9.883820831700392 +6.347275954326083 +4.437636717646011 diff --git a/testdata/golden/g_Roc.csv b/testdata/golden/g_Roc.csv new file mode 100644 index 00000000..8b5ee6be --- /dev/null +++ b/testdata/golden/g_Roc.csv @@ -0,0 +1,81 @@ +Roc +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-1.7157577241358837 +-5.539115606361266 +-8.07159812791026 +-9.229959007871642 +-9.026231095342128 +-7.541061633829472 +-4.907491631887743 +-1.3055625858547193 +3.0344390792828455 +7.824125786954432 +12.71057797266481 +17.27965480892785 +21.0786915860057 +23.665936854137726 +24.685286515127057 +23.949926435465997 +21.504676587876176 +17.636400871294136 +12.82124529184228 +7.626941680350306 +2.6075146421206874 +-1.775666078991531 +-5.191915576577796 +-7.443380109628131 +-8.446093397059654 +-8.204656732846448 +-6.790367281090422 +-4.327324435496062 +-0.9871874369327346 +3.0092143563798737 +7.3870573950021265 +11.814941863726085 +15.911731552757317 +19.270513285128256 +21.504595601968845 +22.312554805809967 +21.547373412310844 +19.26491909547746 +15.72838402460868 +11.361486748605481 +6.665990250000164 +2.1332942545903886 +-1.8229516438892395 +-4.901147641714567 +-6.9162586828528365 +-7.785994031550718 +-7.510614416417893 +-6.154760178584133 +-3.835437408739732 +-0.7169521542997923 +2.9887337329802577 +7.019521951919614 +11.06348237206552 +14.768137491973537 +17.764882662166134 +19.711710867084957 +20.35035730275684 +19.56430405379828 +17.417070178744453 +14.15257765118799 +10.153069894038135 +5.868072999926477 +1.7387259608041488 +-1.8606226591013686 +-4.653443342733059 +-6.466910701725638 diff --git a/testdata/golden/g_Rocp.csv b/testdata/golden/g_Rocp.csv new file mode 100644 index 00000000..d1085916 --- /dev/null +++ b/testdata/golden/g_Rocp.csv @@ -0,0 +1,81 @@ +Rocp +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-0.017157577241358836 +-0.05539115606361266 +-0.0807159812791026 +-0.09229959007871642 +-0.09026231095342128 +-0.07541061633829471 +-0.049074916318877435 +-0.013055625858547193 +0.030344390792828455 +0.07824125786954432 +0.1271057797266481 +0.17279654808927852 +0.21078691586005702 +0.23665936854137726 +0.24685286515127056 +0.23949926435465999 +0.21504676587876176 +0.17636400871294136 +0.1282124529184228 +0.07626941680350306 +0.026075146421206875 +-0.01775666078991531 +-0.051919155765777956 +-0.07443380109628131 +-0.08446093397059654 +-0.08204656732846449 +-0.06790367281090422 +-0.043273244354960626 +-0.009871874369327346 +0.03009214356379874 +0.07387057395002126 +0.11814941863726086 +0.15911731552757316 +0.19270513285128257 +0.21504595601968846 +0.22312554805809967 +0.21547373412310844 +0.1926491909547746 +0.1572838402460868 +0.11361486748605482 +0.06665990250000164 +0.021332942545903885 +-0.018229516438892396 +-0.049011476417145663 +-0.06916258682852837 +-0.07785994031550718 +-0.07510614416417893 +-0.06154760178584133 +-0.03835437408739732 +-0.007169521542997923 +0.029887337329802578 +0.07019521951919615 +0.11063482372065521 +0.14768137491973538 +0.17764882662166134 +0.19711710867084956 +0.2035035730275684 +0.19564304053798282 +0.17417070178744454 +0.1415257765118799 +0.10153069894038134 +0.058680729999264776 +0.017387259608041487 +-0.018606226591013686 +-0.04653443342733059 +-0.06466910701725638 diff --git a/testdata/golden/g_Rocr.csv b/testdata/golden/g_Rocr.csv new file mode 100644 index 00000000..59f32a65 --- /dev/null +++ b/testdata/golden/g_Rocr.csv @@ -0,0 +1,81 @@ +Rocr +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.9828424227586412 +0.9446088439363873 +0.9192840187208974 +0.9077004099212835 +0.9097376890465787 +0.9245893836617053 +0.9509250836811226 +0.9869443741414528 +1.0303443907928285 +1.0782412578695444 +1.1271057797266482 +1.1727965480892786 +1.210786915860057 +1.2366593685413774 +1.2468528651512705 +1.23949926435466 +1.2150467658787618 +1.1763640087129414 +1.1282124529184228 +1.076269416803503 +1.0260751464212068 +0.9822433392100847 +0.948080844234222 +0.9255661989037187 +0.9155390660294035 +0.9179534326715355 +0.9320963271890957 +0.9567267556450394 +0.9901281256306727 +1.0300921435637986 +1.0738705739500212 +1.118149418637261 +1.1591173155275731 +1.1927051328512825 +1.2150459560196885 +1.2231255480580996 +1.2154737341231086 +1.1926491909547745 +1.1572838402460868 +1.1136148674860549 +1.0666599025000016 +1.021332942545904 +0.9817704835611076 +0.9509885235828544 +0.9308374131714716 +0.9221400596844929 +0.9248938558358211 +0.9384523982141587 +0.9616456259126027 +0.9928304784570021 +1.0298873373298025 +1.0701952195191962 +1.1106348237206551 +1.1476813749197354 +1.1776488266216614 +1.1971171086708496 +1.2035035730275685 +1.1956430405379828 +1.1741707017874445 +1.1415257765118798 +1.1015306989403812 +1.0586807299992649 +1.0173872596080415 +0.9813937734089863 +0.9534655665726695 +0.9353308929827436 diff --git a/testdata/golden/g_Rocr100.csv b/testdata/golden/g_Rocr100.csv new file mode 100644 index 00000000..6ec1dc2e --- /dev/null +++ b/testdata/golden/g_Rocr100.csv @@ -0,0 +1,81 @@ +Rocr100 +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +98.28424227586412 +94.46088439363874 +91.92840187208974 +90.77004099212836 +90.97376890465787 +92.45893836617053 +95.09250836811226 +98.69443741414527 +103.03443907928285 +107.82412578695444 +112.71057797266482 +117.27965480892786 +121.0786915860057 +123.66593685413774 +124.68528651512705 +123.94992643546601 +121.50467658787618 +117.63640087129414 +112.82124529184227 +107.6269416803503 +102.60751464212068 +98.22433392100847 +94.8080844234222 +92.55661989037188 +91.55390660294034 +91.79534326715356 +93.20963271890957 +95.67267556450393 +99.01281256306727 +103.00921435637986 +107.38705739500212 +111.81494186372609 +115.91173155275732 +119.27051328512826 +121.50459560196884 +122.31255480580995 +121.54737341231086 +119.26491909547745 +115.72838402460867 +111.36148674860549 +106.66599025000016 +102.1332942545904 +98.17704835611076 +95.09885235828544 +93.08374131714716 +92.21400596844929 +92.4893855835821 +93.84523982141587 +96.16456259126028 +99.28304784570021 +102.98873373298025 +107.01952195191961 +111.06348237206551 +114.76813749197355 +117.76488266216614 +119.71171086708496 +120.35035730275685 +119.56430405379828 +117.41707017874445 +114.15257765118798 +110.15306989403813 +105.86807299992648 +101.73872596080416 +98.13937734089862 +95.34655665726694 +93.53308929827436 diff --git a/testdata/golden/g_RogersSatchellVolatility.csv b/testdata/golden/g_RogersSatchellVolatility.csv new file mode 100644 index 00000000..8c74fa81 --- /dev/null +++ b/testdata/golden/g_RogersSatchellVolatility.csv @@ -0,0 +1,81 @@ +RogersSatchellVolatility +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +34.410131868112046 +34.77212756088102 +34.57420939731995 +33.96380401244718 +33.83565988144833 +34.141946558096386 +34.39451402072069 +34.100265683086356 +33.444987808323724 +33.15021780835637 +33.470109487393565 +33.57040665448028 +33.077637549226054 +32.55111329935414 +32.53115289031971 +32.44035008813443 +32.034359698254825 +31.6283476474685 +31.672934839049976 +32.15517523898906 +32.02252199813562 +31.356221962124746 +30.919044834812443 +31.299630943916153 +31.613422866615537 +31.403970711546464 +30.85873388012886 +30.6670059895211 +30.75368711202074 +30.806624281594093 +30.542904185275376 +30.292964474472043 +30.426749757824684 +30.426429154271585 +29.90777066581492 +29.390739234148217 +29.50570712179101 +29.960944587642125 +29.841126573917787 +29.13558272699179 +28.610996483476548 +28.7124666099566 +29.088422938495466 +28.975719541203627 +28.545953047530322 +28.48300916826417 +28.64978314862115 +28.44790456984586 +28.250822387210956 +28.149889218873753 +28.363332793219335 +28.42537707602445 +28.012801237012887 +27.41651932397285 +27.43217956514792 +27.858735095224052 +27.841506077504363 +27.2734842678429 +26.844572401479418 +26.872379719627055 +26.956751690862617 diff --git a/testdata/golden/g_RollMeasure.csv b/testdata/golden/g_RollMeasure.csv new file mode 100644 index 00000000..550761ab --- /dev/null +++ b/testdata/golden/g_RollMeasure.csv @@ -0,0 +1,81 @@ +RollMeasure +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_RollingCorrelation.csv b/testdata/golden/g_RollingCorrelation.csv new file mode 100644 index 00000000..46abf152 --- /dev/null +++ b/testdata/golden/g_RollingCorrelation.csv @@ -0,0 +1,81 @@ +RollingCorrelation +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.9966128263538117 +0.9959016406633877 +0.994931976837364 +0.9946099367095759 +0.9935814464351933 +0.9918903356756381 +0.9906877267741965 +0.9896020559896225 +0.9885847009015908 +0.9878419904030998 +0.9873995904736518 +0.9869526667411288 +0.9860909218517693 +0.9855094243345854 +0.9866276467410754 +0.9881408606985513 +0.9911336484634801 +0.9938111194973342 +0.9944987460505749 +0.9931597655443744 +0.9902780702166716 +0.986334914329523 +0.9816353543478497 +0.9766068306432448 +0.9733849736942819 +0.9754656624084634 +0.9809724708896694 +0.9862021243787807 +0.9903698679398468 +0.9935492379583909 +0.995679915002761 +0.9966025684789304 +0.996297382932232 +0.9952806460849498 +0.9946985003771865 +0.9941952792860842 +0.9925456440217221 +0.9911484437748244 +0.9900550776937822 +0.9889853968768668 +0.9881089441276026 +0.9875590614030152 +0.9871707387039435 +0.986503181126117 +0.9855799876583254 +0.9860385571906994 +0.9873984634883092 +0.9897584406161491 +0.9928942680038908 +0.9944781617330017 +0.9939350876891121 +0.9916299967245374 +0.9880800631201653 +0.9836677773818813 +0.9786688916505837 +0.97424125179015 +0.9739144085049279 +0.978577628910604 +0.9841546614365446 +0.9887600154975842 +0.9923465838486681 +0.9949313173414316 +0.9963737091669367 +0.9965583838672918 +0.9957211491718603 +0.9948346315574261 diff --git a/testdata/golden/g_RollingCovariance.csv b/testdata/golden/g_RollingCovariance.csv new file mode 100644 index 00000000..a0ac5039 --- /dev/null +++ b/testdata/golden/g_RollingCovariance.csv @@ -0,0 +1,81 @@ +RollingCovariance +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +5.118817879971109 +4.1027913811962105 +3.1206263250548307 +2.520556634870709 +2.5039271079060974 +3.0536266661924505 +3.9442060775346914 +4.82802347904016 +5.363355814773972 +5.33629480558142 +4.7330126988542 +3.7393931870665496 +2.6720806648850366 +1.8682317872792766 +1.572983109066476 +1.8614171906099544 +2.618236644159986 +3.579109317734771 +4.41890241952818 +4.858635234513748 +4.757817275895573 +4.162876118898045 +3.2948602783571013 +2.4779068258209307 +2.0294665294417737 +2.1478944241410574 +2.8368774427099206 +3.8961507799884982 +4.985825264086334 +5.744517052571927 +5.919674603998883 +5.461469053700076 +4.54348419348084 +3.5005812500791365 +2.7062851523625833 +2.435825920453852 +2.766642241478388 +3.55332442129365 +4.4848725855193505 +5.20081230243975 +5.421648387338747 +5.04600516521788 +4.181550481274107 +3.1023889971291156 +2.151607329080898 +1.624789293593102 +1.6738369303254017 +2.261004380706236 +3.1753906284673112 +4.104490331243592 +4.737320308617676 +4.866834366670993 +4.459542954072184 +3.6694287670775187 +2.7895799325915127 +2.154647439570485 +2.024658405734084 +2.4896493200050345 +3.4304387831105148 +4.553189867480107 +5.4892136457115175 +5.926145221730198 +5.722559819403809 +4.962082568777078 +3.924776607678818 +2.985113640778599 diff --git a/testdata/golden/g_RollingIqr.csv b/testdata/golden/g_RollingIqr.csv new file mode 100644 index 00000000..eed56af8 --- /dev/null +++ b/testdata/golden/g_RollingIqr.csv @@ -0,0 +1,81 @@ +RollingIqr +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +7.606913781530139 +7.606913781530139 +9.017218656201578 +11.068498398249005 +11.841976611549995 +10.922449070136139 +8.846174637321326 +7.670209299075651 +7.670209299075651 +7.670209299075651 +7.670209299075651 +10.46559102355323 +13.916620492979135 +17.15517715711286 +19.5241297261871 +19.441616998597425 +16.896103215995595 +13.621004386297074 +10.162465238599935 +7.541679627723127 +7.541679627723127 +7.541679627723127 +7.541679627723127 +9.184759057388362 +11.210322792405876 +11.837073562484932 +10.772216100189695 +8.671675359549766 +7.7315482849930675 +7.7315482849930675 +7.7315482849930675 +7.7315482849930675 +10.613744037212953 +14.05976657305446 +17.278888119617335 +19.558489888187864 +19.39348776160368 +16.760813484641346 +13.468617938414255 +10.007578169220807 +7.5661903836857505 +7.5661903836857505 +7.5661903836857505 +7.5661903836857505 +9.348748472647543 +11.347882154988156 +11.827268850580268 +10.617841963361613 +8.493770158584923 +7.790913397080615 +7.790913397080615 +7.790913397080615 +7.790913397080615 +10.759567733566215 +14.199750415022933 +17.398668074303444 +19.58823919596537 +19.34079432098136 +16.62173921927686 +13.313236386242465 +9.850533162134013 +7.658726475235767 +7.658726475235767 +7.658726475235767 +7.658726475235767 +9.50914053770552 +11.481137594217898 diff --git a/testdata/golden/g_RollingMinMaxScaler.csv b/testdata/golden/g_RollingMinMaxScaler.csv new file mode 100644 index 00000000..ed27cade --- /dev/null +++ b/testdata/golden/g_RollingMinMaxScaler.csv @@ -0,0 +1,81 @@ +RollingMinMaxScaler +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0 +0 +0.020891150717858062 +0.1010508084887801 +0.2362933848282485 +0.417512898186785 +0.6580749884269527 +0.9933619919007706 +1 +1 +1 +1 +1 +1 +0.9743697919506384 +0.9177598945617623 +0.8297906412224967 +0.7056374149775061 +0.5344017143273548 +0.2950528593603385 +0 +0 +0 +0.024242411092763202 +0.10767917133397924 +0.2458330519927297 +0.4293391069325266 +0.6741071068065739 +1 +1 +1 +1 +1 +1 +1 +0.9725472748209089 +0.9142024352156912 +0.8243523650304456 +0.6978822425983177 +0.5234456259586052 +0.27918976344205315 +0 +0 +0 +0.027608852194657887 +0.11434283548321714 +0.2554323792383657 +0.4412524925008222 +0.6903645069489956 +1 +1 +1 +1 +1 +1 +1 +0.9707305645799331 +0.910644202131808 +0.8188920830331615 +0.690061551423301 +0.512339787274207 +0.26300764360030765 +0 +0 +0 +0.030993271643267255 diff --git a/testdata/golden/g_RollingPercentileRank.csv b/testdata/golden/g_RollingPercentileRank.csv new file mode 100644 index 00000000..025b38e0 --- /dev/null +++ b/testdata/golden/g_RollingPercentileRank.csv @@ -0,0 +1,81 @@ +RollingPercentileRank +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +3.571428571428571 +3.571428571428571 +3.571428571428571 +10.714285714285714 +25 +39.285714285714285 +60.71428571428571 +75 +89.28571428571429 +96.42857142857143 +96.42857142857143 +96.42857142857143 +96.42857142857143 +96.42857142857143 +96.42857142857143 +82.14285714285714 +67.85714285714286 +53.57142857142857 +39.285714285714285 +32.142857142857146 +17.857142857142858 +3.571428571428571 +3.571428571428571 +3.571428571428571 +10.714285714285714 +25 +39.285714285714285 +60.71428571428571 +75 +96.42857142857143 +96.42857142857143 +96.42857142857143 +96.42857142857143 +96.42857142857143 +96.42857142857143 +96.42857142857143 +82.14285714285714 +67.85714285714286 +53.57142857142857 +39.285714285714285 +25 +17.857142857142858 +3.571428571428571 +3.571428571428571 +3.571428571428571 +10.714285714285714 +25 +46.42857142857143 +60.71428571428571 +75 +96.42857142857143 +96.42857142857143 +96.42857142857143 +96.42857142857143 +96.42857142857143 +96.42857142857143 +96.42857142857143 +82.14285714285714 +67.85714285714286 +53.57142857142857 +39.285714285714285 +25 +17.857142857142858 +3.571428571428571 +3.571428571428571 +3.571428571428571 +17.857142857142858 diff --git a/testdata/golden/g_RollingQuantile.csv b/testdata/golden/g_RollingQuantile.csv new file mode 100644 index 00000000..b8dbe508 --- /dev/null +++ b/testdata/golden/g_RollingQuantile.csv @@ -0,0 +1,81 @@ +RollingQuantile +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +103.95784381629556 +105.20217232731116 +106.52881240727451 +106.80852254930471 +106.80852254930471 +106.80852254930471 +106.80852254930471 +106.80852254930471 +106.80852254930471 +106.80852254930471 +106.80852254930471 +108.93699201142712 +112.39177631998864 +114.18607291145199 +114.18607291145199 +114.18607291145199 +114.18607291145199 +114.18607291145199 +114.18607291145199 +114.18607291145199 +114.18607291145199 +114.44550150388292 +115.68940752753315 +117.01447093947631 +117.3061131607063 +117.3061131607063 +117.3061131607063 +117.3061131607063 +117.3061131607063 +117.3061131607063 +117.3061131607063 +117.3061131607063 +119.60195627927666 +123.05548743179415 +124.68307928881752 +124.68307928881752 +124.68307928881752 +124.68307928881752 +124.68307928881752 +124.68307928881752 +124.68307928881752 +124.68307928881752 +125.02582924755481 +126.17722531336355 +127.49913583503334 +127.8038999528141 +127.8038999528141 +127.8038999528141 +127.8038999528141 +127.8038999528141 +127.8038999528141 +127.8038999528141 +127.8038999528141 +130.26724513035094 +133.71868808313351 +135.17989254106567 +135.17989254106567 +135.17989254106567 +135.17989254106567 +135.17989254106567 +135.17989254106567 diff --git a/testdata/golden/g_RollingVwap.csv b/testdata/golden/g_RollingVwap.csv new file mode 100644 index 00000000..61d51935 --- /dev/null +++ b/testdata/golden/g_RollingVwap.csv @@ -0,0 +1,81 @@ +RollingVwap +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +107.13980697732005 +107.01042136962302 +106.63591048016468 +106.07235471085379 +105.38717329408883 +104.68273284640132 +104.06942337463111 +103.65430913245814 +103.52902348650343 +103.75859166585259 +104.3729122864461 +105.36233520581384 +106.67817176920687 +108.23817476700594 +109.93619549102803 +111.65454385802359 +113.27719060517906 +114.71487473617441 +115.91983737110932 +116.83158703184289 +117.39862073635868 +117.59999878925736 +117.45223183243368 +117.0090606765661 +116.35642263329899 +115.60310109589679 +114.86831387992966 +114.26803116368859 +113.90200731354973 +113.84332664424149 +114.1317553679391 +114.77148654613838 +115.73312293581563 +116.96282482148452 +118.40329354337918 +120.01774174669652 +121.71421841873808 +123.38234131539636 +124.90944979671116 +126.19269294647454 +127.15094699555286 +127.73480379652528 +127.9330206198872 +127.77430251222059 +127.32402238454988 +126.67632362514557 +125.9428154832253 +125.2395969890182 +124.67452316590733 +124.31507512930946 +124.22819428249495 +124.48680761752541 +125.124917141777 +126.13958989456866 +127.4893042850818 +129.09711005721636 +130.85844255892283 +132.65262604812028 +134.35645191711552 +135.85787106962565 +137.0678680351899 +137.9289702720292 +138.41948967825607 +138.5533426667891 +138.37899617356217 +137.96901425034036 +137.37852187782823 diff --git a/testdata/golden/g_RoofingFilter.csv b/testdata/golden/g_RoofingFilter.csv new file mode 100644 index 00000000..01d2f54e --- /dev/null +++ b/testdata/golden/g_RoofingFilter.csv @@ -0,0 +1,81 @@ +RoofingFilter +0 +2.3321147802831397 +2.7751448679556514 +2.9357648275157766 +2.6006951128518327 +1.9444360569834682 +1.125017576771811 +0.2413353090647201 +-0.6215771462163253 +-1.3841532830615497 +-1.9772407531278313 +-2.3475106075703773 +-2.461774155764979 +-2.3097846004131535 +-1.9051042554347508 +-1.2838769434511956 +-0.5015933010650382 +0.37186821442022844 +1.2584841020766155 +2.0790556805277745 +2.7602837608318587 +3.2413162766354597 +3.479184029156459 +3.4526390016189654 +3.16405238266936 +2.6392027556328688 +1.9249733746068738 +1.0851642230608 +0.19479295134554875 +-0.6666062265838051 +-1.4220870876252587 +-2.0041647764735178 +-2.360844026757266 +-2.460263743329025 +-2.2935430590043167 +-1.8755746359777978 +-1.2436943486634535 +-0.4543461812288394 +0.42195974540623654 +1.3069456326746558 +2.1215583269770266 +2.793030902452553 +3.261382713748029 +3.484777288429778 +3.4432594544666295 +3.140537876315984 +2.6036537709731284 +1.8805653965926 +1.0358640841189906 +0.14500448606285876 +-0.7124355628851323 +-1.4598634968243043 +-2.030513804444031 +-2.3734119933046154 +-2.4579279894320756 +-2.2765122306022323 +-1.8453700462496392 +-1.2030140836527736 +-0.4068240878530041 +0.4720786600786938 +1.3551843952627736 +2.1636079124859595 +2.8251351466430115 +3.2806738401009756 +3.4895320780819317 +3.4330531762193424 +3.1162822266082104 +2.5675154347538336 +1.8357725038072252 +0.9864178504755551 +0.09532179634941536 +-0.7579167019639881 +-1.4970803905689216 +-2.056141978577459 +-2.3851621593586647 +-2.454750540068097 +-2.2586909979086407 +-1.8144969478668551 +-1.161846921511498 +-0.35904020194116254 diff --git a/testdata/golden/g_Rsi.csv b/testdata/golden/g_Rsi.csv new file mode 100644 index 00000000..2cdf6e08 --- /dev/null +++ b/testdata/golden/g_Rsi.csv @@ -0,0 +1,81 @@ +Rsi +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +46.84518809898699 +45.82961265424322 +46.5293990131247 +49.23903870201344 +53.518768674122796 +58.56047460456064 +63.58342577996474 +68.07459111891804 +71.80327260156207 +74.72559789038102 +76.88488357198254 +78.34471541432595 +79.15131540353094 +79.31156608926268 +77.35312513119456 +73.13439349750769 +67.51119167055117 +61.48673113238304 +55.86675382432369 +51.14733221714866 +47.57753664027756 +45.28036590056008 +44.36975889174273 +45.212282377402985 +48.12434665867438 +52.61537254620642 +57.83678169397702 +62.992663568874654 +67.57346293490359 +71.3583982125327 +74.31265622918312 +76.4855340725887 +77.9435594091973 +78.73329989554925 +78.85948376472163 +76.76197022138767 +72.44443440532005 +66.78373698621982 +60.77877328002407 +55.21662487911296 +50.57413251002351 +47.087563552178636 +44.87458874458458 +44.050409895373384 +45.01878876311954 +48.0601943425273 +52.64880490307121 +57.92140340103244 +63.088714334306665 +67.65616719708338 +71.41589642993111 +74.34074717674663 +76.4832369420561 +77.91026866443379 +78.66702552588708 +78.75547116040536 +76.51507736151031 +72.09088140590961 +66.3803507173797 +60.378854393296976 +54.856911707280055 +50.27461841837877 +46.857548898064 +44.719625963574536 +43.978649539628535 +45.06927522550655 diff --git a/testdata/golden/g_Rsx.csv b/testdata/golden/g_Rsx.csv new file mode 100644 index 00000000..49e98ee8 --- /dev/null +++ b/testdata/golden/g_Rsx.csv @@ -0,0 +1,81 @@ +Rsx +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +39.397037731327764 +32.31997646769507 +27.025031185722625 +23.999485164387764 +24.05890821229685 +27.82879947208235 +35.107165858418334 +44.67726978750251 +54.85433955659127 +64.2607257301094 +72.1890723055598 +78.50172853751494 +83.3708853102482 +87.07340740151774 +89.4671613267923 +90.00104286463376 +88.01316414033826 +83.119590318289 +75.55840862290448 +66.229664774438 +56.352998876618464 +47.00513905322449 +38.855809381651774 +32.30316806714207 +27.983274467482655 +26.844220518872362 +29.670883261142844 +36.36670317418927 +45.679005029798454 +55.7832557929331 +65.17158809355243 +73.07347871742023 +79.34039273909377 +84.15436788120996 +87.80460852222558 +90.10868423290887 +90.4783203177871 +88.23579552803567 +83.02116724597597 +75.13548296604027 +65.54872682416635 +55.518457141134824 +46.11603684527837 +37.980046649050166 +31.501089184254383 +27.33761889125303 +26.450490075750054 +29.590659318013557 +36.57770563566529 +46.078337713978726 +56.24690486731314 +65.60970714368297 +73.44403214315348 +79.63525181435904 +84.38177707506706 +87.97786575548395 +90.20704508095251 +90.46183849574898 +88.06597356107997 +82.68577545001037 +74.66368917375172 +65.0024528703409 +54.965842384347276 +45.60819810964671 +37.54375092107109 +31.167254187304437 diff --git a/testdata/golden/g_RunBars.csv b/testdata/golden/g_RunBars.csv new file mode 100644 index 00000000..827b88df --- /dev/null +++ b/testdata/golden/g_RunBars.csv @@ -0,0 +1,81 @@ +bars + + + +99,110.76487377959927,98,109.33326909627483,3,1 + + +111.7365376962194,115.1642566915892,110.1528967845943,112.73847630878196,3,1 + + +113.06855035377954,114.55977666009171,107.76539185209613,108.7737988023383,3,-1 + + +106.12753789513545,107.73969337995807,99.18732582635697,101.57479556705148,3,-1 + + +98.64575078243223,100.78188758933494,95.93821562552817,97.72469882334903,3,-1 + + +98.18385394545021,103.20029690993537,96.54876504706593,101.27235512444012,3,1 + + +104.99031673022002,112.56654934841096,102.65835969292533,110.6681390048435,3,1 + + +114.11098793714572,121.38046215528227,112.95942875877287,119.93667863849153,3,1 + + +120.88220148856881,124.2878498649492,119.39438848583472,123.19889810845086,3,1 + + +122.40925186267498,123.88697089091687,117.70285703314954,119.12118485241757,3,-1 + + +117.72299769788953,118.8665240235534,110.47704737833695,111.92464106224679,3,-1 + + +110.27641646211617,111.76231568498811,106.49671695482826,108.19063769933508,3,-1 + + +107.61494922421186,113.29382811110736,106.26786689008574,111.88016416080967,3,1 + + +114.22618875818226,123.33523703654073,113.09073586402833,121.33623047221137,3,1 + + +125.65653611891825,132.45313613345562,123.29089632531003,130.5378442655162,3,1 + + +132.96978971477444,135.065460892756,131.08387196585088,133.65657776549278,3,1 + + +132.1510588175171,134.08480947785137,127.07925728332546,129.46740573130614,3,-1 + + +126.4306172006658,128.5591966352313,121.2254215875191,122.27578013601534,3,-1 + + +121.09703354508844,122.45602084147426,117.25536324735009,118.65934994918358,3,-1 + + +119.82146372498268,123.94838830624106,117.95421275941922,122.49012753228324,3,1 + + +124.66785812762632,133.06294250948164,123.18852214765032,132.0042268780681,3,1 + + +134.59892592769242,142.5489901806554,133.234137558996,141.13673737507105,3,1 + + +143.48228026040917,146.57143212166807,141.8802335303824,144.11152724502116,3,1 + + +144.27024859045207,145.7471249168318,138.7454488027266,139.81250491654941,3,-1 + + +137.04703875358243,138.78071046739933,130.25415962109273,132.6282548753949,3,-1 + + +129.80997879551026,131.86785162975886,127.39947545719488,129.13084441879352,3,-1 + diff --git a/testdata/golden/g_Rvi.csv b/testdata/golden/g_Rvi.csv new file mode 100644 index 00000000..cc99a858 --- /dev/null +++ b/testdata/golden/g_Rvi.csv @@ -0,0 +1,81 @@ +Rvi +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.030691726373607252 +0.02526686643765396 +0.013824747415639908 +-0.0011756388585440578 +-0.01591004597210603 +-0.026643451532980658 +-0.030577341411866348 +-0.027339614665654714 +-0.01761444419250602 +-0.0032895626298989193 +0.012053703254262029 +0.023981624990512127 +0.030064355960357208 +0.029118764121004063 +0.021144820661377035 +0.007628178142587871 +-0.007876122003102386 +-0.02121083676785504 +-0.02940441205443124 +-0.030149706186768356 +-0.023809949732467833 +-0.011743751412340237 +0.0035417565525512045 +0.017926095289431183 +0.02748994165041306 +0.030455155213923994 +0.02631091083687942 +0.015778565147656725 +0.0009024605025855934 +-0.014051543157494493 +-0.02527592461533009 +-0.03047641553592753 +-0.028394078484382874 +-0.019204134890643876 +-0.005302773209153675 +0.010126552466450452 +0.022950391535369218 +0.029759017819436216 +0.02949138908982491 +0.0223164129838156 +0.009617729571343872 +-0.00589574495701417 +-0.0196166396701288 +-0.02834066035925518 +-0.03038520024098781 +-0.02527190656753769 +-0.013630837362007582 +0.001450284990775902 +0.01604674393417363 +0.0266014525001535 +0.030685544236045845 +0.027202111426535287 +0.01729487410110495 +0.0029821620314166098 +-0.012381202683260588 +-0.024225824267199235 +-0.030065821641115324 +-0.028862896556386127 +-0.020822468340804538 +-0.007385137485886383 +0.008137042627935786 +0.02128866839063113 +0.029223650764996875 +0.030295016786248387 +0.023727101711204856 +0.011478206129810757 +-0.003796282400628561 diff --git a/testdata/golden/g_RviVolatility.csv b/testdata/golden/g_RviVolatility.csv new file mode 100644 index 00000000..b9386595 --- /dev/null +++ b/testdata/golden/g_RviVolatility.csv @@ -0,0 +1,81 @@ +RviVolatility +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +82.31690617466752 +84.31840468765971 +75.18030291394062 +67.69157821424072 +61.728220933121555 +57.086313309594736 +53.5047456955428 +50.64487051407475 +48.08940254183202 +45.48823064912281 +42.73120926623582 +46.50688563640892 +50.13597685587774 +53.42331964330448 +56.27391363391625 +58.73432592842582 +61.02037964456241 +63.436771193268136 +66.15995106335573 +69.14207395957553 +72.19644312436589 +75.11650246160643 +77.74891605118069 +69.83746396209584 +63.28286182237556 +58.01697214011378 +53.88863316836856 +50.68186655392426 +48.09780896315954 +45.760220214298386 +43.3588891110038 +40.80433141173253 +44.59601276098917 +48.24359295015574 +51.55126165811261 +54.42522044887778 +56.91788394936938 +59.256002648855244 +61.75006705469303 +64.57066262977918 +67.66009652880409 +70.82318158806804 +73.84709410840645 +76.57418773752458 +68.90219484607286 +62.54222181309099 +57.430351464242335 +53.42067291325812 +50.30085258996262 +47.773388192939386 +45.46643996898867 +43.08327800733663 +40.54787998887436 +44.34257646481247 diff --git a/testdata/golden/g_Rwi.csv b/testdata/golden/g_Rwi.csv new file mode 100644 index 00000000..11979932 --- /dev/null +++ b/testdata/golden/g_Rwi.csv @@ -0,0 +1,81 @@ +high,low +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +0.2757733942415474,1.629314199624769 +0.427748063938668,1.6669797840547989 +0.6174925320561553,1.6407188129968209 +0.8452725918619838,1.535180131125498 +1.011021171858788,1.3693403989082933 +1.0699210405964272,1.119625290960141 +1.2099899676762764,0.8770669138079676 +1.3282711840455428,0.6008692047892564 +1.43579834954138,0.22699369312777246 +1.5499726451391505,0 +1.7062670301553269,0 +1.8416141781910238,0.14266072213772601 +1.9103548241946915,0.3534397685716233 +1.9233692327196195,0.521881075429243 +1.9037734630335992,0.7241447501755156 +1.8578133313777794,0.7916822564390663 +1.7495422383596309,0.8984680464385588 +1.5356111724614936,1.0377791966575602 +1.2333142538419022,1.197450496976752 +0.9358916681647302,1.377805223353616 +0.5895053201499589,1.5338462257735272 +0.2665724218420426,1.6411603623247266 +0.37283193074424276,1.7214438078555536 +0.5279124580191474,1.7335930750923474 +0.6625731384817136,1.6433225690048685 +0.8939989384697611,1.4479019319929696 +1.1657415160570856,1.1842031382849474 +1.2986147779980761,0.8628722245670367 +1.4751765698076813,0.5395494584388033 +1.6370396787001467,0.22110929538012367 +1.7360559087473422,0.005401927506651215 +1.8107889645722839,0.06616026985465275 +1.8743388015057378,0.11134487144682874 +1.945590693518609,0.2558013893298594 +1.9681531545363877,0.5382588969776698 +1.9316761069946247,0.7044151176584581 +1.8368895925316824,0.9336355182202363 +1.6998482780471198,0.9909528578417941 +1.504586535795322,1.0748980346767014 +1.1846716407534315,1.1553916506281556 +0.8005505081559039,1.2432701769351933 +0.44495793297841724,1.3646644368417582 +0.25348096967871175,1.5020620027313245 +0.4575568881621944,1.5302054965840841 +0.6379054525865001,1.483206553876074 +0.8725748638252414,1.3883341334062202 +0.9837440721738692,1.2625624784832126 +1.075605453235118,1.0831195909596478 +1.2416927832805025,0.8621626273068108 +1.4063204374534086,0.54544535905275 +1.5758479722112766,0.19156184139127597 +1.7560448224406398,0 +1.8902694483644193,0.03206410662548344 +1.9909334118413577,0.05611624143124929 +2.0807569303124342,0.1368074216160836 +2.132222303772162,0.39013467833361104 +2.082942113110168,0.6177109701108836 +1.9525086379896446,0.8582102281053895 +1.761614661991482,1.1637517545354519 +1.485824585423677,1.2930812003416574 +1.2039183316924096,1.4541173080356307 +0.8819558916296799,1.5464208655974316 +0.5103663581955813,1.5964515261157233 +0.2910050135429706,1.628405011479901 +0.4635285683459588,1.6681736254351427 +0.6593233463675716,1.6257037463088087 +0.8676850931168578,1.5077054765646871 diff --git a/testdata/golden/g_SampleEntropy.csv b/testdata/golden/g_SampleEntropy.csv new file mode 100644 index 00000000..f157f412 --- /dev/null +++ b/testdata/golden/g_SampleEntropy.csv @@ -0,0 +1,81 @@ +SampleEntropy +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.6931471805599453 +0.6931471805599453 +0.6931471805599453 +0.6931471805599453 +0.6931471805599453 +1.0986122886681098 +0.6931471805599453 +0.916290731874155 +0.916290731874155 +0.6931471805599453 +0.587786664902119 +0.6931471805599453 +0.6931471805599453 +0.7884573603642702 +0.8472978603872037 +0.916290731874155 +0.6931471805599453 +0.6931471805599453 +0.40546510810816444 +1.0986122886681098 +0.6931471805599453 +0.6931471805599453 +0.6931471805599453 +0.6931471805599453 +1.0986122886681098 +1.0986122886681098 +0.6931471805599453 +0.916290731874155 +0.6931471805599453 +0.916290731874155 +0.5596157879354228 +0.5108256237659907 +0.5389965007326869 +0.5389965007326869 +0.6061358035703156 +0.8472978603872037 +0.916290731874155 +0.6931471805599453 +1.0986122886681098 +0.6931471805599453 +1.0986122886681098 +1.0986122886681098 +0.6931471805599453 +0.6931471805599453 +0.6931471805599453 +1.0986122886681098 +1.0986122886681098 +0.916290731874155 +0.916290731874155 +0.6931471805599453 +0.6931471805599453 +0.5596157879354228 +0.45198512374305727 +0.5389965007326869 +0.5389965007326869 +0.6061358035703156 +0.8472978603872037 +0.916290731874155 +0.6931471805599453 +1.0986122886681098 +0.6931471805599453 diff --git a/testdata/golden/g_SarExt.csv b/testdata/golden/g_SarExt.csv new file mode 100644 index 00000000..703d6c0e --- /dev/null +++ b/testdata/golden/g_SarExt.csv @@ -0,0 +1,81 @@ +SarExt +nan +51.5 +78.13865545511612 +93.13890252703035 +101.95188815331481 +107.42795996230609 +110.9397225288692 +-172.7463850373838 +-141.69362619878018 +-125.56631234267776 +-116.66585209738695 +-110.73244834658149 +-106.22611875695962 +-103.00209502109563 +-100.78188758933494 +-99.46748184049008 +47.969107812764086 +73.82127531139498 +87.4871044734605 +95.34370069169793 +100.83440115150813 +105.18731068822137 +108.87693001831616 +112.0719514159114 +115.27369238419269 +117.64904116296829 +119.39438848583472 +120.77557026109272 +-186.4317747974238 +-153.75002242503234 +-136.6916657614681 +-127.19726139730882 +-121.39913965335779 +-117.22854699978365 +-114.07463180365934 +-111.76231568498811 +-109.99872116521585 +53.24835847741413 +81.57495746475018 +96.43949729752117 +104.86666270431427 +110.31819320923192 +114.73595131873635 +119.03559417763854 +123.08798918131185 +126.63187762484937 +129.49585703767033 +131.08387196585088 +-202.5796802187765 +-167.20159792483454 +-149.11265778796482 +-139.20512102146222 +-133.14218915239383 +-129.04557312041138 +-126.07644878732859 +-123.65093518742384 +-122.45602084147426 +-121.58571423995242 +-121.03798192673773 +58.627681623675045 +90.2809173510797 +107.11465282866038 +116.93545145618452 +123.37034341179923 +128.21664296064043 +132.5072903087679 +136.2809922210849 +139.41499120087013 +141.8802335303824 +-219.11349300518583 +-180.8817308005044 +-161.38570542974261 +-150.99600988768913 +-144.87072934520785 +-140.2736408966947 +-136.46759582007053 +-134.02210748888697 +-131.86785162975886 +-130.78472862032595 +63.69973772859744 diff --git a/testdata/golden/g_SeasonalZScore.csv b/testdata/golden/g_SeasonalZScore.csv new file mode 100644 index 00000000..9f5da5c6 --- /dev/null +++ b/testdata/golden/g_SeasonalZScore.csv @@ -0,0 +1,81 @@ +SeasonalZScore +nan +nan +nan +-2.8643295014040113 +-2.5511146079123765 +-2.3566657126555812 +-2.2067215857431073 +-2.07329969966433 +-1.941531225989565 +-1.8007955491529648 +-1.641552717430453 +-1.4540081805790646 +-1.2276610687509804 +-0.9517241882510084 +-0.6170600802281094 +-0.22101423494657219 +0.22341380104601136 +0.6764310072458568 +1.0711179641068687 +1.339281846119436 +1.4484851612748295 +1.4105732948742788 +1.2590465070120835 +1.02636579153739 +0.7359498991283809 +0.40410970012519815 +0.04532879024801618 +-0.3223896530188621 +-0.6741421384729263 +-0.97888598800276 +-1.205233602205206 +-1.329442521589791 +-1.340281995780304 +-1.2382464849775756 +-1.0316736529535333 +-0.7339790596589874 +-0.3641920669670821 +0.04977813446149747 +0.4681598719114996 +0.8415459901764041 +1.121722820809239 +1.2767830891839071 +1.2994518472146184 +1.2029558055446996 +1.0102883286293463 +0.7455414870814895 +0.4306080244953579 +0.08594543350074796 +-0.267061108942581 +-0.6042355989579231 +-0.8987622504958811 +-1.1239044457334584 +-1.2573163710814406 +-1.2847988649047153 +-1.2018330617171604 +-1.0130846535468117 +-0.7314785599230871 +-0.37822256205546934 +0.01630758864919837 +0.41265413561010433 +0.7660336510970776 +1.034856811290953 +1.19085291855736 +1.2247550176899211 +1.144394820164962 +0.9679441700565681 +0.7173431331404809 +0.4147600415830709 +0.08201964289370178 +-0.25843883244352595 +-0.5826384734046288 +-0.8653415954177515 +-1.0819728529289796 +-1.211683512418727 +-1.240344247764495 +-1.1623934454081575 +-0.9813886197682034 +-0.7099532175524503 +-0.36980674101465366 +0.008295905978002996 diff --git a/testdata/golden/g_SeparatingLines.csv b/testdata/golden/g_SeparatingLines.csv new file mode 100644 index 00000000..347f6f14 --- /dev/null +++ b/testdata/golden/g_SeparatingLines.csv @@ -0,0 +1,81 @@ +SeparatingLines +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_SessionHighLow.csv b/testdata/golden/g_SessionHighLow.csv new file mode 100644 index 00000000..36982e7a --- /dev/null +++ b/testdata/golden/g_SessionHighLow.csv @@ -0,0 +1,81 @@ +high,low +101,98 +104.77731091023225,98 +108.13914959894458,98 +110.76487377959927,98 +112.90403177129735,98 +114.45148509543229,98 +115.1642566915892,98 +115.1642566915892,98 +115.1642566915892,98 +115.1642566915892,98 +115.1642566915892,98 +115.1642566915892,98 +115.1642566915892,98 +115.1642566915892,97.48620160125755 +115.1642566915892,96.34710045689485 +115.1642566915892,95.93821562552817 +115.1642566915892,95.93821562552817 +115.1642566915892,95.93821562552817 +115.1642566915892,95.93821562552817 +115.1642566915892,95.93821562552817 +115.1642566915892,95.93821562552817 +115.1642566915892,95.93821562552817 +115.26697281350663,95.93821562552817 +118.47543335247398,95.93821562552817 +121.38046215528227,95.93821562552817 +123.36781277048146,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +124.2878498649492,95.93821562552817 +127.14038418498515,95.93821562552817 +130.20955349568973,95.93821562552817 +132.45313613345562,95.93821562552817 +134.3228744433646,95.93821562552817 +135.053120145851,95.93821562552817 +135.065460892756,95.93821562552817 +135.065460892756,95.93821562552817 +135.065460892756,95.93821562552817 +135.065460892756,95.93821562552817 +135.065460892756,95.93821562552817 +135.065460892756,95.93821562552817 +135.065460892756,95.93821562552817 +135.065460892756,95.93821562552817 +135.065460892756,95.93821562552817 +135.065460892756,95.93821562552817 +135.065460892756,95.93821562552817 +135.065460892756,95.93821562552817 +135.065460892756,95.93821562552817 +135.065460892756,95.93821562552817 +135.065460892756,95.93821562552817 +135.065460892756,95.93821562552817 +136.79793765689536,95.93821562552817 +140.0546941334019,95.93821562552817 +142.5489901806554,95.93821562552817 +144.5932922665057,95.93821562552817 +146.0756620034572,95.93821562552817 +146.57143212166807,95.93821562552817 +146.57143212166807,95.93821562552817 +146.57143212166807,95.93821562552817 +146.57143212166807,95.93821562552817 +146.57143212166807,95.93821562552817 +146.57143212166807,95.93821562552817 +146.57143212166807,95.93821562552817 +146.57143212166807,95.93821562552817 +146.57143212166807,95.93821562552817 +146.57143212166807,95.93821562552817 +146.57143212166807,95.93821562552817 diff --git a/testdata/golden/g_SessionRange.csv b/testdata/golden/g_SessionRange.csv new file mode 100644 index 00000000..e07291ff --- /dev/null +++ b/testdata/golden/g_SessionRange.csv @@ -0,0 +1,81 @@ +asia,eu,us +3,0,0 +6.777310910232245,0,0 +10.139149598944584,0,0 +12.76487377959927,0,0 +14.904031771297355,0,0 +16.45148509543229,0,0 +17.164256691589202,0,0 +17.164256691589202,0,0 +17.164256691589202,0,0 +17.164256691589202,0,0 +17.164256691589202,0,0 +17.164256691589202,0,0 +17.164256691589202,0,0 +17.678055090331654,0,0 +18.81715623469435,0,0 +19.22604106606103,0,0 +19.22604106606103,0,0 +19.22604106606103,0,0 +19.22604106606103,0,0 +19.22604106606103,0,0 +19.22604106606103,0,0 +19.22604106606103,0,0 +19.328757187978454,0,0 +22.537217726945812,0,0 +25.4422465297541,0,0 +27.42959714495329,0,0 +28.34963423942102,0,0 +28.34963423942102,0,0 +28.34963423942102,0,0 +28.34963423942102,0,0 +28.34963423942102,0,0 +28.34963423942102,0,0 +28.34963423942102,0,0 +28.34963423942102,0,0 +28.34963423942102,0,0 +28.34963423942102,0,0 +28.34963423942102,0,0 +28.34963423942102,0,0 +28.34963423942102,0,0 +28.34963423942102,0,0 +28.34963423942102,0,0 +28.34963423942102,0,0 +28.34963423942102,0,0 +31.20216855945698,0,0 +34.27133787016156,0,0 +36.51492050792744,0,0 +38.38465881783644,0,0 +39.11490452032284,0,0 +39.12724526722782,0,0 +39.12724526722782,0,0 +39.12724526722782,0,0 +39.12724526722782,0,0 +39.12724526722782,0,0 +39.12724526722782,0,0 +39.12724526722782,0,0 +39.12724526722782,0,0 +39.12724526722782,0,0 +39.12724526722782,0,0 +39.12724526722782,0,0 +39.12724526722782,0,0 +39.12724526722782,0,0 +39.12724526722782,0,0 +39.12724526722782,0,0 +39.12724526722782,0,0 +40.859722031367184,0,0 +44.11647850787374,0,0 +46.610774555127236,0,0 +48.655076640977526,0,0 +50.13744637792904,0,0 +50.633216496139895,0,0 +50.633216496139895,0,0 +50.633216496139895,0,0 +50.633216496139895,0,0 +50.633216496139895,0,0 +50.633216496139895,0,0 +50.633216496139895,0,0 +50.633216496139895,0,0 +50.633216496139895,0,0 +50.633216496139895,0,0 +50.633216496139895,0,0 diff --git a/testdata/golden/g_SessionVwap.csv b/testdata/golden/g_SessionVwap.csv new file mode 100644 index 00000000..81c58453 --- /dev/null +++ b/testdata/golden/g_SessionVwap.csv @@ -0,0 +1,81 @@ +SessionVwap +99.66666666666667 +101.43186355934736 +103.1418467346444 +104.72524251435041 +106.11658814601071 +107.26197807148026 +108.12392454778578 +108.68473286603445 +108.94788218474959 +108.93719496319889 +108.6939142335673 +108.27212140087826 +107.73315655203712 +107.13980697732005 +106.55099511684338 +106.01754191953432 +105.574488719377 +105.24403046718167 +105.0532260289652 +105.01668973808685 +105.13625480053574 +105.40178194132667 +105.79291824018027 +106.281534783261 +106.83455123904943 +107.41687731587024 +107.99424420127528 +108.53574454861608 +109.01593726593835 +109.41640368389328 +109.72667224007039 +109.94446831076806 +110.07829451614217 +110.13781541771121 +110.13654676966519 +110.09446794810344 +110.03604107972293 +109.98753674805292 +109.97402298898915 +110.01646326126956 +110.12936768851321 +110.3193480654346 +110.58476263894983 +110.91644060152191 +111.29929375327781 +111.71449283739537 +112.14183166129912 +112.56192604713692 +112.97175975899731 +113.35701680111218 +113.70418291569361 +114.0038205912578 +114.25128187847953 +114.44692254399716 +114.59582753713786 +114.7071101701647 +114.79288203685903 +114.86700832886702 +114.94376872046713 +115.03654251078153 +115.15663068517345 +115.3123159645159 +115.50824177852617 +115.74673529012439 +116.03442015889951 +116.36702355054167 +116.73595465861783 +117.12895426065779 +117.53127179630778 +117.92724246665307 +118.30204758751894 +118.64339224639716 +118.94283972962145 +119.19660258528434 +119.4056914713997 +119.57544065225956 +119.71453548143946 +119.83373933276083 +119.94454255354819 +120.060012943307 diff --git a/testdata/golden/g_ShannonEntropy.csv b/testdata/golden/g_ShannonEntropy.csv new file mode 100644 index 00000000..2f670d5d --- /dev/null +++ b/testdata/golden/g_ShannonEntropy.csv @@ -0,0 +1,81 @@ +ShannonEntropy +nan +nan +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +0.9182958340544896 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +0.9182958340544896 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +0.9182958340544896 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +1.584962500721156 +0.9182958340544896 diff --git a/testdata/golden/g_Shark.csv b/testdata/golden/g_Shark.csv new file mode 100644 index 00000000..972b2dff --- /dev/null +++ b/testdata/golden/g_Shark.csv @@ -0,0 +1,81 @@ +Shark +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_SharpeRatio.csv b/testdata/golden/g_SharpeRatio.csv new file mode 100644 index 00000000..ae8af7e4 --- /dev/null +++ b/testdata/golden/g_SharpeRatio.csv @@ -0,0 +1,81 @@ +SharpeRatio +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +22.408767038719862 +21.393748271690797 +19.247505650262227 +17.6512673863629 +17.04418755895501 +17.46397488396557 +18.86391543102258 +20.790985588305357 +21.597358776409056 +19.6858977958905 +16.464828470693966 +13.773771544425784 +12.014818648565905 +11.041779354054041 +10.693453647829228 +10.896328091637043 +11.671040425422248 +13.135232754897219 +15.49562100563605 +18.899430160297126 +22.72485272724984 +24.658721032955686 +23.404121905544446 +21.052631817094422 +19.363054119119706 +18.77017803339762 +19.308050509428025 +20.91635389143305 +23.043256387585963 +23.790942781423585 +21.526858466779284 +17.95880157468978 +15.035340673129705 +13.137162420818132 +12.093115084747831 +11.72898652787447 +11.968387124729329 +12.83827765195336 +14.47212123129086 +17.098291610366957 +20.85937418225148 +24.990038206744703 +26.89927306147481 +25.38922012356082 +22.839088760312883 +21.067677575512437 +20.500707726041608 +21.168194968013587 +22.993204688062896 +25.311535434136495 +25.965560453506374 +23.327614007965497 +19.418433795887303 +16.273927518950394 +14.245858526089755 +13.137980053551068 +12.764107839579783 +13.046021291292261 +14.018037834935699 +15.830480795067391 +18.733529385083514 +22.859568052812154 +27.28033944845914 +29.127648744943592 +27.348818427482847 +24.607721077527557 +22.76612081300436 diff --git a/testdata/golden/g_ShootingStar.csv b/testdata/golden/g_ShootingStar.csv new file mode 100644 index 00000000..2c5ca333 --- /dev/null +++ b/testdata/golden/g_ShootingStar.csv @@ -0,0 +1,81 @@ +ShootingStar +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_ShortLine.csv b/testdata/golden/g_ShortLine.csv new file mode 100644 index 00000000..bfd45990 --- /dev/null +++ b/testdata/golden/g_ShortLine.csv @@ -0,0 +1,81 @@ +ShortLine +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_SignedVolume.csv b/testdata/golden/g_SignedVolume.csv new file mode 100644 index 00000000..035b2013 --- /dev/null +++ b/testdata/golden/g_SignedVolume.csv @@ -0,0 +1,81 @@ +SignedVolume +1000 +1019.8669330795061 +1038.941834230865 +1056.4642473395036 +-1071.7356090899523 +-1084.1470984807897 +-1093.2039085967226 +-1098.544972998846 +-1099.9573603041506 +-1097.3847630878195 +1090.929742682568 +1080.849640381959 +1067.546318055115 +1051.5501371821465 +1033.4988150155905 +1014.1120008059867 +-1005.837414342758 +-1025.5541102026832 +-1044.2520443294852 +-1061.185789094272 +-1075.680249530793 +-1087.157577241359 +1095.1602073889517 +1099.3691003633464 +1099.616460883584 +1095.8924274663138 +1088.3454655720152 +1077.2764487555987 +1063.126663787232 +-1046.4602179413757 +-1027.9415498198925 +-1008.3089402817496 +-1011.6549204850494 +-1031.154136351338 +-1049.4113351138608 +1065.6986598718788 +1079.3667863849153 +1089.8708095811626 +1096.7919672031487 +1099.8543345374605 +1098.9358246623383 +-1094.0730556679773 +-1085.459890808828 +-1073.4397097874114 +-1058.4917192891762 +-1041.2118485241756 +-1022.2889914100246 +-1002.4775425453357 +1017.4326781222982 +1036.647912925193 +1054.402111088937 +1069.9874687593544 +1082.7826469085653 +1092.2775421612807 +-1098.093623006649 +-1099.9990206550704 +-1097.9177729151318 +-1091.9328525664675 +-1082.2828594968707 +-1069.3525084777123 +1053.6572918000436 +1035.8229282236828 +1016.5604175448309 +1003.3623047221139 +1023.1509825101539 +1042.016703682664 +-1059.2073514707224 +-1074.037588995245 +-1085.9161814856498 +-1094.3695669444105 +-1099.060735569487 +-1099.8026652716362 +-1096.5657776549278 +1089.4791172140503 +1078.8252067375315 +1065.0287840157116 +1048.6398688853799 +1030.3118356745701 +1010.7753652299442 +-1009.1906850227682 diff --git a/testdata/golden/g_SineWave.csv b/testdata/golden/g_SineWave.csv new file mode 100644 index 00000000..f08eaf9f --- /dev/null +++ b/testdata/golden/g_SineWave.csv @@ -0,0 +1,81 @@ +SineWave +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-0.23365354942867986 +-0.4873147082229804 +-0.6392380332616757 +-0.8126871041153712 +-0.9714021806269425 +0.9986477688397586 +0.9432807448237401 +0.8009278628733092 +0.5604348660956273 +0.21938048497722537 +-0.1800156684855946 +-0.5448782535672685 +-0.8035678265773084 +-0.9484203909808723 +-0.9993901454603945 +0.9707471223136186 +0.8676184642852565 +0.6958796549784246 +0.47083915982045593 +0.21605695532537247 +-0.045305869549276546 +-0.29657832517960153 +-0.5267830097357797 +-0.7259602244039951 +-0.8811519041055547 +-0.9765376486762233 +0.9977184196745383 +0.9349794489980499 +0.781307631481636 +0.5304132076965292 +0.1878833340027308 diff --git a/testdata/golden/g_SineWeightedMa.csv b/testdata/golden/g_SineWeightedMa.csv new file mode 100644 index 00000000..a9d0aada --- /dev/null +++ b/testdata/golden/g_SineWeightedMa.csv @@ -0,0 +1,81 @@ +SineWeightedMa +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +108.8402245701055 +108.43223092167703 +107.60598752987507 +106.4799637670033 +105.19940749309177 +103.92337049714519 +102.8105008745271 +102.00487146509506 +101.62311025550127 +101.74398234849234 +102.40135411086325 +103.58116799177404 +105.22269824189945 +107.22397536375964 +109.45089474323929 +111.74919581536909 +113.9582417011682 +115.92536842162605 +117.51952191627609 +118.64296471210523 +119.24000652093135 +119.30197888698677 +118.86800951425559 +118.02152710520834 +116.88280892328243 +115.59823678315485 +114.32722119919903 +113.2279617190005 +112.44331542892887 +112.08803595607687 +112.23852286851724 +112.92599712942392 +114.13371222141554 +115.79845006307785 +117.81616809189701 +120.05129307650417 +122.34883146966251 +124.54821452023204 +126.49764140149499 +128.0676391269056 +129.16262798637487 +129.72945939711272 +129.76216350823873 +129.30248246978138 +128.43614173073496 +127.2851924400124 +125.99710898081233 +124.73161552318324 +123.64641833961223 +122.88311837339216 +122.55456244808089 +122.73476299683877 +123.45228675220213 +124.68770296494479 +126.37531909503664 +128.4090489305958 +130.65188895324442 +132.94815645437478 +135.13739620784676 +137.06871345746302 +138.6142528961377 +139.68061959969313 +140.21722171728297 +140.22078969075326 +139.7356683145345 +138.84985554722553 +137.68714191603144 diff --git a/testdata/golden/g_SinglePrints.csv b/testdata/golden/g_SinglePrints.csv new file mode 100644 index 00000000..d154dd8c --- /dev/null +++ b/testdata/golden/g_SinglePrints.csv @@ -0,0 +1,81 @@ +SinglePrints +nan +nan +5 +4 +4 +3 +1 +1 +1 +2 +5 +4 +3 +3 +3 +1 +0 +1 +3 +3 +4 +5 +5 +5 +5 +2 +1 +1 +0 +2 +3 +2 +4 +4 +4 +3 +2 +0 +1 +2 +3 +6 +6 +6 +5 +4 +3 +2 +1 +1 +3 +3 +2 +3 +3 +4 +2 +1 +0 +2 +3 +3 +4 +5 +5 +5 +4 +3 +3 +1 +1 +1 +3 +5 +4 +2 +3 +3 +1 +0 diff --git a/testdata/golden/g_Skewness.csv b/testdata/golden/g_Skewness.csv new file mode 100644 index 00000000..d5760e29 --- /dev/null +++ b/testdata/golden/g_Skewness.csv @@ -0,0 +1,81 @@ +Skewness +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-0.3167278473841162 +-0.41904167627968425 +-0.4445883353988908 +-0.2638530581372515 +0.00796148097796025 +0.27744743496870145 +0.44948062789973514 +0.411351634317819 +0.31961656700926483 +0.5792771720257541 +0.830121806860733 +0.8005957484511768 +0.6121570139672687 +0.3700597067756557 +0.11442550594430573 +-0.14328172325958063 +-0.39825109996853714 +-0.6371785547151265 +-0.8145785252882216 +-0.8166120841090524 +-0.5391090675683264 +-0.3153000987923432 +-0.4262963624355605 +-0.4390026667392647 +-0.24998763196756388 +0.023877704236122795 +0.290750737978948 +0.453658137556719 +0.4033075621732109 +0.32400525225289717 +0.5991834711664634 +0.8353902030903556 +0.7928735801908867 +0.5994141677514442 +0.3559085813896101 +0.09998948507427907 +-0.15770025026074133 +-0.41228437963909187 +-0.6494340643553433 +-0.820783744158139 +-0.8083453024974053 +-0.5191105299645619 +-0.31527697157509615 +-0.43304334179744525 +-0.4327464109971703 +-0.23587054323485174 +0.03977368894168821 +0.3037422947650688 +0.4571011911628373 +0.39499959437025106 +0.32991455419578336 +0.6188068893215328 +0.8396911806291324 +0.7846996140838658 +0.5865309362965024 +0.34172474259766084 +0.08554920587019538 +-0.17211116478406646 +-0.4262709369725218 +-0.661502756670213 +-0.8264264873708295 +-0.7990613989608812 +-0.49935282535646797 +-0.31658609599060306 +-0.43921923771504817 +-0.42584342332374225 +-0.2215205570188686 diff --git a/testdata/golden/g_Sma.csv b/testdata/golden/g_Sma.csv new file mode 100644 index 00000000..9f247ffb --- /dev/null +++ b/testdata/golden/g_Sma.csv @@ -0,0 +1,81 @@ +Sma +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +107.082865308575 +106.96031118542241 +106.55098952518925 +105.93612732359576 +105.21531190077062 +104.49759506253974 +103.89175182739567 +103.49656387805487 +103.39199568793734 +103.63205153291037 +104.23995145016349 +105.20605706144154 +106.48873254066868 +108.01806381828972 +109.7021037968819 +111.4350857115261 +113.10687095991703 +114.61278745568676 +115.86297967414018 +116.79043517866376 +117.35697064210828 +117.55664264968355 +117.41627860650068 +116.99308032537222 +116.36951435923494 +115.64594550958222 +114.93167153765809 +114.33515992096163 +113.9543587765253 +113.86794744733447 +114.12830831094557 +114.75684761770661 +115.742083334167 +117.04067079892921 +118.58127457216008 +120.2709406179764 +122.00339961162967 +123.66855966178939 +125.16234049131411 +126.39597061843133 +127.30391704882051 +127.84973914282192 +128.0293437492481 +127.87135083438908 +127.43453694566097 +126.80258487767678 +126.07660853743191 +125.36612074013492 +124.7792507555816 +124.41308544252024 +124.34499676870873 +124.62573040346784 +125.27487275817427 +126.27910139046546 +127.59337505833837 +129.14495712015346 +130.83991288220435 +132.57150050514548 +134.2297059345968 +135.71107012897224 +136.92793074753726 +137.81625276622648 +138.34134853563094 +138.50097632541122 +138.3255405713923 +137.87537593786334 +137.23535780170852 diff --git a/testdata/golden/g_Smi.csv b/testdata/golden/g_Smi.csv new file mode 100644 index 00000000..46396b02 --- /dev/null +++ b/testdata/golden/g_Smi.csv @@ -0,0 +1,81 @@ +Smi +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-4.867286192662937 +3.315356249246513 +11.32483542192897 +18.323786407210807 +24.18383841734536 +28.976335497702237 +32.67418017718805 +34.658854651929495 +34.548895482896455 +31.88152980197006 +26.507899042826697 +19.088391521497034 +10.874635549186989 +2.8522073034146262 +-4.2186659799522985 +-9.608798087230285 +-12.618656173855932 +-13.32984808451787 +-11.22829544659286 +-6.266726686813776 +0.6235780410694038 +7.901995409824457 +14.650413788077552 +20.648242302460908 +25.799925846647074 +29.815051763288984 +32.700505187457466 +34.538208551640544 +35.084099492694385 +33.91720022602819 +30.989430492185598 +26.263916273051233 +19.917464031688468 +12.634248717965637 +5.538190471794609 +-0.6853373795003547 +-5.938595793266691 +-9.685522934520575 +-11.225300283680339 +-10.351464186943074 +-6.966541457808377 +-1.1861912696534054 +6.401136361499108 +14.4896189111833 +22.03632148339211 +28.62495791955993 +33.78340315284559 +37.04529770000689 +38.29261661970132 +37.544950160750005 +34.45488635008284 +29.016314286703416 +22.200334585916597 +15.1313241203155 +8.250581860609694 +1.9070193402759559 +-3.4007475971688694 +-7.287574862583722 +-9.539971672946667 diff --git a/testdata/golden/g_Smma.csv b/testdata/golden/g_Smma.csv new file mode 100644 index 00000000..cc6b7472 --- /dev/null +++ b/testdata/golden/g_Smma.csv @@ -0,0 +1,81 @@ +Smma +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +107.082865308575 +106.45439223480993 +105.83084270541985 +105.27423636300712 +104.8433518497011 +104.5882806550396 +104.54577093496702 +104.735776226613 +105.15951642505802 +105.79922336863486 +106.61959295972393 +107.57081336535019 +108.59289810837856 +109.62093634733337 +110.59079075884175 +111.44473349613041 +112.1365162678941 +112.63542116678863 +112.9289299573802 +113.02377297383664 +112.94526355158023 +112.73497709247195 +112.44698175731561 +112.14295718174559 +111.88663696290378 +111.73807109007875 +111.74822059513096 +111.95436703976415 +112.37674668594829 +113.0167098135385 +113.85656942624124 +114.86115269201488 +115.9809163758364 +117.1563478271653 +118.32325826004487 +119.41849536757685 +120.38556486356632 +121.17965868770953 +121.77164061939501 +122.15063318393784 +122.32497468410358 +122.32146078781156 +122.1829383441328 +121.96446629556509 +121.72838655653784 +121.53874510216326 +121.45556155930076 +121.52945912879952 +121.79713448415188 +122.27807226261487 +122.9727975922901 +123.86282271342644 +124.91229242655285 +126.07118135144701 +127.27975736466358 +128.47391248157524 +129.5908849646785 +130.57486149472723 +131.38195895663975 +131.984140810919 +132.37171819313897 +132.55421230748135 +132.55950106233232 +132.43132616070554 +132.22538331506965 +132.0043448224785 +131.83225910594632 diff --git a/testdata/golden/g_SmoothedHeikinAshi.csv b/testdata/golden/g_SmoothedHeikinAshi.csv new file mode 100644 index 00000000..721296d7 --- /dev/null +++ b/testdata/golden/g_SmoothedHeikinAshi.csv @@ -0,0 +1,81 @@ +open,high,low,close +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +107.03252484838643,108.67272128360027,105.39232841317258,107.03252484838642 +107.03252484838643,107.4453560245189,104.18629801900222,105.81582702176057 +106.42417593507349,106.42417593507349,103.08655369987235,104.71390090745004 +105.56903842126177,105.56903842126177,102.21484854616484,103.8335279769295 +104.70128319909563,104.8789709047384,101.64390668942343,103.2614387970809 +103.98136099808826,104.65514770543133,101.45879161094425,103.0569696581878 +103.51916532813803,104.87780822621627,101.61873402187506,103.24827112404566 +103.38371822609184,105.49946315937872,102.16430833098016,103.83188574517945 +103.60780198563565,106.44174131791635,103.10843596541908,104.77508864166771 +104.19144531365168,107.61843885066172,104.19144531365168,106.02017026093066 +105.10580778729117,109.06603811757003,105.10580778729117,107.48984692807396 +106.29782735768256,110.70796132259832,106.29782735768256,109.09316755888081 +107.6954974582817,112.39594151564941,107.6954974582817,110.73155863478446 +109.21352804653307,113.98152929555606,109.21352804653307,112.30491215854931 +110.75922010254119,115.34720664979582,110.75922010254119,113.71778224098222 +112.2385011717617,116.48584188194529,112.2385011717617,114.8857606717551 +113.5621309217584,117.35186293375638,113.5621309217584,115.74194650674991 +114.65203871425416,117.87817462052813,114.60814034019758,116.24315748036287 +115.44759809730851,118.0099545409315,114.74052401609214,116.37523927851183 +115.91141868791017,117.79704987009454,114.51618139344112,116.15661563176783 +116.03401715983901,117.30072746123652,113.97763019142724,115.63917882633189 +115.83659799308545,116.56227255773673,113.24932668606262,114.90579962189969 +115.37119880749256,115.68713237206728,112.44113961753952,114.06413599480342 +114.71766740114799,114.82541362053801,111.64854992917803,113.23698177485804 +113.97732458800301,114.16889933141113,110.93112552396573,112.55001242768843 +113.26366850784572,113.78691770459527,110.44973381920065,112.11832576189798 +112.69099713487185,113.72117242546355,110.3458606754003,112.03351655043193 +112.36225684265189,113.99431259728836,110.71184403388405,112.3530783155862 +112.35766757911904,114.68223217474868,111.50509393759573,113.0936630561722 +112.72566531764562,115.83596615632096,112.6224085016638,114.2291873289924 +113.47742632331901,117.3432218934762,113.47742632331901,115.69404771914641 +114.58573702123272,119.05873277377134,114.58573702123272,117.39093676462952 +115.98833689293112,120.84465322172925,115.98833689293112,119.20207807408731 +117.59520748350921,122.64174938461397,117.59520748350921,121.00225075815672 +119.29872912083297,124.29659881944558,119.29872912083297,122.67182352833268 +120.98527632458283,125.73244709588697,120.98527632458283,124.10817882613155 +122.54672757535718,126.84609541348222,122.54672757535718,125.23432345791045 +123.89052551663382,127.62887865652716,123.89052551663382,126.00405059627431 +124.94728805645406,128.06799337795326,124.73922716899533,126.4036102734743 +125.67544916496418,128.13348714559035,124.76719115825314,126.45033915192175 +126.06289415844296,127.83213803256274,124.54587559771883,126.18900681514079 +126.12595048679188,127.27028996065377,124.10314839635888,125.68671917850631 +125.9063348326491,126.62838741142984,123.42581651416742,125.02710196279864 +125.46671839772387,125.95603098856618,122.65244777290924,124.30423938073771 +124.8854788892308,125.30029111365572,121.93283650283469,123.6165638082452 +124.25102134873799,124.7190065866159,121.40235333704597,123.06067996183094 +123.65585065528447,124.34769278553169,121.1023751769949,122.72503398126331 +123.19044231827388,124.29445218829295,121.07240719452062,122.6834296914068 +122.93693600484033,124.62269190768171,121.35455585493793,122.98862388130983 +122.96277994307508,125.31369770231268,122.01935494628607,123.66652632429938 +123.31465313368723,126.34693034326854,123.07664673199426,124.71178853763142 +124.01322083565933,127.74039798508545,124.01322083565933,126.08568841367331 +125.04945462466631,129.3823041381943,125.04945462466631,127.71713432879321 +126.38329447672976,131.13786227718913,126.38329447672976,129.5072998514451 +127.94529716408744,132.931919609098,127.94529716408744,131.3378949243783 +129.64159604423287,134.68441859501257,129.64159604423287,133.08247081963708 +131.36203343193498,136.26935373189997,131.36203343193498,134.6195680915182 +132.99080076172658,137.53305655655757,132.99080076172658,135.84607934436997 +134.41844005304827,138.35930506780716,134.41844005304827,136.68901774755832 +135.5537289003033,138.71240102143284,135.51562621069843,137.11401361606562 +136.33387125818444,138.72150894756172,135.53708304236287,137.1292959949623 +136.73158362657335,138.41548199354992,135.15367873584066,136.78458036469527 +136.7580819956343,137.82969872626154,134.50040952054093,136.16505412340123 +136.4615680595178,137.03478578006118,133.72797886517665,135.38138232261892 +135.92147519106834,136.20144482542983,132.91297564494198,134.5572102351859 +135.23934271312712,135.4539949084435,132.1778422865757,133.81591859750958 +134.52763065531835,134.89979473030047,131.63691170758818,133.2683532189443 diff --git a/testdata/golden/g_SortinoRatio.csv b/testdata/golden/g_SortinoRatio.csv new file mode 100644 index 00000000..b7fc3e73 --- /dev/null +++ b/testdata/golden/g_SortinoRatio.csv @@ -0,0 +1,81 @@ +SortinoRatio +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_SpearmanCorrelation.csv b/testdata/golden/g_SpearmanCorrelation.csv new file mode 100644 index 00000000..42bb3899 --- /dev/null +++ b/testdata/golden/g_SpearmanCorrelation.csv @@ -0,0 +1,81 @@ +SpearmanCorrelation +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.9956043956043957 +0.9956043956043957 +0.9956043956043957 +0.9956043956043957 +0.9912087912087915 +0.9868131868131872 +0.9868131868131872 +0.9868131868131872 +0.9868131868131872 +0.9868131868131872 +0.9868131868131872 +0.9868131868131872 +0.9868131868131872 +0.9912087912087915 +0.9956043956043957 +0.9956043956043957 +0.9912087912087915 +0.9868131868131872 +0.982417582417582 +0.982417582417582 +0.982417582417582 +0.982417582417582 +0.982417582417582 +0.982417582417582 +0.9868131868131872 +0.9912087912087915 +0.9956043956043957 +0.9956043956043957 +0.9956043956043957 +0.9956043956043957 +0.9956043956043957 +0.9956043956043957 +0.9956043956043957 +1 +1 +0.9956043956043957 +0.9912087912087915 +0.9868131868131872 +0.982417582417582 +0.982417582417582 +0.982417582417582 +0.982417582417582 +0.982417582417582 +0.982417582417582 +0.982417582417582 +0.9868131868131872 +0.9912087912087915 +0.9912087912087915 +0.9956043956043957 +0.9956043956043957 +0.9956043956043957 +0.9956043956043957 +0.9956043956043957 +0.9956043956043957 +0.9956043956043957 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +0.9956043956043957 +0.9912087912087915 diff --git a/testdata/golden/g_SpinningTop.csv b/testdata/golden/g_SpinningTop.csv new file mode 100644 index 00000000..15bc3892 --- /dev/null +++ b/testdata/golden/g_SpinningTop.csv @@ -0,0 +1,81 @@ +SpinningTop +0 +0 +1 +1 +-1 +0 +0 +0 +-1 +-1 +1 +1 +0 +0 +0 +1 +-1 +-1 +0 +0 +0 +-1 +1 +1 +0 +0 +0 +0 +1 +-1 +0 +0 +0 +-1 +-1 +1 +0 +0 +0 +0 +1 +-1 +-1 +0 +0 +0 +-1 +-1 +1 +0 +0 +0 +1 +1 +-1 +0 +0 +0 +0 +-1 +1 +1 +0 +0 +0 +1 +-1 +-1 +0 +0 +0 +-1 +-1 +1 +0 +0 +0 +0 +1 +-1 diff --git a/testdata/golden/g_SpreadAr1Coefficient.csv b/testdata/golden/g_SpreadAr1Coefficient.csv new file mode 100644 index 00000000..0ec99dea --- /dev/null +++ b/testdata/golden/g_SpreadAr1Coefficient.csv @@ -0,0 +1,81 @@ +SpreadAr1Coefficient +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.8819205066945259 +0.8673142123189654 +0.861652332725793 +0.8707716699270441 +0.8865510701019091 +0.8936033134502839 +0.885944389218559 +0.8710482836320405 +0.8617819933743024 +0.8668913678028548 +0.8823482509535259 +0.8931302854024977 +0.8893560113041636 +0.8752578559827585 +0.8631510158382145 +0.8639266084098733 +0.8777292927014028 +0.8913876310135445 +0.8918900608130729 +0.8796352691056204 +0.8656224676113312 +0.8621071856513124 +0.8730974684374968 +0.8884888246227737 +0.8933328688753502 +0.8838645153246445 +0.868986566057158 +0.8615535833996941 +0.8688574725704205 +0.8846571252840734 +0.8935423669464287 +0.8876369458303078 +0.8729806598359583 +0.8622758093968244 +0.865371211908517 +0.880210950402351 +0.8924672233574091 +0.8906675553867669 +0.8773080909047518 +0.8641835474667585 +0.8629211847974795 +0.8755345931194459 +0.8901616469900782 +0.8927128022434313 +0.8816553170240474 +0.8671032244165403 +0.8616869630328391 +0.8710376760028036 +0.8867914371362383 +0.8935900793304781 +0.8857078174678397 +0.8707978249650502 +0.8617366051427661 +0.8671100453752373 +0.8826272052447465 +0.8931976348746021 +0.8891659202714572 +0.8749865158750366 +0.8630313005708162 +0.8640802360312757 +0.8780227035713901 +0.8915321922639231 +0.8917617259559838 +0.8793626890296147 +0.8654393282226733 +0.8621845159763848 +0.8733796095044922 diff --git a/testdata/golden/g_SpreadBollingerBands.csv b/testdata/golden/g_SpreadBollingerBands.csv new file mode 100644 index 00000000..86f8c555 --- /dev/null +++ b/testdata/golden/g_SpreadBollingerBands.csv @@ -0,0 +1,81 @@ +middle,upper,lower,percent_b +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +nan,nan,nan,nan +0.10068092037709826,1.5671856354506895,-1.365823794696493,0.798637534659061 +0.0831025099730484,1.5114705672495936,-1.3452655473034967,0.7348133385344883 +0.04517770682623734,1.414112484869872,-1.3237570712173974,0.6101066376002235 +-0.003808174579245157,1.3395940620678024,-1.3472104112262926,0.4472637995664592 +-0.05186168203299652,1.3251450329727406,-1.4288683970387335,0.30023691436772204 +-0.08721764098567775,1.3495102317416487,-1.5239455137130042,0.21326768397171267 +-0.10121967960349565,1.3665518629888116,-1.568991222195803,0.19479157668825592 +-0.0904396104946384,1.3530796849804743,-1.533958905969751,0.24069209849550027 +-0.05751677054500907,1.327143900592509,-1.442177441682527,0.3490532134824155 +-0.010511819198460972,1.334110830055587,-1.355134468452509,0.5055545387379881 +0.03906679210038127,1.40156070708023,-1.3234271228794674,0.6630238351043192 +0.0790804901910432,1.4996240453017373,-1.341463064919651,0.769183393142021 +0.09973252625442289,1.56402100180651,-1.3645559492976642,0.8066560202850594 +0.09596656159726738,1.5516297106607913,-1.3596965874662565,0.7787321436195506 +0.06870463571025757,1.470682827203311,-1.3332735557827957,0.6876691202447431 +0.024621418843437937,1.375528628150024,-1.3262857904631482,0.5414964842115016 +-0.025489980058256582,1.3259676301524586,-1.3769475902689718,0.3781188976104552 +-0.06936054284755702,1.333720890111726,-1.4724419758068399,0.2539959713687912 +-0.09624922571427622,1.3600515403737479,-1.5525499918023002,0.19710781672029587 +-0.09957274131704098,1.364344079859441,-1.5634895624935232,0.20692093751722165 +-0.0785173771246355,1.340958326604157,-1.4979930808534279,0.28024291689557795 +-0.038238220622860454,1.323452191725603,-1.3999286329713239,0.4130033099740635 +0.011402985891957127,1.3562737839731638,-1.3334678121892496,0.5773445960817635 +0.05825234376738767,1.4439634439615052,-1.32745875642673,0.7172402185391868 +0.0908394962670483,1.5352165961128448,-1.3535376035787483,0.7937894119104404 +0.10118597194234676,1.5688780888981149,-1.3665061450134215,0.802351779365411 +0.08675859270201565,1.522536356146082,-1.349019170742051,0.746924139363701 +0.05108968415652981,1.427109838196745,-1.3249304698836855,0.629719167487726 +0.002912239114498862,1.3462378922614895,-1.3404134140324917,0.46930163352429666 +-0.04597822363065112,1.3238670637034846,-1.415823510964787,0.31685850174727315 +-0.08361161368441015,1.3457713837148857,-1.5129946110837058,0.22079557567524843 +-0.10077396465125434,1.365949127887157,-1.5674970571896658,0.19347081725317605 +-0.09326333445658516,1.3563830081014534,-1.5429096770146238,0.23095461881396528 +-0.06291858731444222,1.3297469324678208,-1.4555841070967053,0.33128955720379594 +-0.017169175635278373,1.3297931810907817,-1.3641315323613383,0.4833937013400019 +0.03278384903533497,1.3896046638046249,-1.324036965733955,0.6442324417643185 +0.074710244085391,1.4871464523940374,-1.3377259642232553,0.7590202819506588 +0.09834496577249041,1.5594227913962826,-1.3627328598513018,0.8055476684514689 +0.09790140993789517,1.5579609159108678,-1.3621580960350774,0.7860889226461063 +0.07348817451946436,1.4837317594413215,-1.3367554104023927,0.7033092559116134 +0.031082470988981266,1.3865342161004732,-1.3243692741225108,0.5630980224914359 +-0.018933305478677807,1.3288367289840555,-1.366703339941411,0.3986453563036554 +-0.0643135484430439,1.3305278222388335,-1.4591549191249213,0.26679304399374637 +-0.09394759173513632,1.3572078532635294,-1.545103036733802,0.20070116279678463 +-0.10057998803366022,1.365688027434422,-1.5668480035017425,0.2019421829889777 +-0.08258689541182918,1.3447588311864465,-1.5099326220101048,0.26688526757173203 +-0.04437365047450977,1.3236620965062358,-1.4124093974552554,0.3925665644537145 +0.004703811684130699,1.348203009404551,-1.3387953860362896,0.555656020657547 +0.05262961669132896,1.4306316627864566,-1.3253724294037987,0.7018960570457022 +0.0876698560104389,1.5253379786657377,-1.3499982666448598,0.787643750584985 +0.101245456985074,1.569077753981039,-1.366586840010891,0.8049471156903286 +0.0900326390310054,1.532682295927599,-1.3526170178655883,0.757924963943221 +0.05677669104408726,1.4403931798265126,-1.3268397977383382,0.6485076076119257 +0.009619828933252401,1.3540142695689665,-1.334774611702462,0.49148442768572037 +-0.03989230280370545,1.3234187893805462,-1.4032033949879572,0.3345416450754039 +-0.07963740752161742,1.3419689580261547,-1.5012437730693897,0.22955492958604468 +-0.09988449742655092,1.364757923158418,-1.5645269180115198,0.193282907351767 +-0.09567637876783307,1.3593338544322902,-1.550686611967956,0.22233328402558783 +-0.06804334575638446,1.3328322950662468,-1.4689189865790158,0.3144947871679775 +-0.023750928609126327,1.3266235872621852,-1.374125444480438,0.46141338577060437 +0.026356544204238577,1.3783820687835984,-1.3256689803751212,0.6245645359826373 +0.07001101577979389,1.4741960340436686,-1.3341740024840807,0.7476180229530415 +0.09652434897291837,1.553447253643897,-1.3603985556980602,0.8032824485784161 +0.09940515513311661,1.562932715615541,-1.364122405349308,0.7923308422808695 +0.07794811244074294,1.4963512474827365,-1.3404550226012508,0.717893341516359 +0.037406653287415485,1.3983075138230079,-1.3234942072481768,0.5842222551693794 +-0.012293259193311559,1.3328455391454017,-1.357432057532025,0.41979501462738084 diff --git a/testdata/golden/g_SpreadHurst.csv b/testdata/golden/g_SpreadHurst.csv new file mode 100644 index 00000000..035c3d4e --- /dev/null +++ b/testdata/golden/g_SpreadHurst.csv @@ -0,0 +1,81 @@ +SpreadHurst +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.9960018711099398 +0.9514748518407717 +0.8795899936827152 +0.8475690276082687 +0.8895588912866448 +0.9613306680793909 +0.9974628697717046 +0.9692965420977157 +0.8989475476443172 +0.8491173569652508 +0.8715839461737827 +0.9421978571166678 +0.9934433126584611 +0.9834532036606749 +0.919971806924915 +0.8570614475757622 +0.8577548997789814 +0.9213013675591231 +0.984193513516168 +0.993013923117832 +0.9409277418799191 +0.8705818962044483 +0.8494319547809813 +0.9002313133451012 +0.9703001504869365 +0.9973713022024957 +0.9602133689365344 +0.8883442522852945 +0.8474718046176678 +0.8807180313954321 +0.9526744496174446 +0.9962537976780775 +0.9764528107412856 +0.9087024508712758 +0.8520805583102588 +0.8644930908221926 +0.932529986574464 +0.9897307457392815 +0.988551733161211 +0.9299053188178233 +0.8627762673020066 +0.8531019022986779 +0.9113429785276295 +0.9782111026005073 +0.9957287709776431 +0.9502656582219867 +0.8784752772334122 +0.8476921094666579 +0.8907832793688693 +0.9624356686405199 +0.9975329089293841 +0.9682785128755393 +0.8976702960172437 +0.8488279713310445 +0.8726022945291287 +0.9434610036799974 +0.9938521534573814 +0.9826948278844166 +0.9186419339146888 +0.8563899571054024 +0.8584700352363361 +0.9226302022456051 +0.9849155710267806 +0.9925640901258201 +0.9396510242463161 +0.86959652430216 +0.8497716339138272 diff --git a/testdata/golden/g_StalledPattern.csv b/testdata/golden/g_StalledPattern.csv new file mode 100644 index 00000000..7c5c6914 --- /dev/null +++ b/testdata/golden/g_StalledPattern.csv @@ -0,0 +1,81 @@ +StalledPattern +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_StandardError.csv b/testdata/golden/g_StandardError.csv new file mode 100644 index 00000000..0876904f --- /dev/null +++ b/testdata/golden/g_StandardError.csv @@ -0,0 +1,81 @@ +StandardError +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +4.805854706655521 +4.15850276432221 +3.265044891711104 +2.348473044351012 +1.9117875133990017 +2.39357993645206 +3.318673759125042 +4.2026254452311065 +4.832403140336832 +5.108431508139543 +4.993533440009366 +4.502831990660079 +3.7073254348316116 +2.761018291875911 +2.012618108754109 +2.067486252950304 +2.8664650397459934 +3.8078737018666464 +4.574867182797782 +5.025846463047051 +5.096721900663138 +4.778191204229232 +4.113580499759255 +3.2112701251182405 +2.3047906080542573 +1.9151158354291076 +2.4399827212321705 +3.372104486840509 +4.245924342688726 +4.857825004529261 +5.112425254323836 +4.975581588071973 +4.465340476990741 +3.656257673323618 +2.709009254950278 +1.9892391691890712 +2.0987031293155796 +2.9197362452335542 +3.8572848187670696 +4.609376716979463 +5.040194334909491 +5.089010751801221 +4.749424711849047 +4.067883812393178 +3.157404370588924 +2.2626659258432857 +1.9217514389287274 +2.4875579005791955 +3.425287335874629 +4.2883761777501865 +4.8821093679526335 +5.115175989412019 +4.956442581446925 +4.426890283749998 +3.6047096368480838 +2.6575950967048985 +1.9687327878018377 +2.132252263407745 +2.9732688694499774 +3.9060767121928524 +4.6428592455734945 +5.053328446218648 +5.080066018927001 +4.719567895765677 +4.021438867940022 +3.1035053904382655 +2.222236542204528 diff --git a/testdata/golden/g_StandardErrorBands.csv b/testdata/golden/g_StandardErrorBands.csv new file mode 100644 index 00000000..5fa80608 --- /dev/null +++ b/testdata/golden/g_StandardErrorBands.csv @@ -0,0 +1,81 @@ +upper,middle,lower +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +115.42223490063166,105.81052548732032,96.19881607400897 +110.8531900491846,102.5361845205411,94.21917899189759 +106.19067267959971,99.66058289617811,93.13049311275651 +102.18219914264536,97.485253053946,92.78830696524663 +100.0727492676429,96.249174240847,92.42559921405109 +100.89458507967915,96.10742520677661,91.32026533387408 +103.75467899990551,97.11733148165823,90.47998396341094 +107.63859554704575,99.23334465658591,90.82809376612607 +111.97591736820729,102.31111108753633,92.64630480686537 +116.33722959274573,106.12036657646888,95.90350356019204 +120.35257206636732,110.36550518635131,100.37843830633531 +123.7176488204434,114.71198483912633,105.70632085780926 +126.23086183285382,118.81621096319454,111.40156009353525 +127.87826535693038,122.35622877318336,116.83419218943634 +129.0857187495655,125.06048253206338,121.03524631456125 +130.8670453222711,126.73207281637531,122.59710031047949 +132.99927503480188,127.26634495531178,121.53341487582168 +134.27598492450488,126.66023752077254,119.04449011704021 +134.1622901612134,125.01255579561924,115.86282143002505 +132.5668387181173,122.51514579202414,112.46345286593096 +129.62920101989414,119.43575721856833,109.24231341724251 +125.65050860465828,116.09412619620025,106.53774378774222 +121.06057518232433,112.83341418280601,104.60625318328769 +116.41209463243416,109.98955438219666,103.56701413195916 +112.47082504761673,107.86124383150641,103.2516626153961 +110.51349335532025,106.68326168445915,102.85303001359806 +111.48546253126406,106.60549708879844,101.72553164633283 +114.42376900880853,107.67956003512641,100.9353510614443 +118.34601987553009,109.85417119015123,101.36232250477238 +122.69539253586646,112.97974252680737,103.26409251774828 +127.04659008585104,116.82173957720215,106.59688906855327 +131.03279487427605,121.08163169813083,111.13046852198562 +134.35423987831632,125.42355892433378,116.49287797035123 +136.81684868556786,129.50433333891905,122.19181799227026 +138.42211353777907,133.00409502787733,127.58607651797558 +139.63336255195725,135.6548842135778,131.67640587519833 +141.461983562285,137.26457730365246,133.0671710450199 +143.573521209777,137.73404871930973,131.89457622884245 +144.7805951256023,137.06602548806697,129.35145585053164 +144.58359708046436,135.3648436465045,126.14609021254466 +142.90751688267724,132.8271282128569,122.74673954303657 +139.90225076333562,129.72422925973203,119.54620775612844 +135.87683244397408,126.3779830202745,116.87913359657493 +131.2677308407553,123.13196321596729,114.99619559117927 +126.63559938051972,120.32079063934128,114.00598189816284 +122.76557432685047,118.24024247516277,113.71491062347508 +120.96433428327445,117.1208314054171,113.27732852755976 +122.0823303991086,117.10721459795151,112.13209879679442 +125.0958465842453,118.24527191249732,111.39469724074934 +129.05475994494066,120.47800758944088,111.9012552339411 +133.4148602471883,123.65064151128308,113.88642277537787 +137.7547872283839,127.52443524956087,117.29408327073784 +141.7109030205324,131.79801785763928,121.88513269474615 +144.98808700731516,136.13430643981556,127.28052587231598 +147.4000360361705,140.19061676247512,132.98119748877974 +148.96446440948932,143.64927421608036,138.3340840226714 +150.18345631752632,146.2459907419256,142.30852516632487 +152.05797742412273,147.7934728973059,143.52896837048905 +154.14468995984444,148.19815222094596,142.25161448204747 +155.2806968493626,147.4685434249762,139.65639000058977 +155.00020229220343,145.71448380105656,136.4287653099097 +153.24397867467368,143.13732178223626,133.03066488979883 +150.17206312494991,140.01193108709475,129.8517990492396 +146.10129286063778,136.6621570691049,127.22302127757202 +141.47476631158332,133.43188857569947,125.38901083981564 +136.8613501625982,130.65433938171788,124.44732860083757 +133.0667562797099,128.62228319529356,124.17781011087723 diff --git a/testdata/golden/g_StarcBands.csv b/testdata/golden/g_StarcBands.csv new file mode 100644 index 00000000..10de389b --- /dev/null +++ b/testdata/golden/g_StarcBands.csv @@ -0,0 +1,81 @@ +upper,middle,lower +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +119.93907194735124,112.17793901149825,104.41680607564527 +120.2205946444773,112.4485066137704,104.67641858306351 +119.4754027890769,111.87506726026072,104.27473173144455 +117.92214995997873,110.55350809144618,103.18486622291363 +116.0981663662904,108.64654356281615,101.1949207593419 +114.09668902536349,106.36918064716815,98.64167226897281 +111.94601072115726,103.96951290207254,95.99301508298781 +109.71172684641634,101.70655901125973,93.70139117610312 +107.62448011894962,99.82712541702527,92.02977071510092 +106.14901560252821,98.54375983579114,90.93850406905406 +105.42732073595286,98.01576500361824,90.60420927128362 +105.60777326921652,98.33496863723775,91.06216400525898 +106.8823372030726,99.51752073760144,92.1527042721303 +109.25879263933592,101.50245095839546,93.74610927745499 +112.39028653227217,104.15711490549148,95.9239432787108 +115.87767692583802,107.28904286562594,98.70040880541387 +119.3387714067482,110.66313255266266,101.98749369857713 +122.70463188879025,114.02265009461973,105.34066830044922 +125.72416613266769,117.11216330583574,108.50016047900378 +128.21733947341434,119.70035868337361,111.18337789333287 +129.90448166017933,121.60070395332828,113.29692624647723 +130.56144657807755,122.68811044331473,114.8147743085519 +130.46402380747352,122.91010688102654,115.35618995457956 +129.72279548299434,122.29152649671846,114.8602575104426 +128.32947460477092,120.93228874470736,113.53510288464379 +126.34468080273231,118.99847379610331,111.65226678947431 +124.05754735139509,116.70748709175275,109.35742683211042 +121.68860075837019,114.30863916169584,106.92867756502149 +119.36063887262064,112.06087545802716,104.76111204343367 +117.27039401335223,110.20964552886487,103.1488970443775 +115.79634066529381,108.96497774122763,102.13361481716144 +115.37636902515443,108.48271807252614,101.58906711989785 +115.89755235353499,108.85060885354945,101.8036653535639 +117.15587197033602,110.08045100737432,103.00503004441262 +119.28299917725998,112.10704990805283,104.93110063884568 +122.23612085548713,114.79403902238239,107.35195718927766 +125.88714696890095,117.94606112618295,110.00497528346496 +129.79119362357514,121.32621898331006,112.86124434304499 +133.48573182025098,124.67723667022013,115.86874152018926 +136.58955167841012,127.74444126798842,118.89933085756672 +138.9614724382803,130.29851203567645,121.6355516330726 +140.45511592930575,132.1559649491455,123.85681396898526 +141.2353708402836,133.195542782471,125.1557147246584 +141.13492551199874,133.36904665480043,125.60316779760211 +140.4077902437067,132.7056414928311,125.00349274195547 +139.1749843493039,131.3092508147689,123.44351728023386 +137.38231619380932,129.34927355195722,121.31623091010515 +135.06526357379713,127.04545214685288,119.02564071990864 +132.4840798663955,124.64824361508927,116.81240736378305 +130.11369562775693,122.41644696619407,114.71919830463122 +128.32320239309632,120.59408545883635,112.86496852457637 +127.09431429622603,119.38860872989244,111.68290316355885 +126.41052225063177,118.95236193622073,111.49420162180968 +126.57904230878574,119.3689772155218,112.15891212225785 +127.84716252911065,120.645903076555,113.44464362399935 +130.10513930577537,122.71373904603468,115.322338786294 +133.06172701847464,125.43243500621655,117.80314299395847 +136.43824578727498,128.6038014548115,120.76935712234804 +140.07408283331483,131.98921318296692,123.90434353261902 +143.58125461055812,135.33092495448764,127.08059529841717 +146.58783239206124,138.3750951201553,130.16235784824934 +148.92153673829222,140.89446053624863,132.86738433420504 +150.53381568587045,142.70863730432555,134.88345892278065 +151.5279478334936,143.70023392764224,135.87252002179088 +151.63693370833758,143.82533754393614,136.0137413795347 +150.70554925591327,143.11743653062805,135.52932380534284 +149.08246204055595,141.68442908780412,134.28639613505229 +147.22185682095676,139.6989850133501,132.17611320574343 +145.18806129312355,137.3831216241601,129.57818195519667 +143.0133130903648,134.98837161044193,126.96343013051906 +140.77214285815816,132.77331436962828,124.77448588109841 +138.74212341391828,130.98047787891855,123.21883234391882 +137.38068342076662,129.81467439338476,122.2486653660029 +136.8174645230218,129.42470517720838,122.03194583139495 diff --git a/testdata/golden/g_Stc.csv b/testdata/golden/g_Stc.csv new file mode 100644 index 00000000..d4a3843d --- /dev/null +++ b/testdata/golden/g_Stc.csv @@ -0,0 +1,81 @@ +Stc +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +4.241167566893436 +11.798390636739988 +52.903367014401304 +76.45168350720066 +88.22584175360032 +94.11292087680016 +97.05646043840008 +98.52823021920004 +99.26411510960003 +99.63205755480001 +99.29970737577503 +95.34129898217543 +71.08348696558285 +35.541743482791425 +17.770871741395712 +8.885435870697856 +4.442717935348928 +2.221358967674464 +1.110679483837232 +0.555339741918616 +0.277669870959308 +1.9034122041575658 +10.86937500327802 +55.434687501639004 +77.71734375081951 +88.85867187540975 +94.42933593770488 +97.21466796885244 +98.60733398442622 +99.30366699221311 +99.65183349610655 +99.14280670131961 +94.79201104538524 +69.07569412630819 +34.537847063154096 +17.268923531577048 +8.634461765788524 +4.317230882894262 +2.158615441447131 +1.0793077207235655 diff --git a/testdata/golden/g_StdDev.csv b/testdata/golden/g_StdDev.csv new file mode 100644 index 00000000..c83af111 --- /dev/null +++ b/testdata/golden/g_StdDev.csv @@ -0,0 +1,81 @@ +StdDev +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +4.518784213278314 +4.727656198487909 +5.234333021377786 +5.674117114043586 +5.835465192811276 +5.655594138540192 +5.204929443154173 +4.704179885463792 +4.523875941760436 +4.974885900046231 +5.9837175083618055 +7.220378582070476 +8.380306438078335 +9.25227350510703 +9.70540926374991 +9.677965491336474 +9.173583153289119 +8.261475019010945 +7.080781893122001 +5.852813031284625 +4.891594224741705 +4.515772207764729 +4.752065016242941 +5.263479922046573 +5.691727193310641 +5.834359860120258 +5.636181737278527 +5.175322106750961 +4.681713283394706 +4.531079431046067 +5.019289816707386 +6.050248768952662 +7.289799173427344 +8.43834921517394 +9.289626895836735 +9.716843805495929 +9.661967660448994 +9.13228089463668 +8.2007467356776 +7.010697876302559 +5.788566555192108 +4.852807429935883 +4.514802840055788 +4.77732943512528 +5.29231903707593 +5.708402340718182 +5.8321504446269 +5.615904836794978 +5.145565746256424 +4.66033366573063 +4.54042149555455 +5.065460637606518 +6.117416110905984 +7.35890820060268 +8.495437761736664 +9.32563041331219 +9.726746918606528 +9.644461201844914 +9.08969817435216 +8.139184958438516 +6.940486479187726 +5.725209488578712 +4.815988859424656 +4.515834189158391 +4.803373069952627 +5.320801061667229 +5.724121935265465 diff --git a/testdata/golden/g_StepTrailingStop.csv b/testdata/golden/g_StepTrailingStop.csv new file mode 100644 index 00000000..493cc435 --- /dev/null +++ b/testdata/golden/g_StepTrailingStop.csv @@ -0,0 +1,81 @@ +StepTrailingStop +98 +100 +104 +106 +108 +110 +110 +110 +110 +112 +110 +106 +104 +102 +102 +100 +100 +100 +98 +100 +104 +108 +112 +114 +116 +118 +120 +120 +120 +120 +122 +120 +118 +114 +114 +112 +112 +112 +112 +112 +112 +114 +118 +122 +124 +128 +130 +130 +130 +130 +130 +132 +130 +128 +126 +124 +122 +122 +122 +122 +120 +122 +126 +130 +132 +136 +138 +140 +140 +142 +142 +144 +142 +140 +138 +136 +134 +132 +132 +132 diff --git a/testdata/golden/g_SterlingRatio.csv b/testdata/golden/g_SterlingRatio.csv new file mode 100644 index 00000000..d99628e5 --- /dev/null +++ b/testdata/golden/g_SterlingRatio.csv @@ -0,0 +1,81 @@ +SterlingRatio +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_StickSandwich.csv b/testdata/golden/g_StickSandwich.csv new file mode 100644 index 00000000..d3fa981f --- /dev/null +++ b/testdata/golden/g_StickSandwich.csv @@ -0,0 +1,81 @@ +StickSandwich +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_StochRsi.csv b/testdata/golden/g_StochRsi.csv new file mode 100644 index 00000000..2fe90b5d --- /dev/null +++ b/testdata/golden/g_StochRsi.csv @@ -0,0 +1,81 @@ +StochRsi +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0 +0 +0 +0 +0 +0 +68.44425287932619 +100.00000000000001 +100 +100 +100 +100.00000000000001 +100 +100 +100 +100 +100 +100 +0 +0 +0 +0 +0 +0 +0 +0 +0 +86.22343849116571 +100 +100 +100 +100.00000000000001 +100 +100 +100 +100 +100 +100.00000000000001 +100 +0 +0 +0 +0 +0 +0 +0 +0 +0 +100 +99.99999999999999 +100 +99.99999999999999 +100 +100 +100 +100 +100 +100.00000000000001 +99.99999999999999 +100 +0 +0 +0 +0 +0 +0 +0 +0 +0 +100 diff --git a/testdata/golden/g_Stochastic.csv b/testdata/golden/g_Stochastic.csv new file mode 100644 index 00000000..f533744c --- /dev/null +++ b/testdata/golden/g_Stochastic.csv @@ -0,0 +1,81 @@ +k,d +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +22.979458250180002,61.258241405004455 +14.841769766344251,51.195978117652885 +20.343004679987718,41.96707667390497 +26.62513409314209,34.21374802363955 +27.915892596187984,28.180948640106035 +26.935966889836763,24.658319761938596 +29.10809017620745,24.10704520741233 +36.882827969564076,26.093240881610054 +56.2251820941338,32.00515692843713 +63.352180211099615,38.14932486145312 +71.01507103562844,44.49074442466546 +72.21319166238689,50.81893000555101 +74.85776509584265,57.664901177837564 +80.83998783252585,65.05517227159734 +87.94990387797992,72.35046882994246 +87.09627236310574,76.76062458265274 +82.85503157618153,79.54674620623587 +80.82160510579344,80.94767964483086 +80.3817752601529,82.11462015879745 +77.74679981850821,82.52733940489252 +50.4065455906804,78.1797047989146 +32.595257632306684,70.27189819238986 +22.935021118451605,61.10600515743926 +15.494974746320857,51.48313989603059 +14.546074791267413,42.01520699395545 +17.254874709440188,32.99707834385363 +18.814053107038298,24.57811452792936 +22.00062350848595,20.520125659044435 +32.16957522426709,20.459313886467353 +61.289105905768054,25.93846885608399 +70.26863041711735,33.763276809054915 +79.87942281736457,43.096612241354514 +86.56115446318677,52.9975093490326 +86.43863691091089,62.65816417815724 +80.48702879069397,71.01336493275839 +77.42530443530895,77.47846910576438 +77.8314096817614,79.84165535947771 +79.09581163509131,81.1026812477597 +75.47889053362475,80.474033778654 +71.92815549662625,78.38360535485965 +64.61505310749567,75.26595052580033 +47.844470682892954,70.60272793897163 +38.23407269428156,65.00398054739628 +34.089367713893665,58.75511740912946 +27.40185335748149,51.37026622661377 +18.990479173603603,43.30049317518218 +14.322208435121157,35.071072166395744 +19.838623808844705,28.674439409445608 +25.009963325065318,25.412366929755944 +26.996330299071186,23.806975159011607 +41.98373182796032,24.93474146102113 +66.65852426164597,30.5428373044732 +75.67203758770461,38.64020279220191 +80.54460894039192,48.1005457215263 +85.71879205927596,57.51199832873077 +89.27819970571724,66.6931749545382 +86.94905182640127,75.25784945844248 +85.16379136066234,81.42642939168562 +84.83869940893632,84.02359726986995 +79.98672615389084,84.6399813507537 +67.21733102610726,82.73608450585589 +47.563403493162525,77.28531471069684 +31.545376743680748,69.03776857326305 +21.255433060536745,59.65296589242526 +15.240009626740374,49.66385421615069 +21.527288038268207,40.619366877483806 +27.139852782304832,33.06981353868581 +27.84355945441349,27.444989028443835 +26.65939793906455,24.45870252071555 +30.166635778770722,24.261739525728405 +38.74716216215889,26.760557968817277 +56.32783812074486,32.630247753675064 diff --git a/testdata/golden/g_StochasticCci.csv b/testdata/golden/g_StochasticCci.csv new file mode 100644 index 00000000..71679bc4 --- /dev/null +++ b/testdata/golden/g_StochasticCci.csv @@ -0,0 +1,81 @@ +StochasticCci +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +82.37361419558442 +77.01640841006491 +70.68319518899884 +60.69716016206215 +46.788797565277015 +23.98737012860186 +0 +0 +0 +0 +3.8014366683473098 +13.861817648109753 +25.138983540854237 +39.27634318580297 +59.987251763386325 +90.10298220824122 +100 +100 +100 +94.37600010049886 +87.4279527145975 +81.4087587035679 +75.75702530517164 +69.10035535359148 +58.73685931504535 +44.79573249054029 +21.9163370841853 +0 +0 +0 +0 +4.671479305809025 +13.624810916125577 +24.688718652240706 +39.00560854320588 +60.750313334147975 +93.83976655338464 +100 +100 +100 +93.81982821506136 +87.13910342147993 +81.08776721438765 +75.42496528180239 +68.09731364030716 +57.73415960475129 +43.23031396180956 +19.78319567848105 +0 +0 +0 +0 +5.122445223516335 +14.77576523672697 diff --git a/testdata/golden/g_SuperSmoother.csv b/testdata/golden/g_SuperSmoother.csv new file mode 100644 index 00000000..338a0601 --- /dev/null +++ b/testdata/golden/g_SuperSmoother.csv @@ -0,0 +1,81 @@ +SuperSmoother +100 +103.4552020666134 +105.52079245179729 +106.97784922405152 +108.24136935479879 +109.44736618540271 +110.54998998998096 +111.41097174110955 +111.8721247980481 +111.80744732620725 +111.15502429456772 +109.9309927373599 +108.22882433771014 +106.20750643790575 +104.07215658119588 +102.05036790966673 +100.36725014708804 +99.22174404568992 +98.76635549814716 +99.09197705359273 +100.21893933633686 +102.09487212644544 +104.59937547009002 +107.55493615151369 +110.7430115418481 +113.92377995942579 +116.85775908227271 +119.3273479670927 +121.15636807803881 +122.22586442135054 +122.48476466637439 +121.95445352021015 +120.72686180975144 +118.95624714003564 +116.84540459987932 +114.62754189525191 +112.54543932160406 +110.82975665836682 +109.6784247389256 +109.23896228009006 +109.59529714758 +110.76026887160957 +112.67448179947554 +115.21161107143459 +118.18968727645915 +121.38735165601966 +124.56362977220016 +127.47945729832747 +129.9190351001697 +131.70910603584596 +132.73443155311827 +132.94808562294938 +132.37564649729836 +131.11291186470288 +129.31734150928702 +127.1939918793489 +124.9771989908055 +122.90964587787522 +121.22068443309826 +120.10584808153119 +119.70938536014032 +120.11137462499175 +121.32057089046222 +123.27362377056959 +125.84073638109365 +128.83725970943664 +132.04018676160842 +135.20807311328434 +138.10260442144926 +140.50988433507436 +142.25954121920006 +143.23994694569905 +143.40818830149118 +142.79390029803074 +141.49661896395853 +139.67689008807423 +137.5419281421427 +135.3271064292487 +133.27493188762094 +131.6133826680795 diff --git a/testdata/golden/g_SuperTrend.csv b/testdata/golden/g_SuperTrend.csv new file mode 100644 index 00000000..88827c6f --- /dev/null +++ b/testdata/golden/g_SuperTrend.csv @@ -0,0 +1,81 @@ +value,direction +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +91.29875872309916,1 +91.29875872309916,1 +91.29875872309916,1 +91.29875872309916,1 +92.07103671844938,1 +94.22430748456605,1 +96.80226929538112,1 +99.69272728687389,1 +102.77405717565748,1 +105.90522068408842,1 +108.79818949583779,1 +111.27394065801953,1 +113.16128694361036,1 +114.39727169824715,1 +114.97012453077498,1 +114.97012453077498,1 +114.97012453077498,1 +114.97012453077498,1 +114.97012453077498,1 +122.32992158847506,-1 +119.86769996285012,-1 +117.67546044710353,-1 +115.99352187625053,-1 +115.12173952449787,-1 +115.12173952449787,-1 +115.12173952449787,-1 +115.12173952449787,-1 +115.12173952449787,-1 +110.4451367426848,1 +113.89971206266269,1 +117.2268340450663,1 +120.22613706457794,1 +122.7177592700803,1 +124.49568424339549,1 +125.46574289581511,1 +125.49864270280119,1 +125.49864270280119,1 +125.49864270280119,1 +125.49864270280119,1 +125.49864270280119,1 +132.43103639739715,-1 +130.27620327072526,-1 +128.52332731909587,-1 +127.39912623517083,-1 +126.92386220494058,-1 +126.92386220494058,-1 +126.92386220494058,-1 +126.92386220494058,-1 +126.92386220494058,-1 +120.40633934693712,1 +123.73952539628792,1 +127.11950193496887,1 +130.3288146742793,1 +133.15105301273755,1 +135.32152680200446,1 +136.59993837365704,1 +136.7869495016887,1 +136.7869495016887,1 +136.7869495016887,1 +136.7869495016887,1 +136.7869495016887,1 +142.32454350406982,-1 +140.03048669178347,-1 +138.17628285456885,-1 +136.978128945105,-1 +136.67657113823597,-1 +136.67657113823597,-1 diff --git a/testdata/golden/g_T3.csv b/testdata/golden/g_T3.csv new file mode 100644 index 00000000..5678da11 --- /dev/null +++ b/testdata/golden/g_T3.csv @@ -0,0 +1,81 @@ +T3 +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +112.08691824213906 +115.41083815443608 +118.41418347256814 +120.86797042384887 +122.59367133182428 +123.47884657082977 +123.48693327109345 +122.66031036246181 +121.11635788595959 +119.03685404961789 +116.6516493558488 +114.21806946849051 +111.99788123196925 +110.23387505270676 +109.12815209113631 +108.8240532264852 +109.39334208638797 +110.82978560152628 +113.04970445495076 +115.89944348335223 +119.1690941629929 +122.61124299065875 +125.96307073692219 +128.96982830891056 +131.40759205123464 +133.10326572211062 +133.95004235830902 +133.91694481852755 +133.05159274376837 +131.47594874772506 +129.37542380188063 +126.98231498836469 +124.55505506973867 +122.35512744513 +120.62370860780283 +119.56012456179758 +119.30404562043225 +119.92301007141032 +121.40639118181127 +123.66634645208865 +126.54566432481727 +129.8318074249368 +133.2758978905813 +136.61494889138874 +139.59535645894982 +141.99555317412728 +143.64580012482952 +144.44334917758738 +144.36162116237642 +143.45258011077078 +141.8420914638084 +139.71867888703366 +137.31668401295155 +134.89533340094226 +132.71558260076927 +131.0168057705191 diff --git a/testdata/golden/g_TailRatio.csv b/testdata/golden/g_TailRatio.csv new file mode 100644 index 00000000..1590465d --- /dev/null +++ b/testdata/golden/g_TailRatio.csv @@ -0,0 +1,81 @@ +TailRatio +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +1.1271617411509842 +1.1352762240048555 +1.1476095210884865 +1.14948251361218 +1.14948251361218 +1.14948251361218 +1.1472068087880363 +1.135896686705547 +1.130399496801516 +1.1424110434292822 +1.1766183514124933 +1.207131794144271 +1.231681779179804 +1.2485314119896123 +1.256631647574955 +1.256631647574955 +1.2452880338152386 +1.2237280320379356 +1.194284832348399 +1.1600539419942277 +1.1242852671391945 +1.1143246989126956 +1.1233560169835461 +1.1339471951916282 +1.1349571322819816 +1.1349571322819816 +1.1349571322819816 +1.1323227469694843 +1.1217247439405937 +1.1178196741699615 +1.130157265934964 +1.160925679428468 +1.1882332559105402 +1.2100526128112377 +1.224846613870524 +1.2317056769424024 +1.2317056769424024 +1.2211047795452163 +1.2014841060970218 +1.1748915406971876 +1.1440372019727838 +1.111786750489779 +1.1037006075187934 +1.113458277537593 +1.1226339264438285 +1.122946378658432 +1.122946378658432 +1.122946378658432 +1.1200189334798072 +1.110011476181186 +1.1072061390288397 +1.1200373739840688 +1.1479666528072576 +1.1726279491811804 +1.1921938922568323 +1.2052922639201 +1.211128574949087 +1.211128574949087 +1.2011257682150402 +1.1830655234821652 +1.1587763898411843 +1.130668728629221 +1.10130374593792 +1.0947565834485036 +1.1050993686023858 +1.1131018218260011 +1.1131018218260011 diff --git a/testdata/golden/g_TakerBuySellRatio.csv b/testdata/golden/g_TakerBuySellRatio.csv new file mode 100644 index 00000000..88a5e20a --- /dev/null +++ b/testdata/golden/g_TakerBuySellRatio.csv @@ -0,0 +1,81 @@ +TakerBuySellRatio +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.222222222222222 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.222222222222222 +1.222222222222222 +1.2222222222222223 +1.222222222222222 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.222222222222222 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.222222222222222 +1.222222222222222 +1.222222222222222 +1.222222222222222 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.222222222222222 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 +1.2222222222222223 diff --git a/testdata/golden/g_Takuri.csv b/testdata/golden/g_Takuri.csv new file mode 100644 index 00000000..7d76d148 --- /dev/null +++ b/testdata/golden/g_Takuri.csv @@ -0,0 +1,81 @@ +Takuri +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_TasukiGap.csv b/testdata/golden/g_TasukiGap.csv new file mode 100644 index 00000000..e6708457 --- /dev/null +++ b/testdata/golden/g_TasukiGap.csv @@ -0,0 +1,81 @@ +TasukiGap +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_TdCamouflage.csv b/testdata/golden/g_TdCamouflage.csv new file mode 100644 index 00000000..90b8ebbd --- /dev/null +++ b/testdata/golden/g_TdCamouflage.csv @@ -0,0 +1,81 @@ +TdCamouflage +0 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +1 +1 +0 +0 +0 +0 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +0 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +-1 +0 +0 +0 +0 +0 +0 +-1 +-1 +-1 +-1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +-1 diff --git a/testdata/golden/g_TdClop.csv b/testdata/golden/g_TdClop.csv new file mode 100644 index 00000000..be64cd38 --- /dev/null +++ b/testdata/golden/g_TdClop.csv @@ -0,0 +1,81 @@ +TdClop +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_TdClopwin.csv b/testdata/golden/g_TdClopwin.csv new file mode 100644 index 00000000..db66e8be --- /dev/null +++ b/testdata/golden/g_TdClopwin.csv @@ -0,0 +1,81 @@ +TdClopwin +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 diff --git a/testdata/golden/g_TdCombo.csv b/testdata/golden/g_TdCombo.csv new file mode 100644 index 00000000..7dfb24e2 --- /dev/null +++ b/testdata/golden/g_TdCombo.csv @@ -0,0 +1,81 @@ +TdCombo +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +-2 +-3 +-4 +-4 +-4 +-4 +-4 +-4 +-4 +-4 +-4 +1 +2 +2 +2 +2 +2 +2 +2 +2 +-1 +-2 +-3 +-4 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +1 +2 +2 +2 +2 +2 +2 +2 +2 +-1 +-2 +-3 +-4 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +-5 +1 +2 +2 diff --git a/testdata/golden/g_TdCountdown.csv b/testdata/golden/g_TdCountdown.csv new file mode 100644 index 00000000..9d30be82 --- /dev/null +++ b/testdata/golden/g_TdCountdown.csv @@ -0,0 +1,81 @@ +TdCountdown +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +-2 +-3 +-4 +-5 +-6 +-7 +-8 +-9 +-10 +-11 +-12 +1 +2 +3 +4 +5 +6 +7 +7 +7 +-1 +-2 +-3 +-4 +-5 +-6 +-7 +-8 +-9 +-10 +-11 +-12 +1 +2 +3 +4 +5 +6 +7 +7 +7 +-1 +-2 +-3 +-4 +-5 +-6 +-7 +-8 +-9 +-10 +-11 +-12 +1 +2 +3 diff --git a/testdata/golden/g_TdDWave.csv b/testdata/golden/g_TdDWave.csv new file mode 100644 index 00000000..2aa2b1ab --- /dev/null +++ b/testdata/golden/g_TdDWave.csv @@ -0,0 +1,81 @@ +TdDWave +nan +nan +nan +nan +nan +nan +nan +nan +1 +1 +1 +1 +1 +1 +1 +1 +1 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +2 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +3 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +4 +5 +5 +5 +5 +5 +5 +5 +5 +5 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +6 +7 +7 +7 +7 +7 +7 +7 +7 +7 diff --git a/testdata/golden/g_TdDeMarker.csv b/testdata/golden/g_TdDeMarker.csv new file mode 100644 index 00000000..d45ba771 --- /dev/null +++ b/testdata/golden/g_TdDeMarker.csv @@ -0,0 +1,81 @@ +TdDeMarker +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.4864125086619657 +0.403354314238355 +0.32901766914644504 +0.29366028825340673 +0.29066689428587406 +0.3388154963425504 +0.40309302803315383 +0.4768606104882288 +0.5439419127104426 +0.6201698135886563 +0.7148726761764853 +0.8071834427927813 +0.8854834744114619 +0.9419605866158914 +0.9646971533926565 +0.9281290686577915 +0.8639569651893934 +0.7946684609373409 +0.7122160633161149 +0.6180312292716446 +0.5302796538449646 +0.448883132301362 +0.3742648082391978 +0.29768548422442986 +0.24569725488548894 +0.24578793109674485 +0.29947693178206886 +0.39339632939924124 +0.48807723081118554 +0.5727376872277627 +0.6472892147265676 +0.7133733185447522 +0.7870693015829291 +0.859871754613918 +0.9144044475645267 +0.9318016794191826 +0.8982795510097017 +0.8365765383129999 +0.7712884963238646 +0.7101155634980946 +0.6417945122828255 +0.5508929180032776 +0.449439963095796 +0.34966628585394705 +0.2478070560231437 +0.19655143584031498 +0.20283030538218141 +0.28335584721299795 +0.378298985364609 +0.4682111166262347 +0.5683714633383306 +0.6605184374417461 +0.7374372723811881 +0.8016593365689376 +0.8635956116900178 +0.9314398940743168 +0.9535241201383066 +0.9221950032231296 +0.8643250512338511 +0.7764788156167632 +0.6911965950578454 +0.6129078735193358 +0.5438664377561667 +0.4713063750136858 +0.388719640853135 +0.3195801520698327 diff --git a/testdata/golden/g_TdDifferential.csv b/testdata/golden/g_TdDifferential.csv new file mode 100644 index 00000000..82167c0e --- /dev/null +++ b/testdata/golden/g_TdDifferential.csv @@ -0,0 +1,81 @@ +TdDifferential +nan +0 +-1 +0 +-1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +-1 +-1 +-1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +-1 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +0 +-1 +0 +0 +1 +0 +0 +0 +0 +1 +0 +0 +0 +-1 diff --git a/testdata/golden/g_TdLines.csv b/testdata/golden/g_TdLines.csv new file mode 100644 index 00000000..394103a0 --- /dev/null +++ b/testdata/golden/g_TdLines.csv @@ -0,0 +1,81 @@ +resistance,support +nan,nan +nan,nan +nan,nan +NaN,NaN +NaN,NaN +NaN,NaN +NaN,NaN +NaN,NaN +NaN,NaN +NaN,NaN +NaN,NaN +NaN,NaN +NaN,NaN +NaN,NaN +112.72390874531129,NaN +112.72390874531129,NaN +112.72390874531129,NaN +112.72390874531129,NaN +112.72390874531129,NaN +112.72390874531129,NaN +112.72390874531129,NaN +112.72390874531129,NaN +112.72390874531129,NaN +112.72390874531129,97.93278462060415 +112.72390874531129,97.93278462060415 +112.72390874531129,97.93278462060415 +112.72390874531129,97.93278462060415 +112.72390874531129,97.93278462060415 +112.72390874531129,97.93278462060415 +112.72390874531129,97.93278462060415 +112.72390874531129,97.93278462060415 +112.72390874531129,97.93278462060415 +112.72390874531129,97.93278462060415 +112.72390874531129,97.93278462060415 +112.72390874531129,97.93278462060415 +122.98099977052848,97.93278462060415 +122.98099977052848,97.93278462060415 +122.98099977052848,97.93278462060415 +122.98099977052848,97.93278462060415 +122.98099977052848,97.93278462060415 +122.98099977052848,97.93278462060415 +122.98099977052848,97.93278462060415 +122.98099977052848,97.93278462060415 +122.98099977052848,97.93278462060415 +122.98099977052848,107.32068773822765 +122.98099977052848,107.32068773822765 +122.98099977052848,107.32068773822765 +122.98099977052848,107.32068773822765 +122.98099977052848,107.32068773822765 +122.98099977052848,107.32068773822765 +122.98099977052848,107.32068773822765 +122.98099977052848,107.32068773822765 +122.98099977052848,107.32068773822765 +122.98099977052848,107.32068773822765 +122.98099977052848,107.32068773822765 +122.98099977052848,107.32068773822765 +132.71696973631924,107.32068773822765 +132.71696973631924,107.32068773822765 +132.71696973631924,107.32068773822765 +132.71696973631924,107.32068773822765 +132.71696973631924,107.32068773822765 +132.71696973631924,107.32068773822765 +132.71696973631924,107.32068773822765 +132.71696973631924,107.32068773822765 +132.71696973631924,107.32068773822765 +132.71696973631924,119.152517136663 +132.71696973631924,119.152517136663 +132.71696973631924,119.152517136663 +132.71696973631924,119.152517136663 +132.71696973631924,119.152517136663 +132.71696973631924,119.152517136663 +132.71696973631924,119.152517136663 +132.71696973631924,119.152517136663 +132.71696973631924,119.152517136663 +132.71696973631924,119.152517136663 +132.71696973631924,119.152517136663 +132.71696973631924,119.152517136663 +143.72992039092952,119.152517136663 +143.72992039092952,119.152517136663 +143.72992039092952,119.152517136663 diff --git a/testdata/golden/g_TdMovingAverage.csv b/testdata/golden/g_TdMovingAverage.csv new file mode 100644 index 00000000..67e7c760 --- /dev/null +++ b/testdata/golden/g_TdMovingAverage.csv @@ -0,0 +1,81 @@ +st1,st2 +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +112.54581950294732,107.97543476728107 +112.90310541367676,109.84690934015738 +112.30508272771986,110.99905831591097 +110.85365744271037,111.35661876177348 +108.74333976862135,110.92397140354863 +106.23892462044755,109.78679195975951 +103.64409586100508,108.1038189240327 +101.26565439681481,106.08961492949184 +99.37868205590502,103.99061052071445 +98.19757230280675,102.05774302764134 +97.85659208055664,100.51944405999737 +98.40178140701418,99.55851408002566 +99.79396110399783,99.29561580630573 +101.92083667852313,99.78090441036225 +104.61501056335108,100.99395243711264 +107.67433963450408,102.85089762570536 +110.8814963458434,105.21687185737797 +114.0206178398289,107.92139204822932 +116.8902325699235,110.77451955266649 +119.31286585059627,113.58211674877728 +121.14252078343476,116.15925666462002 +122.27141615599164,118.34155052094101 +122.63692277053191,119.99465237850349 +122.22873756093031,121.0223600425144 +121.09526790494733,121.37354340599177 +119.34731806984773,121.04768902132817 +117.15678723441961,120.09832634986729 +114.74839082847001,118.63320199672118 +112.38341210400677,116.80997299904898 +110.33599893425533,114.82650184860593 +108.86421218566029,112.90554826446262 +108.1795044783255,111.27464581621106 +108.4191844835196,110.14301602589389 +109.6264435937495,109.67825813274685 +111.74161629975049,109.98602816104554 +114.6066501116576,111.09583231488709 +117.98259625379787,112.95537126969366 +121.57773307581742,115.43467997111289 +125.0821503059135,118.33982338385339 +128.20361746699334,121.43441397689669 +130.6995284501467,124.46600205242598 +132.40063877488237,127.1936901589099 +133.22396933363612,129.41326507203033 +133.17426612025795,130.97671770948028 +132.33534294064563,131.8040943866934 +130.85409624512894,131.88695618883693 +128.9207006775812,131.28403908544652 +126.74839055438959,130.11074957422608 +124.55542434275895,128.52472143221263 +122.55059540904846,126.70973597490897 +120.9223573994742,124.85993155103303 +119.8306317483614,123.16555949266224 +119.39991338150791,121.80080046192852 +119.71248088491855,120.91355163989189 +120.80125729168374,120.61678809435973 +122.64290767686418,120.98115046225932 +125.15276004225012,122.02876505412118 +128.1837570812335,123.72881652939944 +131.5316409119889,125.99586867524256 +134.94785443643588,128.69216836337606 +138.16031537790022,131.63503131210587 +140.90055714139967,134.6098543251208 +142.9341175953152,137.38840118556934 +144.0898924653362,139.7509452077142 +144.28377232849027,141.50986085965945 +143.53240673831147,142.53158653970758 +141.95433553918397,142.75372282317767 +139.75774519581202,142.19447363876452 +137.2163489957044,140.95264019155246 +134.63689792691332,139.19777153671973 +132.3231926468278,137.15160228797524 +130.54191361313164,135.0632721706845 +129.49504341233953,133.18175868273178 +129.30226429258488,131.72928603943276 diff --git a/testdata/golden/g_TdOpen.csv b/testdata/golden/g_TdOpen.csv new file mode 100644 index 00000000..ebf5a9db --- /dev/null +++ b/testdata/golden/g_TdOpen.csv @@ -0,0 +1,81 @@ +TdOpen +nan +0 +-1 +-1 +-1 +-1 +0 +0 +0 +1 +0 +1 +1 +1 +0 +0 +0 +-1 +-1 +-1 +-1 +-1 +0 +0 +-1 +0 +0 +0 +0 +0 +0 +0 +1 +1 +1 +1 +0 +0 +0 +0 +-1 +0 +0 +-1 +-1 +-1 +-1 +0 +0 +0 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +-1 +-1 +-1 +0 +0 +-1 +-1 +-1 +-1 +0 +0 +0 +1 +1 +1 +1 +1 +0 +0 +0 diff --git a/testdata/golden/g_TdPressure.csv b/testdata/golden/g_TdPressure.csv new file mode 100644 index 00000000..b935a270 --- /dev/null +++ b/testdata/golden/g_TdPressure.csv @@ -0,0 +1,81 @@ +TdPressure +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +2.4192914689570926 +1.8557506722088564 +0.8872268850895462 +-0.48945166132781287 +-1.946733987297704 +-3.031682582368659 +-3.1239976832596983 +-2.8273734055347046 +-2.109318953164966 +-0.6200240473841117 +1.3303152804931602 +2.296040916153717 +2.7514546397437543 +2.8315613623647518 +2.361490018218886 +1.0299979777563897 +-0.4416791318938638 +-1.5773757215941706 +-2.3166369431949683 +-2.0917347862303965 +-1.5105509801775103 +-0.5270779714046236 +1.0796077562384336 +2.827011502606916 +3.478439818443532 +3.6379407015859964 +3.4103615900363224 +2.641440016854244 +0.7733986280447294 +-0.7318869058556016 +-1.6354976485785973 +-2.1588875341383535 +-2.189898047105421 +-1.3837369724584718 +-0.17607721880294316 +1.3113053981039382 +2.588628686150847 +2.891127233929697 +2.747289585402078 +2.2227722292006757 +1.1331409202249378 +-0.8997043027554776 +-2.2080647287505086 +-2.843073175561196 +-3.0780819511958115 +-2.9069172372304504 +-1.7121498106622524 +-0.22955671974651798 +1.086620521650965 +1.9895794477965454 +2.3150429725426878 +1.8764737343599516 +1.0790568293215246 +-0.25806714711746437 +-2.105240785151469 +-3.081602162688693 +-3.4168167934933047 +-3.3532123305228962 +-2.850057675959287 +-1.4397578250324063 +0.29371449071093897 +1.4101934472057542 +2.0789677449960995 +2.398591224633889 +1.7617415954238138 +0.7269033417663883 +-0.6974930601175998 diff --git a/testdata/golden/g_TdPropulsion.csv b/testdata/golden/g_TdPropulsion.csv new file mode 100644 index 00000000..cb98d923 --- /dev/null +++ b/testdata/golden/g_TdPropulsion.csv @@ -0,0 +1,81 @@ +TdPropulsion +0 +1 +1 +1 +1 +0 +0 +0 +0 +-1 +-1 +-1 +-1 +0 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +-1 +-1 +-1 +-1 +-1 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +0 +0 +0 +-1 +-1 +-1 +-1 +0 +0 +0 +0 +1 +1 +1 +1 +1 +1 +1 +1 +0 +0 +0 +-1 +-1 +-1 +-1 +-1 +0 +0 +0 +0 diff --git a/testdata/golden/g_TdRangeProjection.csv b/testdata/golden/g_TdRangeProjection.csv new file mode 100644 index 00000000..a28c108f --- /dev/null +++ b/testdata/golden/g_TdRangeProjection.csv @@ -0,0 +1,81 @@ +high,low +102,99 +105.87715661298687,102.35535636385879 +109.15566318437577,105.62991114851917 +111.51604472209533,108.58209815377876 +112.11221131548481,109.36107632878176 +113.46321748073643,110.31129063749988 +113.9513665001856,110.08979823117156 +113.34593516329022,109.42702586337508 +111.7392702754114,108.45436001667545 +109.38340017717478,107.15579047725964 +108.54577112236939,105.60512233818737 +106.5180041211209,102.82116611295264 +104.19582989144287,100.38106069670421 +101.84995599278629,98.5542700047089 +100.43605274997472,97.31567136637949 +100.0577883022453,96.83145722443861 +98.85589836083372,95.73122059787377 +100.19739340612433,96.97724439120248 +102.23632601718776,99.29157270808194 +105.15912309267097,101.49238117427798 +108.37303262147267,104.54335373670136 +111.61734417662724,108.2960604174883 +115.84496525168709,113.53742119695333 +119.31260358614647,116.44722741020946 +122.5242808930439,118.79285990072991 +124.6106184114378,120.63719412679106 +125.39278146127586,121.88050185741939 +125.03417545596093,122.38883210484423 +124.62583040503782,121.80712956676186 +122.05534603567516,118.70765536305055 +120.21019271848101,116.61384916708613 +117.80553412931202,114.54002801516539 +115.33495084871224,111.97973568526743 +112.99963643295305,109.40205200763066 +110.88178440452634,107.63482262073087 +110.75628052928784,107.94548303621126 +110.07120210785124,107.34367732708166 +111.0448600660234,107.41117050402292 +112.54705063285498,108.56370124079046 +114.39856757116318,110.77542470075386 +116.54149119213325,113.862503342012 +118.51069575729137,116.01820464077228 +122.33573375437604,118.88544988594158 +125.95756428818103,122.10807642850591 +129.06514432138096,125.4874684505406 +131.49549019948594,128.53821110370066 +133.37991556890282,130.14091309138908 +134.27310701666508,131.21495979391582 +135.98199196005606,132.74004669819266 +135.0516848080185,131.99059298126224 +133.819616809625,130.40023132826536 +132.11631329121323,128.2733315073158 +129.62348635251408,126.01324680571167 +126.61541366388943,123.84936932025197 +122.94702881463039,120.55417290890405 +121.41908370889153,117.98622214734023 +120.3550219520687,116.39485866684733 +119.84866593796067,116.06604725857304 +120.0070316780754,117.0205872766375 +121.15416429028625,118.37252834846488 +124.75464441816374,121.68387142036052 +127.80044606174987,124.2327181256915 +130.9000925387063,127.43540621134142 +134.090534278967,130.97663510858277 +137.89744352149683,134.33364342359747 +141.03820777162838,137.5718850589695 +141.84286377786322,139.03163491391754 +143.7922689014923,141.079210165369 +145.03679550244195,141.72989977316556 +145.34147968334463,141.42001615749956 +144.55684065109617,140.69939579324517 +142.80207317621594,139.67846713092206 +140.4100148182745,138.14793890100148 +139.6475463243078,136.54338830509005 +137.5588493177161,133.7940932686894 +135.20915511603803,131.44120724824378 +132.89678804688316,129.73611602243327 +131.7510644245193,128.58179051760987 +131.4612549288315,128.26515993799416 +130.44631918169958,127.26968855349816 diff --git a/testdata/golden/g_TdRei.csv b/testdata/golden/g_TdRei.csv new file mode 100644 index 00000000..4914c4d5 --- /dev/null +++ b/testdata/golden/g_TdRei.csv @@ -0,0 +1,81 @@ +TdRei +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-0.6127296876505055 +-0.55855424199639 +-0.4955307141267313 +3.2659283365592158 +9.316219268753107 +9.225880189875834 +9.375896646054871 +9.726762765785775 +10.244478120806724 +10.805144176554515 +7.731808837694193 +1.896966572765876 +-1.6805615096520927 +-7.891856253952477 +-7.890621978378864 +-8.071870455153345 +-8.480987771404447 +-9.199507193817638 +-10.374709917974585 +-7.776446327364976 +0.7111864170961577 +0.6749809446141355 +0.6032792488736775 +0.5255100411536284 +3.1894283738078535 +7.7523674275669405 +7.548966428162842 +7.606132244790062 +7.904729370612085 +8.43484019562584 +8.852537177493533 +4.3907225783486 +-1.9683040958679554 +-4.266141941139769 +-9.678380630632947 +-9.802802595799497 +-10.251434310244953 +-11.078697253610487 +-12.388020961086001 +-14.251667553160278 +-12.19455600421726 +-4.4793102375922675 +-4.2591255466175975 +-3.7736652052837925 +-3.3426956997382105 +1.5194530813707054 +7.722667747138295 +7.4746673970359465 +7.423174867907075 +7.558667343299207 +7.883337978916065 +8.211657861603898 +3.55674091465814 +-3.5214537029018533 +-5.607569615598278 +-10.080214702657706 +-9.976031958606287 +-10.199710461530703 +-10.821305944782303 +-11.968051427534219 +-13.572566504974485 diff --git a/testdata/golden/g_TdRiskLevel.csv b/testdata/golden/g_TdRiskLevel.csv new file mode 100644 index 00000000..5f305b88 --- /dev/null +++ b/testdata/golden/g_TdRiskLevel.csv @@ -0,0 +1,81 @@ +buy_risk,sell_risk +nan,nan +nan,nan +nan,nan +NaN,NaN +NaN,NaN +NaN,NaN +NaN,NaN +NaN,NaN +NaN,NaN +NaN,NaN +NaN,NaN +NaN,NaN +NaN,NaN +NaN,NaN +93.07186250562944,NaN +92.71188454772148,NaN +92.71188454772148,NaN +92.71188454772148,NaN +92.71188454772148,NaN +92.71188454772148,NaN +92.71188454772148,NaN +92.71188454772148,NaN +92.71188454772148,NaN +92.71188454772148,122.83545306981419 +92.71188454772148,125.47652666668256 +92.71188454772148,127.3412370551282 +92.71188454772148,127.80012946880566 +92.71188454772148,127.80012946880566 +92.71188454772148,127.80012946880566 +92.71188454772148,127.80012946880566 +92.71188454772148,127.80012946880566 +92.71188454772148,127.80012946880566 +92.71188454772148,127.80012946880566 +92.71188454772148,127.80012946880566 +92.71188454772148,127.80012946880566 +104.37459422021398,127.80012946880566 +103.76919217405869,127.80012946880566 +102.63417732808526,127.80012946880566 +102.63417732808526,127.80012946880566 +102.63417732808526,127.80012946880566 +102.63417732808526,127.80012946880566 +102.63417732808526,127.80012946880566 +102.63417732808526,127.80012946880566 +102.63417732808526,127.80012946880566 +102.63417732808526,135.64436260000252 +102.63417732808526,136.985537119839 +102.63417732808526,138.107904621213 +102.63417732808526,138.11126736860027 +102.63417732808526,138.3074061546194 +102.63417732808526,138.3074061546194 +102.63417732808526,138.3074061546194 +102.63417732808526,138.3074061546194 +102.63417732808526,138.3074061546194 +102.63417732808526,138.3074061546194 +102.63417732808526,138.3074061546194 +102.63417732808526,138.3074061546194 +113.66538766950968,138.3074061546194 +113.47274456796245,138.3074061546194 +113.47274456796245,138.3074061546194 +113.47274456796245,138.3074061546194 +113.47274456796245,138.3074061546194 +113.47274456796245,138.3074061546194 +113.47274456796245,138.3074061546194 +113.47274456796245,138.3074061546194 +113.47274456796245,138.3074061546194 +113.47274456796245,144.67623897860489 +113.47274456796245,146.5425816641148 +113.47274456796245,148.04984715794035 +113.47274456796245,149.3825577327336 +113.47274456796245,150.49289564751314 +113.47274456796245,150.49289564751314 +113.47274456796245,150.49289564751314 +113.47274456796245,150.49289564751314 +113.47274456796245,150.49289564751314 +113.47274456796245,150.49289564751314 +113.47274456796245,150.49289564751314 +113.47274456796245,150.49289564751314 +124.44618080650704,150.49289564751314 +124.20338046635754,150.49289564751314 +124.20338046635754,150.49289564751314 diff --git a/testdata/golden/g_TdSequential.csv b/testdata/golden/g_TdSequential.csv new file mode 100644 index 00000000..0abf487a --- /dev/null +++ b/testdata/golden/g_TdSequential.csv @@ -0,0 +1,81 @@ +setup,countdown,direction +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +1,0,0 +2,0,0 +3,0,0 +-1,0,0 +-2,0,0 +-3,0,0 +-4,0,0 +-5,0,0 +-6,0,0 +-7,-1,-1 +-7,-2,-1 +-7,-3,-1 +-7,-4,-1 +-7,-5,-1 +-7,-6,-1 +1,-7,-1 +2,-8,-1 +3,-9,-1 +4,-10,-1 +5,-11,-1 +6,-12,-1 +7,1,1 +7,2,1 +7,3,1 +-1,4,1 +-2,5,1 +-3,6,1 +-4,7,1 +-5,7,1 +-6,7,1 +-7,-1,-1 +-7,-2,-1 +-7,-3,-1 +-7,-4,-1 +-7,-5,-1 +-7,-6,-1 +1,-7,-1 +2,-8,-1 +3,-9,-1 +4,-10,-1 +5,-11,-1 +6,-12,-1 +7,1,1 +7,2,1 +7,3,1 +-1,4,1 +-2,5,1 +-3,6,1 +-4,7,1 +-5,7,1 +-6,7,1 +-7,-1,-1 +-7,-2,-1 +-7,-3,-1 +-7,-4,-1 +-7,-5,-1 +-7,-6,-1 +1,-7,-1 +2,-8,-1 +3,-9,-1 +4,-10,-1 +5,-11,-1 +6,-12,-1 +7,1,1 +7,2,1 +7,3,1 diff --git a/testdata/golden/g_TdSetup.csv b/testdata/golden/g_TdSetup.csv new file mode 100644 index 00000000..c5f085e5 --- /dev/null +++ b/testdata/golden/g_TdSetup.csv @@ -0,0 +1,81 @@ +TdSetup +nan +nan +nan +-1 +-2 +-3 +-4 +-5 +1 +2 +3 +4 +5 +6 +7 +7 +7 +-1 +-2 +-3 +-4 +-5 +-6 +-7 +-7 +-7 +-7 +-7 +-7 +1 +2 +3 +4 +5 +6 +7 +7 +7 +-1 +-2 +-3 +-4 +-5 +-6 +-7 +-7 +-7 +-7 +-7 +-7 +1 +2 +3 +4 +5 +6 +7 +7 +7 +-1 +-2 +-3 +-4 +-5 +-6 +-7 +-7 +-7 +-7 +-7 +-7 +1 +2 +3 +4 +5 +6 +7 +7 +7 diff --git a/testdata/golden/g_TdTrap.csv b/testdata/golden/g_TdTrap.csv new file mode 100644 index 00000000..1d024e00 --- /dev/null +++ b/testdata/golden/g_TdTrap.csv @@ -0,0 +1,81 @@ +TdTrap +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Tema.csv b/testdata/golden/g_Tema.csv new file mode 100644 index 00000000..b30664d7 --- /dev/null +++ b/testdata/golden/g_Tema.csv @@ -0,0 +1,81 @@ +Tema +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +109.50047332307872 +110.76909873098137 +112.88624124968183 +115.70385879668704 +119.01195772632528 +122.55723759305363 +126.06562516832366 +129.2666810758219 +131.9176957899851 +133.82532003435836 +134.86279531116156 +134.9812436929907 +134.21400698380188 +132.6736464895992 +130.5418704547131 +128.05328814277723 +125.47444113100042 +123.07998437552111 +121.12814430386852 +119.83764585005596 +119.36816919577825 +119.80608173551829 +121.15671960612173 +123.34390810315595 +126.2167637065033 +129.56317001614914 +133.12872375721955 +136.63945840336788 +139.8263155363412 +142.4491779492521 +144.3183176570429 +145.31134290255005 +145.3841303129025 +144.57476565359391 +143.0001411518871 +140.84551333051945 +138.34795411131438 +135.7751734458852 +133.40160517955238 +131.48389232278674 +130.23796155438862 diff --git a/testdata/golden/g_TermStructureBasis.csv b/testdata/golden/g_TermStructureBasis.csv new file mode 100644 index 00000000..84662bbf --- /dev/null +++ b/testdata/golden/g_TermStructureBasis.csv @@ -0,0 +1,81 @@ +TermStructureBasis +0.01507537688442211 +0.014569443504462066 +0.01413142273759724 +0.013782550248243368 +0.013535415173723708 +0.013395853284993663 +0.013364400955277708 +0.013436996035220744 +0.013604870611204713 +0.013853767177213013 +0.01416280807750735 +0.01450360777872731 +0.01484049501742423 +0.015132814904178171 +0.015339894906259779 +0.015428178417146889 +0.015378565865062943 +0.015191126677715714 +0.014885034671936609 +0.014493713628801013 +0.014057336781755648 +0.013615551769773047 +0.013202434000875288 +0.01284418150251581 +0.012558956068597395 +0.012357884353848663 +0.012246354180282524 +0.012225048660780825 +0.01229044896351255 +0.01243474945007201 +0.012645296047803126 +0.01290383140017899 +0.013186032783748183 +0.013462013300648936 +0.013698473370898365 +0.013862826467031695 +0.013928787423358915 +0.013881887004165058 +0.013722853198194876 +0.013467389021211296 +0.01314241541320829 +0.01278034952497843 +0.01241349547348677 +0.012070030860623365 +0.011772024374750797 +0.011535103557524708 +0.011369066238763714 +0.011278781146854872 +0.011264933547944648 +0.011324389776748961 +0.011450130091050045 +0.011630845727990658 +0.011850443935030222 +0.012087862885892631 +0.012317720307967652 +0.012512288466950353 +0.01264496081239294 +0.01269472115956207 +0.012650391416853275 +0.012513120475843196 +0.012296076988714048 +0.012021454535676225 +0.011715979959496534 +0.011406477461677438 +0.011116615953254031 +0.010865203491896952 +0.010665776439335166 +0.010526962511644181 +0.010453112532272758 +0.010444844009219344 +0.010499308151265162 +0.010610137666879004 +0.010767159781518003 +0.010956084610782105 +0.011158502860247175 +0.011352605855686149 +0.011514984041448828 +0.011623570544987983 +0.011661277719023071 +0.01161933705894293 diff --git a/testdata/golden/g_ThreeDrives.csv b/testdata/golden/g_ThreeDrives.csv new file mode 100644 index 00000000..bf3cfa29 --- /dev/null +++ b/testdata/golden/g_ThreeDrives.csv @@ -0,0 +1,81 @@ +ThreeDrives +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_ThreeInside.csv b/testdata/golden/g_ThreeInside.csv new file mode 100644 index 00000000..a3aca38e --- /dev/null +++ b/testdata/golden/g_ThreeInside.csv @@ -0,0 +1,81 @@ +ThreeInside +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_ThreeLineBreak.csv b/testdata/golden/g_ThreeLineBreak.csv new file mode 100644 index 00000000..773536ce --- /dev/null +++ b/testdata/golden/g_ThreeLineBreak.csv @@ -0,0 +1,81 @@ +ThreeLineBreak +nan +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 diff --git a/testdata/golden/g_ThreeLineBreakBars.csv b/testdata/golden/g_ThreeLineBreakBars.csv new file mode 100644 index 00000000..fe82da12 --- /dev/null +++ b/testdata/golden/g_ThreeLineBreakBars.csv @@ -0,0 +1,81 @@ +bars + +100,103.4552020666134,1 +103.4552020666134,106.64642473395035,1 +106.64642473395035,109.33326909627483,1 +109.33326909627483,111.32039085967226,1 +111.32039085967226,112.47494986604055,1 +112.47494986604055,112.73847630878196,1 + + +112.73847630878196,108.7737988023383,-1 +108.7737988023383,106.41120008059868,-1 +106.41120008059868,103.92254305856751,-1 +103.92254305856751,101.57479556705148,-1 +101.57479556705148,99.62233840816026,-1 +99.62233840816026,98.28424227586412,-1 +98.28424227586412,97.72469882334903,-1 + + + +97.72469882334903,103.99314457402363,1 +103.99314457402363,107.20584501801073,1 +107.20584501801073,110.6681390048435,1 +110.6681390048435,114.11541363513378,1 +114.11541363513378,117.28439764388199,1 +117.28439764388199,119.93667863849153,1 +119.93667863849153,121.87999976774739,1 +121.87999976774739,122.98543345374605,1 +122.98543345374605,123.19889810845086,1 + + +123.19889810845086,119.12118485241757,-1 +119.12118485241757,116.74454423507063,-1 +116.74454423507063,114.2567321877702,-1 +114.2567321877702,111.92464106224679,-1 +111.92464106224679,110.00125312406458,-1 +110.00125312406458,108.7030424002833,-1 +108.7030424002833,108.19063769933508,-1 + + + +108.19063769933508,114.63427081999565,1 +114.63427081999565,117.86768208634197,1 +117.86768208634197,121.33623047221137,1 +121.33623047221137,124.77474439137693,1 +124.77474439137693,127.92073514707224,1 +127.92073514707224,130.5378442655162,1 +130.5378442655162,132.43695669444105,1 +132.43695669444105,133.49309388747918,1 +133.49309388747918,133.65657776549278,1 + + +133.65657776549278,129.46740573130614,-1 +129.46740573130614,127.07753652299444,-1 +127.07753652299444,124.59141418625812,-1 +124.59141418625812,122.27578013601534,-1 +122.27578013601534,120.38214657630877,-1 +120.38214657630877,119.12432966418496,-1 +119.12432966418496,118.65934994918358,-1 + + +118.65934994918358,122.49012753228324,1 +122.49012753228324,125.27691410373268,1 +125.27691410373268,128.53026338263376,1 +128.53026338263376,132.0042268780681,1 +132.0042268780681,135.43314928819893,1 +135.43314928819893,138.555398697196,1 +138.555398697196,141.13673737507105,1 +141.13673737507105,142.99124553647894,1 +142.99124553647894,143.9979290014267,1 +143.9979290014267,144.11152724502116,1 + + +144.11152724502116,139.81250491654941,-1 +139.81250491654941,137.41022416199849,-1 +137.41022416199849,134.9266357939324,-1 +134.9266357939324,132.6282548753949,-1 +132.6282548753949,130.76505243955756,-1 +130.76505243955756,129.54812632180318,-1 +129.54812632180318,129.13084441879352,-1 + diff --git a/testdata/golden/g_ThreeLineStrike.csv b/testdata/golden/g_ThreeLineStrike.csv new file mode 100644 index 00000000..ce10e59c --- /dev/null +++ b/testdata/golden/g_ThreeLineStrike.csv @@ -0,0 +1,81 @@ +ThreeLineStrike +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_ThreeOutside.csv b/testdata/golden/g_ThreeOutside.csv new file mode 100644 index 00000000..f1a77675 --- /dev/null +++ b/testdata/golden/g_ThreeOutside.csv @@ -0,0 +1,81 @@ +ThreeOutside +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_ThreeSoldiersOrCrows.csv b/testdata/golden/g_ThreeSoldiersOrCrows.csv new file mode 100644 index 00000000..6ea44c1d --- /dev/null +++ b/testdata/golden/g_ThreeSoldiersOrCrows.csv @@ -0,0 +1,81 @@ +ThreeSoldiersOrCrows +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_ThreeStarsInSouth.csv b/testdata/golden/g_ThreeStarsInSouth.csv new file mode 100644 index 00000000..dea7d051 --- /dev/null +++ b/testdata/golden/g_ThreeStarsInSouth.csv @@ -0,0 +1,81 @@ +ThreeStarsInSouth +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Thrusting.csv b/testdata/golden/g_Thrusting.csv new file mode 100644 index 00000000..f5f91241 --- /dev/null +++ b/testdata/golden/g_Thrusting.csv @@ -0,0 +1,81 @@ +Thrusting +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_TickBars.csv b/testdata/golden/g_TickBars.csv new file mode 100644 index 00000000..199d6e9e --- /dev/null +++ b/testdata/golden/g_TickBars.csv @@ -0,0 +1,81 @@ +bars + +99,104.77731091023225,98,103.4552020666134,2019.866933079506 + +106.10612242808222,110.76487377959927,104.61339756308799,109.33326909627483,2095.4060815703688 + +111.7365376962194,114.45148509543229,110.1528967845943,112.47494986604055,2155.8827075707422 + +113.7284688053824,115.1642566915892,110.64086736017657,112.13209366648874,2191.7488815955685 + +111.40827542637513,112.72390874531129,107.76539185209613,108.7737988023383,2197.34212339197 + +106.12753789513545,107.73969337995807,101.71978916733775,103.92254305856751,2171.779383064527 + +100.61462528040111,103.00209502109563,97.48620160125755,99.62233840816026,2119.0964552372616 + +97.53034002152081,99.46748184049008,95.93821562552817,97.72469882334903,2047.610815821577 + +98.18385394545021,101.15293363552601,96.54876504706593,99.24185317672267,2031.3915245454414 + +102.1834853863248,106.32510161131832,100.25554360082955,103.99314457402363,2105.437833423757 + +108.04491654708718,112.56654934841096,105.7105413401633,110.6681390048435,2162.837826772152 + +114.11098793714572,118.47543335247398,112.95942875877287,117.28439764388199,2194.5293077522983 + +119.09282467975903,123.36781277048146,117.64904116296829,121.87999976774739,2195.508888349898 + +122.07798667229586,124.2878498649492,120.77557026109272,123.19889810845086,2165.621914327614 + +122.40925186267498,123.88697089091687,119.63330909790388,121.12969230082183,2109.5868817286078 + +119.8808727652764,121.29920058454442,115.60101790940676,116.74454423507063,2036.2504901016423 + +115.21439166809358,116.4131695096543,110.47704737833695,111.92464106224679,2042.8090568363873 + +110.27641646211617,111.76231568498811,107.18792367213928,108.7030424002833,2115.10999498574 + +107.530320991091,109.90155645208623,106.26786689008574,108.55447411796011,2169.2375959660776 + +108.81801012516657,113.29382811110736,107.32068773822765,111.88016416080967,2196.6463017406095 + +114.22618875818226,119.15370942824079,113.09073586402833,117.86768208634197,2193.0088803303156 + +121.88395973243564,127.14038418498515,119.88495316810628,124.77474439137693,2158.8996005962395 + +128.92069597346688,132.45313613345562,126.63187762484937,130.5378442655162,2099.7035678133516 + +132.96978971477444,135.053120145851,131.08387196585088,133.49309388747918,2024.7665339553603 + +133.2323987581558,135.065460892756,131.0237176510951,132.95746831142935,2054.080591047491 + +130.5116755897077,132.71696973631924,127.07925728332546,129.46740573130614,2124.3895798482918 + +126.4306172006658,128.5591966352313,123.1073244542458,124.59141418625812,2175.0601890698463 + +122.56791894474918,123.61827749324543,119.02315927992295,120.38214657630877,2198.092643661719 + +120.08693553049852,121.58571423995242,117.25536324735009,118.65934994918358,2189.8506254815993 + +119.82146372498268,121.93415307848436,117.95421275941922,120.37417550208815,2151.635367974583 + +122.33587608239566,126.75625008370868,120.87761530843784,125.27691410373268,2089.4802200237264 + +127.61552102482923,133.06294250948164,126.34054904004905,132.0042268780681,2019.9227222669447 + +134.59892592769242,140.0546941334019,133.234137558996,138.555398697196,2065.167686192818 + +141.1500141222941,144.5932922665057,139.73776131670974,142.99124553647894,2133.2449404659674 + +144.84649927621132,146.57143212166807,142.649968595823,144.11152724502116,2180.2857484300603 + +144.27024859045207,145.7471249168318,140.60631434563564,141.8742259615024,2198.863400841123 + +139.9404686061768,141.00752471999962,135.67655244818158,137.41022416199849,2186.044894868978 + +134.16122174198705,136.42630679247307,130.25415962109273,132.6282548753949,2143.853990753243 + +129.80997879551026,131.86785162975886,127.6154547134165,129.54812632180318,2078.95170455995 + +128.8642014864336,131.29749357237068,127.39947545719488,129.59514479102842,2019.9660502527124 diff --git a/testdata/golden/g_TickIndex.csv b/testdata/golden/g_TickIndex.csv new file mode 100644 index 00000000..8d2b6b8c --- /dev/null +++ b/testdata/golden/g_TickIndex.csv @@ -0,0 +1,81 @@ +TickIndex +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +3 +3 +3 +3 +3 +3 +3 +5 +5 +5 +5 +5 +5 +3 diff --git a/testdata/golden/g_Tii.csv b/testdata/golden/g_Tii.csv new file mode 100644 index 00000000..2223a84f --- /dev/null +++ b/testdata/golden/g_Tii.csv @@ -0,0 +1,81 @@ +Tii +nan +nan +nan +nan +nan +nan +nan +nan +87.8068004775818 +68.72424340773166 +43.59060231734626 +20.145443320885615 +5.164436772677624 +0 +0 +0 +0.1956520011974337 +9.097328694253893 +28.18114762205339 +53.78767333198406 +77.68735584813493 +93.40630856313474 +100 +100 +100 +99.99999999999999 +100 +100 +97.39503155880503 +86.94358450489241 +67.40115192247707 +42.15909029188965 +19.07485200971091 +4.67047451474278 +0 +0 +0 +0.6239111361114507 +10.07393666091887 +29.60148695156409 +55.23049344601891 +78.7014496222849 +93.8510028464459 +100 +100 +100 +100 +100 +100 +97.02479518985552 +86.06867341935474 +66.06990669523086 +40.732531366421235 +18.01744811872994 +4.185344817992002 +0 +0 +0 +1.0569153157930138 +11.056705553211987 +31.01911932202392 +56.65676674210463 +79.69606556715885 +94.28532290914708 +100 +100 +100 +99.99999999999999 +100 +100 +96.64785660917853 +85.18135887575231 +64.7296828764942 +39.31005829559597 +16.97233386723327 +3.708494872091228 +0 +0 +0 +1.4950520055535297 diff --git a/testdata/golden/g_TimeBasedStop.csv b/testdata/golden/g_TimeBasedStop.csv new file mode 100644 index 00000000..dad6d559 --- /dev/null +++ b/testdata/golden/g_TimeBasedStop.csv @@ -0,0 +1,81 @@ +TimeBasedStop +0.07142857142857142 +0.14285714285714285 +0.21428571428571427 +0.2857142857142857 +0.35714285714285715 +0.42857142857142855 +0.5 +0.5714285714285714 +0.6428571428571429 +0.7142857142857143 +0.7857142857142857 +0.8571428571428571 +0.9285714285714286 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 diff --git a/testdata/golden/g_TimeOfDayReturnProfile.csv b/testdata/golden/g_TimeOfDayReturnProfile.csv new file mode 100644 index 00000000..d2a9dbfe --- /dev/null +++ b/testdata/golden/g_TimeOfDayReturnProfile.csv @@ -0,0 +1,81 @@ +profile +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +0.03455202066613405,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.03269922059020891,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.030197462695043198,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.027191823235230228,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.023827757820251573,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.020246961346029768,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01658615739779084,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.01297735291771257,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.00954821622392125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0064213653557427365,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0037114983379089987,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0015195967567728323,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-0.00007590041586827198,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-0.0010298852181880472,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-0.0013407671755269431,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-0.0010563705733454276,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +-0.00027212522142184377,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0008796671441347511,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.002247372177046216,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.003679672910171661,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.005042343610943414,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.006229039698504705,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0071656027982417774,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.00780929014535874,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.008145034245704084,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.008180604199201457,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.007941903693697003,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0074689916452702065,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0068129137428084114,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.006033101201964408,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.005194889804133368,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.004366615796204967,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0036157797588774482,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.003004001846693305,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.002580979473233179,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.002378346633507682,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.002404956714325021,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0026452367120057157,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.003061582430062202,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.003600457290589873,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.004200600355976889,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.004801240252282936,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.005348623590004026,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.00580009490965307,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.006125844672933778,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0063089429782567956,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.006344383363026338,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.006237722494846098,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.006003674278811874,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.005664795497326864,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0052502202755707605,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.004794269221331266,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.004334682589762182,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.003910228770823491,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.003557559534040414,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.00330745072677284,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.003180946074890931,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0031862651629235906,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.003317414836202402,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0035550933010570513,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0038697821269768327,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.004226225386010642,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.004588164187002954,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.004922346826761778,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.005201292336525303,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.005404763246809321,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.005520211520565706,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.005542563932172715,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.005473670078624767,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.005321626147922717,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0051000652884562025,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.004827397245763467,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.00452589646891607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.004220488924489232,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.003937091726335384,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.003700441743642402,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0035315242799908325,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.0034449527247347876,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +0.003446859407992263,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/testdata/golden/g_TowerTopBottom.csv b/testdata/golden/g_TowerTopBottom.csv new file mode 100644 index 00000000..1f96119a --- /dev/null +++ b/testdata/golden/g_TowerTopBottom.csv @@ -0,0 +1,81 @@ +TowerTopBottom +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_TpoProfile.csv b/testdata/golden/g_TpoProfile.csv new file mode 100644 index 00000000..59211b61 --- /dev/null +++ b/testdata/golden/g_TpoProfile.csv @@ -0,0 +1,81 @@ +profile +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +95.93821562552817,124.2878498649492,2,3,4,6,6,7,6,5,5,4,4,5,5,3,3,5,4,4,4,3,5,4,3,5,4,5,5,6,6,6,4,4,4,2,2,1,1,1,2,2,1,3,3,4,5,5,5,5,4,3 +95.93821562552817,124.2878498649492,2,3,4,5,5,6,5,4,4,4,4,5,5,3,3,5,4,4,4,3,5,4,3,5,4,5,5,6,6,6,4,4,4,2,2,1,1,1,3,3,2,4,4,5,6,5,5,5,4,3 +95.93821562552817,124.2878498649492,2,3,4,5,5,6,5,4,4,3,3,4,4,2,2,4,4,4,4,3,5,4,3,5,4,5,5,6,6,6,4,4,4,2,3,2,2,2,4,4,3,4,4,5,6,5,5,5,4,3 +95.93821562552817,124.2878498649492,2,3,4,5,5,6,5,4,4,3,3,4,4,2,2,3,3,3,3,2,4,3,3,5,4,5,5,6,6,6,5,5,5,3,4,3,3,2,4,4,3,4,4,5,6,5,5,5,4,3 +95.93821562552817,124.2878498649492,2,3,4,5,5,6,5,4,4,3,3,4,4,2,2,3,3,3,3,2,3,2,2,4,3,5,5,7,7,7,6,6,5,3,4,3,3,2,4,4,3,4,4,5,6,5,5,5,4,3 +95.93821562552817,124.2878498649492,2,3,4,5,5,6,5,4,4,3,3,4,4,2,2,3,3,3,3,2,3,2,3,5,4,5,5,7,6,6,6,6,5,3,4,3,3,2,4,4,3,4,4,5,6,5,5,5,4,3 +95.93821562552817,124.2878498649492,2,3,4,5,5,6,5,4,4,3,3,4,4,2,2,3,3,3,3,3,4,3,4,6,5,5,5,6,5,5,5,5,4,3,4,3,3,2,4,4,3,4,4,5,6,5,5,5,4,3 +95.93821562552817,124.2878498649492,2,3,4,5,5,6,5,4,4,3,3,4,4,2,2,3,3,3,4,4,5,4,5,7,5,5,5,5,4,4,4,4,3,2,4,3,3,2,4,4,3,4,4,5,6,5,5,5,4,3 +95.93821562552817,124.2878498649492,2,3,4,5,5,6,5,4,4,3,3,4,4,2,2,3,3,3,5,5,6,5,6,8,6,4,4,4,3,3,3,3,2,2,4,3,3,2,4,4,3,4,4,5,6,5,5,5,4,3 +95.93821562552817,124.2878498649492,2,3,4,5,5,6,5,4,4,3,3,4,4,2,2,3,3,3,5,5,7,6,7,8,6,4,4,4,2,2,3,3,2,2,4,3,3,2,4,4,3,4,4,5,6,5,5,5,4,3 +95.93821562552817,124.2878498649492,2,3,4,5,5,6,5,4,4,3,3,4,4,2,2,3,3,3,5,5,6,5,6,7,6,5,5,5,3,3,4,3,2,2,4,3,3,2,4,4,3,4,4,5,6,5,5,5,4,3 +95.93821562552817,124.2878498649492,2,3,4,5,5,6,5,4,4,3,3,4,4,2,2,2,2,2,4,4,5,5,6,7,6,5,5,5,3,3,5,4,3,3,5,3,3,2,4,4,3,4,4,5,6,5,5,5,4,3 +95.93821562552817,124.2878498649492,2,3,4,5,5,6,5,4,4,3,2,3,3,1,1,1,1,2,4,4,5,5,6,7,6,5,5,5,3,3,5,4,3,3,5,3,4,3,5,5,4,4,4,5,6,5,5,5,4,3 +95.93821562552817,124.2878498649492,2,3,4,5,5,5,4,3,3,2,1,2,2,1,1,1,1,2,4,4,5,5,6,7,6,5,5,5,3,3,5,4,3,3,5,3,4,3,5,5,4,4,5,6,7,6,6,6,5,3 +95.93821562552817,127.14038418498515,3,3,3,4,4,4,2,2,2,1,2,2,1,1,1,2,4,3,5,5,6,7,6,5,5,4,3,5,4,4,3,4,3,3,5,5,5,5,5,6,7,6,6,7,4,3,1,1,1,1 +95.93821562552817,130.20955349568973,2,2,3,3,3,2,2,2,1,2,2,1,1,1,2,4,5,5,6,7,6,5,5,4,5,5,4,3,5,3,3,5,5,4,5,5,7,8,6,7,5,3,1,1,2,2,1,1,1,1 +96.54876504706593,132.45313613345562,1,2,2,2,2,2,2,1,2,2,1,1,2,4,4,5,6,7,7,5,5,4,5,5,4,3,5,3,3,5,5,5,5,6,8,6,6,6,4,1,1,2,2,1,1,2,2,1,1,1 +97.93278462060415,134.3228744433646,1,1,1,2,2,1,2,2,1,1,2,4,5,5,6,7,6,5,5,4,6,5,4,3,4,4,3,5,5,5,5,7,8,6,7,4,3,1,1,2,2,1,1,2,2,2,2,2,1,1 +100.25554360082955,135.053120145851,1,1,1,2,2,1,1,2,4,4,5,6,7,7,5,5,4,3,5,4,3,3,4,4,4,5,5,5,5,7,8,6,6,6,3,1,1,2,2,1,1,1,2,2,2,3,3,2,2,1 +102.65835969292533,135.065460892756,1,1,1,1,2,4,4,5,5,6,8,6,5,5,4,4,5,4,3,5,4,4,3,5,5,5,5,6,7,6,6,7,4,3,1,1,2,2,1,1,1,2,2,2,3,4,3,3,3,2 +105.7105413401633,135.065460892756,2,3,5,5,6,6,7,6,5,5,4,3,5,4,4,3,5,4,4,3,5,5,4,4,5,6,7,6,6,7,6,3,1,1,1,2,2,1,1,1,2,2,1,3,5,5,4,4,4,2 +106.26786689008574,135.065460892756,2,4,4,5,5,7,6,5,5,4,3,5,5,4,3,3,4,3,3,5,5,5,4,5,5,7,8,6,6,7,4,3,1,1,1,2,2,1,1,2,3,3,3,4,6,6,4,4,4,2 +106.26786689008574,135.065460892756,2,4,4,5,5,6,5,4,4,3,2,5,5,4,3,3,4,3,3,5,5,5,4,5,5,7,8,6,6,7,4,3,1,1,1,2,3,2,2,3,4,4,4,4,6,6,4,4,4,2 +106.26786689008574,135.065460892756,2,4,4,5,5,6,5,4,4,3,2,4,4,3,2,2,4,3,3,5,5,5,4,5,5,7,8,6,6,7,4,3,2,2,2,3,4,3,3,3,4,4,4,4,6,6,4,4,4,2 +106.26786689008574,135.065460892756,2,4,4,5,5,6,5,4,4,3,2,4,4,3,2,2,3,2,2,4,4,4,4,5,5,7,8,6,6,8,5,4,3,3,3,3,4,3,3,3,4,4,4,4,6,6,4,4,4,2 +106.26786689008574,135.065460892756,2,4,4,5,5,6,5,4,4,3,2,4,4,3,2,2,3,2,2,3,3,3,3,4,4,7,8,7,7,9,6,4,3,3,3,3,4,3,3,3,4,4,4,4,6,6,4,4,4,2 +106.26786689008574,135.065460892756,2,4,4,5,5,6,5,4,4,3,2,4,4,3,2,2,3,2,2,3,3,3,3,4,4,7,8,7,7,8,6,4,3,3,3,3,4,3,3,3,4,4,4,4,6,6,4,4,4,2 +106.26786689008574,135.065460892756,2,4,4,5,5,6,5,4,4,3,2,4,4,3,2,2,3,2,2,4,4,4,4,5,5,7,8,6,6,7,5,3,3,3,3,3,4,3,3,3,4,4,4,4,6,6,4,4,4,2 +106.26786689008574,135.065460892756,2,4,4,5,5,6,5,4,4,3,2,4,4,3,2,2,3,2,2,5,5,5,5,6,6,8,7,5,5,6,4,2,3,3,3,3,4,3,3,3,4,4,4,4,6,6,4,4,4,2 +106.26786689008574,135.065460892756,2,4,4,5,5,6,5,4,4,3,2,4,4,3,2,2,3,2,2,5,6,6,6,7,7,8,6,4,4,5,3,2,3,3,3,3,4,3,3,3,4,4,4,4,6,6,4,4,4,2 +106.26786689008574,135.065460892756,2,4,4,5,5,6,5,4,4,3,2,4,4,3,2,2,3,2,2,5,6,6,7,7,7,8,6,4,3,4,3,2,3,3,3,3,4,3,3,3,4,4,4,4,6,6,4,4,4,2 +106.26786689008574,135.065460892756,2,4,4,5,5,6,5,4,4,3,2,4,4,3,2,2,3,2,2,4,5,5,6,6,6,8,6,5,4,5,4,2,3,3,3,3,4,3,3,3,4,4,4,4,6,6,4,4,4,2 +106.26786689008574,135.065460892756,2,4,4,5,5,6,5,4,4,3,2,4,4,3,2,2,2,1,1,3,4,4,6,6,6,8,6,5,4,6,5,3,4,4,4,4,4,3,3,3,4,4,4,4,6,6,4,4,4,2 +106.26786689008574,135.065460892756,2,4,4,5,5,6,5,4,4,3,2,3,3,2,1,1,1,0,1,3,4,4,6,6,6,8,6,5,4,6,5,3,4,4,5,5,5,4,4,4,5,4,4,4,6,6,4,4,4,2 +106.26786689008574,135.065460892756,2,4,4,5,5,6,5,3,3,2,1,2,2,1,1,1,1,0,1,3,4,4,6,6,6,8,6,5,4,6,5,3,4,4,5,5,5,4,4,4,5,5,5,5,7,7,5,4,4,2 +106.26786689008574,136.79793765689536,2,4,4,4,4,4,3,2,2,1,1,2,1,1,1,1,0,2,3,4,5,6,6,7,8,6,4,6,5,3,4,4,5,5,5,4,4,4,6,5,6,6,7,6,5,5,3,3,1,1 +106.26786689008574,140.0546941334019,2,3,3,3,3,3,2,2,1,1,2,1,1,1,1,1,3,4,5,6,6,7,6,5,4,6,4,4,4,5,6,4,4,3,5,5,6,6,7,7,5,5,3,1,2,2,1,1,1,1 +106.26786689008574,142.5489901806554,1,2,2,2,3,3,2,1,1,2,1,1,1,1,1,3,4,6,6,6,8,6,4,6,4,4,4,5,6,4,4,4,6,4,5,7,7,5,5,3,1,2,2,1,1,1,2,1,1,1 +107.32068773822765,144.5932922665057,1,1,1,2,2,2,1,2,2,1,1,1,1,3,4,6,6,6,8,6,4,6,4,4,4,5,6,4,4,5,6,6,6,7,7,5,4,3,1,2,1,1,1,2,1,1,2,2,1,1 +109.67068524069803,146.0756620034572,1,1,1,1,2,1,1,1,1,1,3,4,5,6,6,8,6,4,6,5,4,4,5,6,4,4,4,6,5,6,7,7,6,5,3,1,2,2,1,1,1,2,1,1,2,3,2,2,1,1 +113.09073586402833,146.57143212166807,1,1,1,1,1,1,3,4,5,6,6,7,6,5,4,6,4,4,4,5,6,4,4,4,5,5,6,6,7,6,5,5,3,1,1,2,1,1,1,2,2,1,2,2,3,3,3,3,2,2 +116.6612183117217,146.57143212166807,2,3,4,5,6,6,6,8,6,4,5,6,4,4,4,4,5,5,4,4,3,5,5,4,5,7,7,6,5,5,3,1,1,2,1,1,1,1,2,2,1,1,3,5,4,4,4,3,3,2 +117.25536324735009,146.57143212166807,2,3,3,5,6,6,8,6,4,4,6,4,3,4,4,5,6,4,4,4,5,6,5,6,6,7,6,5,5,4,3,1,2,2,1,1,1,1,2,2,2,3,4,6,5,5,4,3,3,2 +117.25536324735009,146.57143212166807,2,3,3,5,5,5,7,5,3,3,5,4,3,4,4,5,6,4,4,4,5,6,5,6,6,7,6,5,5,4,3,1,2,2,1,1,2,2,3,3,3,3,4,6,5,5,4,3,3,2 +117.25536324735009,146.57143212166807,2,3,3,5,5,5,7,5,3,3,4,3,2,3,3,4,5,4,4,4,5,6,5,6,6,7,6,5,5,4,3,2,3,3,2,2,3,2,3,3,3,3,4,6,5,5,4,3,3,2 +117.25536324735009,146.57143212166807,2,3,3,5,5,5,7,5,3,3,4,3,2,3,3,3,4,3,3,3,4,5,4,6,6,7,7,6,6,5,4,3,4,3,2,2,3,2,3,3,3,3,4,6,5,5,4,3,3,2 +117.25536324735009,146.57143212166807,2,3,3,5,5,5,7,5,3,3,4,3,2,3,3,3,4,3,3,3,3,4,4,6,6,7,8,7,7,5,4,3,4,3,2,2,3,2,3,3,3,3,4,6,5,5,4,3,3,2 +117.25536324735009,146.57143212166807,2,3,3,5,5,5,7,5,3,3,4,3,2,3,3,3,4,3,3,4,4,5,5,6,6,6,7,6,6,4,4,3,4,3,2,2,3,2,3,3,3,3,4,6,5,5,4,3,3,2 +117.25536324735009,146.57143212166807,2,3,3,5,5,5,7,5,3,3,4,3,2,3,3,3,4,4,4,5,5,6,6,7,6,5,6,5,5,3,3,3,4,3,2,2,3,2,3,3,3,3,4,6,5,5,4,3,3,2 +117.25536324735009,146.57143212166807,2,3,3,5,5,5,7,5,3,3,4,3,2,3,3,3,4,5,5,6,6,7,7,7,5,4,5,4,4,2,2,3,4,3,2,2,3,2,3,3,3,3,4,6,5,5,4,3,3,2 +117.25536324735009,146.57143212166807,2,3,3,5,5,5,7,5,3,3,4,3,2,3,3,3,4,5,6,7,7,8,8,7,4,3,4,3,3,2,2,3,4,3,2,2,3,2,3,3,3,3,4,6,5,5,4,3,3,2 diff --git a/testdata/golden/g_TradeImbalance.csv b/testdata/golden/g_TradeImbalance.csv new file mode 100644 index 00000000..c2ff6450 --- /dev/null +++ b/testdata/golden/g_TradeImbalance.csv @@ -0,0 +1,81 @@ +TradeImbalance +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-0.01078955902745867 +-0.10860861159801094 +-0.20728628380514097 +-0.20410501079142007 +-0.20168837790907937 +-0.09998687696379076 +0.001856755612861037 +0.10373958467944423 +0.2055586636588744 +0.30720808852299936 +0.3103328937054116 +0.21149658482078693 +0.11352658214880162 +0.015342706162982474 +-0.08338820425155896 +-0.1820063979559166 +-0.17912462094348333 +-0.0802966946471359 +0.01927584275804272 +0.11951398866973695 +0.22033710218531424 +0.32166128616931633 +0.3212345522017277 +0.21952294535241407 +0.11817378079507175 +0.01727914927643627 +-0.08307186579331655 +-0.18279101471861522 +-0.28178962853644257 +-0.2845654188211107 +-0.1859278974713006 +-0.08708497144353414 +0.011300313471714145 +0.10982527975337528 +0.20915090662726682 +0.20639503696956496 +0.10483437813642027 +0.0030603766848322704 +-0.0988243334051983 +-0.2007173128009026 +-0.3025133469573717 +-0.30527902484272873 +-0.20596004046086097 +-0.10746384218624833 +-0.009519364206334048 +0.08915983531257601 +0.18792300273746942 +0.1858473998910705 +0.18184477751701297 +0.08236846768566494 +-0.017774962384933528 +-0.11849975931097241 +-0.219719139247877 +-0.32134326772857535 +-0.32151595493112456 +-0.2200485930005201 +-0.1190420689021315 +-0.018582906299106795 +0.08124552125979506 +0.1803611956041447 +0.18372421024503532 diff --git a/testdata/golden/g_TradeSignAutocorrelation.csv b/testdata/golden/g_TradeSignAutocorrelation.csv new file mode 100644 index 00000000..0b8b9915 --- /dev/null +++ b/testdata/golden/g_TradeSignAutocorrelation.csv @@ -0,0 +1,81 @@ +TradeSignAutocorrelation +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.5789473684210527 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.5789473684210527 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 +0.6842105263157895 diff --git a/testdata/golden/g_TradeVolumeIndex.csv b/testdata/golden/g_TradeVolumeIndex.csv new file mode 100644 index 00000000..a653d763 --- /dev/null +++ b/testdata/golden/g_TradeVolumeIndex.csv @@ -0,0 +1,81 @@ +TradeVolumeIndex +nan +1019.8669330795061 +2058.808767310371 +3115.2730146498743 +4187.008623739826 +5271.155722220616 +6364.359630817338 +7462.904603816184 +8562.861964120335 +9660.246727208154 +8569.316984525585 +7488.467344143626 +6420.921026088511 +5369.370888906365 +4335.872073890774 +3321.7600730847876 +2315.9226587420294 +1290.3685485393462 +2334.6205928688314 +3395.8063819631034 +4471.486631493896 +5558.644208735255 +6653.804416124207 +7753.173516487554 +8852.789977371138 +9948.682404837451 +11037.027870409467 +12114.304319165065 +13177.430982952297 +14223.891200893673 +13195.94965107378 +12187.640710792031 +11175.985790306982 +10144.831653955644 +9095.420318841783 +8029.721658969905 +6950.35487258499 +5860.484063003827 +4763.6920958006785 +5863.5464303381395 +6962.482255000477 +8056.555310668455 +9142.015201477283 +10215.454911264695 +11273.94663055387 +12315.158479078045 +13337.44747048807 +14339.925013033406 +15357.357691155705 +16394.0056040809 +17448.407715169837 +16378.420246410482 +15295.637599501917 +14203.360057340637 +13105.266434333987 +12005.267413678917 +10907.349640763785 +9815.416788197317 +8733.133928700447 +7663.781420222735 +8717.438712022778 +9753.261640246461 +10769.822057791293 +11773.184362513406 +12796.335345023559 +13838.352048706223 +14897.559400176946 +15971.59698917219 +17057.51317065784 +18151.88273760225 +19250.943473171737 +20350.746138443374 +19254.180360788447 +18164.701243574396 +17085.876036836864 +16020.847252821153 +14972.207383935773 +13941.895548261202 +12931.120183031258 +11921.92949800849 diff --git a/testdata/golden/g_TrendLabel.csv b/testdata/golden/g_TrendLabel.csv new file mode 100644 index 00000000..99b0e9c6 --- /dev/null +++ b/testdata/golden/g_TrendLabel.csv @@ -0,0 +1,81 @@ +TrendLabel +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 diff --git a/testdata/golden/g_TrendStrengthIndex.csv b/testdata/golden/g_TrendStrengthIndex.csv new file mode 100644 index 00000000..10c146d9 --- /dev/null +++ b/testdata/golden/g_TrendStrengthIndex.csv @@ -0,0 +1,81 @@ +TrendStrengthIndex +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-0.030492265033195146 +-0.33681388284648267 +-0.6664900280192584 +-0.8531656114655082 +-0.9080013433327186 +-0.8464702259943148 +-0.651540234743138 +-0.31588873706193843 +-0.021956541719370323 +0.09622128074358251 +0.40306509985354666 +0.6666467008763588 +0.8322529726299988 +0.9236700718984958 +0.9631406005558371 +0.9608825682934461 +0.9163109755863936 +0.8179028732449519 +0.6421938867386522 +0.3679632330835145 +0.06946173268966206 +-0.04034262195568837 +-0.35771398824783096 +-0.6809483851111836 +-0.8594509192664955 +-0.9076457512974493 +-0.8393588755687826 +-0.6361013147896836 +-0.2950016727215827 +-0.014779156584311405 +0.11075259247344983 +0.4203118126872361 +0.6783887440750297 +0.839079337696686 +0.9271083728960164 +0.964076654824626 +0.9595587964912472 +0.9123843009782592 +0.810368785344665 +0.6294770488878819 +0.35016108960953857 +0.05738611789261552 +-0.05145563922460354 +-0.37853037105847165 +-0.6949144852192201 +-0.8653318380047905 +-0.9069341810370065 +-0.8318255070632609 +-0.6201772579363085 +-0.2742201008015842 +-0.008994929550696987 +0.1259495892068626 +0.4373253828075658 +0.6898127397825891 +0.8456799837291501 +0.9303895504622017 +0.9648850926673308 +0.9581038189276306 +0.9082887415823332 +0.8025882895402844 +0.6164301871208617 +0.33223216100929776 +0.04627981209113957 +-0.0637718129578644 +-0.3992088662232614 +-0.7083888164875478 +-0.8708138287844143 diff --git a/testdata/golden/g_Trendflex.csv b/testdata/golden/g_Trendflex.csv new file mode 100644 index 00000000..2033c6c7 --- /dev/null +++ b/testdata/golden/g_Trendflex.csv @@ -0,0 +1,81 @@ +Trendflex +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-5 +-4.234288238727264 +-3.6636427357334 +-3.1710783963719296 +-2.6953895181238408 +-2.188536758027753 +-1.6028750737231081 +-0.888520661671928 +-0.013969236212364648 +0.9661744183802665 +1.8499866010110322 +2.4192553164701223 +2.6438466471259376 +2.6284100732469198 +2.473492970178106 +2.236046772913722 +1.941352358563961 +1.5982189821810586 +1.2091136926717592 +0.777855579856412 +0.3173047478601409 +-0.1438126711569876 +-0.5603972143951567 +-0.8823500001320378 +-1.072728085400374 +-1.117560551796016 +-1.0208201572365727 +-0.7935265928429699 +-0.4480176841979411 +-0.0018754117395423475 +0.5098882325805613 +1.0243574494658063 +1.4612409324217797 +1.7581713631069238 +1.8971612348020097 +1.8962706040255493 +1.7851267869479983 +1.5889823483754688 +1.3249489593995776 +1.004741927416264 +0.6399387216868502 +0.24801457030095458 +-0.142942040394484 +-0.49462603471980776 +-0.7666648931500489 +-0.9285735208392953 +-0.966478134401354 +-0.8806258175139093 +-0.678672727072909 +-0.3718765928965929 +0.022271182027551954 +0.4720207062480875 +0.9251595152364489 +1.316899755220988 +1.5940899535941717 +1.7354345180751978 +1.7492159355841346 +1.656868077871702 +1.479566327662423 +1.2334586175227573 +0.9309325547710205 +0.5848058500593384 +0.2134890949966412 +-0.15517186913878486 +-0.4847817692826075 +-0.737918901626828 diff --git a/testdata/golden/g_TreynorRatio.csv b/testdata/golden/g_TreynorRatio.csv new file mode 100644 index 00000000..06e90f22 --- /dev/null +++ b/testdata/golden/g_TreynorRatio.csv @@ -0,0 +1,81 @@ +TreynorRatio +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +121.63539435940507 +119.98035550386908 +116.86822235801861 +114.24846185883868 +112.41581488975174 +111.2894204467096 +110.80053523114796 +110.6237745799344 +109.62176232680429 +107.1261344240734 +104.71199649033072 +103.38630804606426 +102.96218110867439 +103.11253404427336 +103.61884811912816 +104.32832903010696 +105.1021630637493 +105.77761566709877 +106.14322501850418 +106.00656253896926 +105.71995170157342 +106.8925399203033 +109.78104051178342 +112.4330129233412 +114.2557960491601 +115.61467866818568 +116.98634773320606 +118.8584065487948 +121.47572638249719 +123.77694712439651 +123.96420637863426 +122.96613075666559 +122.39425824994234 +122.5613943424949 +123.26208596775156 +124.23813088235016 +125.25347683962836 +126.08725096975465 +126.51580620856892 +126.28311343424299 +125.07870690231276 +122.78510743787977 +120.38499304310054 +119.03597847589647 +117.98651613727644 +116.51597775605902 +114.53812441104449 +112.02472236040887 +108.80655742889199 +105.13070239037872 +103.69106507107252 +107.23615339679696 +112.57486714622081 +117.26394524946258 +121.34331334687883 +125.16640629610092 +128.91058644368584 +132.64589015669037 +136.43927339985547 +140.44973108616702 +145.00566479739152 +150.45384844406487 +155.94580598626186 +157.95243487550115 +155.2541349965131 +151.37221057425108 +148.349557096835 diff --git a/testdata/golden/g_Triangle.csv b/testdata/golden/g_Triangle.csv new file mode 100644 index 00000000..17740b19 --- /dev/null +++ b/testdata/golden/g_Triangle.csv @@ -0,0 +1,81 @@ +Triangle +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Trima.csv b/testdata/golden/g_Trima.csv new file mode 100644 index 00000000..7e2f465c --- /dev/null +++ b/testdata/golden/g_Trima.csv @@ -0,0 +1,81 @@ +Trima +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +109.2555275344071 +108.7800781963135 +107.85530695377969 +106.60848437857454 +105.1956489288647 +103.78766849846822 +102.5549772967874 +101.65235146847871 +101.20508340141289 +101.29778973081868 +101.96685278726737 +103.19717067143867 +104.92350626180966 +107.03631465242798 +109.39152847310822 +111.82342699854185 +114.15943948713098 +116.23556041137638 +117.91099958319926 +119.0807585221338 +119.68500965687538 +119.71444054404358 +119.21108572101465 +118.26457188588704 +117.0041118114711 +115.58696215312209 +114.184376180067 +112.96630623089989 +112.08622237733593 +111.66740339977758 +111.7919246610164 +112.49332655851592 +113.75361846059795 +115.50488575598978 +117.63535646378239 +119.99938549160004 +122.43046467793448 +124.75609647030939 +126.81320261790202 +128.4626914660012 +129.60188259927276 +130.17367897745333 +130.1716672439077 +129.64069061167643 +128.67284315280935 +127.39924330918858 +125.97832147261887 +124.58166786977323 +123.37870491828295 +122.52155322675318 +122.13144311384961 +122.28788546498639 +123.0215692617355 +124.31162022650237 +126.08746545957463 +128.23513750606955 +130.607454729255 +133.0371686078149 +135.35190354815012 +137.38955468277712 +139.01276821535097 +140.12121082621897 +140.66053214904719 +140.62721972717617 +140.06891277091327 +139.0801466887575 +137.79390852090842 diff --git a/testdata/golden/g_Trin.csv b/testdata/golden/g_Trin.csv new file mode 100644 index 00000000..c0551127 --- /dev/null +++ b/testdata/golden/g_Trin.csv @@ -0,0 +1,81 @@ +Trin +0.000980392156862745 +0.0009616615051298513 +0.0009443389312561479 +0.0009289672206685117 +0.9772050804288697 +0.9774601583196288 +0.9776427181055256 +0.9777489992828032 +0.9777769354802559 +0.9777259984078704 +0.0009001469324111304 +0.0009083892689041826 +0.0009195010671254202 +0.0009332274480685507 +0.0009492179637479718 +0.000967013243459703 +0.975747872892313 +0.9762030344204007 +0.9766191702577691 +0.9769836797249516 +0.9772867733288962 +0.9775211709998767 +0.0008967321407041693 +0.0008933603756575027 +0.0008931630026328975 +0.0008961437280030181 +0.0009022457627720809 +0.0009113473647721883 +0.0009232530538057539 +0.976667355837034 +0.9762569916589612 +0.9758058804821884 +0.9758839711209758 +0.9763292126219694 +0.9767314442960985 +0.00092106588776485 +0.0009096145275484751 +0.0009010057669481144 +0.0008954219132721396 +0.0008929732815768718 +0.0008937063037567596 +0.9776600822677503 +0.9774868050553445 +0.9772404440796861 +0.9769264503318943 +0.9765525021743058 +0.9761288429411054 +0.975668567959093 +0.000963917968932645 +0.0009463890362794826 +0.0009307502188230732 +0.0009174417400763515 +0.0009067970037462085 +0.00089905618165848 +0.9777400570283071 +0.9777777584326759 +0.9777365710980785 +0.9776172757900751 +0.9774222098846906 +0.9771554414082022 +0.0009313959003840478 +0.0009471285130001872 +0.0009647291012409803 +0.0009771710325714431 +0.0009586340009896565 +0.0009416047756427803 +0.9769416800521712 +0.9772528253352505 +0.9774960519824574 +0.9776659999179328 +0.9777592089031256 +0.9777738791239772 +0.977709733572406 +0.0009013238595342316 +0.0009100628506412329 +0.0009216345360894312 +0.0009357689424810875 +0.0009520981922075962 +0.0009701434800752354 +0.9758265082425783 diff --git a/testdata/golden/g_TripleTopBottom.csv b/testdata/golden/g_TripleTopBottom.csv new file mode 100644 index 00000000..d8ddd00d --- /dev/null +++ b/testdata/golden/g_TripleTopBottom.csv @@ -0,0 +1,81 @@ +TripleTopBottom +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Tristar.csv b/testdata/golden/g_Tristar.csv new file mode 100644 index 00000000..3e9d6f24 --- /dev/null +++ b/testdata/golden/g_Tristar.csv @@ -0,0 +1,81 @@ +Tristar +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Trix.csv b/testdata/golden/g_Trix.csv new file mode 100644 index 00000000..36f71070 --- /dev/null +++ b/testdata/golden/g_Trix.csv @@ -0,0 +1,81 @@ +Trix +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.21308579050002802 +0.1942663559095942 +0.1939918766620185 +0.21254146970273263 +0.24845758164496382 +0.2986592290130114 +0.3587129472267497 +0.4232446394213847 +0.4864545410968017 +0.5426799720637888 +0.5869412865216956 +0.6154083422748511 +0.6257376220338314 +0.6172504877007142 +0.5909457628208147 +0.5493598331740486 +0.49630134064819403 +0.4364943496567208 +0.3751647731508081 +0.31760228362375287 +0.26872648920282716 +0.23268369387150437 +0.21249973839868558 +0.2098145814403555 +0.22472373531305553 +0.25574826442475906 +0.29994698177570855 +0.35317114903695906 +0.4104446418645571 +0.4664343015284299 +0.5159603095174978 +0.5544889096966835 +0.5785519539294266 +0.5860492019370813 +0.5764071537204444 +0.5505880594399876 +0.5109603534271819 +0.46105422245058536 +0.4052324786561934 +0.34830830271502944 diff --git a/testdata/golden/g_TrueRange.csv b/testdata/golden/g_TrueRange.csv new file mode 100644 index 00000000..e5e3036c --- /dev/null +++ b/testdata/golden/g_TrueRange.csv @@ -0,0 +1,81 @@ +TrueRange +3 +4.777310910232245 +4.683947532331189 +4.118449045648916 +3.5707626750225216 +3.151926843236552 +3.861568269014043 +3.9189092999151427 +3.284910258735948 +2.989239953415378 +3.9747542065622525 +4.691410913260924 +4.735217232210545 +4.088593965793933 +3.27523795126541 +3.226331077806691 +3.124677762959948 +3.2201490149218586 +3.958443733212704 +5.052746486878192 +5.547075650910983 +5.360704330400225 +4.59883380866313 +4.360019717340208 +4.096064511400286 +3.9734242846467396 +3.51227960385647 +2.6453433511167077 +2.8187008382759586 +3.3476906726246085 +3.596343551394881 +3.520166943010807 +3.6865898888611497 +3.779684809433249 +3.409287161054152 +2.8133294519252985 +2.7275247807695706 +3.633689562000484 +3.983349392064511 +3.6231428704093247 +3.8895595533399074 +4.519438608245139 +5.46755495019876 +5.804153712773783 +5.434809104312805 +4.532400986383379 +3.785030177848398 +3.0581472227492554 +3.241945261863407 +3.061091826756268 +3.6598840564697355 +4.4236211182457055 +4.518448642877232 +3.970212068748637 +3.3659925987390267 +3.432861561551306 +3.9601632852213697 +3.782618679387639 +2.9864444014379075 +2.8607468831906857 +3.574212804152907 +4.26612255142544 +4.528321263681249 +4.532679126847881 +4.793710778827261 +4.621544845202976 +3.9935914834593973 +3.4565548914346493 +3.306895729276391 +3.92146352584507 +3.857444857850993 +3.123606045293883 +3.12877715877579 +4.135952468367833 +4.748673418552102 +4.67247617283968 +3.921075270085936 +3.169273906909453 +3.196094990837338 +3.1766306282014227 diff --git a/testdata/golden/g_Tsf.csv b/testdata/golden/g_Tsf.csv new file mode 100644 index 00000000..da7781ea --- /dev/null +++ b/testdata/golden/g_Tsf.csv @@ -0,0 +1,81 @@ +Tsf +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +105.61478089943499 +101.85554964902097 +98.60052033786879 +96.18511855092306 +94.86976844701275 +94.81662984435154 +96.07511296692954 +98.57746477636002 +102.14482114901328 +106.50318427547815 +111.30789806884196 +116.17443526646272 +120.71274610512177 +124.56210030470571 +127.42331002978392 +129.0854554478909 +129.44472556998824 +128.51369137693985 +126.42018289123172 +123.3958705017721 +119.75557053802399 +115.86912366489541 +112.12835811762238 +108.9120888524775 +106.55227913493289 +105.30438724982503 +105.32454717358937 +106.65562159115187 +109.22337309993996 +112.84309561595711 +117.23611361816478 +122.05467540281147 +126.91301670743641 +131.42181988353283 +135.22299048260302 +138.02164476674716 +139.61245079473275 +139.89797011277417 +138.8973616414134 +136.74467026620806 +133.67685300732407 +130.0126123546412 +126.12392752350914 +122.40282665928683 +119.22636813067663 +116.92295902862193 +115.74301953895305 +115.83661365300017 +117.24004439817647 +119.87261099665936 +123.54381762552516 +127.97038984126733 +132.80157864217227 +137.65049183202322 +142.12865394772683 +145.8807076154535 +148.61615656649795 +150.13531480379183 +150.34714395730705 +149.277385470515 +147.06626119390546 +143.95594778469894 +140.26894378731956 +136.37926179890354 +132.67901903790022 +129.54341068077207 +127.2971947943062 diff --git a/testdata/golden/g_TsfOscillator.csv b/testdata/golden/g_TsfOscillator.csv new file mode 100644 index 00000000..9dba4d00 --- /dev/null +++ b/testdata/golden/g_TsfOscillator.csv @@ -0,0 +1,81 @@ +TsfOscillator +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-6.015159438160586 +-3.6336520386787066 +-0.8962130608383105 +1.890316684007957 +4.405484772563079 +6.374617507567593 +7.613993825773716 +8.048423330090944 +7.701690777918642 +6.670640816318245 +5.095732846910162 +3.1368580610513765 +0.9577073062437859 +-1.281994791320248 +-3.428936448452929 +-5.3363365182779745 +-6.864570619494582 +-7.884833026265566 +-8.287872225256823 +-7.998774460819152 +-6.996608969620937 +-5.334366995085753 +-3.1510762180196 +-0.666833257002648 +1.844414980861636 +4.1002296663289854 +5.859498899016329 +6.960090705660129 +7.333909374810448 +6.999669285258841 +6.041792199201762 +4.585698899804225 +2.7768403702966316 +0.7665056916479467 +-1.2958697298468267 +-3.26588266303893 +-5.005346873569584 +-6.383960422194611 +-7.2836524813650625 +-7.607271912659699 +-7.292186929898444 +-6.327362794185133 +-4.7696283132488615 +-2.752164066185351 +-0.4778537736266738 +1.805984422033553 +3.847300256735518 +5.43187766502201 +6.415283903705888 +6.735886287107828 +6.409195714890089 +5.510290121845283 +4.15272166160652 +2.4701191255279817 +0.6032478320723851 +-1.307503953065975 +-3.1257938955972118 +-4.7212952512001936 +-5.972133372628086 +-6.7696952855647075 +-7.027160526659998 +-6.692015951955258 +-5.760981262328402 +-4.293356102878471 +-2.4167796208181067 +-0.3194947449120143 +1.7731759939214218 diff --git a/testdata/golden/g_Tsi.csv b/testdata/golden/g_Tsi.csv new file mode 100644 index 00000000..488a19a2 --- /dev/null +++ b/testdata/golden/g_Tsi.csv @@ -0,0 +1,81 @@ +Tsi +nan +nan +nan +nan +nan +nan +nan +nan +nan +57.605783952008615 +16.21915873367605 +-17.052693049808145 +-40.46116626766546 +-55.860279120270874 +-65.54607556181303 +-71.12781227919166 +-69.36347385524444 +-49.789300136732116 +-14.686485320276246 +21.480439290364927 +48.81820481085673 +66.6279977246713 +77.63713433766209 +84.3994793122747 +88.59386916638503 +91.21147472731504 +92.80931456081358 +93.66781682638846 +85.09158725971251 +60.37449516060199 +24.758752828413982 +-9.92414462653674 +-36.66558457897402 +-54.93121672672497 +-66.7184754435322 +-74.0333714723816 +-78.18355578977989 +-74.67589025257233 +-52.70129762713677 +-15.634755437718674 +21.38556664461444 +48.89952017426309 +66.68339960570404 +77.6439274949112 +84.37158786832654 +88.54435378149742 +91.14699961058562 +92.73050568104084 +93.56837159902011 +84.24846051369708 +58.62287757544714 +22.6625744794106 +-11.74223561782085 +-37.9935863978979 +-55.828152739101604 +-67.30402208359367 +-74.40303622961615 +-78.39096766304907 +-73.99195851804835 +-50.89017266852085 +-13.419262878038676 +23.198078314012083 +50.11232946945315 +67.43402165626293 +78.10072903601241 +84.65153839019428 +88.71746355638487 +91.2529945411127 +92.79059604095579 +93.59065439833813 +83.50251303650252 +56.95665909651028 +20.65322252228097 +-13.482431191486276 +-39.26263800330636 +-56.684289971881206 +-67.86173233135062 +-74.7527965307566 +-78.58216576411215 +-73.27757343090428 diff --git a/testdata/golden/g_Tsv.csv b/testdata/golden/g_Tsv.csv new file mode 100644 index 00000000..c91a60b6 --- /dev/null +++ b/testdata/golden/g_Tsv.csv @@ -0,0 +1,81 @@ +Tsv +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-2217.3085246814453 +-6308.594589696384 +-9308.603298134916 +-10912.904687166627 +-10922.218030678314 +-9286.666728441714 +-6118.916450409477 +-1688.7187045820806 +3601.748606973457 +9259.367661640568 +14753.288717771482 +19572.82367475469 +23282.246604692966 +25565.31364312253 +26254.109413992544 +25339.450907028233 +22959.33662468712 +19328.69502444966 +14691.531915637232 +9399.523406189883 +3925.2598867844517 +-1222.3006842029922 +-5550.691298629361 +-8638.039705270743 +-10181.084086895447 +-10030.262667348607 +-8206.769934275228 +-4899.142235027677 +-440.0470866017499 +4733.088534019578 +10127.721957220832 +15249.074962533015 +19707.3239909663 +23170.823219265596 +25355.582163252493 +26014.35323535638 +25033.703179024233 +22459.23823671655 +18498.08187063889 +13502.053945922658 +7932.684489413425 +2312.1012838538354 +-2833.8484112310634 +-7032.612421307112 +-9914.491607138323 +-11248.475708971362 +-10960.429152797014 +-9132.565543891407 +-5991.6732823497505 +-1781.2989065891388 +3260.72909801045 +8692.095385434446 +14013.97719681643 +18721.32426674957 +22357.281114759047 +24564.59463656396 +25126.8059584615 +23993.263607423338 +21284.324888424377 +17276.10925148444 +12367.26323114046 +7032.803969492351 +1771.749510090105 +-2967.7078914732247 +-6897.791492268117 +-9682.65991879433 diff --git a/testdata/golden/g_TtmSqueeze.csv b/testdata/golden/g_TtmSqueeze.csv new file mode 100644 index 00000000..e3b3e0ca --- /dev/null +++ b/testdata/golden/g_TtmSqueeze.csv @@ -0,0 +1,81 @@ +squeeze,momentum +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +0,-0.8935217401788644 +0,-3.821810359291117 +0,-6.390529945695875 +0,-8.258428687131229 +0,-9.134099788817597 +0,-8.916990403772624 +0,-7.604162511318904 +0,-5.139435353846514 +0,-1.5504178491421678 +0,1.503043700255021 +0,4.642117216769006 +0,7.779286863202994 +0,10.745337593857695 +0,13.290680491419108 +0,15.1529142610031 +0,15.958013587992959 +0,15.50375574734951 +0,13.798685171540876 +0,10.945217592104513 +0,7.383375813223646 +0,3.2576740962360757 +0,-0.8849960701769106 +0,-3.7436685047164797 +0,-6.203127485433793 +0,-7.962442536869785 +0,-8.77864025909063 +0,-8.499267868789314 +0,-7.111014010964408 +0,-4.661717643362037 +0,-1.3550071785165088 +0,1.4055226529616918 +0,4.583852792833621 +0,7.872266501365015 +0,10.8363126060919 +0,13.383210982813095 +0,15.186081958879193 +0,15.929545552127186 +0,15.566436942704494 +0,13.888318084663942 +0,10.982821803925418 +0,7.13612049925065 +0,2.8676898872017165 +0,-1.158843897519322 +0,-3.976465163099033 +0,-6.476683868515721 +0,-8.241255998702181 +0,-8.99767889832547 +0,-8.656051807142468 +0,-7.224559500320049 +0,-4.563578313119637 +0,-1.10143331227927 +0,1.6982448217655763 +0,4.833067133364143 +0,8.043667387581516 +0,10.931765354842055 +0,13.244039343301752 +0,14.869335458568923 +0,15.551023802478595 +0,14.951888033375766 +0,13.18202104590731 +0,10.388256569761559 +0,6.789206831793427 +0,2.6132615288499816 +0,-1.407984025345005 +0,-4.277603418767797 +0,-6.776075481929479 +0,-8.488122600276368 diff --git a/testdata/golden/g_TtmTrend.csv b/testdata/golden/g_TtmTrend.csv new file mode 100644 index 00000000..19a92010 --- /dev/null +++ b/testdata/golden/g_TtmTrend.csv @@ -0,0 +1,81 @@ +TtmTrend +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +-1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +-1 +-1 +-1 +-1 +-1 +-1 diff --git a/testdata/golden/g_TurnOfMonth.csv b/testdata/golden/g_TurnOfMonth.csv new file mode 100644 index 00000000..287192f9 --- /dev/null +++ b/testdata/golden/g_TurnOfMonth.csv @@ -0,0 +1,81 @@ +TurnOfMonth +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan diff --git a/testdata/golden/g_Tweezer.csv b/testdata/golden/g_Tweezer.csv new file mode 100644 index 00000000..389a9909 --- /dev/null +++ b/testdata/golden/g_Tweezer.csv @@ -0,0 +1,81 @@ +Tweezer +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_TwiggsMoneyFlow.csv b/testdata/golden/g_TwiggsMoneyFlow.csv new file mode 100644 index 00000000..43d74d90 --- /dev/null +++ b/testdata/golden/g_TwiggsMoneyFlow.csv @@ -0,0 +1,81 @@ +TwiggsMoneyFlow +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-0.009716613103063638 +-0.0017579993873198608 +-0.004789247215598578 +-0.01738524203369397 +-0.014333860542264805 +-0.007796804053137953 +0.0042486045449120526 +0.025275437367290723 +0.0601152629718781 +0.08908865328076085 +0.10422114687865405 +0.11495874440145414 +0.12535683099357922 +0.1324982296126597 +0.12654786188471598 +0.11030162731343918 +0.08817551858355026 +0.058462288136596936 +0.03061875923103051 +0.0121815705092884 +0.002213961862523388 +0.007605654738638999 +0.024679487161218747 +0.041838848840782136 +0.05703947448121825 +0.06902098033245382 +0.09452155219562773 +0.11908017657760198 +0.1299125757951803 +0.13384318635333028 +0.13552923565055214 +0.13687360425494227 +0.12773008862036495 +0.11774131081491218 +0.11864140434470759 +0.12879295921529973 +0.13423623564174744 +0.13029489904769723 +0.1165541688492478 +0.08943091416153905 +0.055124410038904524 +0.035720615898755574 +0.015262691851800887 +-0.004624746969464819 +-0.022367440896799363 +-0.027233900522097305 +-0.012373353634418724 +0.00972731333708877 +0.03888448464966184 +0.07229944254465878 +0.09707519650808213 +0.11498777942080508 +0.1277223097357587 +0.1237546317993224 +0.09590545234426466 +0.07010441500030924 +0.04765810232666813 +0.03029593292196495 +0.004786699862587669 +-0.007311693540804633 +-0.010095790163140704 +-0.00822726383877868 +-0.004172787247434177 +0.011272138987920625 +0.01617552889230321 +0.010185337806490724 diff --git a/testdata/golden/g_TwoCrows.csv b/testdata/golden/g_TwoCrows.csv new file mode 100644 index 00000000..c0a2d042 --- /dev/null +++ b/testdata/golden/g_TwoCrows.csv @@ -0,0 +1,81 @@ +TwoCrows +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_TypicalPrice.csv b/testdata/golden/g_TypicalPrice.csv new file mode 100644 index 00000000..66321e4d --- /dev/null +++ b/testdata/golden/g_TypicalPrice.csv @@ -0,0 +1,81 @@ +TypicalPrice +99.66666666666667 +103.16267454598328 +106.46632396532765 +109.30969002905226 +111.45910647185464 +112.74199773788952 +113.06847380764877 +112.44424589558567 +110.97251301246604 +108.84406406881523 +106.3166460187776 +103.68631980047041 +101.25473880483469 +99.29680919958425 +98.03294152441634 +97.60915371740403 +98.08685392291113 +99.44252381095095 +101.57606521173501 +104.32553529275576 +107.48553552770288 +110.82665131417549 +114.11393840247109 +117.12329605763098 +119.6553939855807 +121.54740034135453 +122.68295119326267 +123.0005912206809 +122.50041000814686 +121.2480003897514 +119.37441415670385 +117.0706953893436 +114.57595201454465 +112.1587734147477 +110.09297423674845 +108.62989574587948 +107.97053212992039 +108.24129915337737 +109.47714653729103 +111.61489250420503 +114.49824346605784 +117.8942032754348 +121.51880689228612 +125.06867496722403 +128.2540554225371 +130.82894581221407 +132.61456770121885 +133.51372898547731 +133.51518476304713 +132.68866514679192 +131.17247746428333 +129.1563006939515 +126.86189674888487 +124.52403581279573 +122.37315973892662 +120.62044223256866 +119.44519828628948 +118.98423170775713 +119.32275870519 +120.48694857241185 +122.4387103823207 +125.07389544503057 +128.2253492633656 +131.67207090888238 +135.15507483469676 +138.3994880837803 +141.1411629574787 +143.154923777789 +144.28078575968826 +144.44430932083742 +143.66778712039107 +142.07015356602253 +139.85515947975856 +137.28916235919314 +134.6714977766173 +132.3015073284582 +130.44669455820846 +129.31610321851522 +129.04196344134022 +129.6711671025228 diff --git a/testdata/golden/g_UlcerIndex.csv b/testdata/golden/g_UlcerIndex.csv new file mode 100644 index 00000000..0b2d1ab5 --- /dev/null +++ b/testdata/golden/g_UlcerIndex.csv @@ -0,0 +1,81 @@ +UlcerIndex +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +8.338135518158614 +7.736694272786216 +6.937950412510401 +5.972324929703301 +4.930208979264198 +4.003788827002302 +3.522049474142978 +3.7534687207167297 +4.572399410224818 +5.5493473736992485 +6.433939509062599 +7.175526043027324 +7.741352358608077 +8.121431993776099 +8.33124799380752 +8.393491183782505 +8.392296035062428 +8.380282637293083 +8.333464097300844 +8.214994664030199 +7.982672147232313 +7.598764572088447 +7.038770738267401 +6.298807867100863 +5.409262795881263 +4.457490490804837 +3.627607760869956 +3.22741813074607 +3.4846925763658927 +4.260019337378525 +5.156736699744581 +5.965325893380001 +6.639922058551299 +7.151413331342137 +7.491886279573473 +7.676979855852256 +7.728388205514118 +7.727123765459557 +7.715113538126481 +7.669503441396023 +7.555832455826001 +7.335175054977616 +6.973227589951653 +6.448272598168502 +5.758049890574005 +4.932962135994336 +4.057869818704658 +3.3100873132902375 +2.9786793481729146 +3.2557901118415873 +3.9918213102474835 +4.819669566229091 +5.563074744919568 +6.180238861939805 diff --git a/testdata/golden/g_UltimateOscillator.csv b/testdata/golden/g_UltimateOscillator.csv new file mode 100644 index 00000000..f4f06178 --- /dev/null +++ b/testdata/golden/g_UltimateOscillator.csv @@ -0,0 +1,81 @@ +UltimateOscillator +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +51.08963856080069 +52.4871684539542 +51.996421589811895 +48.2389120973321 +47.82881582698974 +49.73072679144915 +53.27109223325575 +56.38237979381065 +61.25406745125982 +65.38250972357197 +66.67352136354047 +64.84878624536373 +63.4785682539211 +63.24702280455557 +61.04847081179171 +55.65538198900453 +49.95328458656287 +44.86889780224972 +41.01732098595537 +39.61321817044103 +40.92936069713806 +44.51967085840202 +49.39918732506194 +54.53459709126469 +57.337877793955045 +58.32537704010815 +61.44461515291402 +64.76179373912923 +65.19329078136573 +62.87398320815974 +60.48712938647465 +59.480946877390714 +57.787587662217206 +55.628342801909646 +54.577162582969386 +56.99047817246117 +59.070725966814166 +57.98604156369668 +54.301379066590535 +49.58615217432947 +44.504474626060116 +41.7558384256085 +40.653782342264456 +40.531259795463825 +39.18785783014791 +40.08756588762888 +45.929655573661144 +53.317281026679055 +59.61362122906407 +64.74797347741557 +67.49974690540253 +67.79119897936755 +66.32421788996207 +63.18337506186783 +56.669664500678074 +49.44306001839609 +44.99900512781569 +44.260476831365345 +42.20597148496468 +41.92350366137226 +43.38842599551633 +46.61331512819972 +48.83143945532288 +51.66055246801993 +52.74472783309193 +51.87692484492719 diff --git a/testdata/golden/g_UniqueThreeRiver.csv b/testdata/golden/g_UniqueThreeRiver.csv new file mode 100644 index 00000000..57226748 --- /dev/null +++ b/testdata/golden/g_UniqueThreeRiver.csv @@ -0,0 +1,81 @@ +UniqueThreeRiver +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_UniversalOscillator.csv b/testdata/golden/g_UniversalOscillator.csv new file mode 100644 index 00000000..49e3039b --- /dev/null +++ b/testdata/golden/g_UniversalOscillator.csv @@ -0,0 +1,81 @@ +UniversalOscillator +nan +nan +1 +0.8924271796965793 +0.8246056221888107 +0.7580479530746197 +0.6653021928707057 +0.5320070226160906 +0.356476034942682 +0.14769471468276368 +-0.07757429099078424 +-0.29805466631695365 +-0.49120634565921534 +-0.6361863753300824 +-0.7163244873645039 +-0.7209778192909958 +-0.6466799067150213 +-0.4975461778341223 +-0.28494513735891974 +-0.026491826097536215 +0.25553374231326087 +0.5361988700839132 +0.7901837000502977 +0.9941014284667549 +1 +1 +0.9687017840219279 +0.8637144000674495 +0.6932731740102365 +0.47168229564321684 +0.21813083334518246 +-0.044952782582889074 +-0.29386764286124456 +-0.5057570818050585 +-0.6606871578817565 +-0.7434988569435693 +-0.7452629553552971 +-0.6641991762748042 +-0.5059670424003212 +-0.2832907898669551 +-0.014940073809570725 +0.2758533079246645 +0.5634101141126207 +0.8218758902094848 +1 +1 +1 +0.9644628801541366 +0.855532860226813 +0.6818281474871398 +0.45796940779208034 +0.20337020352400625 +-0.05942705498472191 +-0.3067278055405015 +-0.5158020435561089 +-0.6669526288111859 +-0.7453477024864451 +-0.7424475886591225 +-0.6568900453080369 +-0.49474411401244683 +-0.269098145384922 +0.0009929796773624554 +0.2921181425173517 +0.5785426836068431 +0.8344878195578821 +1 +1 +1 +0.9602345169964337 +0.847387523967403 +0.6704363801186545 +0.4443069468393019 +0.1886355121368025 +-0.0739168528864223 +-0.3196535918037407 +-0.5259616794170884 +-0.673371544683648 +-0.7473709740175003 +-0.7398048543985255 +-0.6497269136772205 diff --git a/testdata/golden/g_UpDownVolumeRatio.csv b/testdata/golden/g_UpDownVolumeRatio.csv new file mode 100644 index 00000000..7153dba5 --- /dev/null +++ b/testdata/golden/g_UpDownVolumeRatio.csv @@ -0,0 +1,81 @@ +UpDownVolumeRatio +5100 +5199.3346653975295 +5294.709171154325 +5382.321236697518 +4.093306594603975 +4.092238405784722 +4.091474243015069 +4.091029500346278 +4.090912614987502 +4.091125741274756 +5554.64871341284 +5504.248201909795 +5437.731590275575 +5357.7506859107325 +5267.494075077952 +5170.560004029932 +4.099419646330558 +4.097508263099093 +4.095762321503723 +4.09423420576085 +4.092964428828752 +4.091982985809424 +5575.801036944758 +5596.845501816732 +5598.082304417921 +5579.4621373315695 +5541.727327860076 +5486.382243777994 +5415.63331893616 +4.095560249960312 +4.0972817958545615 +4.099175952929721 +4.098847935175419 +4.096978711983684 +4.095291518829602 +5428.493299359394 +5496.833931924576 +5549.354047905813 +5583.959836015743 +5599.271672687302 +5594.679123311691 +4.091401574585845 +4.092126849501077 +4.093158469067447 +4.094474050365887 +4.096041934349615 +4.097819697600452 +4.099752858050162 +5187.16339061149 +5283.239564625965 +5372.010555444685 +5449.937343796772 +5513.913234542826 +5561.387710806403 +4.091066916249084 +4.090909171846761 +4.091081502155198 +4.091580722903392 +4.092397287014679 +4.093514532586037 +5368.286459000218 +5279.114641118414 +5182.802087724154 +5116.81152361057 +5215.754912550769 +5310.08351841332 +4.0944102208704924 +4.093106611001901 +4.092088138757808 +4.091376810010543 +4.090986782407602 +4.090925402490547 +4.091193799804564 +5547.395586070252 +5494.126033687658 +5425.143920078558 +5343.199344426899 +5251.5591783728505 +5153.876826149722 +4.099089301441327 diff --git a/testdata/golden/g_UpsideGapThreeMethods.csv b/testdata/golden/g_UpsideGapThreeMethods.csv new file mode 100644 index 00000000..a2a8b6a1 --- /dev/null +++ b/testdata/golden/g_UpsideGapThreeMethods.csv @@ -0,0 +1,81 @@ +UpsideGapThreeMethods +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_UpsideGapTwoCrows.csv b/testdata/golden/g_UpsideGapTwoCrows.csv new file mode 100644 index 00000000..62b360a6 --- /dev/null +++ b/testdata/golden/g_UpsideGapTwoCrows.csv @@ -0,0 +1,81 @@ +UpsideGapTwoCrows +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_UpsidePotentialRatio.csv b/testdata/golden/g_UpsidePotentialRatio.csv new file mode 100644 index 00000000..435a9f8b --- /dev/null +++ b/testdata/golden/g_UpsidePotentialRatio.csv @@ -0,0 +1,81 @@ +UpsidePotentialRatio +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_ValueArea.csv b/testdata/golden/g_ValueArea.csv new file mode 100644 index 00000000..df1841a1 --- /dev/null +++ b/testdata/golden/g_ValueArea.csv @@ -0,0 +1,81 @@ +poc,vah,val +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +99.20664260675855,109.78096519309211,96.32273644684939 +99.20664260675855,109.78096519309211,96.32273644684939 +99.20664260675855,110.16548601441333,96.32273644684939 +111.20793380403116,115.26697281350663,101.35026763816214 +112.84112892073753,115.32022287070157,100.44565917091734 +99.2457076743962,112.2212534045708,95.93821562552817 +98.95547131147303,112.39597391250015,95.93821562552817 +99.05667539186449,112.38100348439237,95.93821562552817 +99.05667539186449,113.51498885396921,95.93821562552817 +99.05667539186449,115.78295959312288,95.93821562552817 +99.05667539186449,118.617923017065,95.93821562552817 +121.16939009861288,124.2878498649492,101.60814247341237 +121.16939009861288,124.2878498649492,101.60814247341237 +121.16939009861288,124.2878498649492,102.74212784298922 +121.16939009861288,124.2878498649492,106.14408395171974 +121.16939009861288,124.2878498649492,108.97904737566185 +121.23655053498203,124.2878498649492,109.30874406329224 +121.38879268807125,124.2878498649492,109.00191202322907 +109.14749691855383,121.40397311325484,106.02329710421827 +109.36350164625273,120.82713143742538,106.11907812044915 +109.24022995987262,119.82929581900058,106.45363368115474 +109.33126399581253,119.6026542914847,106.26786689008574 +121.2244527592224,124.2878498649492,111.67386178254478 +121.2244527592224,124.2878498649492,111.67386178254478 +121.50480451536231,124.63568210959723,111.2772710408616 +121.35112945161626,124.46354871034478,110.09853674698238 +121.71717574367396,124.59755536044466,108.88639381442273 +108.79281756988084,122.53977127098749,106.26786689008574 +109.43424474821992,122.3876087133143,106.26786689008574 +109.43560223037947,123.54642329168789,106.26786689008574 +109.43560223037947,127.00213457200832,106.26786689008574 +131.89772555246228,135.065460892756,111.45143381056639 +131.89772555246228,135.065460892756,111.45143381056639 +131.89772555246228,135.065460892756,111.45143381056639 +131.89772555246228,135.065460892756,112.6033375706732 +131.89772555246228,135.065460892756,115.48309697094022 +131.89772555246228,135.065460892756,118.93880825126065 +131.89772555246228,135.065460892756,119.51476013131406 +132.01353584575787,135.065460892756,120.08328338931068 +131.76414005798847,135.065460892756,120.33649101456238 +119.0239116217848,131.11001038758502,117.0461863691993 +120.89419410535959,129.9122729700664,117.02930316334238 +120.99548375288533,130.07863355204233,117.61156520025821 +120.99548375288533,130.07863355204233,117.61156520025821 +132.03774429303698,134.35305698693975,121.88598863515563 +131.91229405450903,135.23453170413174,121.94558110564095 +121.1312494979789,132.3029216321443,117.71134986507113 +121.04940728734589,132.43153940733328,117.7612357860162 +120.80929401984032,132.56460349807722,117.25536324735009 +121.00200208564402,132.81832457564792,117.83176922247223 +121.06645220101143,133.0860404394818,117.25536324735009 +121.06645220101143,137.1902900818863,117.25536324735009 +121.06645220101143,140.12189696931813,117.25536324735009 +121.06645220101143,140.70821834680447,117.25536324735009 +121.06645220101143,140.70821834680447,117.25536324735009 +121.06645220101143,140.70821834680447,117.25536324735009 +142.76034316800673,146.57143212166807,126.05018390964548 +142.76034316800673,146.57143212166807,128.98179079707728 +142.8511936045757,146.57143212166807,129.40110050431875 +142.4585948739173,146.57143212166807,130.12008313066502 +130.38432752933304,142.97429776781584,127.04413134361309 diff --git a/testdata/golden/g_ValueAtRisk.csv b/testdata/golden/g_ValueAtRisk.csv new file mode 100644 index 00000000..1794be74 --- /dev/null +++ b/testdata/golden/g_ValueAtRisk.csv @@ -0,0 +1,81 @@ +ValueAtRisk +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_Variance.csv b/testdata/golden/g_Variance.csv new file mode 100644 index 00000000..e3a5aa21 --- /dev/null +++ b/testdata/golden/g_Variance.csv @@ -0,0 +1,81 @@ +Variance +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +20.419410766173314 +22.35073313110115 +27.398242178685905 +32.19560502388231 +34.05265401651195 +31.985745059890178 +27.091290508213206 +22.129308394802138 +20.465453536438872 +24.7494897184788 +35.80487521987561 +52.13386686842205 +70.22953599609718 +85.60456501330555 +94.19496897688259 +93.66301605149965 +84.15462787030992 +68.2519694897419 +50.13747221796439 +34.25542037917512 +23.927694059526402 +20.39219863242033 +22.582121918600023 +27.704220889787393 +32.39575844307183 +34.03975497738247 +31.766544575631997 +26.78395890862521 +21.918439267914437 +20.530680810448757 +25.193270264102466 +36.60551016621321 +53.14117198890199 +71.20573747722665 +86.29716786385325 +94.4170535404046 +93.3536190715622 +83.39855433854609 +67.2522470227268 +49.14988471279321 +33.507502763888624 +23.54973995204091 +20.383444684575807 +22.822876531714428 +28.008640790196296 +32.585857283516816 +34.01397880876175 +31.538387135937228 +26.476846849047433 +21.718709875942295 +20.61542735729381 +25.658891471141033 +37.422779873972104 +54.15352990489737 +72.17246276354126 +86.96738260569327 +94.60960561862157 +93.01563187389183 +82.62261290082097 +66.2463317876718 +48.17035256778763 +32.778023688111716 +23.193748694102396 +20.392758423971827 +23.072392849146127 +28.310923937839107 +32.76557192978726 diff --git a/testdata/golden/g_VarianceRatio.csv b/testdata/golden/g_VarianceRatio.csv new file mode 100644 index 00000000..d311d74d --- /dev/null +++ b/testdata/golden/g_VarianceRatio.csv @@ -0,0 +1,81 @@ +VarianceRatio +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +1.8809672172599796 +1.8662744778794156 +1.860548775694159 +1.868402816595952 +1.8834325661047393 +1.8918272005228791 +1.8850089526507918 +1.8699912375664938 +1.8607854362185872 +1.8649747163505217 +1.8792046079742972 +1.89088764278984 +1.8883479090500608 +1.8742240853353134 +1.8621664264866413 +1.862415948132876 +1.8747742040942699 +1.8886999725775921 +1.8906791704144021 +1.8786542708495164 +1.8646030819492894 diff --git a/testdata/golden/g_VerticalHorizontalFilter.csv b/testdata/golden/g_VerticalHorizontalFilter.csv new file mode 100644 index 00000000..6d800630 --- /dev/null +++ b/testdata/golden/g_VerticalHorizontalFilter.csv @@ -0,0 +1,81 @@ +VerticalHorizontalFilter +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.5315481190101301 +0.6179258970905204 +0.7009401991804887 +0.7530935376598707 +0.7514583963890217 +0.6968324476623653 +0.5881788010977813 +0.47639982364073197 +0.5571160406317377 +0.6390220978171238 +0.7188696351481481 +0.7958088297426079 +0.8677434974554535 +0.9306718268425472 +0.954567081297741 +0.9134870620426495 +0.8193732123184062 +0.7209975155870693 +0.6221754720524886 +0.5247062840786219 +0.45211816964965706 +0.536354841667112 +0.6229627817476786 +0.7050568112423441 +0.7546937595661637 +0.7497875023107125 +0.6927307769998542 +0.5815342974336101 +0.4780051440801747 +0.56173207628944 +0.6434991078827389 +0.7231845174145205 +0.7998808477679001 +0.8714029389035505 +0.9336200853757214 +0.9545865904232245 +0.9088497954899111 +0.8142309430730682 +0.7156489571657028 +0.6167747788013982 +0.5193185334153992 +0.456741626632112 +0.5411859780316078 +0.6280493063237653 +0.7091851315146895 +0.7562598456246489 +0.7480799703848752 +0.6886324666094282 +0.5749572603213404 +0.4827579930589664 +0.5663508692328518 +0.6479931283612314 +0.7275277496416459 +0.8039891583421355 +0.875101742949839 +0.9366035591419857 +0.9546191294056187 +0.9042467512694311 +0.8091228050708067 +0.7103270442260442 +0.6113885323334357 +0.5139297678519825 +0.4613729043499787 +0.546044918908264 +0.6331900899870166 +0.7133280850655791 diff --git a/testdata/golden/g_Vidya.csv b/testdata/golden/g_Vidya.csv new file mode 100644 index 00000000..26c98c23 --- /dev/null +++ b/testdata/golden/g_Vidya.csv @@ -0,0 +1,81 @@ +Vidya +nan +nan +nan +nan +nan +nan +nan +112.13209366648874 +111.68589769130718 +111.3778888143201 +110.63229251571055 +108.20715989059781 +105.04392878230027 +102.33313359523027 +100.3086879355472 +99.0166933794481 +98.5545295213503 +98.79599502688316 +99.13270526699081 +99.71353193141127 +102.21019576340794 +106.08868286227755 +110.10204824870567 +113.69322294629383 +116.81495079239268 +119.34747528007003 +121.16645436690804 +122.18267623767946 +122.34633992518022 +121.9637458935959 +121.70248347938468 +120.88808071245172 +118.42476195077215 +115.29548664538507 +112.64836988472481 +110.67570614250405 +109.43317192091956 +109.02212932404271 +109.28974626846437 +109.60527228013619 +110.27471670946287 +112.87444214219323 +116.7878768753171 +120.781310633347 +124.35102289020962 +127.44443357786292 +129.940695136152 +131.71689451181558 +132.68673613865417 +132.80756464293069 +132.4098446559804 +132.1805762926585 +131.27015671217345 +128.7227840558671 +125.59058108251759 +122.98636382941318 +121.05534674679906 +119.85734834799132 +119.49430196461444 +119.78533635304065 +120.07641664049277 +120.83894342452903 +123.54169228947458 +127.48802491553671 +131.46058710186782 +135.00799289953193 +138.0723651373015 +140.53180533689022 +142.26486716915846 +143.18819720708981 +143.26703835969346 +142.85610600950486 +142.66198773007864 +141.65069286016055 +139.01964070384315 +135.88655521436846 +133.325803826963 +131.43696507438307 +130.2839047465883 +129.96821601467553 diff --git a/testdata/golden/g_VolatilityCone.csv b/testdata/golden/g_VolatilityCone.csv new file mode 100644 index 00000000..9369d461 --- /dev/null +++ b/testdata/golden/g_VolatilityCone.csv @@ -0,0 +1,81 @@ +current,min,median,max,percentile +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +nan,nan,nan,nan,nan +0.006337574671501262,0.004576685171584879,0.007285744693342858,0.007855949166258326,42.857142857142854 +0.004826875512043472,0.004826875512043472,0.007285744693342858,0.007855949166258326,14.285714285714285 +0.002880501207525251,0.002880501207525251,0.007285744693342858,0.007855949166258326,14.285714285714285 +0.0008529543889747591,0.0008529543889747591,0.006337574671501262,0.007855949166258326,14.285714285714285 +0.0022590633404344783,0.0008529543889747591,0.004826875512043472,0.007855949166258326,28.57142857142857 +0.004716953223469401,0.0008529543889747591,0.004716953223469401,0.007353623744580629,57.14285714285714 +0.006872364512399864,0.0008529543889747591,0.004716953223469401,0.006872364512399864,100 +0.008369605111376946,0.0008529543889747591,0.004716953223469401,0.008369605111376946,100 +0.008955254857309513,0.0008529543889747591,0.004716953223469401,0.008955254857309513,100 +0.008528955976895892,0.0008529543889747591,0.006872364512399864,0.008955254857309513,85.71428571428571 +0.00717395343671726,0.0022590633404344783,0.00717395343671726,0.008955254857309513,57.14285714285714 +0.005130873608513178,0.004716953223469401,0.00717395343671726,0.008955254857309513,28.57142857142857 +0.0027380539481836165,0.0027380539481836165,0.00717395343671726,0.008955254857309513,14.285714285714285 +0.0007238575095366861,0.0007238575095366861,0.00717395343671726,0.008955254857309513,14.285714285714285 +0.002284637499047382,0.0007238575095366861,0.005130873608513178,0.008955254857309513,28.57142857142857 +0.004186540551561933,0.0007238575095366861,0.004186540551561933,0.008528955976895892,57.14285714285714 +0.0056708616874650225,0.0007238575095366861,0.004186540551561933,0.00717395343671726,85.71428571428571 +0.006670171807647695,0.0007238575095366861,0.004186540551561933,0.006670171807647695,100 +0.007169785700086379,0.0007238575095366861,0.004186540551561933,0.007169785700086379,100 +0.007171701829605531,0.0007238575095366861,0.0056708616874650225,0.007171701829605531,100 +0.0066827670014637025,0.002284637499047382,0.006670171807647695,0.007171701829605531,71.42857142857143 +0.005714147160681101,0.004186540551561933,0.006670171807647695,0.007171701829605531,42.857142857142854 +0.004291243113585006,0.004291243113585006,0.006670171807647695,0.007171701829605531,14.285714285714285 +0.002481167937686481,0.002481167937686481,0.006670171807647695,0.007171701829605531,14.285714285714285 +0.0007055329922055471,0.0007055329922055471,0.005714147160681101,0.007171701829605531,14.285714285714285 +0.00221157656665784,0.0007055329922055471,0.004291243113585006,0.007171701829605531,28.57142857142857 +0.004419870324472836,0.0007055329922055471,0.004291243113585006,0.0066827670014637025,71.42857142857143 +0.0063232815623185,0.0007055329922055471,0.004291243113585006,0.0063232815623185,100 +0.007619410578846894,0.0007055329922055471,0.004291243113585006,0.007619410578846894,100 +0.008097262995564182,0.0007055329922055471,0.004419870324472836,0.008097262995564182,100 +0.007678845715853397,0.0007055329922055471,0.0063232815623185,0.008097262995564182,85.71428571428571 +0.006441560166629998,0.00221157656665784,0.006441560166629998,0.008097262995564182,57.14285714285714 +0.004595316526557396,0.004419870324472836,0.006441560166629998,0.008097262995564182,28.57142857142857 +0.0024352766879582257,0.0024352766879582257,0.006441560166629998,0.008097262995564182,14.285714285714285 +0.0006513051215166925,0.0006513051215166925,0.006441560166629998,0.008097262995564182,14.285714285714285 +0.0021296195701274523,0.0006513051215166925,0.004595316526557396,0.008097262995564182,28.57142857142857 +0.0038739136438890177,0.0006513051215166925,0.0038739136438890177,0.007678845715853397,57.14285714285714 +0.005239316967882262,0.0006513051215166925,0.0038739136438890177,0.006441560166629998,85.71428571428571 +0.006157914525810147,0.0006513051215166925,0.0038739136438890177,0.006157914525810147,100 +0.006610122187369184,0.0006513051215166925,0.0038739136438890177,0.006610122187369184,100 +0.00659408724645429,0.0006513051215166925,0.005239316967882262,0.006610122187369184,85.71428571428571 +0.006115686774801471,0.0021296195701274523,0.006115686774801471,0.006610122187369184,57.14285714285714 +0.005188372455960907,0.0038739136438890177,0.006115686774801471,0.006610122187369184,28.57142857142857 +0.0038423081340976106,0.0038423081340976106,0.006115686774801471,0.006610122187369184,14.285714285714285 +0.002150656456710158,0.002150656456710158,0.006115686774801471,0.006610122187369184,14.285714285714285 +0.0006162442091532034,0.0006162442091532034,0.005188372455960907,0.006610122187369184,14.285714285714285 +0.0021663150644263543,0.0006162442091532034,0.0038423081340976106,0.00659408724645429,42.857142857142854 +0.004166852744770461,0.0006162442091532034,0.0038423081340976106,0.006115686774801471,71.42857142857143 +0.0058641581511040776,0.0006162442091532034,0.0038423081340976106,0.0058641581511040776,100 +0.006997270043013378,0.0006162442091532034,0.0038423081340976106,0.006997270043013378,100 +0.007387906536955508,0.0006162442091532034,0.004166852744770461,0.007387906536955508,100 +0.0069750445812033065,0.0006162442091532034,0.0058641581511040776,0.007387906536955508,71.42857142857143 +0.005831533134420141,0.0021663150644263543,0.0058641581511040776,0.007387906536955508,42.857142857142854 +0.004143778769158221,0.004143778769158221,0.0058641581511040776,0.007387906536955508,14.285714285714285 +0.002173765042541486,0.002173765042541486,0.0058641581511040776,0.007387906536955508,14.285714285714285 +0.0005938446829842412,0.0005938446829842412,0.005831533134420141,0.007387906536955508,14.285714285714285 +0.002009178107907748,0.0005938446829842412,0.004143778769158221,0.007387906536955508,28.57142857142857 +0.003617978029873307,0.0005938446829842412,0.003617978029873307,0.0069750445812033065,57.14285714285714 +0.00487874797973096,0.0005938446829842412,0.003617978029873307,0.005831533134420141,85.71428571428571 +0.005724647981048404,0.0005938446829842412,0.003617978029873307,0.005724647981048404,100 +0.006133061820877019,0.0005938446829842412,0.003617978029873307,0.006133061820877019,100 +0.00609960702050407,0.0005938446829842412,0.00487874797973096,0.006133061820877019,85.71428571428571 +0.005629692701650538,0.002009178107907748,0.005629692701650538,0.006133061820877019,57.14285714285714 +0.0047386912098765655,0.003617978029873307,0.005629692701650538,0.006133061820877019,28.57142857142857 +0.0034604186725466744,0.0034604186725466744,0.005629692701650538,0.006133061820877019,14.285714285714285 +0.0018727317079909123,0.0018727317079909123,0.005629692701650538,0.006133061820877019,14.285714285714285 +0.0005726849313975644,0.0005726849313975644,0.0047386912098765655,0.006133061820877019,14.285714285714285 +0.0021237644047560305,0.0005726849313975644,0.0034604186725466744,0.00609960702050407,42.857142857142854 +0.0039486491976884145,0.0005726849313975644,0.0034604186725466744,0.005629692701650538,71.42857142857143 +0.005474218145085102,0.0005726849313975644,0.0034604186725466744,0.005474218145085102,100 +0.006472536350968328,0.0005726849313975644,0.0034604186725466744,0.006472536350968328,100 diff --git a/testdata/golden/g_VolatilityOfVolatility.csv b/testdata/golden/g_VolatilityOfVolatility.csv new file mode 100644 index 00000000..8c02e42e --- /dev/null +++ b/testdata/golden/g_VolatilityOfVolatility.csv @@ -0,0 +1,81 @@ +VolatilityOfVolatility +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.0011724797769801538 +0.001095494470029295 +0.0018581428259687284 +0.0027083609753625923 +0.0026996091065293396 +0.0023051232657531257 +0.002199278249486719 +0.0026339762348834652 +0.003156630495101238 +0.0032490989955364126 +0.0024196242382181826 +0.001668787584577475 +0.0022182746974150763 +0.003197267806297257 +0.0032551185778246883 +0.002771086619605421 +0.002215337780314261 +0.002099713438623749 +0.00241433849055074 +0.0025430988226520994 +0.001834337914155908 +0.0010728705630318038 +0.0010406796352793871 +0.0017591493041135768 +0.0025155363033285637 +0.002463491652205514 +0.002099076897225627 +0.00201929287822324 +0.0024192739390010353 +0.0028779050465840665 +0.0029249556434114564 +0.002117325679686788 +0.001481461615502544 +0.0020255359523181867 +0.0028998539415690575 +0.0029291163271770774 +0.00248396441141668 +0.002001539292526397 +0.0019368102708589552 +0.002238496911212451 +0.002343350211598816 +0.0016763354931639129 +0.0009846066302186727 +0.0009943085850797528 +0.0016743342383832148 +0.002342959197107333 +0.002259184330365507 +0.0019218303902440146 +0.0018655096797002657 +0.0022381039621874547 +0.0026437540259696846 +0.002651491967000124 +0.0018709224122802437 +0.0013333566943269815 +0.0018716515070436722 +0.0026552918754580534 +0.002659159237959177 +0.0022459410131930252 +0.0018243225505971462 +0.0018000966318027871 +0.0020883488426760633 +0.0021701186933451963 +0.0015365953157888941 +0.0009067431277745748 +0.0009549797751236578 +0.0016008350877466577 +0.002186552357757542 +0.0020792895200366463 +0.0017664263618072274 +0.0017313005836966072 +0.0020816792445190607 diff --git a/testdata/golden/g_VolatilityRatio.csv b/testdata/golden/g_VolatilityRatio.csv new file mode 100644 index 00000000..15a1c27e --- /dev/null +++ b/testdata/golden/g_VolatilityRatio.csv @@ -0,0 +1,81 @@ +VolatilityRatio +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.8194267116558391 +0.8131873590712293 +0.8594406974995863 +1.076665693584801 +1.360401324049664 +1.4250174064586822 +1.303283729393345 +1.0746046107062275 +1.0087666895248124 +0.9465895829224296 +0.9248338552362442 +0.8257762402504805 +0.6367412186948277 +0.7130027648295785 +0.8805068040371735 +0.9612218729696133 +0.9457515057495159 +0.9976801560843948 +1.0231903729286989 +0.9200758990614618 +0.7674208250370039 +0.7678257044304706 +1.055597913154498 +1.1486600810098404 +1.0244823710782343 +1.0962360745463018 +1.2576244315789131 +1.4709304684053723 +1.4692311771242774 +1.2947334322698851 +1.0389254601654954 +0.8631320127203825 +0.7103378287426294 +0.78328152348123 +0.7615926224856688 +0.9404659582777987 +1.1458157955067712 +1.1480575666054973 +0.9892319513536147 +0.8398883720971095 +0.8752588487667065 +1.026779784311919 +0.977257096628798 +0.7739085660457875 +0.7643778242111611 +0.9859885945411119 +1.179062737541184 +1.2223451828886287 +1.18829334233325 +1.225947391993768 +1.147352046076665 +0.9723516161496001 +0.8447090061755057 +0.8252220755404076 +1.0019336987692342 +0.9853228905308054 +0.7994399085458217 +0.8227652263413854 +1.1139430486505548 +1.2598283897847626 +1.1981062396054358 +0.9795594005394118 +0.7939088083186719 +0.8232494665161743 +0.8379843987409087 diff --git a/testdata/golden/g_VoltyStop.csv b/testdata/golden/g_VoltyStop.csv new file mode 100644 index 00000000..9c086440 --- /dev/null +++ b/testdata/golden/g_VoltyStop.csv @@ -0,0 +1,81 @@ +VoltyStop +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +91.78705253596317 +91.87882467665362 +91.971028360646 +92.07116796933131 +92.15051599854455 +93.76874235362372 +96.30368321728294 +99.27319152233567 +102.53628871165947 +105.90743353308245 +109.03984187521431 +111.69586763738577 +113.66018608319966 +114.85099508897224 +115.26758486242993 +115.43143568882059 +115.50801290841923 +115.54359848679364 +115.58752461076762 +121.85109184831337 +119.51650143409877 +117.53787877807773 +116.10324185785626 +115.45189787861992 +115.45233494609964 +115.50269219876853 +115.49799443029605 +115.5316917428474 +110.40535495904552 +113.62584743255056 +116.78593818129563 +119.72615665138063 +122.28110695003353 +124.2292677332288 +125.4347902488179 +125.71073220646969 +125.84099377114902 +125.87640919124932 +125.8001896439459 +125.71586756078821 +132.53210395759075 +130.13013386635836 +128.16588383470605 +126.91782330201404 +126.43653956708025 +126.3076609374359 +126.1700311358737 +126.14415573741768 +126.21897283131887 +120.86371052583938 +124.23775935006648 +127.53661361522211 +130.56268059440282 +133.14441463912604 +135.07600944003934 +136.17565323626474 +136.28777638796433 +136.29555218377538 +136.4076066816795 +136.5109185563788 +136.46296882437215 +142.7072505300425 +140.52060801218852 +138.6538196765925 +137.32616360003695 +136.80989260441592 +136.7151935380431 diff --git a/testdata/golden/g_VolumeBars.csv b/testdata/golden/g_VolumeBars.csv new file mode 100644 index 00000000..01bcefd1 --- /dev/null +++ b/testdata/golden/g_VolumeBars.csv @@ -0,0 +1,81 @@ +bars +99,101,98,100,1000 +102.57761950472302,104.77731091023225,101.25551066110417,103.4552020666134,1019.8669330795061 +106.10612242808222,108.13914959894458,104.61339756308799,106.64642473395035,1038.941834230865 +109.26253189460714,110.76487377959927,107.8309272112827,109.33326909627483,1056.4642473395036 +111.7365376962194,112.90403177129735,110.1528967845943,111.32039085967226,1071.7356090899523 +113.27609348158748,114.45148509543229,111.29955825219574,112.47494986604055,1084.1470984807897 +113.7284688053824,115.1642566915892,111.30268842257516,112.73847630878196,1093.2039085967226 +113.06855035377954,114.55977666009171,110.64086736017657,112.13209366648874,1098.544972998846 +111.40827542637513,112.72390874531129,109.43899848657534,110.75463180551151,1099.9573603041506 +108.98459460176909,109.99300155201126,107.76539185209613,108.7737988023383,1097.3847630878195 +106.12753789513545,107.73969337995807,104.79904459577605,106.41120008059868,1090.929742682568 +103.21387328427625,105.41662717550601,101.71978916733775,103.92254305856751,1080.849640381959 +100.61462528040111,103.00209502109563,99.18732582635697,101.57479556705148,1067.546318055115 +98.64575078243223,100.78188758933494,97.48620160125755,99.62233840816026,1051.5501371821465 +97.53034002152081,99.46748184049008,96.34710045689485,98.28424227586412,1033.4988150155905 +97.378063505514,99.16454670333486,95.93821562552817,97.72469882334903,1014.1120008059867 +98.18385394545021,99.67344281002588,96.54876504706593,98.0383539116416,1005.837414342758 +99.8438650794075,101.15293363552601,97.93278462060415,99.24185317672267,1025.5541102026832 +102.1834853863248,103.20029690993537,100.25554360082955,101.27235512444012,1044.2520443294852 +104.99031673022002,106.32510161131832,102.65835969292533,103.99314457402363,1061.185789094272 +108.04491654708718,109.54022022493461,105.7105413401633,107.20584501801073,1075.680249530793 +111.14367593283949,112.56654934841096,109.24526558927202,110.6681390048435,1087.157577241359 +114.11098793714572,115.26697281350663,112.95942875877287,114.11541363513378,1095.1602073889517 +116.80109288512898,118.47543335247398,115.61005717653698,117.28439764388199,1099.3691003633464 +119.09282467975903,121.38046215528227,117.64904116296829,119.93667863849153,1099.616460883584 +120.88220148856881,123.36781277048146,119.39438848583472,121.87999976774739,1095.8924274663138 +122.07798667229586,124.2878498649492,120.77557026109272,122.98543345374605,1088.3454655720152 +122.60397744514097,124.22410945235427,121.57876610123756,123.19889810845086,1077.2764487555987 +122.40925186267498,123.88697089091687,121.06827005264091,122.5459890808828,1063.126663787232 +121.48461656761053,122.98099977052848,119.63330909790388,121.12969230082183,1046.4602179413757 +119.8808727652764,121.29920058454442,117.70285703314954,119.12118485241757,1027.9415498198925 +117.72299769788953,118.8665240235534,115.60101790940676,116.74454423507063,1008.3089402817496 +115.21439166809358,116.4131695096543,113.05795434620948,114.2567321877702,1011.6549204850494 +112.6270381197495,114.07463180365934,110.47704737833695,111.92464106224679,1031.154136351338 +110.27641646211617,111.76231568498811,108.51535390119264,110.00125312406458,1049.4113351138608 +108.48360243707184,109.99872116521585,107.18792367213928,108.7030424002833,1065.6986598718788 +107.530320991091,109.22424173559783,106.49671695482826,108.19063769933508,1079.3667863849153 +107.61494922421186,109.90155645208623,106.26786689008574,108.55447411796011,1089.8708095811626 +108.81801012516657,111.30403713029216,107.32068773822765,109.80671474335324,1096.7919672031487 +111.08434919099572,113.29382811110736,109.67068524069803,111.88016416080967,1099.8543345374605 +114.22618875818226,115.76972371414958,113.09073586402833,114.63427081999565,1098.9358246623383 +117.94724565362051,119.15370942824079,116.6612183117217,117.86768208634197,1094.0730556679773 +121.88395973243564,123.33523703654073,119.88495316810628,121.33623047221137,1085.459890808828 +125.65653611891825,127.14038418498515,123.29089632531003,124.77474439137693,1073.4397097874114 +128.92069597346688,130.20955349568973,126.63187762484937,127.92073514707224,1058.4917192891762 +131.41114890560974,132.45313613345562,129.49585703767033,130.5378442655162,1041.2118485241756 +132.96978971477444,134.3228744433646,131.08387196585088,132.43695669444105,1022.2889914100246 +133.5549991814736,135.053120145851,131.99497292310176,133.49309388747918,1002.4775425453357 +133.2323987581558,135.065460892756,131.8235156308926,133.65657776549278,1017.4326781222982 +132.1510588175171,134.08480947785137,131.0237176510951,132.95746831142935,1036.647912925193 +130.5116755897077,132.71696973631924,129.29758425495962,131.50287840157117,1054.402111088937 +128.53409061924222,130.9222390672229,127.07925728332546,129.46740573130614,1069.9874687593544 +126.4306172006658,128.5591966352313,124.94895708842891,127.07753652299444,1082.7826469085653 +124.38927906587094,125.87336879788326,123.1073244542458,124.59141418625812,1092.2775421612807 +122.56791894474918,123.61827749324543,121.2254215875191,122.27578013601534,1098.093623006649 +121.09703354508844,122.45602084147426,119.02315927992295,120.38214657630877,1099.9990206550704 +120.08693553049852,121.58571423995242,117.62555095473105,119.12432966418496,1097.9177729151318 +119.63399522490424,121.03798192673773,117.25536324735009,118.65934994918358,1091.9328525664675 +119.82146372498268,120.94065716085713,117.95421275941922,119.07340619529367,1082.2828594968707 +120.7124947130592,121.93415307848436,119.152517136663,120.37417550208815,1069.3525084777123 +122.33587608239566,123.94838830624106,120.87761530843784,122.49012753228324,1053.6572918000436 +124.66785812762632,126.75625008370868,123.18852214765032,125.27691410373268,1035.8229282236828 +127.61552102482923,129.80523536741393,126.34054904004905,128.53026338263376,1016.5604175448309 +131.00775897051096,133.06294250948164,129.94904333909741,132.0042268780681,1003.3623047221139 +134.59892592769242,136.79793765689536,133.234137558996,135.43314928819893,1023.1509825101539 +138.08766685694894,140.0546941334019,136.58837142074304,138.555398697196,1042.016703682664 +141.1500141222941,142.5489901806554,139.73776131670974,141.13673737507105,1059.2073514707224 +143.48228026040917,144.5932922665057,141.8802335303824,142.99124553647894,1074.037588995245 +144.84649927621132,146.0756620034572,142.76876627418082,143.9979290014267,1085.9161814856498 +145.1098734724699,146.57143212166807,142.649968595823,144.11152724502116,1094.3695669444105 +144.27024859045207,145.7471249168318,141.88968005898082,143.36655638536055,1099.060735569487 +142.46200877506277,143.72992039092952,140.60631434563564,141.8742259615024,1099.8026652716362 +139.9404686061768,141.00752471999962,138.7454488027266,139.81250491654941,1096.5657776549278 +137.04703875358243,138.78071046739933,135.67655244818158,137.41022416199849,1089.4791172140503 +134.16122174198705,136.42630679247307,132.66155074344638,134.9266357939324,1078.8252067375315 +131.6480122345848,134.02210748888697,130.25415962109273,132.6282548753949,1065.0287840157116 +129.80997879551026,131.86785162975886,128.70717960530897,130.76505243955756,1048.6398688853799 +128.85205701193928,130.78472862032595,127.6154547134165,129.54812632180318,1030.3118356745701 +128.8642014864336,130.59557044803222,127.39947545719488,129.13084441879352,1010.7753652299442 +129.82321172551153,131.29749357237068,128.12086294416926,129.59514479102842,1009.1906850227682 diff --git a/testdata/golden/g_VolumeByTimeProfile.csv b/testdata/golden/g_VolumeByTimeProfile.csv new file mode 100644 index 00000000..c4444112 --- /dev/null +++ b/testdata/golden/g_VolumeByTimeProfile.csv @@ -0,0 +1,81 @@ +profile +1000,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1009.933466539753,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1019.6029224367903,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1028.8182536624686,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1037.4017247479653,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1045.1926203701025,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1052.0513758310483,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1057.8630754770231,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1062.5402182355929,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1066.0246727208155,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1068.2887699900657,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1069.3355091893902,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1069.1978791021381,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1067.937326107853,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1065.6414253683688,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1062.42083633322,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1059.0923997455457,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1057.229161437609,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1056.5461552740235,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1056.7781369650359,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1057.6782375634052,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1059.0182075487667,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1060.5895988461662,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1062.205411409382,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1063.70185338835,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1064.9399523913487,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1065.806823249892,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1066.2164527322386,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1066.109908285859,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1065.4549186077095,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1064.2448099371347,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1062.496814010404,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1060.9561505702418,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1060.079620740274,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1059.7748125795194,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1059.939363893196,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1060.4644293659453,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1061.238281476872,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1062.1499144442125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1063.0925249465438,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1063.9667517688802,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1064.6835685283825,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1065.1667388139742,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1065.3547608815525,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1065.2022488461662,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1064.6807184043837,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1063.7787667662058,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1062.501657928271,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1061.58188283019,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1061.08320343209,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1060.9522016214398,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1061.1259567587074,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1061.5345735539877,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1062.1038877874562,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1062.7582466096233,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1063.4232604318636,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1064.028427317535,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1064.5095380976888,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1064.8107808332684,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1064.886476294009,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1064.7023913023047,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1064.236593510714,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1063.4798288128427,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1062.5404924989252,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1061.9345000375595,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1061.6327152443034,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1061.5965157849962,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1061.7794727439705,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1062.1292801170382,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1062.5898556431434,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1063.1035300083033,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1063.6132402202938,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1064.0646448426862,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1064.4080836585156,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1064.6003119662357,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1064.6059497563604,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1064.3985980567372,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1063.961588282607,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1063.2883449528265,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 +1062.6121242037007,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 diff --git a/testdata/golden/g_VolumeOscillator.csv b/testdata/golden/g_VolumeOscillator.csv new file mode 100644 index 00000000..6adb48b6 --- /dev/null +++ b/testdata/golden/g_VolumeOscillator.csv @@ -0,0 +1,81 @@ +VolumeOscillator +nan +nan +nan +nan +nan +nan +2.944485120824381 +2.4233551496313197 +1.8249099483522995 +1.1703741513574981 +0.4810288546519574 +-0.22194602180138306 +-0.9174914383651315 +-1.5846289906420548 +-2.202437967783152 +-2.7501263635243594 +-2.990221147224992 +-2.3736058170903385 +-0.9092238236032008 +0.9626541011689643 +2.2380956159315777 +2.856834743118027 +2.801526119903002 +2.2556386306377827 +1.6386113780015603 +0.9717129987831714 +0.2762037117147386 +-0.42677397462048344 +-1.116189420563075 +-1.7710807126112527 +-2.37055125536977 +-2.8938825886927697 +-2.8858612512455712 +-2.018292146603094 +-0.3160633691595544 +1.3901168350386197 +2.4780632155686737 +2.8998705853277076 +2.6507057444623103 +2.081853243161006 +1.4480597447687478 +0.770612614823265 +0.07074238172632877 +-0.6304448525888267 +-1.3119426687441595 +-1.952804855696438 +-2.5321680642910294 +-3.0294128500104085 +-2.7714426683679423 +-1.6550135556889456 +0.27891100117462264 +1.8124995361904053 +2.7090582819449702 +2.933248150583406 +2.492542730246492 +1.9025283658777687 +1.253785606032509 +0.5676007534602175 +-0.13483060889066778 +-0.8324361709350453 +-1.504229867824255 +-2.1292826259701174 +-2.6867775922349364 +-3.0314001431191206 +-2.52168050892119 +-1.1598663215745306 +0.7800963952321278 +2.133749406667481 +2.835669335135764 +2.863163146655406 +2.3275602948910135 +1.7181944203973185 +1.0563189165510691 +0.3632041614282994 +-0.33999147494103793 +-1.0322258138854965 +-1.6925301516616493 +-2.299996766865738 +-2.8338732145338863 +-2.9313753667015834 diff --git a/testdata/golden/g_VolumePriceTrend.csv b/testdata/golden/g_VolumePriceTrend.csv new file mode 100644 index 00000000..98249ac6 --- /dev/null +++ b/testdata/golden/g_VolumePriceTrend.csv @@ -0,0 +1,81 @@ +VolumePriceTrend +0 +35.23846334846975 +67.28610005703634 +93.902604211234 +113.38129693700746 +124.62552440614131 +127.18687817928472 +121.27817136316222 +107.76598887393993 +88.13939700624356 +64.44408394419601 +39.16606767091797 +15.04878650624725 +-5.163969835644988 +-19.04560310386921 +-24.819058919657817 +-21.590744820947457 +-9.001247255105053 +12.364293008871854 +40.87417702872969 +74.10558309315374 +109.21616070942143 +143.33002611805674 +173.85949613253283 +198.72633178288817 +216.48295914544804 +226.35409257127506 +228.2239111237439 +222.58972926909806 +210.49550857490576 +193.4507343323523 +173.33350677726543 +151.77526338881412 +130.7284037037346 +112.69461699695259 +100.11747456199654 +95.02955242864556 +98.69470036153741 +111.34685007803995 +132.11509120576815 +159.16712938807143 +190.0269073506118 +221.96925223725313 +252.38916366127233 +279.0772981880694 +300.37927882374663 +315.2519139623421 +323.2463125372833 +324.49232336071515 +319.0699912272926 +307.53455293111006 +290.97270822733896 +270.9853693869245 +249.6162457024153 +229.20727129277168 +212.17204928200428 +200.7004184615771 +196.43826120102173 +200.21483656760248 +211.89654590654695 +230.4178630945138 +253.98398621747654 +280.38331226281946 +307.5025597269186 +334.07977938002153 +358.1022292332332 +377.83565665612497 +391.94829317794915 +399.5933336845859 +400.4566687444038 +394.77517860514286 +383.32711833916613 +367.3917874103485 +348.6721834855736 +329.1732142424188 +311.0311934288754 +296.2995786620294 +286.71128760969805 +283.45552251379286 +287.0841490655749 diff --git a/testdata/golden/g_VolumeProfile.csv b/testdata/golden/g_VolumeProfile.csv new file mode 100644 index 00000000..d79f9b16 --- /dev/null +++ b/testdata/golden/g_VolumeProfile.csv @@ -0,0 +1,81 @@ +profile +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan,nan +95.93821562552817,115.1642566915892,112.67911120066519,339.27202557381503,339.27202557381503,339.27202557381503,456.1109297051646,681.1724975054628,681.1724975054628,681.1724975054628,778.2221627832005,665.5430515825353,438.9501372093855,569.4816427505712,569.4816427505712,554.6294319271722,329.567864126874,437.65282816506993,437.65282816506993,534.1242635372764,534.1242635372764,306.5430927183531,306.5430927183531,306.5430927183531,410.43727614143955,444.81680066880995,444.81680066880995,336.73183663061405,336.73183663061405,336.73183663061405,240.2604012584075,240.2604012584075,514.414569499152,378.04835166383094,274.15416824074447,274.15416824074447,274.15416824074447,396.3716527189834,515.4533870623115,358.684135192623,458.5518600106999,548.9638269965159,548.9638269965159,548.9638269965159,548.9638269965159,548.9638269965159,426.7463425182769,307.66460817494885,307.66460817494885,307.66460817494885,307.66460817494885,99.38217350879296 +95.93821562552817,115.1642566915892,112.67911120066519,339.27202557381503,339.27202557381503,339.27202557381503,456.1109297051646,570.0613863943516,570.0613863943516,570.0613863943516,667.1110516720894,554.4319404714241,327.83902609827436,458.37053163946,458.37053163946,443.518320816061,329.567864126874,437.65282816506993,437.65282816506993,534.1242635372764,534.1242635372764,306.5430927183531,306.5430927183531,306.5430927183531,410.43727614143955,444.81680066880995,444.81680066880995,434.5209502243225,434.5209502243225,434.5209502243225,338.049514852116,338.049514852116,612.2036830928604,475.8374652575394,371.94328183445293,371.94328183445293,371.94328183445293,494.16076631269186,515.4533870623115,358.684135192623,458.5518600106999,548.9638269965159,548.9638269965159,548.9638269965159,548.9638269965159,548.9638269965159,426.7463425182769,307.66460817494885,307.66460817494885,307.66460817494885,307.66460817494885,99.38217350879296 +95.93821562552817,115.1642566915892,112.67911120066519,339.27202557381503,339.27202557381503,339.27202557381503,456.1109297051646,570.0613863943516,570.0613863943516,570.0613863943516,667.1110516720894,554.4319404714241,327.83902609827436,458.37053163946,458.37053163946,341.53162750811043,227.5811708189234,335.6661348571193,335.6661348571193,432.13757022932583,432.13757022932583,204.55639941040243,204.55639941040243,204.55639941040243,308.45058283348897,444.81680066880995,444.81680066880995,434.5209502243225,434.5209502243225,434.5209502243225,338.049514852116,338.049514852116,612.2036830928604,475.8374652575394,371.94328183445293,371.94328183445293,480.6590395585888,602.8765240368277,624.1691447864474,467.39989291675886,567.2676177348358,657.6795847206517,657.6795847206517,657.6795847206517,657.6795847206517,657.6795847206517,426.7463425182769,307.66460817494885,307.66460817494885,307.66460817494885,307.66460817494885,99.38217350879296 +95.93821562552817,115.26697281350663,112.67911120066519,339.27202557381503,339.27202557381503,339.27202557381503,456.1109297051646,570.0613863943516,570.0613863943516,570.0613863943516,667.1110516720894,554.4319404714241,327.83902609827436,458.37053163946,458.37053163946,341.53162750811043,325.8402290354651,325.8402290354651,325.8402290354651,431.95880794489227,431.95880794489227,204.37763712596893,204.37763712596893,204.37763712596893,325.5920529795876,325.5920529795876,325.5920529795876,325.1221083567543,325.1221083567543,219.00352944732714,219.00352944732714,219.00352944732714,493.1576976880716,371.94328183445293,371.94328183445293,371.94328183445293,590.6547755890039,590.6547755890039,626.8326131315395,470.0633612618509,569.9310860799278,672.3891319377526,672.3891319377526,672.3891319377526,672.3891319377526,672.3891319377526,502.23738827844954,502.23738827844954,502.23738827844954,502.23738827844954,381.7765995583618,281.9088747402849 +95.93821562552817,118.47543335247398,255.95135197769713,381.6810287705419,381.6810287705419,513.1247959183102,641.3190596936456,641.3190596936456,641.3190596936456,759.9353172553251,503.98396527762793,508.7857940259688,508.7857940259688,377.3420268782005,357.232727141061,357.232727141061,463.3513060504882,463.3513060504882,344.73504848880873,214.2035429476231,214.2035429476231,350.5697607829441,350.5697607829441,458.1377857360234,350.05282169782754,350.05282169782754,243.9342427884003,243.9342427884003,426.8317033030369,290.4654854677159,290.4654854677159,548.5776671011247,548.5776671011247,594.1147291608958,521.0717659461437,521.0717659461437,778.0572542114339,778.0572542114339,778.0572542114339,824.689258287756,549.3666867966666,549.3666867966666,549.3666867966666,549.3666867966666,303.99380218668335,157.0527286233352,157.0527286233352,157.0527286233352,157.0527286233352,157.0527286233352,157.0527286233352,157.0527286233352 +95.93821562552817,121.38046215528227,292.51583083165383,436.2068900234764,436.2068900234764,714.6226019676899,714.6226019676899,714.6226019676899,848.0658917245792,555.5500608929253,561.0378651767436,561.0378651767436,410.81641700786554,417.728358280275,417.728358280275,550.376581917059,416.93329216016963,267.7544286845289,267.7544286845289,423.6015347820386,423.6015347820386,422.9553609256428,422.9553609256428,290.3071372888588,290.3071372888588,509.78408990642276,353.936983808913,353.936983808913,666.381974886843,531.9219436954938,434.50554363335726,434.50554363335726,726.0341891337748,726.0341891337748,726.0341891337748,632.6212395336352,632.6212395336352,632.6212395336352,632.6212395336352,355.6825300523807,157.0527286233352,157.0527286233352,157.0527286233352,157.0527286233352,294.5047862337832,294.5047862337832,294.5047862337832,137.452057610448,137.452057610448,137.452057610448,137.452057610448,137.452057610448 +95.93821562552817,123.36781277048146,316.6613546603678,484.30092371749413,634.5223718863723,781.030101915327,781.030101915327,914.4733916722163,745.4547248712186,579.351331430363,579.351331430363,429.12988326148485,417.728358280275,417.728358280275,569.3263281508853,435.8830383939959,286.7041749183552,286.7041749183552,468.5257986987832,602.9858298901323,467.87962484238744,316.28165497177713,316.28165497177713,535.758607589341,353.936983808913,353.936983808913,666.381974886843,531.9219436954938,449.7631127027857,449.7631127027857,586.4136012773761,586.4136012773761,586.4136012773761,493.0006516772364,493.0006516772364,493.0006516772364,355.6825300523807,512.7352586757158,157.0527286233352,157.0527286233352,157.0527286233352,294.5047862337832,294.5047862337832,294.5047862337832,274.43861104373724,274.43861104373724,274.43861104373724,274.43861104373724,274.43861104373724,136.98655343328923,136.98655343328923,136.98655343328923 +95.93821562552817,124.2878498649492,316.6613546603678,484.30092371749413,634.5223718863723,781.030101915327,781.030101915327,914.4733916722163,745.4547248712186,604.2144753429696,604.2144753429696,453.9930271740916,461.8923886282739,594.5406122650579,594.5406122650579,287.05531511992103,287.05531511992103,468.87693890034905,468.87693890034905,468.1384544930396,468.1384544930396,335.4902308562556,554.9671834738194,373.1455596933914,373.1455596933914,685.5905507713214,531.9219436954938,449.7631127027857,449.7631127027857,449.7631127027857,449.7631127027857,449.7631127027857,356.3501631026461,356.3501631026461,356.3501631026461,219.03204147779033,402.26022487168143,183.22818339389107,183.22818339389107,183.22818339389107,340.3162492344031,340.3162492344031,157.088065840512,294.0746192738012,294.0746192738012,449.5525429269462,449.5525429269462,292.4644770864343,292.4644770864343,292.4644770864343,292.4644770864343,155.47792365314504 +95.93821562552817,124.2878498649492,316.6613546603678,484.30092371749413,634.5223718863723,781.030101915327,781.030101915327,914.4733916722163,745.4547248712186,604.2144753429696,604.2144753429696,453.9930271740916,461.8923886282739,594.5406122650579,594.5406122650579,287.05531511992103,287.05531511992103,468.87693890034905,468.87693890034905,468.1384544930396,468.1384544930396,335.4902308562556,554.9671834738194,373.1455596933914,373.1455596933914,685.5905507713214,531.9219436954938,312.4449910779299,312.4449910779299,312.4449910779299,312.4449910779299,312.4449910779299,219.03204147779033,219.03204147779033,219.03204147779033,219.03204147779033,402.26022487168143,183.22818339389107,183.22818339389107,183.22818339389107,340.3162492344031,340.3162492344031,157.088065840512,294.0746192738012,294.0746192738012,449.5525429269462,449.5525429269462,507.919766837554,507.919766837554,507.919766837554,507.919766837554,370.9332134042648 +95.93821562552817,124.2878498649492,316.6613546603678,484.30092371749413,634.5223718863723,781.030101915327,781.030101915327,914.4733916722163,745.4547248712186,604.2144753429696,604.2144753429696,453.9930271740916,461.8923886282739,594.5406122650579,594.5406122650579,287.05531511992103,287.05531511992103,468.87693890034905,468.87693890034905,468.1384544930396,468.1384544930396,335.4902308562556,554.9671834738194,373.1455596933914,373.1455596933914,528.4537850135855,374.785177937758,155.30822532019414,155.30822532019414,155.30822532019414,155.30822532019414,155.30822532019414,219.03204147779033,219.03204147779033,219.03204147779033,219.03204147779033,402.26022487168143,183.22818339389107,183.22818339389107,183.22818339389107,340.3162492344031,340.3162492344031,157.088065840512,294.0746192738012,294.0746192738012,449.5525429269462,626.7403202248182,685.107544135426,685.107544135426,685.107544135426,685.107544135426,548.1209907021369 +95.93821562552817,124.2878498649492,316.6613546603678,484.30092371749413,634.5223718863723,781.030101915327,781.030101915327,914.4733916722163,745.4547248712186,604.2144753429696,604.2144753429696,453.9930271740916,461.8923886282739,594.5406122650579,594.5406122650579,287.05531511992103,287.05531511992103,468.87693890034905,468.87693890034905,468.1384544930396,468.1384544930396,335.4902308562556,335.4902308562556,153.66860707582757,153.66860707582757,308.9768323960217,155.30822532019414,155.30822532019414,155.30822532019414,155.30822532019414,155.30822532019414,155.30822532019414,219.03204147779033,219.03204147779033,219.03204147779033,219.03204147779033,402.26022487168143,183.22818339389107,183.22818339389107,183.22818339389107,340.3162492344031,340.3162492344031,157.088065840512,443.5689361225692,443.5689361225692,599.0468597757142,776.2346370735862,834.601860984194,834.601860984194,834.601860984194,685.107544135426,548.1209907021369 +95.93821562552817,124.2878498649492,316.6613546603678,484.30092371749413,634.5223718863723,781.030101915327,781.030101915327,914.4733916722163,745.4547248712186,604.2144753429696,604.2144753429696,453.9930271740916,461.8923886282739,594.5406122650579,594.5406122650579,287.05531511992103,287.05531511992103,287.05531511992103,287.05531511992103,286.3168307126116,286.3168307126116,153.66860707582757,153.66860707582757,153.66860707582757,153.66860707582757,308.9768323960217,155.30822532019414,155.30822532019414,155.30822532019414,155.30822532019414,155.30822532019414,155.30822532019414,219.03204147779033,219.03204147779033,219.03204147779033,219.03204147779033,402.26022487168143,183.22818339389107,183.22818339389107,183.22818339389107,487.1650420658163,487.1650420658163,303.9368586719252,590.4177289539824,590.4177289539824,745.8956526071274,923.0834299049994,834.601860984194,834.601860984194,834.601860984194,685.107544135426,548.1209907021369 +95.93821562552817,124.2878498649492,316.6613546603678,484.30092371749413,634.5223718863723,781.030101915327,781.030101915327,914.4733916722163,745.4547248712186,604.2144753429696,604.2144753429696,453.9930271740916,307.4852971451369,440.1335207819209,440.1335207819209,132.648223636784,132.648223636784,132.648223636784,132.648223636784,286.3168307126116,286.3168307126116,153.66860707582757,153.66860707582757,153.66860707582757,153.66860707582757,308.9768323960217,155.30822532019414,155.30822532019414,155.30822532019414,155.30822532019414,155.30822532019414,155.30822532019414,219.03204147779033,219.03204147779033,219.03204147779033,219.03204147779033,546.3043591976457,327.2723177198553,327.2723177198553,327.2723177198553,631.2091763917805,631.2091763917805,447.9809929978894,590.4177289539824,590.4177289539824,745.8956526071274,923.0834299049994,834.601860984194,834.601860984194,834.601860984194,685.107544135426,548.1209907021369 +95.93821562552817,124.2878498649492,316.6613546603678,484.30092371749413,634.5223718863723,781.030101915327,781.030101915327,781.030101915327,612.0114351143292,470.7711855860804,470.7711855860804,320.54973741720227,174.04200738824753,306.6902310250315,306.6902310250315,132.648223636784,132.648223636784,132.648223636784,132.648223636784,286.3168307126116,286.3168307126116,153.66860707582757,153.66860707582757,153.66860707582757,153.66860707582757,308.9768323960217,155.30822532019414,155.30822532019414,155.30822532019414,155.30822532019414,155.30822532019414,155.30822532019414,363.5541729756545,363.5541729756545,363.5541729756545,363.5541729756545,690.8264906955098,471.7944492177195,471.7944492177195,327.2723177198553,631.2091763917805,631.2091763917805,447.9809929978894,590.4177289539824,590.4177289539824,745.8956526071274,923.0834299049994,834.601860984194,834.601860984194,834.601860984194,685.107544135426,548.1209907021369 +95.93821562552817,124.2878498649492,316.6613546603678,484.30092371749413,484.30092371749413,630.8086537464488,630.8086537464488,630.8086537464488,461.7899869454511,320.54973741720227,320.54973741720227,320.54973741720227,174.04200738824753,306.6902310250315,306.6902310250315,132.648223636784,132.648223636784,132.648223636784,132.648223636784,286.3168307126116,286.3168307126116,153.66860707582757,153.66860707582757,153.66860707582757,153.66860707582757,308.9768323960217,155.30822532019414,302.615959084671,302.615959084671,302.615959084671,302.615959084671,302.615959084671,510.86190674013136,510.86190674013136,363.5541729756545,363.5541729756545,690.8264906955098,471.7944492177195,471.7944492177195,327.2723177198553,631.2091763917805,631.2091763917805,447.9809929978894,590.4177289539824,590.4177289539824,745.8956526071274,923.0834299049994,834.601860984194,834.601860984194,834.601860984194,685.107544135426,548.1209907021369 +95.93821562552817,124.2878498649492,169.01866680099778,336.65823585812416,336.65823585812416,483.16596588707887,483.16596588707887,483.16596588707887,314.1472990860811,320.54973741720227,320.54973741720227,320.54973741720227,174.04200738824753,306.6902310250315,306.6902310250315,132.648223636784,132.648223636784,132.648223636784,132.648223636784,286.3168307126116,286.3168307126116,153.66860707582757,153.66860707582757,153.66860707582757,328.570496261471,483.8787215816651,330.2101145058376,477.5178482703144,477.5178482703144,477.5178482703144,302.615959084671,302.615959084671,510.86190674013136,510.86190674013136,363.5541729756545,363.5541729756545,690.8264906955098,471.7944492177195,471.7944492177195,327.2723177198553,631.2091763917805,631.2091763917805,447.9809929978894,590.4177289539824,590.4177289539824,745.8956526071274,923.0834299049994,834.601860984194,834.601860984194,834.601860984194,685.107544135426,548.1209907021369 +96.54876504706593,124.2878498649492,167.63956905712635,167.63956905712635,314.1472990860811,314.1472990860811,314.1472990860811,314.1472990860811,320.54973741720227,320.54973741720227,320.54973741720227,174.04200738824753,174.04200738824753,325.6399772588578,151.59796987061029,151.59796987061029,151.59796987061029,151.59796987061029,286.05800106195943,286.05800106195943,134.46003119134912,312.0764745033289,312.0764745033289,461.9923795195947,617.3006048397889,617.3006048397889,482.8405736484398,452.5318641009368,452.5318641009368,452.5318641009368,302.615959084671,510.86190674013136,510.86190674013136,510.86190674013136,363.5541729756545,363.5541729756545,471.7944492177195,471.7944492177195,327.2723177198553,327.2723177198553,631.2091763917805,631.2091763917805,447.9809929978894,590.4177289539824,590.4177289539824,745.8956526071274,923.0834299049994,834.601860984194,834.601860984194,834.601860984194,685.107544135426,548.1209907021369 +97.93278462060415,124.2878498649492,146.50773002895474,146.50773002895474,146.50773002895474,146.50773002895474,320.54973741720227,320.54973741720227,320.54973741720227,174.04200738824753,306.6902310250315,306.6902310250315,132.648223636784,132.648223636784,132.648223636784,132.648223636784,252.16825136242767,252.16825136242767,299.41449212312955,477.0309354351093,477.0309354351093,477.0309354351093,626.9468404513751,782.2550657715693,602.3606013740834,434.11839738037725,434.11839738037725,434.11839738037725,434.11839738037725,284.2024923641114,474.3831735823387,474.3831735823387,474.3831735823387,345.4889065384215,345.4889065384215,453.7291827804865,453.7291827804865,453.7291827804865,327.2723177198553,593.2170690577899,593.2170690577899,409.9888856638988,387.7105766119695,537.2048934607374,537.2048934607374,844.5580547977728,1024.1041295903726,758.159378252438,758.159378252438,758.159378252438,608.66506140367,486.89923612963514 +100.25554360082955,124.2878498649492,149.17886347564075,149.17886347564075,149.17886347564075,149.17886347564075,267.0883955972265,267.0883955972265,267.0883955972265,117.90953212158577,117.90953212158577,117.90953212158577,117.90953212158577,237.42955984722943,512.7215716652037,394.81203954361786,547.0547052396006,547.0547052396006,547.0547052396006,696.9706102558664,832.8653074110363,678.6700522131913,559.1500244875475,414.7048692153529,414.7048692153529,414.7048692153529,264.7889641990871,264.7889641990871,437.87783333604034,437.87783333604034,437.87783333604034,308.9835662921231,308.9835662921231,592.074912450677,409.5482112191851,409.5482112191851,283.0913461585539,283.0913461585539,549.0360974964884,549.0360974964884,391.98336887315327,375.53399408456596,506.34152132723796,506.34152132723796,642.3847045237399,794.2599422076302,707.8612656622954,707.8612656622954,707.8612656622954,707.8612656622954,577.0537384196234,467.46449567299203 +102.65835969292533,124.2878498649492,117.90953212158577,117.90953212158577,117.90953212158577,117.90953212158577,117.90953212158577,117.90953212158577,117.90953212158577,237.42955984722943,493.447164765473,375.5376326438872,637.4594950601848,637.4594950601848,637.4594950601848,754.0607545172804,754.0607545172804,889.9554516724503,635.5145756486922,362.1751533325804,476.74783514939566,476.74783514939566,367.0686384290808,367.0686384290808,250.46737897198517,271.024140015237,397.48100507586815,397.48100507586815,397.48100507586815,282.90832325905285,282.90832325905285,532.3637875024433,375.9123293040217,375.9123293040217,249.45546424339048,249.45546424339048,462.2112653137381,462.2112653137381,462.2112653137381,324.79012776831985,322.34504381697906,453.15257105965105,453.15257105965105,574.079845012097,706.9706779855011,860.8673135220153,648.1115124516676,648.1115124516676,648.1115124516676,517.3039852089956,407.71474246236426,407.71474246236426 +105.7105413401633,124.2878498649492,97.78911359370845,196.86827810108687,331.7891263992013,450.2000886071878,541.5994192074502,541.5994192074502,541.5994192074502,646.5405527188362,646.5405527188362,755.2563104429722,720.3222198300814,622.533106236373,498.7842646438569,498.7842646438569,498.7842646438569,498.7842646438569,407.3849340435945,302.44380053220846,302.44380053220846,451.34499305499924,451.34499305499924,351.35823536977557,351.35823536977557,257.61695024692665,257.61695024692665,257.61695024692665,324.1485083392739,324.1485083392739,324.1485083392739,222.983016290769,222.983016290769,222.983016290769,425.7423040803568,425.7423040803568,425.7423040803568,303.59018181776275,294.08365674511396,398.72967853925155,398.72967853925155,398.72967853925155,507.5642250964531,640.455058069857,672.3204591823177,572.3553263747191,572.3553263747191,572.3553263747191,572.3553263747191,467.7093045805815,376.3849356250554,243.49410265165136 +106.26786689008574,124.2878498649492,219.00880743903568,219.00880743903568,428.8191002472846,428.8191002472846,428.8191002472846,428.8191002472846,533.7602337586707,533.7602337586707,642.4759914828065,622.533106236373,622.533106236373,498.7842646438569,498.7842646438569,498.7842646438569,407.3849340435945,407.3849340435945,302.44380053220846,302.44380053220846,564.2521106595364,564.2521106595364,464.2653529743127,464.2653529743127,370.52406785146377,370.52406785146377,370.52406785146377,437.0556259438111,437.0556259438111,314.9516454257735,314.9516454257735,222.983016290769,222.983016290769,416.39738090017596,416.39738090017596,416.39738090017596,294.2452586375819,193.41436460940696,284.7387335649331,389.3847553590707,389.3847553590707,389.3847553590707,498.21930191627223,631.1101348896763,572.3553263747191,572.3553263747191,572.3553263747191,572.3553263747191,572.3553263747191,467.7093045805815,376.3849356250554,243.49410265165136 +106.26786689008574,124.2878498649492,219.00880743903568,219.00880743903568,428.8191002472846,428.8191002472846,428.8191002472846,428.8191002472846,533.7602337586707,533.7602337586707,533.7602337586707,513.8173485122371,513.8173485122371,390.068506919721,390.068506919721,390.068506919721,298.66917631945864,298.66917631945864,193.7280428080726,193.7280428080726,564.2521106595364,564.2521106595364,464.2653529743127,464.2653529743127,370.52406785146377,370.52406785146377,370.52406785146377,437.0556259438111,437.0556259438111,314.9516454257735,451.71077738427067,359.74214824926617,359.74214824926617,553.1565128586731,553.1565128586731,553.1565128586731,431.0043905960791,330.1734965679041,284.7387335649331,389.3847553590707,389.3847553590707,389.3847553590707,498.21930191627223,631.1101348896763,572.3553263747191,572.3553263747191,572.3553263747191,572.3553263747191,572.3553263747191,467.7093045805815,376.3849356250554,243.49410265165136 +106.26786689008574,124.2878498649492,219.00880743903568,219.00880743903568,428.8191002472846,428.8191002472846,428.8191002472846,428.8191002472846,533.7602337586707,533.7602337586707,533.7602337586707,513.8173485122371,513.8173485122371,390.068506919721,390.068506919721,390.068506919721,298.66917631945864,298.66917631945864,193.7280428080726,193.7280428080726,407.8006524611147,407.8006524611147,307.81389477589096,307.81389477589096,214.0726096530421,214.0726096530421,214.0726096530421,437.0556259438111,437.0556259438111,314.9516454257735,451.71077738427067,359.74214824926617,359.74214824926617,553.1565128586731,553.1565128586731,553.1565128586731,431.0043905960791,330.1734965679041,284.7387335649331,488.06292725078237,488.06292725078237,488.06292725078237,596.8974738079838,729.7883067813879,671.0334982664307,671.0334982664307,671.0334982664307,671.0334982664307,671.0334982664307,566.3874764722931,376.3849356250554,243.49410265165136 +106.26786689008574,127.14038418498515,256.0176049182436,256.0176049182436,507.968631269058,507.968631269058,507.968631269058,624.5698907261536,624.5698907261536,624.5698907261536,611.8550795988681,338.5156572827563,453.0883390995716,453.0883390995716,453.0883390995716,353.3799784447399,236.77871898764425,236.77871898764425,506.1756533583806,383.96961618755165,383.96961618755165,269.39693437073635,269.39693437073635,269.39693437073635,381.4312610687085,224.44042897408877,380.7365797837998,268.3304775076832,268.3304775076832,481.0862785780309,481.0862785780309,481.0862785780309,481.0862785780309,322.34504381697906,559.2250559003351,559.2250559003351,668.0596024575365,800.9504354309405,935.6099915253903,722.8541904550427,722.8541904550427,722.8541904550427,830.1981614337839,483.72890660379653,483.72890660379653,350.8380736303925,107.34397097874114,107.34397097874114,107.34397097874114,107.34397097874114,107.34397097874114,107.34397097874114 +106.26786689008574,130.20955349568973,290.42910639549035,442.67177209147303,564.5375462251562,564.5375462251562,695.7139631143888,695.7139631143888,695.7139631143888,679.0004997337264,505.0966646569137,505.0966646569137,505.0966646569137,383.23089052323047,252.05447363399787,252.05447363399787,561.6673094716855,424.18551765450286,424.18551765450286,309.61283583768756,309.61283583768756,435.65145337290625,252.49548259584986,434.84099187384606,308.38412681321495,422.59985457098077,422.59985457098077,422.59985457098077,422.59985457098077,366.78908027447267,502.4715666255762,502.4715666255762,790.3899875059684,944.2866230424826,830.0708952847167,830.0708952847167,830.0708952847167,818.5344469073126,561.0861352821742,409.21089759828396,119.27107886526794,119.27107886526794,119.27107886526794,119.27107886526794,251.58254377641498,251.58254377641498,132.31146491114703,132.31146491114703,132.31146491114703,132.31146491114703,132.31146491114703,132.31146491114703 +106.26786689008574,132.45313613345562,335.5902943376519,487.83296003363466,624.9319559340282,624.9319559340282,774.847860950294,774.847860950294,732.4351883699908,576.7393584298247,571.8044264983189,571.8044264983189,434.7054305979253,284.7895255816594,411.2463906422906,594.402361419347,456.9205696021644,309.61283583768756,309.61283583768756,435.65145337290625,435.65145337290625,434.84099187384606,308.38412681321495,436.8768205407015,436.8768205407015,436.8768205407015,436.8768205407015,277.98701057625453,433.05270926323,569.0958924597319,746.2836697576039,797.3370508227172,797.3370508227172,797.3370508227172,782.0226976973756,626.9569990104002,449.7692217125282,134.17996372342643,134.17996372342643,134.17996372342643,266.4914286345735,266.4914286345735,132.31146491114703,132.31146491114703,132.31146491114703,132.31146491114703,305.84677299850966,305.84677299850966,173.5353080873626,173.5353080873626,173.5353080873626,173.5353080873626 +106.26786689008574,134.3228744433646,335.5902943376519,650.3057335500253,650.3057335500253,650.3057335500253,825.2076227356687,825.2076227356687,802.4352061292487,616.4306666415797,616.4306666415797,479.33167074118614,304.4297815555426,304.4297815555426,668.7390779858745,511.6170301948087,364.30929643033187,364.30929643033187,508.35343075629606,288.5662658238284,507.3808769574239,362.8587454595597,509.70753829097293,509.70753829097293,509.70753829097293,296.3431096801812,451.40880836715667,451.40880836715667,628.5965856650287,661.2938676262153,661.2938676262153,661.2938676262153,645.9795145008737,490.9138158138983,313.7260385160262,134.17996372342643,134.17996372342643,134.17996372342643,285.393066479023,285.393066479023,151.2131027555966,151.2131027555966,151.2131027555966,324.7484108429592,324.7484108429592,173.5353080873626,343.91680665570004,343.91680665570004,343.91680665570004,170.38149856833743,170.38149856833743,170.38149856833743 +106.26786689008574,135.053120145851,335.5902943376519,650.3057335500253,650.3057335500253,800.2216385662912,800.2216385662912,937.7034303834737,757.8089659859879,571.8044264983189,571.8044264983189,434.7054305979253,284.7895255816594,612.4676278565801,612.4676278565801,474.98583603939744,327.67810227492055,327.67810227492055,495.72959232187884,312.57362154482246,386.86610118055376,515.3587949080403,515.3587949080403,515.3587949080403,347.307304861082,433.05270926323,433.05270926323,610.240486561102,610.240486561102,481.74779283361545,481.74779283361545,615.9277565570419,311.36774102129846,134.17996372342643,134.17996372342643,134.17996372342643,134.17996372342643,285.393066479023,285.393066479023,151.2131027555966,151.2131027555966,151.2131027555966,324.7484108429592,324.7484108429592,173.5353080873626,343.91680665570004,510.99639707992264,510.99639707992264,337.46108899256006,337.46108899256006,337.46108899256006,167.07959042422263 +106.26786689008574,135.065460892756,335.5902943376519,650.3057335500253,650.3057335500253,800.2216385662912,800.2216385662912,937.7034303834737,757.8089659859879,571.8044264983189,571.8044264983189,434.7054305979253,284.7895255816594,612.4676278565801,612.4676278565801,474.98583603939744,327.67810227492055,327.67810227492055,495.72959232187884,312.57362154482246,386.86610118055376,515.3587949080403,515.3587949080403,515.3587949080403,347.307304861082,433.05270926323,433.05270926323,433.05270926323,433.05270926323,304.5600155357434,304.5600155357434,438.7399792591698,134.17996372342643,134.17996372342643,134.17996372342643,134.17996372342643,134.17996372342643,285.393066479023,285.393066479023,151.2131027555966,151.2131027555966,151.2131027555966,324.7484108429592,324.7484108429592,173.5353080873626,343.91680665570004,680.5685101003057,680.5685101003057,507.0332020129431,507.0332020129431,507.0332020129431,336.6517034446057 +106.26786689008574,135.065460892756,335.5902943376519,650.3057335500253,650.3057335500253,800.2216385662912,800.2216385662912,937.7034303834737,757.8089659859879,571.8044264983189,571.8044264983189,434.7054305979253,284.7895255816594,612.4676278565801,612.4676278565801,474.98583603939744,327.67810227492055,327.67810227492055,495.72959232187884,312.57362154482246,386.86610118055376,515.3587949080403,515.3587949080403,515.3587949080403,347.307304861082,283.558392414462,283.558392414462,283.558392414462,283.558392414462,155.06569868697542,155.06569868697542,289.24566241040185,134.17996372342643,134.17996372342643,134.17996372342643,134.17996372342643,134.17996372342643,285.393066479023,285.393066479023,151.2131027555966,151.2131027555966,151.2131027555966,324.7484108429592,324.7484108429592,321.6278670766759,492.0093656450133,828.661069089619,828.661069089619,655.1257610022564,655.1257610022564,655.1257610022564,336.6517034446057 +106.26786689008574,135.065460892756,335.5902943376519,650.3057335500253,650.3057335500253,800.2216385662912,800.2216385662912,937.7034303834737,757.8089659859879,571.8044264983189,571.8044264983189,434.7054305979253,284.7895255816594,612.4676278565801,612.4676278565801,474.98583603939744,327.67810227492055,327.67810227492055,495.72959232187884,312.57362154482246,386.86610118055376,386.86610118055376,386.86610118055376,386.86610118055376,218.81461113359546,155.06569868697542,155.06569868697542,155.06569868697542,155.06569868697542,155.06569868697542,155.06569868697542,289.24566241040185,134.17996372342643,134.17996372342643,134.17996372342643,134.17996372342643,134.17996372342643,285.393066479023,285.393066479023,151.2131027555966,151.2131027555966,301.8419757683019,475.3772838556645,475.3772838556645,472.2567400893812,642.6382386577186,979.2899421023243,979.2899421023243,655.1257610022564,655.1257610022564,655.1257610022564,336.6517034446057 +106.26786689008574,135.065460892756,335.5902943376519,650.3057335500253,650.3057335500253,800.2216385662912,800.2216385662912,937.7034303834737,757.8089659859879,571.8044264983189,571.8044264983189,434.7054305979253,284.7895255816594,612.4676278565801,612.4676278565801,474.98583603939744,327.67810227492055,327.67810227492055,327.67810227492055,144.5221314978642,218.81461113359546,218.81461113359546,218.81461113359546,218.81461113359546,218.81461113359546,155.06569868697542,155.06569868697542,155.06569868697542,155.06569868697542,155.06569868697542,155.06569868697542,289.24566241040185,134.17996372342643,134.17996372342643,134.17996372342643,134.17996372342643,134.17996372342643,285.393066479023,438.2484191589308,304.06845543550435,304.06845543550435,454.69732844820965,628.2326365355723,628.2326365355723,625.112092769289,642.6382386577186,979.2899421023243,979.2899421023243,655.1257610022564,655.1257610022564,655.1257610022564,336.6517034446057 +106.26786689008574,135.065460892756,335.5902943376519,650.3057335500253,650.3057335500253,800.2216385662912,800.2216385662912,937.7034303834737,757.8089659859879,571.8044264983189,571.8044264983189,434.7054305979253,284.7895255816594,467.9454963587158,467.9454963587158,330.4637045415332,183.15597077705638,183.15597077705638,183.15597077705638,0,218.81461113359546,218.81461113359546,218.81461113359546,218.81461113359546,218.81461113359546,155.06569868697542,155.06569868697542,155.06569868697542,155.06569868697542,155.06569868697542,155.06569868697542,289.24566241040185,134.17996372342643,134.17996372342643,288.8631989960786,288.8631989960786,288.8631989960786,440.07630175167515,592.931654431583,458.7516907081565,458.7516907081565,454.69732844820965,628.2326365355723,628.2326365355723,625.112092769289,642.6382386577186,979.2899421023243,979.2899421023243,655.1257610022564,655.1257610022564,655.1257610022564,336.6517034446057 +106.26786689008574,135.065460892756,335.5902943376519,650.3057335500253,650.3057335500253,800.2216385662912,800.2216385662912,937.7034303834737,757.8089659859879,424.496692733842,424.496692733842,287.39769683344844,137.48179181718257,320.63776259423895,320.63776259423895,183.15597077705638,183.15597077705638,183.15597077705638,183.15597077705638,0,218.81461113359546,218.81461113359546,218.81461113359546,218.81461113359546,218.81461113359546,155.06569868697542,155.06569868697542,155.06569868697542,155.06569868697542,155.06569868697542,155.06569868697542,471.291919437282,316.22622075030654,316.22622075030654,470.9094560229587,470.9094560229587,470.9094560229587,440.07630175167515,592.931654431583,458.7516907081565,458.7516907081565,454.69732844820965,628.2326365355723,628.2326365355723,625.112092769289,642.6382386577186,979.2899421023243,979.2899421023243,655.1257610022564,655.1257610022564,655.1257610022564,336.6517034446057 +106.26786689008574,135.065460892756,335.5902943376519,650.3057335500253,650.3057335500253,650.3057335500253,650.3057335500253,787.7875253672078,607.893060969722,274.5807877175762,274.5807877175762,137.48179181718257,137.48179181718257,320.63776259423895,320.63776259423895,183.15597077705638,183.15597077705638,183.15597077705638,183.15597077705638,0,218.81461113359546,218.81461113359546,218.81461113359546,218.81461113359546,218.81461113359546,155.06569868697542,155.06569868697542,338.08130252141694,338.08130252141694,338.08130252141694,338.08130252141694,654.3075232717235,499.2418245847481,316.22622075030654,470.9094560229587,470.9094560229587,470.9094560229587,440.07630175167515,592.931654431583,458.7516907081565,458.7516907081565,454.69732844820965,628.2326365355723,628.2326365355723,625.112092769289,642.6382386577186,979.2899421023243,979.2899421023243,655.1257610022564,655.1257610022564,655.1257610022564,336.6517034446057 +106.26786689008574,135.065460892756,335.5902943376519,472.6892902380455,472.6892902380455,472.6892902380455,472.6892902380455,610.171082055228,430.27661765774224,274.5807877175762,274.5807877175762,137.48179181718257,137.48179181718257,320.63776259423895,320.63776259423895,183.15597077705638,183.15597077705638,183.15597077705638,183.15597077705638,0,218.81461113359546,218.81461113359546,218.81461113359546,218.81461113359546,375.9573283700341,312.208415923414,312.208415923414,495.22401975785556,495.22401975785556,495.22401975785556,495.22401975785556,654.3075232717235,499.2418245847481,316.22622075030654,470.9094560229587,470.9094560229587,470.9094560229587,440.07630175167515,592.931654431583,458.7516907081565,458.7516907081565,454.69732844820965,628.2326365355723,628.2326365355723,625.112092769289,642.6382386577186,979.2899421023243,979.2899421023243,655.1257610022564,655.1257610022564,655.1257610022564,336.6517034446057 +106.26786689008574,135.065460892756,155.69582994016608,292.79482584055967,292.79482584055967,292.79482584055967,292.79482584055967,430.27661765774224,430.27661765774224,274.5807877175762,274.5807877175762,137.48179181718257,137.48179181718257,320.63776259423895,320.63776259423895,183.15597077705638,183.15597077705638,183.15597077705638,183.15597077705638,0,218.81461113359546,356.0543327479869,356.0543327479869,356.0543327479869,513.1970499844256,449.44813753780545,449.44813753780545,632.463741372247,632.463741372247,495.22401975785556,495.22401975785556,654.3075232717235,499.2418245847481,316.22622075030654,470.9094560229587,470.9094560229587,470.9094560229587,440.07630175167515,592.931654431583,458.7516907081565,458.7516907081565,454.69732844820965,628.2326365355723,628.2326365355723,625.112092769289,642.6382386577186,979.2899421023243,979.2899421023243,655.1257610022564,655.1257610022564,655.1257610022564,336.6517034446057 +107.32068773822765,135.065460892756,137.0989959003936,137.0989959003936,137.0989959003936,137.0989959003936,294.2210436914594,294.2210436914594,294.2210436914594,294.2210436914594,157.1220477910658,157.1220477910658,340.2780185681222,183.15597077705638,183.15597077705638,183.15597077705638,183.15597077705638,183.15597077705638,182.34550927799623,318.8371158488047,456.07683746319617,456.07683746319617,456.07683746319617,613.2195546996347,585.9397441086139,585.9397441086139,585.9397441086139,669.0668621391352,531.8271405247438,531.8271405247438,690.9106440386117,535.8449453516364,316.22622075030654,451.57405161387715,451.57405161387715,451.57405161387715,401.83925949814414,535.5876930930635,401.407729369637,401.407729369637,401.407729369637,565.4333213079395,565.4333213079395,565.4333213079395,727.2556998732522,593.5072662783328,930.1589697229384,930.1589697229384,630.7855469210654,630.7855469210654,630.7855469210654,336.6517034446057 +109.67068524069803,135.065460892756,137.48179181718257,137.48179181718257,137.48179181718257,137.48179181718257,137.48179181718257,137.48179181718257,294.4726239118023,294.4726239118023,156.99083209461975,156.99083209461975,156.99083209461975,156.99083209461975,156.99083209461975,182.34550927799623,303.6713817853815,425.66224544261837,580.2740825135999,580.2740825135999,717.7739600954837,535.4284508174875,690.4941495044629,690.4941495044629,873.5097533389045,597.5720437605377,475.58118010330077,475.58118010330077,639.398638413565,484.33293972658953,301.31733589214804,301.31733589214804,436.6651667557187,436.6651667557187,254.61890972883862,386.93037463998564,520.6788082349049,401.407729369637,401.407729369637,401.407729369637,397.8601623921835,571.3954704795461,571.3954704795461,439.0840055683991,599.4694154499393,888.0280184024584,888.0280184024584,714.4927103150959,582.6924464289788,582.6924464289788,582.6924464289788,288.5586029525191 +113.09073586402833,135.065460892756,156.99083209461975,156.99083209461975,156.99083209461975,156.99083209461975,156.99083209461975,156.99083209461975,156.99083209461975,0,182.34550927799623,291.538794534643,401.3305718261562,555.9424088971377,555.9424088971377,811.8335858629706,629.4880765849744,750.0947311192887,750.0947311192887,750.0947311192887,778.4984978827486,669.3052126261018,559.5134353345887,425.8443717748747,440.1569511389158,559.4280300041838,255.80577163542802,255.80577163542802,364.0840363262846,364.0840363262846,364.0840363262846,364.0840363262846,345.15953458825516,452.1582814641906,332.88720259892267,332.88720259892267,332.88720259892267,332.88720259892267,341.76472802905914,471.91620909458106,471.91620909458106,354.3060180624504,597.4746728903244,490.475926014389,617.6550107796763,760.8660882861527,760.8660882861527,513.5588170996378,513.5588170996378,513.5588170996378,383.97782798398873,270.3901622717638 +116.6612183117217,135.065460892756,156.29615080971104,255.56277377029897,347.0559215132266,467.3095725684345,467.3095725684345,467.3095725684345,696.126420020354,539.830269210643,638.5084411023546,638.5084411023546,638.5084411023546,755.5814735245817,692.9317170811644,692.9317170811644,601.4385693382367,482.62162395182423,372.6217218863172,493.98589323757056,591.5713214000625,336.0226319359724,218.94959951374537,218.94959951374537,317.3843855963422,317.3843855963422,317.3843855963422,317.3843855963422,196.0202142450888,301.8693861740064,399.1409742430386,301.5555460805467,301.5555460805467,301.5555460805467,301.5555460805467,203.12075999794985,424.25117649841866,424.25117649841866,424.25117649841866,318.40200456950095,318.40200456950095,449.90118364882625,449.90118364882625,674.3356526118966,674.3356526118966,558.6454472203216,453.2052361114279,453.2052361114279,453.2052361114279,453.2052361114279,224.43446896307043,224.43446896307043 +117.25536324735009,135.065460892756,99.26662296058795,298.98805665320265,298.98805665320265,298.98805665320265,398.9879676218454,517.8049130082579,517.8049130082579,616.4830848999695,616.4830848999695,616.4830848999695,733.5561173221965,682.9317259843001,682.9317259843001,591.4385782413724,472.62163285495996,372.6217218863172,677.6049231341291,677.6049231341291,422.0562336700389,304.9832012478119,304.9832012478119,403.4179873304087,403.4179873304087,403.4179873304087,403.4179873304087,282.05381597915533,378.280335914535,373.28023756354037,283.82692841458936,283.82692841458936,283.82692841458936,283.82692841458936,185.39214233199255,281.2468797037141,396.93708509528915,396.93708509528915,396.93708509528915,300.7105651599095,506.6042555934313,417.4386331968184,519.1819010090481,630.5682946251966,630.5682946251966,514.8780892336215,419.0233518619,419.0233518619,419.0233518619,419.0233518619,213.12966142837823,213.12966142837823 +117.25536324735009,135.065460892756,99.26662296058795,298.98805665320265,298.98805665320265,298.98805665320265,398.9879676218454,517.8049130082579,517.8049130082579,517.8049130082579,517.8049130082579,517.8049130082579,634.8779454304849,584.2535540925885,584.2535540925885,492.76040634966074,373.9434609632483,273.9435499946055,578.9267512424174,578.9267512424174,422.0562336700389,304.9832012478119,304.9832012478119,403.4179873304087,403.4179873304087,403.4179873304087,403.4179873304087,374.46839939232177,470.6949193277014,465.6948209767068,376.2415118277558,376.2415118277558,376.2415118277558,376.2415118277558,277.806725745159,373.66146311688055,489.3516685084556,489.3516685084556,396.93708509528915,300.7105651599095,506.6042555934313,417.4386331968184,519.1819010090481,630.5682946251966,630.5682946251966,514.8780892336215,419.0233518619,419.0233518619,419.0233518619,419.0233518619,213.12966142837823,213.12966142837823 +117.25536324735009,135.065460892756,99.26662296058795,298.98805665320265,298.98805665320265,298.98805665320265,398.9879676218454,517.8049130082579,517.8049130082579,517.8049130082579,517.8049130082579,517.8049130082579,634.8779454304849,584.2535540925885,584.2535540925885,492.76040634966074,373.9434609632483,273.9435499946055,489.4734420934665,489.4734420934665,332.602924521088,215.52989209886096,215.52989209886096,313.96467818145777,313.96467818145777,313.96467818145777,313.96467818145777,285.0150902433708,381.2416101787505,376.2415118277558,376.2415118277558,376.2415118277558,376.2415118277558,376.2415118277558,277.806725745159,373.66146311688055,489.3516685084556,589.687898980667,497.2733155675005,401.04679563212085,606.9404860656426,517.7748636690297,619.5181314812595,730.9045250974079,730.9045250974079,615.2143197058328,519.3595823341113,419.0233518619,419.0233518619,419.0233518619,213.12966142837823,213.12966142837823 +117.25536324735009,136.79793765689536,200.6864329995744,320.94008405478223,320.94008405478223,320.94008405478223,564.6090496800033,564.6090496800033,564.6090496800033,564.6090496800033,564.6090496800033,681.6820821022304,609.1056633627543,609.1056633627543,383.9434520601125,383.9434520601125,395.30772134585897,498.89001416822725,498.89001416822725,342.01949659584875,224.94646417362168,333.2247288644782,333.2247288644782,333.2247288644782,333.2247288644782,313.5165992677079,313.5165992677079,316.93305332127505,316.93305332127505,316.93305332127505,316.93305332127505,208.65478863041852,314.09499973931224,444.24648080483416,555.7311813295134,454.0751395750304,454.0751395750304,575.8471598474525,575.8471598474525,800.2816288105229,800.2816288105229,670.1301477450008,667.0050348871225,555.5203343624432,555.5203343624432,555.5203343624432,326.7495672140858,326.7495672140858,102.31509825101539,102.31509825101539,102.31509825101539,102.31509825101539 +117.25536324735009,140.0546941334019,231.11764979889847,366.4030072360073,366.4030072360073,488.62512064212626,641.3897647103709,641.3897647103709,641.3897647103709,773.0969261853763,956.1125300198178,699.5013000753237,589.7095227838105,436.9448787155659,470.7624141896299,600.2402802175902,417.2246763831488,285.5175149081433,405.8266978979839,405.8266978979839,405.8266978979839,362.73820652278215,362.73820652278215,352.147837023639,352.147837023639,352.147837023639,352.147837023639,231.83865403379838,363.6389179199155,489.05920601017976,376.10804850519855,376.10804850519855,533.0992348919477,646.1473102388697,771.4570030570367,771.4570030570367,639.6567391709195,642.1303238944246,642.1303238944246,494.0377649051113,366.25164097885823,366.25164097885823,127.89387281376924,127.89387281376924,258.14596077410226,130.252087960333,130.252087960333,130.252087960333,130.252087960333,130.252087960333,130.252087960333,130.252087960333 +117.25536324735009,142.5489901806554,258.4824702280453,413.0943072990268,413.0943072990268,703.3588289491553,703.3588289491553,703.3588289491553,703.3588289491553,1036.8969030407459,745.7934593989559,623.802595741719,471.03795167347437,619.0555889997339,619.0555889997339,436.03998516529236,285.5175149081433,420.8653457717139,420.8653457717139,547.9353979648178,391.8957490846349,381.30537958549166,381.30537958549166,381.30537958549166,381.30537958549166,377.7578126080382,377.7578126080382,394.0252325180934,394.0252325180934,542.1177915074067,550.4093797438768,693.6204572503534,693.6204572503534,689.7140661780055,546.3765940748464,546.3765940748464,398.28403508553305,398.28403508553305,127.89387281376924,127.89387281376924,258.14596077410226,130.252087960333,130.252087960333,130.252087960333,130.252087960333,130.252087960333,306.7866465387867,306.7866465387867,176.53455857845373,176.53455857845373,176.53455857845373,176.53455857845373 +117.25536324735009,144.5932922665057,293.23012912388685,473.6106057066986,473.6106057066986,808.978741022756,808.978741022756,808.978741022756,959.5012112799051,842.7490517889277,705.5093301745362,527.2839120949175,681.6653179133193,681.6653179133193,462.04659331198957,311.52412305484046,466.20735832749267,466.20735832749267,429.38401809273125,563.1324516876505,433.65458565969016,433.65458565969016,433.65458565969016,278.971350387038,429.6002233997433,451.6043573946436,451.6043573946436,490.63057595392314,635.9781013999657,635.9781013999657,635.9781013999657,464.28660367312057,464.28660367312057,291.5119515189217,291.5119515189217,146.16442607287914,146.16442607287914,295.0239551704026,148.85952909752342,148.85952909752342,148.85952909752342,148.85952909752342,148.85952909752342,325.3940876759772,176.53455857845373,176.53455857845373,176.53455857845373,391.34207637750274,391.34207637750274,214.80751779904898,214.80751779904898,214.80751779904898 +117.25536324735009,146.0756620034572,293.23012912388685,473.6106057066986,473.6106057066986,808.978741022756,808.978741022756,808.978741022756,1167.603893490538,831.2330093982309,693.9932877838395,515.7678697042207,725.0553649319929,725.0553649319929,366.43021246421085,521.113447736863,521.113447736863,447.88085609672555,447.88085609672555,452.76150474467863,452.76150474467863,452.76150474467863,448.7071424847318,448.7071424847318,470.7112764796321,618.8038354689454,465.94848278903754,465.94848278903754,465.94848278903754,461.4840358492114,294.2569850621924,294.2569850621924,146.16442607287914,146.16442607287914,146.16442607287914,295.0239551704026,148.85952909752342,148.85952909752342,148.85952909752342,148.85952909752342,148.85952909752342,360.7009993916679,211.84147029414447,211.84147029414447,390.8477351266853,390.8477351266853,359.9922950801491,359.9922950801491,359.9922950801491,359.9922950801491,180.98603024760828,180.98603024760828 +117.25536324735009,146.57143212166807,293.23012912388685,473.6106057066986,473.6106057066986,870.8142775114194,870.8142775114194,870.8142775114194,1266.04255074609,929.6716666537827,578.5614433438489,577.2745302615506,725.2492342935052,505.6305096921754,330.0209610588348,484.70419633148697,484.70419633148697,447.88085609672555,581.6292896916449,433.65458565969016,433.65458565969016,433.65458565969016,429.6002233997433,596.8272741867622,451.6043573946436,451.6043573946436,317.8559237997243,317.8559237997243,317.8559237997243,146.16442607287914,146.16442607287914,146.16442607287914,146.16442607287914,146.16442607287914,295.0239551704026,295.0239551704026,148.85952909752342,148.85952909752342,148.85952909752342,148.85952909752342,325.3940876759772,176.53455857845373,176.53455857845373,355.54082341099456,355.54082341099456,667.0102160438603,490.4756574654066,490.4756574654066,490.4756574654066,311.4693926328657,311.4693926328657,311.4693926328657 +117.25536324735009,146.57143212166807,293.23012912388685,473.6106057066986,473.6106057066986,870.8142775114194,870.8142775114194,870.8142775114194,1266.04255074609,929.6716666537827,578.5614433438489,577.2745302615506,725.2492342935052,505.6305096921754,330.0209610588348,484.70419633148697,484.70419633148697,447.88085609672555,581.6292896916449,433.65458565969016,433.65458565969016,433.65458565969016,278.971350387038,446.198401174057,300.97548438193826,300.97548438193826,167.22705078701898,167.22705078701898,167.22705078701898,146.16442607287914,146.16442607287914,146.16442607287914,146.16442607287914,146.16442607287914,295.0239551704026,295.0239551704026,148.85952909752342,148.85952909752342,148.85952909752342,148.85952909752342,325.3940876759772,176.53455857845373,176.53455857845373,355.54082341099456,512.5494999209213,824.018892553787,647.4843339753334,647.4843339753334,647.4843339753334,468.47806914279244,468.47806914279244,311.4693926328657 +117.25536324735009,146.57143212166807,293.23012912388685,473.6106057066986,473.6106057066986,870.8142775114194,870.8142775114194,870.8142775114194,1266.04255074609,929.6716666537827,578.5614433438489,577.2745302615506,725.2492342935052,505.6305096921754,330.0209610588348,484.70419633148697,484.70419633148697,447.88085609672555,447.88085609672555,299.9061520647709,299.9061520647709,299.9061520647709,145.2229167921187,312.4499675791377,167.22705078701898,167.22705078701898,167.22705078701898,167.22705078701898,167.22705078701898,146.16442607287914,146.16442607287914,146.16442607287914,146.16442607287914,146.16442607287914,295.0239551704026,295.0239551704026,148.85952909752342,148.85952909752342,148.85952909752342,148.85952909752342,325.3940876759772,333.64922504583035,333.64922504583035,512.6554898783711,669.6641663882979,981.1335590211636,804.5990004427099,804.5990004427099,647.4843339753334,468.47806914279244,468.47806914279244,311.4693926328657 +117.25536324735009,146.57143212166807,293.23012912388685,473.6106057066986,473.6106057066986,870.8142775114194,870.8142775114194,870.8142775114194,1266.04255074609,929.6716666537827,578.5614433438489,577.2745302615506,725.2492342935052,505.6305096921754,330.0209610588348,330.0209610588348,330.0209610588348,293.1976208240734,293.1976208240734,145.2229167921187,145.2229167921187,145.2229167921187,145.2229167921187,312.4499675791377,167.22705078701898,167.22705078701898,167.22705078701898,167.22705078701898,167.22705078701898,146.16442607287914,146.16442607287914,146.16442607287914,146.16442607287914,146.16442607287914,295.0239551704026,295.0239551704026,148.85952909752342,148.85952909752342,368.172684628509,368.172684628509,544.7072432069627,552.9623805768159,552.9623805768159,512.6554898783711,669.6641663882979,981.1335590211636,804.5990004427099,804.5990004427099,647.4843339753334,468.47806914279244,468.47806914279244,311.4693926328657 +117.25536324735009,146.57143212166807,293.23012912388685,473.6106057066986,473.6106057066986,870.8142775114194,870.8142775114194,870.8142775114194,1266.04255074609,929.6716666537827,578.5614433438489,395.2282732346704,543.2029772666251,323.58425266529525,147.97470403195467,147.97470403195467,147.97470403195467,293.1976208240734,293.1976208240734,145.2229167921187,145.2229167921187,145.2229167921187,145.2229167921187,312.4499675791377,167.22705078701898,167.22705078701898,167.22705078701898,167.22705078701898,167.22705078701898,146.16442607287914,146.16442607287914,146.16442607287914,146.16442607287914,327.7442789418875,476.603808039411,476.603808039411,330.4393819665318,330.4393819665318,549.7525374975173,368.172684628509,544.7072432069627,552.9623805768159,552.9623805768159,512.6554898783711,669.6641663882979,981.1335590211636,804.5990004427099,804.5990004427099,647.4843339753334,468.47806914279244,468.47806914279244,311.4693926328657 +117.25536324735009,146.57143212166807,293.23012912388685,473.6106057066986,473.6106057066986,870.8142775114194,870.8142775114194,870.8142775114194,1046.42382614476,710.052942052453,358.942718742519,175.6095486333406,323.58425266529525,323.58425266529525,147.97470403195467,147.97470403195467,147.97470403195467,293.1976208240734,293.1976208240734,145.2229167921187,145.2229167921187,145.2229167921187,145.2229167921187,312.4499675791377,167.22705078701898,167.22705078701898,167.22705078701898,167.22705078701898,321.3449374638092,300.28231274966936,300.28231274966936,300.28231274966936,300.28231274966936,481.86216561867775,630.7216947162012,476.603808039411,330.4393819665318,330.4393819665318,549.7525374975173,368.172684628509,544.7072432069627,552.9623805768159,552.9623805768159,512.6554898783711,669.6641663882979,981.1335590211636,804.5990004427099,804.5990004427099,647.4843339753334,468.47806914279244,468.47806914279244,311.4693926328657 +117.25536324735009,146.57143212166807,293.23012912388685,473.6106057066986,473.6106057066986,687.481107402241,687.481107402241,687.481107402241,863.0906560355817,526.7197719432745,175.6095486333406,175.6095486333406,323.58425266529525,323.58425266529525,147.97470403195467,147.97470403195467,147.97470403195467,293.1976208240734,293.1976208240734,145.2229167921187,145.2229167921187,145.2229167921187,145.2229167921187,312.4499675791377,319.37401993212063,319.37401993212063,319.37401993212063,319.37401993212063,473.4919066089108,452.429281894771,452.429281894771,300.28231274966936,300.28231274966936,481.86216561867775,630.7216947162012,476.603808039411,330.4393819665318,330.4393819665318,549.7525374975173,368.172684628509,544.7072432069627,552.9623805768159,552.9623805768159,512.6554898783711,669.6641663882979,981.1335590211636,804.5990004427099,804.5990004427099,647.4843339753334,468.47806914279244,468.47806914279244,311.4693926328657 +117.25536324735009,146.57143212166807,155.99040750949536,336.37088409230716,336.37088409230716,550.2413857878496,550.2413857878496,550.2413857878496,725.8509344211902,389.48005032888307,175.6095486333406,175.6095486333406,323.58425266529525,323.58425266529525,147.97470403195467,147.97470403195467,147.97470403195467,293.1976208240734,293.1976208240734,145.2229167921187,145.2229167921187,319.99622827301533,319.99622827301533,487.2232790600343,494.14733141301724,494.14733141301724,494.14733141301724,319.37401993212063,473.4919066089108,452.429281894771,452.429281894771,300.28231274966936,300.28231274966936,481.86216561867775,630.7216947162012,476.603808039411,330.4393819665318,330.4393819665318,549.7525374975173,368.172684628509,544.7072432069627,552.9623805768159,552.9623805768159,512.6554898783711,669.6641663882979,981.1335590211636,804.5990004427099,804.5990004427099,647.4843339753334,468.47806914279244,468.47806914279244,311.4693926328657 +117.95421275941922,146.57143212166807,180.38047658281178,180.38047658281178,394.25097827835424,394.25097827835424,394.25097827835424,569.8605269116948,389.48005032888307,175.6095486333406,175.6095486333406,323.58425266529525,323.58425266529525,147.97470403195467,147.97470403195467,147.97470403195467,293.1976208240734,293.1976208240734,292.4103218884859,292.4103218884859,442.2160174435401,442.2160174435401,585.5534895466992,573.4591707565446,573.4591707565446,426.2717656601774,426.2717656601774,411.31922094731453,557.4836470201936,414.1461749170345,414.1461749170345,281.01757691507055,436.657450802792,436.657450802792,585.5169799003155,304.4994029852449,304.4994029852449,304.4994029852449,523.8125585162304,368.172684628509,580.0141549226535,588.2692922925066,588.2692922925066,685.3449935402477,685.3449935402477,784.9729158789689,784.9729158789689,784.9729158789689,627.8582494115924,448.8519845790516,448.8519845790516,311.4693926328657 +119.152517136663,146.57143212166807,178.22541807961872,178.22541807961872,178.22541807961872,353.83496671295933,353.83496671295933,353.83496671295933,175.6095486333406,323.58425266529525,323.58425266529525,147.97470403195467,147.97470403195467,147.97470403195467,147.97470403195467,293.1976208240734,145.2229167921187,460.8728827601433,460.8728827601433,610.6785783151975,610.6785783151975,754.0160504183566,741.921731628202,573.4591707565446,426.2717656601774,426.2717656601774,411.31922094731453,539.2130937610838,395.8756216579246,395.8756216579246,262.7470236559607,262.7470236559607,444.32687652496907,574.5789644853021,439.72581364311065,311.8319408293414,311.8319408293414,531.145096360327,349.5652434913186,526.0998020697723,526.0998020697723,579.1481583213787,359.8350027903931,676.2238595691198,813.0200554371712,791.616379928096,791.616379928096,608.3159357161566,608.3159357161566,429.30967088361575,429.30967088361575,291.9270789374299 +120.87761530843784,146.57143212166807,175.6095486333406,175.6095486333406,175.6095486333406,175.6095486333406,305.08741466130095,305.08741466130095,129.47786602796035,129.47786602796035,129.47786602796035,129.47786602796035,256.5479182210642,256.5479182210642,271.4665329402387,418.65393803660595,562.8240358970014,712.6297314520556,712.6297314520556,855.9672035552148,862.025749364075,717.6292686169401,570.4418635205728,426.2717656601774,396.33553752040433,396.33553752040433,399.16249149012435,399.16249149012435,266.0338934881604,266.0338934881604,421.6737673758819,421.6737673758819,551.9258553362149,285.8919618480545,285.8919618480545,285.8919618480545,468.65292479054244,313.01305090282096,464.3283868272099,464.3283868272099,491.1909653342534,491.1909653342534,583.9818031845213,583.9818031845213,856.5175217382787,705.2021858138899,705.2021858138899,548.0875193465133,548.0875193465133,394.6535780614783,394.6535780614783,272.53571855375753 diff --git a/testdata/golden/g_VolumeRsi.csv b/testdata/golden/g_VolumeRsi.csv new file mode 100644 index 00000000..5db317ba --- /dev/null +++ b/testdata/golden/g_VolumeRsi.csv @@ -0,0 +1,81 @@ +VolumeRsi +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +60.064787646433295 +53.369223390916744 +50.76797621969037 +56.24103711679338 +60.70263286430292 +64.25697008353019 +67.00766225558212 +69.0394691856449 +70.4078967945208 +71.13061790141082 +71.17517416697984 +69.43763702998613 +65.92526344598548 +61.04776529751415 +55.40467349752715 +49.590072403702216 +44.05729960127891 +39.07937140620401 +40.31705886754402 +47.06633288607831 +52.484404044707745 +56.73856519749433 +59.97697347488875 +62.31186492593908 +63.810007058401844 +64.4827527053633 +64.09787984084964 +61.98843164519147 +58.32693881650029 +53.571261850012675 +48.2974585233368 +43.024544444402395 +38.116881962719454 +33.773316887326274 +39.388250016989126 +45.75229155814646 +50.883756616421174 +54.915455248245756 +57.96600317553653 +60.12230116245224 +61.42759924711106 +61.86796092165143 +61.04812300972261 +58.64161454790111 +54.88479420024629 +50.24033617805955 +45.23639004228275 +40.32192418859984 +35.79826090848553 +33.06139323176362 +40.416779259727704 +46.45725009341055 +51.301899485734396 +55.07814249254369 +57.89450314956132 +59.82486310797114 +60.89626593889841 +61.07307799983008 +59.802611116270974 +57.00660937387612 +52.995123199568695 +48.259222949126354 +43.30809532288777 +38.54545959922172 +34.22494068908357 +33.893081422439785 diff --git a/testdata/golden/g_VolumeWeightedMacd.csv b/testdata/golden/g_VolumeWeightedMacd.csv new file mode 100644 index 00000000..361a2625 --- /dev/null +++ b/testdata/golden/g_VolumeWeightedMacd.csv @@ -0,0 +1,81 @@ +macd,signal,histogram +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +1.7591434070418899,-1.2409759465301786,3.0001193535720683 +3.2929816224047244,-0.6364482706721916,3.929429893076916 +4.600845712248784,0.06185759371727177,4.538988118531512 +5.596008025136129,0.7997443179064527,4.796263707229676 +6.209759547912327,1.5210796819072359,4.688679866005091 +6.365873376349342,2.1670521744995166,4.1988212018498245 +6.0459678000299135,2.6842409245702363,3.361726875459677 +5.272769895970754,3.0293781207569723,2.2433917752137815 +4.109281093510148,3.1733651837907293,0.935915909719419 +2.6543576785145717,3.1041641830872417,-0.44980650457267 +1.0348867538932751,2.8282605258613795,-1.7933737719681044 +-0.6049205738537751,2.370503045899359,-2.975423619753134 +-2.1162844184342617,1.772264717321543,-3.8885491357558046 +-3.359961411759059,1.087967900110796,-4.447929311869855 +-4.196998051849064,0.38330577318281467,-4.580303825031879 +-4.52126159478955,-0.27063654254683395,-4.250625052242716 +-4.328914527101105,-0.8117402738207368,-3.5171742532803685 +-3.6742180742839423,-1.193403980549164,-2.4808140937347782 +-2.633420546337348,-1.385406189320922,-1.248014357016426 +-1.3027999913917654,-1.3743920295970344,0.07159203820526905 +0.22760958280167642,-1.1607918146105398,1.3884013974122162 +1.8394270089917626,-0.7607626381302329,2.6001896471219954 +3.3924248148803713,-0.20700431106215242,3.5994291259425237 +4.7490925124650545,0.45380859874147517,4.295283913723579 +5.78670494159519,1.1648614444553038,4.621843497139886 +6.408606696123115,1.864027478011012,4.544579218112103 +6.553631513389405,2.4893080160614645,4.0643234973279405 +6.202675040971087,2.9844236193827474,3.2182514215883398 +5.381641817007562,3.3040527123993892,2.077589104608173 +4.14354572580973,3.4159851141874347,0.7275606116222955 +2.6033960323181304,3.3076399032715273,-0.7042438709533969 +0.9338664325186983,2.991136773837817,-2.0572703413191187 +-0.6904635913285802,2.5002567251489642,-3.1907203164775444 +-2.129155149348918,1.8830018085492466,-4.012156957898164 +-3.2745162181650187,1.195332738320678,-4.469848956485697 +-4.054171154765825,0.4953988859091442,-4.549570040674969 +-4.3960635313792125,-0.15679610306263664,-4.239267428316576 +-4.263487049528919,-0.7043548959248077,-3.5591321536041116 +-3.6623159453347256,-1.0987497025127968,-2.5635662428219286 +-2.639479930868916,-1.304180399626946,-1.3352995312419698 +-1.2800325207151673,-1.300960682438709,0.020928161723541727 +0.2993004318927035,-1.0875925338611874,1.3868929657538909 +1.9597118214668399,-0.6812852864841171,2.640997107950957 +3.5523354052630367,-0.11680252758449663,3.6691379328475335 +4.931627153842413,0.5563214299390913,4.375305723903322 +5.957013993358203,1.2764137717283062,4.680600221629897 +6.491461459134854,1.9717534633825125,4.519707995752341 +6.475220207807155,2.572215695972465,3.90300451183469 +5.975253666440267,3.025954092034839,2.949299574405428 +5.062018890102024,3.2974293984437972,1.764589491658227 +3.8316102034964388,3.36865350578415,0.462956697712289 +2.382645343415845,3.2371857508017094,-0.8545404073858642 +0.7973958714812,2.911880433558975,-2.114484562077775 +-0.7866466352322732,2.4187434910534753,-3.2053901262857485 +-2.2297166792504015,1.7989488016796253,-4.028665480930027 +-3.401846510171225,1.1055094267661787,-4.507355936937404 +-4.194609340665892,0.3988269244419027,-4.593436265107794 +-4.53144277236683,-0.2585423684659284,-4.272900403900902 +-4.375515049665921,-0.807472059292594,-3.568042990373327 +-3.7342578637759516,-1.1977101665570418,-2.53654769721891 +-2.652676032108417,-1.3917056152972251,-1.2609704168111917 diff --git a/testdata/golden/g_VolumeWeightedSr.csv b/testdata/golden/g_VolumeWeightedSr.csv new file mode 100644 index 00000000..f1294fe2 --- /dev/null +++ b/testdata/golden/g_VolumeWeightedSr.csv @@ -0,0 +1,81 @@ +support,resistance +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +105.48528973597423,108.76572870814134 +105.35455449711873,108.6426693151496 +104.99613331709894,108.26415424635832 +104.45423797197951,107.69469606786855 +103.76663779870992,107.02741057227911 +103.06061318592951,106.33590786742543 +102.43098200940356,105.74322045382517 +102.01535087802485,105.32463051632527 +101.90645925660854,105.17147645630222 +102.1639859216411,105.35682391936476 +102.74616634399676,105.98614520029493 +103.69944091712054,106.99783391906578 +105.00121413283641,108.3204131352994 +106.57237842993837,109.87014157860129 +108.2982527721847,111.54900155100448 +110.03456839896052,113.26358031500536 +111.66103818764019,114.89853069142542 +113.08968302693143,116.3593601306946 +114.29721107031293,117.57000031802899 +115.19492692914805,118.49623152556184 +115.7610156295969,119.05680027398147 +115.97655517589826,119.23030366756598 +115.8387260537211,119.05576558295421 +115.37184795637337,118.62039443562618 +114.68531988726279,117.99056009163358 +113.92096168322644,117.24475112428712 +113.20152903795153,116.49952286227172 +112.63807685790252,115.8745407167734 +112.28618916797922,115.51073319157884 +112.21307448239781,115.48306661197938 +112.4897914934254,115.7960461414421 +113.13296008084014,116.4384854458514 +114.10446420380686,117.38847120867052 +115.33337840244192,118.60950836671032 +116.78486997883208,120.02422932037881 +118.39145629210806,121.63045737917238 +120.07205648721455,123.32931082821996 +121.71145976981019,125.01865728958238 +123.23150856387835,126.55334759289774 +124.53297461259878,127.82696093235364 +125.53022603154335,128.7609157102544 +126.13330667266112,129.34283959048057 +126.30465839074171,129.58363235409425 +126.13219687879015,129.44901840587096 +125.68534052391294,128.99791301162017 +125.05610374914488,128.32612527277806 +124.32304099775938,127.57988201018676 +123.61786680358311,126.86281318210662 +123.02767603836041,126.30743659280331 +122.65512601039703,125.9500025048885 +122.56435786720805,125.86329944126854 +122.82025525538073,126.12884972272579 +123.4777467261692,126.75897692900068 +124.52914660401476,127.75292386050552 +125.88889658382824,129.1094032659287 +127.4696659224108,130.7577583580434 +129.21644482829126,132.54053935472976 +131.0136930507936,134.33022444409997 +132.73711457487826,136.0050486727801 +134.2578843094037,137.4720686952658 +135.44786347633212,138.68508794243255 +136.27656240894459,139.56375924051807 +136.75506957168733,140.05710042578988 +136.89863428953115,140.17970291899607 +136.72570349503889,140.01027850792929 +136.33473861820534,139.5942620800032 +135.76225111438174,139.00175324359623 diff --git a/testdata/golden/g_Vortex.csv b/testdata/golden/g_Vortex.csv new file mode 100644 index 00000000..684950bc --- /dev/null +++ b/testdata/golden/g_Vortex.csv @@ -0,0 +1,81 @@ +plus,minus +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +0.8062876205932326,0.8724141448950038 +0.7557133226515321,0.9587823274823731 +0.7178364631875946,1.0346661505997647 +0.7001802321215019,1.0808744455447439 +0.6986843712681949,1.078279922178149 +0.7069779772231976,1.0200023131105818 +0.740116873487784,0.9427898315143807 +0.7849045201987698,0.8439432978075716 +0.8351671343765034,0.7430368138606207 +0.8996309215821149,0.647891177288271 +0.9946089940764229,0.5729586296298429 +1.0938166206190458,0.511160485704737 +1.1800412234543498,0.4586826847006452 +1.2436156294186278,0.42034909119684066 +1.259737524326299,0.40076089759426275 +1.2407215066327997,0.4129113134739495 +1.193393198872898,0.45690669358386055 +1.1260286549839182,0.5246596782107164 +1.0520881267907263,0.6147197656471717 +0.9843764268177706,0.727346169736431 +0.9181171575518887,0.8506667928510461 +0.8576309586736389,0.9791893739232773 +0.8083314838392014,1.0815263806800317 +0.7762867879234903,1.152990366656147 +0.7626562112826203,1.1927066798935309 +0.7737293518435798,1.194088106162823 +0.7929747655648008,1.1342736462933114 +0.8158391721750342,1.0543659250840751 +0.8582408502638299,0.954025100874828 +0.9176391560902413,0.8336873714959286 +0.9809820808273292,0.7217298952065697 +1.0449318074903795,0.621998734338291 +1.1130816511372046,0.5435962333620025 +1.1793414790364674,0.48685814111562165 +1.214422525370979,0.4470768725328655 +1.2228267347963289,0.4357414820413074 +1.1971191264616714,0.4509761753254065 +1.1505111506986854,0.49073221412650303 +1.0798245511288889,0.5437627759614148 +0.9884679607361085,0.6049051605516265 +0.902296631745136,0.6858253233110908 +0.835603140549749,0.7628530583093113 +0.7849018900132089,0.8561732370469988 +0.7432937621727275,0.9671284684489907 +0.7159948028261175,1.062594950951914 +0.7031339277540886,1.1194876596454884 +0.7054805225863746,1.1179500945303626 +0.7261672782835679,1.0608416371159735 +0.7760253448650475,0.9810843258795628 +0.8376474588630236,0.8819113677236361 +0.914123625266778,0.7797957785373941 +1.0049843670990863,0.6786529321479379 +1.0965926328574522,0.5817034405358369 +1.1795830310551538,0.4988990349200002 +1.2489810013384748,0.44725171051107426 +1.2849214519772538,0.4218243754607321 +1.2971563583190076,0.419890011688654 +1.2838285302363603,0.4400889145740829 +1.2195874253110497,0.47414877681509293 +1.1200252243353315,0.5273375603858323 +1.0249882624963933,0.6060977859708002 +0.9381449185406742,0.6970136109304005 +0.8592801995709103,0.7916954225089092 +0.7959578394127206,0.8862786895541773 +0.7471883230138028,0.9732212845339809 +0.7116166493824583,1.044085366500591 diff --git a/testdata/golden/g_Vpin.csv b/testdata/golden/g_Vpin.csv new file mode 100644 index 00000000..1553312b --- /dev/null +++ b/testdata/golden/g_Vpin.csv @@ -0,0 +1,81 @@ +Vpin +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +0.6147209805653624 +0.6147209805653624 +0.6147209805653624 +0.6147209805653624 +0.610106876757087 +0.610106876757087 +0.610106876757087 +0.610106876757087 +0.610106876757087 +0.5159624791361813 +0.5159624791361813 +0.5159624791361813 +0.5159624791361813 +0.5159624791361813 +0.4980998913301293 +0.4980998913301293 +0.4980998913301293 +0.4980998913301293 +0.5780492265833901 +0.5780492265833901 +0.5780492265833901 +0.5780492265833901 +0.5780492265833901 +0.6434028356955139 +0.6434028356955139 +0.6434028356955139 +0.6434028356955139 +0.6434028356955139 +0.5504715986361584 +0.5504715986361584 +0.5504715986361584 +0.5504715986361584 +0.5471502622986869 diff --git a/testdata/golden/g_Vwap.csv b/testdata/golden/g_Vwap.csv new file mode 100644 index 00000000..8a0029a0 --- /dev/null +++ b/testdata/golden/g_Vwap.csv @@ -0,0 +1,81 @@ +Vwap +99.66666666666667 +101.43186355934736 +103.1418467346444 +104.72524251435041 +106.11658814601071 +107.26197807148026 +108.12392454778578 +108.68473286603445 +108.94788218474959 +108.93719496319889 +108.6939142335673 +108.27212140087826 +107.73315655203712 +107.13980697732005 +106.55099511684338 +106.01754191953432 +105.574488719377 +105.24403046718167 +105.0532260289652 +105.01668973808685 +105.13625480053574 +105.40178194132667 +105.79291824018027 +106.281534783261 +106.83455123904943 +107.41687731587024 +107.99424420127528 +108.53574454861608 +109.01593726593835 +109.41640368389328 +109.72667224007039 +109.94446831076806 +110.07829451614217 +110.13781541771121 +110.13654676966519 +110.09446794810344 +110.03604107972293 +109.98753674805292 +109.97402298898915 +110.01646326126956 +110.12936768851321 +110.3193480654346 +110.58476263894983 +110.91644060152191 +111.29929375327781 +111.71449283739537 +112.14183166129912 +112.56192604713692 +112.97175975899731 +113.35701680111218 +113.70418291569361 +114.0038205912578 +114.25128187847953 +114.44692254399716 +114.59582753713786 +114.7071101701647 +114.79288203685903 +114.86700832886702 +114.94376872046713 +115.03654251078153 +115.15663068517345 +115.3123159645159 +115.50824177852617 +115.74673529012439 +116.03442015889951 +116.36702355054167 +116.73595465861783 +117.12895426065779 +117.53127179630778 +117.92724246665307 +118.30204758751894 +118.64339224639716 +118.94283972962145 +119.19660258528434 +119.4056914713997 +119.57544065225956 +119.71453548143946 +119.83373933276083 +119.94454255354819 +120.060012943307 diff --git a/testdata/golden/g_VwapStdDevBands.csv b/testdata/golden/g_VwapStdDevBands.csv new file mode 100644 index 00000000..3c49ef48 --- /dev/null +++ b/testdata/golden/g_VwapStdDevBands.csv @@ -0,0 +1,81 @@ +upper,middle,lower,stddev +99.66666666666667,99.66666666666667,99.66666666666667,0 +104.92770232875756,101.43186355934736,97.93602478993716,1.7479193847050967 +108.69244982933654,103.1418467346444,97.59124363995227,2.7753015473460683 +111.93189932087317,104.72524251435041,97.51858570782765,3.6033284032613793 +114.53906435593598,106.11658814601071,97.69411193608545,4.21123810496263 +116.41520043515631,107.26197807148026,98.1087557078042,4.5766111818380235 +117.52564075193412,108.12392454778578,98.72220834363743,4.7008581020741715 +117.92333610215195,108.68473286603445,99.44612962991695,4.619301618058748 +117.7606807047838,108.94788218474959,100.13508366471538,4.406399260017102 +117.28431319186235,108.93719496319889,100.59007673453543,4.17355911433173 +116.78832468727425,108.6939142335673,100.59950377986034,4.04720522685348 +116.50241704987188,108.27212140087826,100.04182575188464,4.115147824496811 +116.47968589146114,107.73315655203712,98.98662721261309,4.373264669712011 +116.61270359672542,107.13980697732005,97.66691035791467,4.736448309702689 +116.74883579075927,106.55099511684338,96.35315444292749,5.098920336957942 +116.7755008556913,106.01754191953432,95.25958298337734,5.378979468078491 +116.64416907064926,105.574488719377,94.50480836810475,5.534840175636129 +116.36170781621121,105.24403046718167,94.12635311815214,5.558838674514767 +115.99977207847752,105.0532260289652,94.10667997945288,5.473273024756159 +115.68962498757833,105.01668973808685,94.34375448859538,5.3364676247457385 +115.60136018812608,105.13625480053574,94.6711494129454,5.232552693795174 +115.89796439968907,105.40178194132667,94.90559948296428,5.248091229181201 +116.66684724726818,105.79291824018027,94.91898923309236,5.436964503543958 +117.87174831705467,106.281534783261,94.69132124946732,5.795106766896837 +119.37005490301797,106.83455123904943,94.29904757508089,6.267751831984268 +120.97540508158576,107.41687731587024,93.85834955015471,6.779263882857761 +122.5133395512596,107.99424420127528,93.47514885129095,7.259547674992161 +123.85005787017792,108.53574454861608,93.22143122705424,7.657156660780923 +124.90191302624947,109.01593726593835,93.12996150562722,7.942987880155563 +125.63536429903525,109.41640368389328,93.19744306875131,8.109480307570985 +126.0616675636371,109.72667224007039,93.39167691650367,8.167497661783358 +126.2271921251002,109.94446831076806,93.66174449643592,8.14136190716607 +126.19889917929945,110.07829451614217,93.95768985298488,8.06030233157864 +126.0412823154776,110.13781541771121,94.23434851994482,7.951733448883194 +125.81343590191375,110.13654676966519,94.45965763741663,7.838444566124284 +125.558861473763,110.09446794810344,94.63007442244388,7.7321967628297825 +125.3020667117573,110.03604107972293,94.77001544768856,7.633012816017189 +125.0571065920818,109.98753674805292,94.91796690402404,7.534784922014441 +124.84365683556264,109.97402298898915,95.10438914241566,7.434816923286749 +124.70178127081248,110.01646326126956,95.33114525172665,7.3426590047714555 +124.69641213938546,110.12936768851321,95.56232323764097,7.283522225436122 +124.90575483614657,110.3193480654346,95.73294129472262,7.293203385355985 +125.39453074355737,110.58476263894983,95.77499453434228,7.404884052303775 +126.18348301062304,110.91644060152191,95.64939819242079,7.63352120455056 +127.23354419335064,111.29929375327781,95.36504331320498,7.967125220036418 +128.455091588283,111.71449283739537,94.97389408650774,8.370299375443816 +129.7348038323493,112.14183166129912,94.54885949024896,8.79648608552508 +130.96398317883165,112.56192604713692,94.1598689154422,9.201028565847361 +132.09477571231508,112.97175975899731,93.84874380567953,9.561507976658891 +133.06323373058777,113.35701680111218,93.6507998716366,9.853108464737796 +133.82942039783396,113.70418291569361,93.57894543355326,10.062618741070176 +134.38352146473898,114.0038205912578,93.62411971777665,10.18985043674058 +134.74082675986074,114.25128187847953,93.76173699709831,10.24477244069061 +134.93379842260288,114.44692254399716,93.96004666539145,10.243437939302854 +135.00316845719337,114.59582753713786,94.18848661708236,10.203670460027753 +134.99008842670028,114.7071101701647,94.42413191362911,10.14148912826779 +134.93110315501633,114.79288203685903,94.65466091870172,10.06911055907865 +134.85691559183536,114.86700832886702,94.87710106589867,9.994953631484172 +134.79463700029171,114.94376872046713,95.09290044064255,9.925434139912287 +134.77190241713149,115.03654251078153,95.30118260443157,9.867679953174976 +134.8203954251308,115.15663068517345,95.4928659452161,9.831882369978679 +134.9763078430269,115.3123159645159,95.6483240860049,9.831995939255497 +135.27619921325294,115.50824177852617,95.7402843437994,9.883978717363386 +135.75170333853148,115.74673529012439,95.7417672417173,10.002484024203548 +136.4371061280408,116.03442015889951,95.63173418975822,10.201342984570644 +137.3286863495318,116.36702355054167,95.40536075155154,10.480831399495068 +138.38920728865028,116.73595465861783,95.08270202858537,10.826626315016224 +139.5521895388458,117.12895426065779,94.70571898246979,11.211617639094003 +140.73468751689697,117.53127179630778,94.3278560757186,11.60170786029459 +141.85373372480754,117.92724246665307,94.00075120849858,11.96324562907724 +142.84120096441214,118.30204758751894,93.76289421062575,12.269576688446602 +143.65355833782405,118.64339224639716,93.63322615497027,12.505083045713441 +144.27516381041042,118.94283972962145,93.61051564883248,12.666162040394488 +144.7155226374701,119.19660258528434,93.6776825330986,12.759460026092867 +145.0022544018757,119.4056914713997,93.80912854092372,12.798281465237988 +145.17232962143495,119.57544065225956,93.97855168308416,12.798444484587694 +145.26426650943495,119.71453548143946,94.16480445344395,12.774865513997753 +145.3132545167523,119.83373933276083,94.35422414876935,12.73975759199574 +145.34977527237984,119.94454255354819,94.53930983471652,12.702616359415833 +145.40173428451556,120.060012943307,94.71829160209845,12.670860670604275 diff --git a/testdata/golden/g_Vwma.csv b/testdata/golden/g_Vwma.csv new file mode 100644 index 00000000..20167be9 --- /dev/null +++ b/testdata/golden/g_Vwma.csv @@ -0,0 +1,81 @@ +Vwma +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +107.16840248784456 +107.03404029660078 +106.64744387703685 +106.06813009271337 +105.36747151127757 +104.65167748584912 +104.03406766066466 +103.62294600302437 +103.50913474659966 +103.75496515655199 +104.38642531504667 +105.38973078125531 +106.71288803948495 +108.27200429247829 +109.961332149895 +111.66548286010496 +113.27200293647165 +114.69558105089729 +115.89230072498614 +116.80360264081885 +117.37804630549776 +117.59313752430792 +117.46220386062582 +117.03493963769883 +116.39338792100067 +115.64359048017685 +114.90388973956574 +114.29147591638991 +113.9090995810912 +113.83383883834732 +114.1094284689499 +114.74301411172367 +115.70643339496955 +116.94558769530136 +118.40078133092669 +120.03131156880914 +121.7412879407798 +123.4169068867965 +124.94349323335737 +126.21814329447122 +127.16169924486086 +127.72826512643424 +127.91077111482572 +127.74169225200072 +127.2888136181166 +126.64674185351387 +125.92552344172984 +125.23811098136503 +124.68845686655843 +124.340096872643 +124.25692553900838 +124.51131787446981 +125.13802777016123 +126.13669921918579 +127.46961300548855 +129.06390589119493 +130.8183434937476 +132.61396064946732 +134.3271925036882 +135.84366020420742 +137.070652686805 +137.946589166625 +138.44629903729097 +138.5816907918401 +138.40100651771837 +137.9780420528126 +137.37156127550676 diff --git a/testdata/golden/g_Vzo.csv b/testdata/golden/g_Vzo.csv new file mode 100644 index 00000000..bc7ad80a --- /dev/null +++ b/testdata/golden/g_Vzo.csv @@ -0,0 +1,81 @@ +Vzo +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-15.05478224376557 +-25.86160453066997 +-9.865630225170182 +4.424686809100158 +17.094191402908947 +28.247082597065567 +38.00192751410802 +46.486017853024094 +53.82983111059172 +60.162165697529005 +65.60627913659204 +70.27713731073102 +74.27971721393219 +77.70820574737928 +54.28920992409892 +34.20257223275014 +16.946133867617103 +2.0887807446629667 +-11.00086910475494 +-22.662965433297423 +-32.97609873750412 +-42.03373740232213 +-49.93980247050618 +-29.38052405441704 +-11.610319332658912 +3.6946588736772368 +16.841465090723702 +28.114325688494635 +37.771152244923925 +46.04215986488339 +53.130076777653144 +59.2114526030468 +64.43864401085649 +68.94214712629558 +72.9532691239233 +50.15473259479758 +30.037441244231267 +12.404157815131985 +-2.960528490539908 +-16.28061314634677 +-27.77990027118823 +-37.67476063657015 +-46.16874597128141 +-53.449058814279454 +-32.89420703637384 +-15.288125205310449 +-0.19651215976774897 +12.757732078629804 +23.89924178077203 +33.56209762548048 +42.19768011806866 +49.85667402539471 +56.60129350795022 +62.50240865265006 +67.63623396277195 +72.08103776559044 +48.45485590187574 +28.14111105272866 +10.712593892823659 +-4.221298777496437 +-17.01141373002503 +-27.968303982513692 +-37.36356600667016 +-45.43239285822699 +-52.37680889187931 +-32.89317383754009 diff --git a/testdata/golden/g_Wad.csv b/testdata/golden/g_Wad.csv new file mode 100644 index 00000000..8cf294c9 --- /dev/null +++ b/testdata/golden/g_Wad.csv @@ -0,0 +1,81 @@ +Wad +nan +3.4552020666133956 +6.646424733950354 +9.333269096274833 +11.320390859672258 +12.495782473517068 +13.931570359723864 +11.503887366120892 +9.534610426321109 +7.553777423147906 +5.191178701408276 +2.7025216793771136 +0.35477418786108217 +-1.5976829710301388 +-2.935779103326283 +-4.375626983312117 +-2.886038118736451 +-1.5769695626179328 +0.4535323850995212 +3.1743218346830275 +6.3870222786701305 +9.849316265502893 +13.296590895793173 +16.465574904541384 +19.117855899150925 +21.603467181063593 +23.813330373716923 +25.433462380930223 +24.092480570896157 +22.241173101189503 +20.06315736906265 +17.686516751715715 +15.198704704415277 +12.866613578891872 +10.943225640709656 +9.645014916928375 +8.61141088066563 +10.89801810854 +13.384045113665593 +15.593524033777229 +18.347630692963207 +21.58104195930953 +25.049590345178927 +28.488104264344486 +31.634095020039794 +34.25120413848377 +36.15031656740861 +37.64843753178603 +39.48149966638623 +38.354158499964214 +36.89956859010603 +34.864095919841006 +32.4742267115293 +29.988104374792982 +27.672470324550204 +25.598596059384718 +23.13721148361725 +20.7585795060631 +21.87777294193755 +23.17854224873203 +25.294494278927118 +28.081280850376558 +31.33463012927764 +34.808593624711975 +38.23751603484281 +41.35976544383989 +43.94110412171493 +45.79561228312282 +47.024775010368714 +48.48633365956688 +46.105765128095626 +44.250070698668495 +42.18834965371552 +39.78606889916459 +37.30248053109851 +35.004099612561006 +33.14089717672367 +31.9042948782009 +30.439568848962196 +31.913850695821353 diff --git a/testdata/golden/g_WavePm.csv b/testdata/golden/g_WavePm.csv new file mode 100644 index 00000000..b2d76123 --- /dev/null +++ b/testdata/golden/g_WavePm.csv @@ -0,0 +1,81 @@ +WavePm +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +28.335964004009963 +32.50554641065181 +34.44838932545316 +34.33727304851097 +31.845215405348924 +25.952849970863127 +20.906257934919367 +27.22868330941627 +33.93165183807259 +38.467374954134954 +41.081662321414015 +42.218070620358105 +42.19827303091777 +41.18893790125535 +39.18138841238548 +35.917778009955526 +30.75134886434654 +23.401378364791004 +21.552779965302967 +27.816307440321463 +33.66336983313871 +37.43213987524724 +39.27626625117506 +39.455208384876016 +37.98792614128435 +34.408001501165195 +27.612633893129964 +22.638303641127937 +28.824920316723514 +35.125928092033654 +39.32165855761714 +41.67679284268118 +42.61729432158074 +42.44610938509389 +41.31314218580645 +39.19262596698899 +35.80442026744938 +30.47591484883848 +23.072143350228725 +21.872290214252416 +28.239310109161586 +33.96761403390549 +37.611250886638224 +39.34956363838275 +39.43370678337266 +37.86260159957605 +34.13200249429885 +27.146381485901244 +22.83771217367763 +29.23658127628603 +35.4267202790738 +39.5052310521138 +41.768811139849646 +42.63903209317688 +42.41044129972755 +41.22391062776972 +39.042191890073035 +35.56670494096862 +30.103295519571194 +22.6940342728323 +22.16392711592979 +28.62016462615814 +34.236319520704924 +37.762836455373176 +39.40157037056884 +39.39500801563268 +37.72164120569833 +33.83847112025551 +26.673172379019427 diff --git a/testdata/golden/g_WaveTrend.csv b/testdata/golden/g_WaveTrend.csv new file mode 100644 index 00000000..ddeef703 --- /dev/null +++ b/testdata/golden/g_WaveTrend.csv @@ -0,0 +1,81 @@ +wt1,wt2 +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +59.94637602204499,-1.895405526129021 +61.20362719997408,2.9800352126592036 +60.88601938100435,9.137189626687118 +59.002363934306786,16.02527740779802 +54.95772701154078,23.15386152304418 +45.94183938022251,29.89410629401238 +22.92182011215602,34.97376430740796 +-3.6042138138433337,37.68977331686257 +-24.291052172233538,37.299840321295655 +-38.60262727006976,34.00091307650566 +-47.84924966471847,28.59082657660469 +-53.21960061234318,21.796852472415775 +-55.43272930993223,14.18863130771848 +-54.51629699979925,6.238857371307842 +-48.64409709943714,-1.5176049945123107 +-27.615494045509433,-7.8618279406182765 +0.6194720567786618,-12.16658132092011 +23.072228439537458,-14.73301957054649 +38.6935040554464,-15.89474978169609 +48.980950826123845,-15.677670392703138 +55.3688484244614,-13.360025513252754 +58.897651062958005,-8.895606593481231 +60.243226892041804,-2.85744380317585 +59.751409200647046,4.1678445161610655 +57.36459394997908,11.683119060068034 +52.14724385907822,19.209322236598133 +38.97442594524656,25.9526904691109 +12.405939673834872,30.73285023151334 +-12.299069493081968,33.32892363196728 +-30.297932396131902,33.137320892637106 +-42.36646465839008,30.06689684155362 +-49.92791758889253,24.852600696665768 +-54.068946946539825,18.226711339381037 +-55.38030579563386,10.772335866398345 +-53.72680049817322,2.9797895147815865 +-46.81085146723718,-4.570817808803784 +-24.2375110732357,-10.605156234895034 +3.5053537237938635,-14.622731626098831 +25.207223779254576,-16.91968663829344 +40.314511361582305,-17.764881816686007 +50.32675889636273,-16.95400089160628 +56.618215560562625,-13.79598118541144 +60.17616234484919,-8.619178911273503 +61.639023170274136,-2.052253513673071 +61.3340179727393,5.354923817121884 +59.21745657887601,13.151021971962495 +54.47301893712901,20.904019535081698 +42.88309183657071,27.922833651667737 +16.797983384258778,32.960318214698596 +-8.956169531211566,35.66422406727185 +-28.005860198489476,35.395056272610866 +-40.81499534020627,32.22931705375371 +-48.802227202309616,26.9429276979277 +-53.07737480944586,20.272078685711403 +-54.20599415538564,12.805453467729379 +-51.84304172523915,5.058220804457824 +-42.242348260812875,-2.257387095946609 diff --git a/testdata/golden/g_Wedge.csv b/testdata/golden/g_Wedge.csv new file mode 100644 index 00000000..9e2cc9c2 --- /dev/null +++ b/testdata/golden/g_Wedge.csv @@ -0,0 +1,81 @@ +Wedge +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-1 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 diff --git a/testdata/golden/g_WeightedClose.csv b/testdata/golden/g_WeightedClose.csv new file mode 100644 index 00000000..7cedd8ac --- /dev/null +++ b/testdata/golden/g_WeightedClose.csv @@ -0,0 +1,81 @@ +WeightedClose +99.75 +103.2358064261408 +106.51134915748332 +109.31558479585792 +111.42442756880905 +112.67523576992727 +112.98597443293207 +112.36620783831144 +110.9180427107274 +108.82649775219599 +106.34028453423286 +103.74537561499469 +101.3347529953889 +99.37819150172825 +98.09576671227829 +97.63803999389027 +98.07472892009375 +99.39235615239389 +101.5001376899113 +104.24243761307272 +107.41561290027985 +110.78702323684249 +114.11430721063675 +117.16357145419374 +119.7257151488084 +121.63055019795274 +122.75857175838351 +123.05016794262339 +122.51180477633085 +121.21842336751901 +119.31110683063227 +116.98915760077536 +114.49614705785103 +112.10024032662247 +110.07004395857749 +108.64818240948043 +108.02555852227405 +108.31959289452305 +109.55953858880657 +111.68121041835619 +114.5322503045423 +117.88757297816161 +121.47316278726743 +124.99519232326226 +128.1707253536709 +130.7561704255396 +132.57016494952438 +133.50857021097778 +133.55053301365854 +132.75586593795128 +131.2550776986053 +129.23407695329016 +126.91580669241227 +124.54088040616134 +122.34881483819879 +120.56086831850368 +119.36498113076334 +118.90301126811374 +119.26042057771592 +120.45875530483092 +122.45156466981135 +125.1246501097061 +128.30157779318262 +131.7551099011788 +135.2245934480723 +138.43846573713427 +141.1400565618768 +143.1140042174615 +144.21007157012286 +144.36111380188333 +143.59247943663343 +142.0211716648925 +139.84449583895628 +137.31942780989448 +134.73528228094608 +132.38319421519236 +130.52628402854575 +129.3741089943372 +129.06418368570354 +129.6521615246492 diff --git a/testdata/golden/g_WickRatio.csv b/testdata/golden/g_WickRatio.csv new file mode 100644 index 00000000..cef00494 --- /dev/null +++ b/testdata/golden/g_WickRatio.csv @@ -0,0 +1,81 @@ +WickRatio +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-0.0000000000000035764755276985055 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-0.000000000000003972091164274195 +0 +0 +0 +0 +0 +0 +0 +-0.000000000000003936263655354571 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-0.0000000000000041016280761007054 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +0 +-0.000000000000004483946522962369 +0 +0 diff --git a/testdata/golden/g_WilliamsFractals.csv b/testdata/golden/g_WilliamsFractals.csv new file mode 100644 index 00000000..9a6485fc --- /dev/null +++ b/testdata/golden/g_WilliamsFractals.csv @@ -0,0 +1,81 @@ +up,down +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +115.1642566915892,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,95.93821562552817 +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +124.2878498649492,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,106.26786689008574 +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +135.065460892756,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,117.25536324735009 +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +146.57143212166807,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan diff --git a/testdata/golden/g_WilliamsR.csv b/testdata/golden/g_WilliamsR.csv new file mode 100644 index 00000000..5d13b77f --- /dev/null +++ b/testdata/golden/g_WilliamsR.csv @@ -0,0 +1,81 @@ +WilliamsR +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-87.91644897593405 +-89.70544860866045 +-90.70800279848322 +-89.07659523405101 +-82.81686000855225 +-72.25565325391874 +-58.1040687429171 +-39.49148854079055 +-12.247154322420718 +-5.957750760556211 +-5.284750420492135 +-5.674748552971825 +-5.424115399404657 +-4.594120686721562 +-3.8411492271886596 +-6.144209019967811 +-11.38522624254465 +-19.604068381656635 +-31.38818866144676 +-46.37704170278364 +-66.55005371853181 +-90.57917512683873 +-91.13961831729375 +-90.478848350668 +-87.31071371674425 +-80.36153608910769 +-68.85514665273175 +-53.406711337870654 +-34.16342172843157 +-11.712446306466088 +-11.333754142756478 +-9.559971218075157 +-7.3143867650868435 +-6.722214368832518 +-5.4195328577120785 +-4.892364018787718 +-7.320030212007219 +-12.37111159652604 +-20.176972182366416 +-31.454990897366827 +-47.664062657462615 +-69.49311116948931 +-91.52872618166774 +-91.40604100147299 +-92.1169062080036 +-89.79206636515806 +-82.48851681314306 +-70.60788554248353 +-54.960657621932015 +-33.00492493419468 +-6.69751904360078 +-6.983667249233109 +-6.576050164363101 +-5.583433365678287 +-5.86016127594818 +-7.209269479172973 +-8.390977955444345 +-10.932146973890863 +-16.41391534483647 +-24.65060053913509 +-35.655301920547295 +-49.800458286308 +-68.9202601291359 +-88.48049851308298 +-89.80442122944613 +-90.96926311748364 +-88.54749480055813 diff --git a/testdata/golden/g_WinRate.csv b/testdata/golden/g_WinRate.csv new file mode 100644 index 00000000..362d28a3 --- /dev/null +++ b/testdata/golden/g_WinRate.csv @@ -0,0 +1,81 @@ +WinRate +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 +1 diff --git a/testdata/golden/g_Wma.csv b/testdata/golden/g_Wma.csv new file mode 100644 index 00000000..b4c16992 --- /dev/null +++ b/testdata/golden/g_Wma.csv @@ -0,0 +1,81 @@ +Wma +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +106.65875203482344 +105.48560229712865 +104.25418731551888 +103.11916923371253 +102.2265993474628 +101.70087177728539 +101.63361171214989 +102.0754908042319 +103.03170082113706 +104.46148988076325 +106.28180269555946 +108.37469965400321 +110.59789201484399 +112.79745213658765 +114.8215633752758 +116.5340814131426 +117.8266956250487 +118.62860414404877 +118.91283838129993 +118.69867204978395 +118.04989950092835 +117.06913716518918 +115.8886571319358 +114.65857167764706 +113.53342418332545 +112.65838423454122 +112.15628005470488 +112.11662662568322 +112.58762958106728 +113.57187914049207 +115.02611873303107 +116.86510897784795 +118.96924186422257 +121.19522497892578 +123.38888139073244 +125.39892181651012 +127.09045884230385 +128.35705601429603 +129.1302354902316 +129.38559496112234 +129.14498743683257 +128.47456918179188 +127.47889017292344 +126.2915549615817 +125.06328817688762 +123.9484707435053 +123.09134949342682 +122.61315202607366 +122.6012578078867 +123.101392824827 +124.11354501623337 +125.59196535216539 +127.44925445799582 +129.56416974024873 +131.79245562638386 +133.97972948546231 +135.975272168778 +137.64549130253215 +138.88585469671307 +139.63022789430676 +139.85678176537692 +139.5899424382296 +138.89820938611874 +137.88803657330894 +136.69432323949454 +135.46836375248137 +134.36433293290338 diff --git a/testdata/golden/g_WoodiePivots.csv b/testdata/golden/g_WoodiePivots.csv new file mode 100644 index 00000000..810121fb --- /dev/null +++ b/testdata/golden/g_WoodiePivots.csv @@ -0,0 +1,81 @@ +pp,r1,r2,s1,s2 +99.75,101.5,102.75,98.5,96.75 +103.2358064261408,105.21610219117743,106.75760667526887,101.69430194204935,99.71400617701272 +106.51134915748332,108.40930075187866,110.03710119333992,104.88354871602206,102.98559712162672 +109.31558479585792,110.80024238043313,112.24953136417449,107.86629581211656,106.38163822754134 +111.42442756880905,112.6959583530238,114.1755625555121,109.94482336632075,108.673292582106 +112.67523576992727,114.0509132876588,115.82716261316382,110.89898644442225,109.52330892669072 +112.98597443293207,114.66926044328898,116.84754270194611,110.80769217427493,109.12440616391802 +112.36620783831144,114.0915483164463,116.28511713822658,110.17263901653116,108.4472985383963 +110.9180427107274,112.39708693487947,114.20295296946335,109.11217667614352,107.63313245199146 +108.82649775219599,109.88760365229585,111.05410745211113,107.65999395238072,106.59888805228086 +106.34028453423286,107.88152447268968,109.28093331841488,104.94087568850766,103.39963575005085 +103.74537561499469,105.77096206265162,107.44221362316294,102.07412405448336,100.04853760682643 +101.3347529953889,103.48218016442083,105.14952219012756,99.66741096968217,97.51998380065024 +99.37819150172825,101.27018140219896,102.67387748980565,97.97449541412156,96.08250551365086 +98.09576671227829,99.84443296766173,101.21614809587352,96.7240515840665,94.97538532868306 +97.63803999389027,99.33786436225238,100.86437107169697,96.11153328444568,94.41170891608358 +98.07472892009375,99.60069279312157,101.1994066830537,96.47601503016162,94.9500511571338 +99.39235615239389,100.85192768418362,102.61250516731575,97.63177866926176,96.17220713747203 +101.5001376899113,102.74473177899304,104.44489099901712,99.79997846988722,98.55538438080548 +104.24243761307272,105.82651553322012,107.90917953146571,102.15977361482713,100.57569569467974 +107.41561290027985,109.1206844603964,111.24529178505117,105.29100557562509,103.58593401550854 +110.78702323684249,112.32878088441295,114.10830699598142,109.00749712527401,107.46573947770355 +114.11430721063675,115.26918566250063,116.4218512653705,112.96164160776688,111.806763155903 +117.16357145419374,118.7170857318505,120.02894763013074,115.8517095559135,114.29819527825674 +119.7257151488084,121.80238913464852,123.45713614112239,118.07096814233454,115.99429415649442 +121.63055019795274,123.86671191007076,125.60397448259948,119.89328762542402,117.657125913306 +122.75857175838351,124.7415732556743,126.27085136223998,121.22929365181783,119.24629215452704 +123.05016794262339,124.52156978400922,125.6955112937401,121.87622643289251,120.40482459150668 +122.51180477633085,123.95533950002078,125.3305056146068,121.13663866174483,119.69310393805489 +121.21842336751901,122.80353763713414,124.56611404014362,119.45584696450953,117.8707326948944 +119.31110683063227,120.919356628115,122.90745038202715,117.32301307672012,115.71476327923739 +116.98915760077536,118.37729729214395,120.25466371492199,115.11179117799732,113.72365148662873 +114.49614705785103,115.93433976949258,117.85136222129584,112.57912460604777,111.14093189440622 +112.10024032662247,113.72343327490799,115.69782475194486,110.1258488495856,108.50265590130007 +110.07004395857749,111.62473401596233,113.31700574237296,108.37777223216686,106.82308217478202 +108.64818240948043,110.10844114682158,111.458979902557,107.297643653745,105.83738491640385 +108.02555852227405,109.55440008971985,110.75308330304362,106.82687530895028,105.29803374150448 +108.31959289452305,110.37131889896037,111.95328245652354,106.73762933695988,104.68590333252257 +109.55953858880657,111.7983894393855,113.54288798087109,107.81504004732099,105.57618919674206 +111.68121041835619,113.69173559601434,115.30435328876551,110.06859272560501,108.05806754794686 +114.5322503045423,115.97376474505627,117.21123815466355,113.29477689493503,111.85326245442106 +117.88757297816161,119.11392764460153,120.3800640946807,116.62143652808244,115.39508186164252 +121.47316278726743,123.06137240642857,124.92344665570188,119.61108853799412,118.02287891883297 +124.99519232326226,126.69948832121449,128.8446801829374,122.85000046153937,121.14570446358714 +128.1707253536709,129.7095730824924,131.74840122451127,126.13189721165205,124.59304948283052 +130.7561704255396,132.01648381340888,133.7134495213249,129.0592047176236,127.79889132975433 +132.57016494952438,134.0564579331979,135.80916742703812,130.81745545568415,129.33116247201065 +133.50857021097778,135.0221674988538,136.56671743372704,131.96402027610455,130.45042298822852 +133.55053301365854,135.2775503964245,136.79247827552194,132.03560513456108,130.30858775179513 +132.75586593795128,134.48801422480747,135.81695776470755,131.4269223980512,129.69477411119502 +131.2550776986053,133.212571142251,134.67446317996493,129.79318566089137,127.83569221724568 +129.23407695329016,131.38889662325485,133.0770587371876,127.54591483935741,125.39109516939271 +126.91580669241227,128.88265629639562,130.52604623921468,125.27241674959325,123.30556714560988 +124.54088040616134,125.97443635807687,127.3069247497988,123.20839201443941,121.77483606252387 +122.34881483819879,123.47220808887849,124.74167074392513,121.07935218315215,119.95595893247246 +120.56086831850368,122.09857735708441,123.99372988005499,118.6657157955331,117.12800675695237 +119.36498113076334,121.10441130679563,123.32514441598471,117.14424802157426,115.40481784554197 +118.90301126811374,120.5506592888774,122.68562994750138,116.76804060948976,115.1203925887261 +119.26042057771592,120.56662839601262,122.24686497915383,117.58018399457471,116.27397617627801 +120.45875530483092,121.76499347299884,123.24039124665228,118.98335753117748,117.67711936300955 +122.45156466981135,124.02551403118485,125.52233766761456,120.95474103338164,119.38079167200813 +125.1246501097061,127.06077807176187,128.69237804576446,123.49305013570351,121.55692217364773 +128.30157779318262,130.2626065463162,131.76626412054748,126.7979202189513,124.83689146581774 +131.7551099011788,133.56117646326018,134.86900907156303,130.44727729287595,128.64121073079457 +135.2245934480723,137.21504933714863,138.78839354597167,133.65124923924927,131.66079335017295 +138.43846573713427,140.2885600535255,141.90478844979313,136.82223734086662,134.9721430244754 +141.1400565618768,142.54235180704387,143.95128542582248,139.7311229430982,138.32882769793113 +143.1140042174615,144.34777490454061,145.8270629535848,141.63471616841733,140.40094548133823 +144.21007157012286,145.6513768660649,147.51696729939925,142.34448113678852,140.90317584084647 +144.36111380188333,146.07225900794367,148.2825773277284,142.1507954820986,140.43965027603826 +143.59247943663343,145.29527881428604,147.44992429448442,141.43783395643504,139.73503457878243 +142.0211716648925,143.43602898414937,145.1447777101864,140.3124229388555,138.89756561959862 +139.84449583895628,140.94354287518595,142.1065717562293,138.68146695791293,137.58241992168325 +137.31942780989448,138.96230317160737,140.42358582911223,135.85814515238962,134.21526979067673 +134.73528228094608,136.80901381844578,138.50003832997277,133.0442577694191,130.9705262319194 +132.38319421519236,134.512228809292,136.1511420829866,130.74428094149775,128.6152463473981 +130.52628402854575,132.34538845178253,133.68695605299564,129.18471642733263,127.36561200409585 +129.3741089943372,131.1327632752579,132.54338290124667,127.96348936834846,126.20483508742775 +129.06418368570354,130.7288919142122,132.26027867654088,127.53279692337486,125.8680886948662 +129.6521615246492,131.18346010512911,132.8287921528506,128.0068294769277,126.47553089644776 diff --git a/testdata/golden/g_YangZhangVolatility.csv b/testdata/golden/g_YangZhangVolatility.csv new file mode 100644 index 00000000..5bb978c1 --- /dev/null +++ b/testdata/golden/g_YangZhangVolatility.csv @@ -0,0 +1,81 @@ +YangZhangVolatility +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +49.73055495862566 +50.336835888606245 +50.295708637493 +50.178204290204896 +50.13500061838614 +50.082231586072865 +49.84286975984059 +49.50493858970139 +49.322645888630454 +49.19097727711584 +48.42240617471159 +46.77302381525692 +44.85314201755732 +43.54507114802991 +42.97228741301452 +42.97734042325523 +43.20631978759911 +43.20662413494581 +42.58930617540846 +40.89412331534842 +38.83851112615815 +37.720252605227124 +38.30287560847133 +39.62204658168134 +40.714023436052216 +41.20636344894946 +41.37405384917847 +41.32956401867747 +41.22692028198685 +41.20059009224168 +41.56918441089111 +42.41850760081713 +43.146978957463645 +43.29018011572681 +43.07528004927498 +42.95385328982968 +42.96029639310158 +42.738983498649226 +42.33165549106008 +42.05720013603713 +41.91871616490789 +41.51674337539882 +40.39240367038708 +38.863351643614735 +37.73746009779785 +37.27247577288424 +37.13827969402811 +37.3134235783825 +37.40917901771012 +37.19745995333772 +36.299095777382355 +34.776647740826775 +33.385150451849164 +33.2477055348835 +34.33953885180244 +35.62112776659788 +36.41178691335502 +36.74335954813314 +36.783384570849684 +36.618381911488115 diff --git a/testdata/golden/g_YoyoExit.csv b/testdata/golden/g_YoyoExit.csv new file mode 100644 index 00000000..ca532373 --- /dev/null +++ b/testdata/golden/g_YoyoExit.csv @@ -0,0 +1,81 @@ +YoyoExit +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +91.78705253596317 +91.78705253596317 +91.78705253596317 +91.78705253596317 +91.78705253596317 +93.76874235362372 +96.30368321728294 +99.27319152233567 +102.53628871165947 +105.90743353308245 +109.03984187521431 +111.69586763738577 +113.66018608319966 +114.85099508897224 +115.26758486242993 +115.26758486242993 +115.26758486242993 +115.26758486242993 +115.26758486242993 +115.26758486242993 +115.26758486242993 +115.26758486242993 +115.26758486242993 +115.26758486242993 +115.26758486242993 +115.26758486242993 +115.26758486242993 +115.26758486242993 +115.26758486242993 +115.26758486242993 +116.78593818129563 +119.72615665138063 +122.28110695003353 +124.2292677332288 +125.4347902488179 +125.71073220646969 +125.71073220646969 +125.71073220646969 +125.71073220646969 +125.71073220646969 +125.71073220646969 +125.71073220646969 +125.71073220646969 +125.71073220646969 +125.71073220646969 +125.71073220646969 +125.71073220646969 +125.71073220646969 +125.71073220646969 +125.71073220646969 +125.71073220646969 +127.53661361522211 +130.56268059440282 +133.14441463912604 +135.07600944003934 +136.17565323626474 +136.28777638796433 +136.28777638796433 +136.28777638796433 +136.28777638796433 +136.28777638796433 +136.28777638796433 +136.28777638796433 +136.28777638796433 +136.28777638796433 +136.28777638796433 +136.28777638796433 diff --git a/testdata/golden/g_ZScore.csv b/testdata/golden/g_ZScore.csv new file mode 100644 index 00000000..25b8cf9b --- /dev/null +++ b/testdata/golden/g_ZScore.csv @@ -0,0 +1,81 @@ +ZScore +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +-1.6510031345360985 +-1.8351734020619446 +-1.686230254321296 +-1.3918946777476568 +-1.0236473917120887 +-0.5702742910989914 +0.019480138537002274 +0.7885075040216408 +1.608387013830157 +2.1072567919851166 +2.179990311288901 +2.040145320583165 +1.8365995731545162 +1.6176964102060656 +1.390646591481724 +1.148061891655118 +0.8745569977232153 +0.5457133727762037 +0.12450101898870443 +-0.4329034563978615 +-1.1105437880322822 +-1.673111303671988 +-1.8335683910962592 +-1.6723617751760178 +-1.3730524980992889 +-1.0008348655594619 +-0.5414139428232603 +0.057795610179285944 +0.8358741924023011 +1.6482348496708503 +2.121104074324071 +2.1757597137025457 +2.0296527489100757 +1.8245613570751555 +1.6052118650752287 +1.3775704761195566 +1.1337306317676745 +0.8578709777075315 +0.5249601504290718 +0.09721798265860497 +-0.4685966442122677 +-1.1486050265300185 +-1.6938053429692732 +-1.8309436870507008 +-1.6580986397459863 +-1.354000335128916 +-0.9777582196284651 +-0.5121157304889483 +0.09671693506455456 +0.8834513224640633 +1.6868984777863452 +2.133551054467913 +2.170937156840702 +2.0190000445159493 +1.8124869971377313 +1.592704323781786 +1.3644453252329645 +1.1193010842482376 +0.841009226079217 +0.5039122232165156 +0.06948985721785739 +-0.5047181204563098 +-1.1862763446920759 +-1.7130664151544908 +-1.8273438522808088 +-1.6434614671216061 +-1.3347397377421124 diff --git a/testdata/golden/g_ZeroLagMacd.csv b/testdata/golden/g_ZeroLagMacd.csv new file mode 100644 index 00000000..22038b0a --- /dev/null +++ b/testdata/golden/g_ZeroLagMacd.csv @@ -0,0 +1,81 @@ +macd,signal,histogram +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +nan,nan,nan +-1.6170719860735971,1.500164024608185,-3.1172360106817822 +-1.8110912882781207,0.7195028747118108,-2.5305941629899316 +-1.8452707394575754,0.10195898839150293,-1.9472297278490782 +-1.716072306627396,-0.32692087563976685,-1.3891514309876292 +-1.4346732374215065,-0.5546693329613017,-0.8800039044602048 +-1.0259373247852466,-0.5834713070341307,-0.4424660177511158 +-0.5261711695337112,-0.4303778464954234,-0.09579332303828786 +0.020136026855652744,-0.1261456880307768,0.14628171488642955 +0.5642993351436161,0.2871896583393011,0.277109676804315 +1.0577965668451412,0.7597864292697514,0.29801013757538986 +1.4566098084074781,1.238200619265313,0.21840918914216512 +1.7251628040274198,1.6699422610752828,0.055220542952137075 +1.839502921900234,2.007973561376469,-0.1684706394762352 +1.789443805437287,2.214743964395463,-0.42530015895817597 +1.579477565629361,2.265398875291415,-0.6859213096620542 +1.228375220750749,2.1498728752067406,-0.9214976544559916 +0.7675112171519203,1.8736781752986902,-1.10616695814677 +0.23806180337069804,1.4573158589540616,-1.2192540555833635 +-0.312672401544404,0.9343607144283145,-1.2470331159727186 +-0.8354910914814582,0.3483891540511789,-1.1838802455326372 +-1.2836887850950234,-0.2509767512648993,-1.032712033830124 +-1.617226583615917,-0.8125569694939239,-0.8046696141219931 +-1.8063084986285673,-1.288233135482608,-0.5180753631459594 +-1.8340428681235323,-1.6372883893672954,-0.19675447875623697 +-1.6979511102176872,-1.830080579970452,0.13212946975276485 +-1.4101890313872332,-1.850721432146793,0.4405324007595599 +-0.9964609123997974,-1.6985229798211636,0.7020620674213662 +-0.4937233674083643,-1.3880826026717834,0.8943592352634191 +0.053115920869160504,-0.9479995435999605,1.001115464469121 +0.5952097011087858,-0.4183379684078186,1.0135476695166044 +1.08413455566793,0.1529364569203635,0.9311980987475665 +1.4762164373709936,0.7142278501482111,0.7619885872227825 +1.7364319548996434,1.214907446421661,0.5215245084779825 +1.8415369176520642,1.6098260805937719,0.23171083705829232 +1.7821426772784434,1.863338527672966,-0.08119585039452248 +1.5635547930883718,1.9524800419922983,-0.38892524890392655 +1.2052991062978435,1.8690111906503595,-0.6637120843525159 +0.7393775578306361,1.6201481890023488,-0.8807706311717127 +0.20740955252853155,1.227913383823025,-1.0205038312944934 +-0.34308577661769846,0.7271638031949601,-1.0702495798126586 +-0.8629343098101288,0.1624737898491387,-1.0254080996592674 +-1.3056995171492929,-0.41584989244900744,-0.8898496247002854 +-1.631830494827824,-0.9562645862496053,-0.6755659085782186 +-1.81219492903341,-1.4105982968693187,-0.40159663216409136 +-1.830681398371837,-1.7383548371897037,-0.09232656118213334 +-1.685638558851565,-1.9103330377091343,0.22469447885756932 +-1.3900226532957447,-1.9112367655854312,0.5212141122896865 +-0.9702401685862867,-1.7410426395104779,0.7708024709241912 +-0.4637890227074877,-1.4150032943207012,0.9512142716132135 +0.08409101268591712,-0.9622859278239085,1.0463769405098255 +0.6244594464075419,-0.42336776528913134,1.0478272116966734 +1.1090467761140985,0.15357888489338775,0.9554678912207107 diff --git a/testdata/golden/g_ZigZag.csv b/testdata/golden/g_ZigZag.csv new file mode 100644 index 00000000..544dd8fd --- /dev/null +++ b/testdata/golden/g_ZigZag.csv @@ -0,0 +1,81 @@ +swing,direction +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +115.1642566915892,1 +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +95.93821562552817,-1 +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +124.2878498649492,1 +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +106.26786689008574,-1 +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +135.065460892756,1 +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +117.25536324735009,-1 +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +146.57143212166807,1 +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +nan,nan +127.39947545719488,-1 diff --git a/testdata/golden/g_Zlema.csv b/testdata/golden/g_Zlema.csv new file mode 100644 index 00000000..05572be3 --- /dev/null +++ b/testdata/golden/g_Zlema.csv @@ -0,0 +1,81 @@ +Zlema +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +nan +100.7006383462164 +102.75754626807519 +105.53808399051023 +108.825335906259 +112.35888340022997 +115.85783256720504 +119.04570221977386 +121.67494484240153 +123.5489064916891 +124.53926089634813 +124.59735770453659 +123.75846881944419 +122.13855147050415 +119.92381539734285 +117.35402454650284 +114.70102356260197 +112.24440608755435 +110.24649734871412 +108.92888490233219 +108.4525932218794 +108.90367242687849 +110.28548790541825 +112.51839908768257 +115.44685564200324 +118.85327684504199 +122.47747400580855 +126.03988072106378 +129.2665156341068 +131.91344764137474 +133.78857796369468 +134.76879319939962 +134.81095699362237 +133.95575835408553 +132.32407275374717 +130.1061609845858 +127.5446705208461 +124.91295776355838 +122.49066751865709 +120.53875107177763 +119.27615437788633 +118.8602587032239 +119.37282086660088 +120.81266896854164 +123.09580605288045 +126.06291242009007 +129.49357641489198 +133.12598247854692 +136.68029777712187 +139.88366833606898 +142.4945918406224 +144.32448994346933 +145.25455308200972 +145.24635310118293 +144.34527568209558 +142.67646596281858 +140.4336495126345 +137.86182724505238 +135.23539007821267 +132.83360829206487 +130.91568504259456 +129.6976024262564 diff --git a/testdata/golden/golden_manifest.json b/testdata/golden/golden_manifest.json new file mode 100644 index 00000000..09757e5d --- /dev/null +++ b/testdata/golden/golden_manifest.json @@ -0,0 +1,3559 @@ +[ + { + "canonical": "AbandonedBaby", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Abcd", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "AbsoluteBreadthIndex", + "arch": "cross", + "params": [] + }, + { + "canonical": "AccelerationBands", + "arch": "multi_candle", + "params": [ + 14, + 2.0 + ], + "n": 3 + }, + { + "canonical": "AcceleratorOscillator", + "arch": "scalar_candle", + "params": [ + 3, + 7, + 14 + ] + }, + { + "canonical": "AdOscillator", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "AdVolumeLine", + "arch": "cross", + "params": [] + }, + { + "canonical": "AdaptiveCci", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "AdaptiveCycle", + "arch": "scalar_f64", + "params": [] + }, + { + "canonical": "AdaptiveLaguerreFilter", + "arch": "scalar_f64", + "params": [ + 20 + ] + }, + { + "canonical": "AdaptiveRsi", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Adl", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "AdvanceBlock", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "AdvanceDecline", + "arch": "cross", + "params": [] + }, + { + "canonical": "AdvanceDeclineRatio", + "arch": "cross", + "params": [] + }, + { + "canonical": "Adx", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 3 + }, + { + "canonical": "Adxr", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "Alligator", + "arch": "multi_candle", + "params": [ + 3, + 7, + 14 + ], + "n": 3 + }, + { + "canonical": "Alma", + "arch": "scalar_f64", + "params": [ + 9, + 0.85, + 6.0 + ] + }, + { + "canonical": "Alpha", + "arch": "pairwise", + "params": [ + 14, + 2.0 + ] + }, + { + "canonical": "AmihudIlliquidity", + "arch": "trade", + "params": [ + 20 + ] + }, + { + "canonical": "AnchoredRsi", + "arch": "scalar_f64", + "params": [] + }, + { + "canonical": "AnchoredVwap", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "AndrewsPitchfork", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 3 + }, + { + "canonical": "Apo", + "arch": "scalar_f64", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "Aroon", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 2 + }, + { + "canonical": "AroonOscillator", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "Atr", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "AtrBands", + "arch": "multi_candle", + "params": [ + 14, + 2.0 + ], + "n": 3 + }, + { + "canonical": "AtrRatchet", + "arch": "multi_candle", + "params": [ + 14, + 2.0, + 0.5 + ], + "n": 2 + }, + { + "canonical": "AtrTrailingStop", + "arch": "scalar_candle", + "params": [ + 14, + 2.0 + ] + }, + { + "canonical": "AutoFib", + "arch": "multi_candle", + "params": [], + "n": 7 + }, + { + "canonical": "Autocorrelation", + "arch": "scalar_f64", + "params": [ + 10, + 1 + ] + }, + { + "canonical": "AutocorrelationPeriodogram", + "arch": "scalar_f64", + "params": [ + 10, + 48 + ] + }, + { + "canonical": "AverageDailyRange", + "arch": "scalar_candle", + "params": [ + 14, + 0 + ] + }, + { + "canonical": "AverageDrawdown", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "AvgPrice", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "AwesomeOscillator", + "arch": "scalar_candle", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "AwesomeOscillatorHistogram", + "arch": "scalar_candle", + "params": [ + 3, + 7, + 14 + ] + }, + { + "canonical": "BalanceOfPower", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "BandpassFilter", + "arch": "scalar_f64", + "params": [ + 20, + 0.3 + ] + }, + { + "canonical": "Bat", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "BeltHold", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Beta", + "arch": "pairwise", + "params": [ + 14 + ] + }, + { + "canonical": "BetaNeutralSpread", + "arch": "pairwise", + "params": [ + 14 + ] + }, + { + "canonical": "BetterVolume", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "BipowerVariation", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "BodySizePct", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "BollingerBands", + "arch": "multi_f64", + "params": [ + 20, + 2.0 + ], + "n": 4 + }, + { + "canonical": "BollingerBandwidth", + "arch": "scalar_f64", + "params": [ + 14, + 2.0 + ] + }, + { + "canonical": "BomarBands", + "arch": "multi_f64", + "params": [ + 4, + 0.85 + ], + "n": 3 + }, + { + "canonical": "BreadthThrust", + "arch": "cross", + "params": [ + 10 + ] + }, + { + "canonical": "Breakaway", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "BullishPercentIndex", + "arch": "cross", + "params": [] + }, + { + "canonical": "BurkeRatio", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Butterfly", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "CalendarSpread", + "arch": "deriv", + "params": [] + }, + { + "canonical": "CalmarRatio", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Camarilla", + "arch": "multi_candle", + "params": [], + "n": 9 + }, + { + "canonical": "CandleVolume", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 2 + }, + { + "canonical": "Cci", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "CenterOfGravity", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "CentralPivotRange", + "arch": "multi_candle", + "params": [], + "n": 3 + }, + { + "canonical": "Cfo", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "ChaikinMoneyFlow", + "arch": "scalar_candle", + "params": [ + 20 + ] + }, + { + "canonical": "ChaikinOscillator", + "arch": "scalar_candle", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "ChaikinVolatility", + "arch": "scalar_candle", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "ChandeKrollStop", + "arch": "multi_candle", + "params": [ + 3, + 2.0, + 7 + ], + "n": 2 + }, + { + "canonical": "ChandelierExit", + "arch": "multi_candle", + "params": [ + 14, + 2.0 + ], + "n": 2 + }, + { + "canonical": "ChoppinessIndex", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "ClassicPivots", + "arch": "multi_candle", + "params": [], + "n": 7 + }, + { + "canonical": "CloseVsOpen", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "ClosingMarubozu", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Cmo", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "CoefficientOfVariation", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Cointegration", + "arch": "multi_pairwise", + "params": [ + 40, + 1 + ], + "n": 3 + }, + { + "canonical": "CommonSenseRatio", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "CompositeProfile", + "arch": "multi_candle", + "params": [ + 20, + 24, + 0.7 + ], + "n": 3 + }, + { + "canonical": "ConcealingBabySwallow", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "ConditionalValueAtRisk", + "arch": "scalar_f64", + "params": [ + 20, + 0.95 + ] + }, + { + "canonical": "ConnorsRsi", + "arch": "scalar_f64", + "params": [ + 3, + 7, + 14 + ] + }, + { + "canonical": "Coppock", + "arch": "scalar_f64", + "params": [ + 3, + 7, + 14 + ] + }, + { + "canonical": "CorrelationTrendIndicator", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Counterattack", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Crab", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "CumulativeVolumeDelta", + "arch": "trade", + "params": [] + }, + { + "canonical": "CumulativeVolumeIndex", + "arch": "cross", + "params": [] + }, + { + "canonical": "CupAndHandle", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "CyberneticCycle", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Cypher", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "DayOfWeekProfile", + "arch": "profile_bins", + "params": [ + 0 + ], + "width": 7 + }, + { + "canonical": "Decycler", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "DecyclerOscillator", + "arch": "scalar_f64", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "Dema", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "DemandIndex", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "DemarkPivots", + "arch": "multi_candle", + "params": [], + "n": 3 + }, + { + "canonical": "DepthSlope", + "arch": "ob", + "params": [] + }, + { + "canonical": "DerivativeOscillator", + "arch": "scalar_f64", + "params": [ + 3, + 7, + 14, + 28 + ] + }, + { + "canonical": "DetrendedStdDev", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "DisparityIndex", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "DistanceSsd", + "arch": "pairwise", + "params": [ + 14 + ] + }, + { + "canonical": "Doji", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "DojiStar", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "DollarBars", + "arch": "bars_candle5", + "params": [ + 50000.0 + ] + }, + { + "canonical": "Donchian", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 3 + }, + { + "canonical": "DonchianStop", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 2 + }, + { + "canonical": "DoubleBollinger", + "arch": "multi_f64", + "params": [ + 20, + 1.0, + 2.0 + ], + "n": 5 + }, + { + "canonical": "DoubleTopBottom", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "DownsideGapThreeMethods", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Dpo", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "DragonflyDoji", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "DrawdownDuration", + "arch": "scalar_f64", + "params": [] + }, + { + "canonical": "DumplingTop", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "Dx", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "DynamicMomentumIndex", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "EaseOfMovement", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "EffectiveSpread", + "arch": "trademid", + "params": [] + }, + { + "canonical": "EhlersStochastic", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Ehma", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "ElderImpulse", + "arch": "scalar_f64", + "params": [ + 3, + 7, + 14, + 28 + ] + }, + { + "canonical": "ElderRay", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 2 + }, + { + "canonical": "ElderSafeZone", + "arch": "multi_candle", + "params": [ + 10, + 2.0 + ], + "n": 2 + }, + { + "canonical": "Ema", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "EmpiricalModeDecomposition", + "arch": "scalar_f64", + "params": [ + 20, + 0.1 + ] + }, + { + "canonical": "Engulfing", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Equivolume", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 2 + }, + { + "canonical": "EstimatedLeverageRatio", + "arch": "deriv", + "params": [] + }, + { + "canonical": "EvenBetterSinewave", + "arch": "scalar_f64", + "params": [ + 40, + 10 + ] + }, + { + "canonical": "EveningDojiStar", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Evwma", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "EwmaVolatility", + "arch": "scalar_f64", + "params": [ + 0.94 + ] + }, + { + "canonical": "Expectancy", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "FallingThreeMethods", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Fama", + "arch": "scalar_f64", + "params": [ + 0.5, + 0.05 + ] + }, + { + "canonical": "FibArcs", + "arch": "multi_candle", + "params": [], + "n": 3 + }, + { + "canonical": "FibChannel", + "arch": "multi_candle", + "params": [], + "n": 4 + }, + { + "canonical": "FibConfluence", + "arch": "multi_candle", + "params": [], + "n": 2 + }, + { + "canonical": "FibExtension", + "arch": "multi_candle", + "params": [], + "n": 5 + }, + { + "canonical": "FibFan", + "arch": "multi_candle", + "params": [], + "n": 3 + }, + { + "canonical": "FibProjection", + "arch": "multi_candle", + "params": [], + "n": 4 + }, + { + "canonical": "FibRetracement", + "arch": "multi_candle", + "params": [], + "n": 7 + }, + { + "canonical": "FibTimeZones", + "arch": "multi_candle", + "params": [], + "n": 2 + }, + { + "canonical": "FibonacciPivots", + "arch": "multi_candle", + "params": [], + "n": 7 + }, + { + "canonical": "FisherRsi", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "FisherTransform", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "FlagPennant", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Footprint", + "arch": "footprint", + "params": [ + 1.0 + ] + }, + { + "canonical": "ForceIndex", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "FractalChaosBands", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 2 + }, + { + "canonical": "Frama", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "FryPanBottom", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "FundingBasis", + "arch": "deriv", + "params": [] + }, + { + "canonical": "FundingImpliedApr", + "arch": "deriv", + "params": [ + 1095.0 + ] + }, + { + "canonical": "FundingRate", + "arch": "deriv", + "params": [] + }, + { + "canonical": "FundingRateMean", + "arch": "deriv", + "params": [ + 20 + ] + }, + { + "canonical": "FundingRateZScore", + "arch": "deriv", + "params": [ + 20 + ] + }, + { + "canonical": "GainLossRatio", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "GainToPainRatio", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "GapSideBySideWhite", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Garch11", + "arch": "scalar_f64", + "params": [ + 2e-06, + 0.1, + 0.88 + ] + }, + { + "canonical": "GarmanKlassVolatility", + "arch": "scalar_candle", + "params": [ + 20, + 252 + ] + }, + { + "canonical": "Gartley", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "GatorOscillator", + "arch": "multi_candle", + "params": [ + 3, + 7, + 14 + ], + "n": 2 + }, + { + "canonical": "GeneralizedDema", + "arch": "scalar_f64", + "params": [ + 5, + 0.7 + ] + }, + { + "canonical": "GeometricMa", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "GoldenPocket", + "arch": "multi_candle", + "params": [], + "n": 3 + }, + { + "canonical": "GrangerCausality", + "arch": "pairwise", + "params": [ + 60, + 1 + ] + }, + { + "canonical": "GravestoneDoji", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Hammer", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "HangingMan", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Harami", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "HaramiCross", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "HasbrouckInformationShare", + "arch": "pairwise", + "params": [ + 14 + ] + }, + { + "canonical": "HeadAndShoulders", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "HeikinAshi", + "arch": "multi_candle", + "params": [], + "n": 4 + }, + { + "canonical": "HeikinAshiOscillator", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "HiLoActivator", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "HighLowIndex", + "arch": "cross", + "params": [ + 10 + ] + }, + { + "canonical": "HighLowRange", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "HighLowVolumeNodes", + "arch": "multi_candle", + "params": [ + 3, + 7 + ], + "n": 2 + }, + { + "canonical": "HighWave", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "HighpassFilter", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Hikkake", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "HikkakeModified", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "HilbertDominantCycle", + "arch": "scalar_f64", + "params": [] + }, + { + "canonical": "HistoricalVolatility", + "arch": "scalar_f64", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "Hma", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "HoltWinters", + "arch": "scalar_f64", + "params": [ + 0.5, + 0.1 + ] + }, + { + "canonical": "HomingPigeon", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "HtDcPhase", + "arch": "scalar_f64", + "params": [] + }, + { + "canonical": "HtPhasor", + "arch": "multi_f64", + "params": [], + "n": 2 + }, + { + "canonical": "HtTrendMode", + "arch": "scalar_f64", + "params": [] + }, + { + "canonical": "HurstChannel", + "arch": "multi_candle", + "params": [ + 14, + 2.0 + ], + "n": 3 + }, + { + "canonical": "HurstExponent", + "arch": "scalar_f64", + "params": [ + 100, + 4 + ] + }, + { + "canonical": "Ichimoku", + "arch": "multi_candle", + "params": [ + 9, + 26, + 52, + 26 + ], + "n": 5 + }, + { + "canonical": "IdenticalThreeCrows", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "ImbalanceBars", + "arch": "bars_candle4", + "params": [ + 5.0 + ] + }, + { + "canonical": "InNeck", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Inertia", + "arch": "scalar_candle", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "InformationRatio", + "arch": "pairwise", + "params": [ + 14 + ] + }, + { + "canonical": "InitialBalance", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 2 + }, + { + "canonical": "InstantaneousTrendline", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "IntradayIntensity", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "IntradayMomentumIndex", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "IntradayVolatilityProfile", + "arch": "profile_bins", + "params": [ + 24, + 0 + ], + "width": 24 + }, + { + "canonical": "InverseFisherTransform", + "arch": "scalar_f64", + "params": [ + 2.0 + ] + }, + { + "canonical": "InvertedHammer", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "JarqueBera", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Jma", + "arch": "scalar_f64", + "params": [ + 7, + 0.0, + 2 + ] + }, + { + "canonical": "JumpIndicator", + "arch": "scalar_f64", + "params": [ + 14, + 2.0 + ] + }, + { + "canonical": "KRatio", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "KagiBars", + "arch": "bars_close", + "params": [ + 2.0 + ] + }, + { + "canonical": "KalmanHedgeRatio", + "arch": "multi_pairwise", + "params": [ + 0.01, + 0.001 + ], + "n": 3 + }, + { + "canonical": "Kama", + "arch": "scalar_f64", + "params": [ + 3, + 7, + 14 + ] + }, + { + "canonical": "KaseDevStop", + "arch": "multi_candle", + "params": [ + 14, + 2.0 + ], + "n": 2 + }, + { + "canonical": "KasePermissionStochastic", + "arch": "multi_candle", + "params": [ + 3, + 7 + ], + "n": 2 + }, + { + "canonical": "KellyCriterion", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Keltner", + "arch": "multi_candle", + "params": [ + 3, + 7, + 2.0 + ], + "n": 3 + }, + { + "canonical": "KendallTau", + "arch": "pairwise", + "params": [ + 14 + ] + }, + { + "canonical": "Kicking", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "KickingByLength", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Kst", + "arch": "multi_f64", + "params": [ + 3, + 7, + 14, + 28, + 35, + 42, + 56, + 63, + 70 + ], + "n": 2 + }, + { + "canonical": "Kurtosis", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Kvo", + "arch": "scalar_candle", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "KylesLambda", + "arch": "trademid", + "params": [ + 20 + ] + }, + { + "canonical": "LadderBottom", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "LaguerreRsi", + "arch": "scalar_f64", + "params": [ + 0.5 + ] + }, + { + "canonical": "LeadLagCrossCorrelation", + "arch": "multi_pairwise", + "params": [ + 20, + 10 + ], + "n": 2 + }, + { + "canonical": "LinRegAngle", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "LinRegChannel", + "arch": "multi_f64", + "params": [ + 14, + 2.0 + ], + "n": 3 + }, + { + "canonical": "LinRegIntercept", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "LinRegSlope", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "LinearRegression", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "LiquidationFeatures", + "arch": "deriv_multi", + "params": [], + "n": 5 + }, + { + "canonical": "LogReturn", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "LongLeggedDoji", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "LongLine", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "LongShortRatio", + "arch": "deriv", + "params": [] + }, + { + "canonical": "M2Measure", + "arch": "scalar_f64", + "params": [ + 14, + 2.0, + 0.5 + ] + }, + { + "canonical": "MaEnvelope", + "arch": "multi_f64", + "params": [ + 14, + 2.0 + ], + "n": 3 + }, + { + "canonical": "MacdExt", + "arch": "multi_f64", + "params": [ + 12, + 0, + 26, + 0, + 9, + 0 + ], + "n": 3 + }, + { + "canonical": "MacdFix", + "arch": "multi_f64", + "params": [ + 9 + ], + "n": 3 + }, + { + "canonical": "MacdHistogram", + "arch": "scalar_f64", + "params": [ + 3, + 7, + 14 + ] + }, + { + "canonical": "MacdIndicator", + "arch": "multi_f64", + "params": [ + 12, + 26, + 9 + ], + "n": 3 + }, + { + "canonical": "Mama", + "arch": "multi_f64", + "params": [ + 0.5, + 0.05 + ], + "n": 2 + }, + { + "canonical": "MarketFacilitationIndex", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "MartinRatio", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Marubozu", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "MassIndex", + "arch": "scalar_candle", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "MatHold", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "MatchingLow", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "MaxDrawdown", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "McClellanOscillator", + "arch": "cross", + "params": [] + }, + { + "canonical": "McClellanSummationIndex", + "arch": "cross", + "params": [] + }, + { + "canonical": "McGinleyDynamic", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "MedianAbsoluteDeviation", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "MedianChannel", + "arch": "multi_f64", + "params": [ + 14, + 2.0 + ], + "n": 3 + }, + { + "canonical": "MedianMa", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "MedianPrice", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Mfi", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "Microprice", + "arch": "ob", + "params": [] + }, + { + "canonical": "MidPoint", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "MidPrice", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "MinusDi", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "MinusDm", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "ModifiedMaStop", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 2 + }, + { + "canonical": "Mom", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "MorningDojiStar", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "MorningEveningStar", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "MurreyMathLines", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 9 + }, + { + "canonical": "NakedPoc", + "arch": "scalar_candle", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "Natr", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "NewHighsNewLows", + "arch": "cross", + "params": [] + }, + { + "canonical": "NewPriceLines", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "Nrtr", + "arch": "multi_candle", + "params": [ + 2.0 + ], + "n": 2 + }, + { + "canonical": "Nvi", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "OIPriceDivergence", + "arch": "deriv", + "params": [ + 20 + ] + }, + { + "canonical": "OIWeighted", + "arch": "deriv", + "params": [] + }, + { + "canonical": "Obv", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "OiToVolumeRatio", + "arch": "deriv", + "params": [] + }, + { + "canonical": "OmegaRatio", + "arch": "scalar_f64", + "params": [ + 14, + 2.0 + ] + }, + { + "canonical": "OnNeck", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "OpenInterestDelta", + "arch": "deriv", + "params": [] + }, + { + "canonical": "OpenInterestMomentum", + "arch": "deriv", + "params": [ + 10 + ] + }, + { + "canonical": "OpeningMarubozu", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "OpeningRange", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 3 + }, + { + "canonical": "OrderBookImbalanceFull", + "arch": "ob", + "params": [] + }, + { + "canonical": "OrderBookImbalanceTop1", + "arch": "ob", + "params": [] + }, + { + "canonical": "OrderBookImbalanceTopN", + "arch": "ob", + "params": [ + 5 + ] + }, + { + "canonical": "OrderFlowImbalance", + "arch": "ob", + "params": [ + 20 + ] + }, + { + "canonical": "OuHalfLife", + "arch": "pairwise", + "params": [ + 14 + ] + }, + { + "canonical": "OvernightGap", + "arch": "scalar_candle", + "params": [ + 0 + ] + }, + { + "canonical": "OvernightIntradayReturn", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 2 + }, + { + "canonical": "PainIndex", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "PairSpreadZScore", + "arch": "pairwise", + "params": [ + 20, + 20 + ] + }, + { + "canonical": "PairwiseBeta", + "arch": "pairwise", + "params": [ + 14 + ] + }, + { + "canonical": "ParkinsonVolatility", + "arch": "scalar_candle", + "params": [ + 20, + 252 + ] + }, + { + "canonical": "PearsonCorrelation", + "arch": "pairwise", + "params": [ + 14 + ] + }, + { + "canonical": "PercentAboveMa", + "arch": "cross", + "params": [] + }, + { + "canonical": "PercentB", + "arch": "scalar_f64", + "params": [ + 14, + 2.0 + ] + }, + { + "canonical": "PercentageTrailingStop", + "arch": "scalar_f64", + "params": [ + 2.0 + ] + }, + { + "canonical": "PerpetualPremiumIndex", + "arch": "deriv", + "params": [] + }, + { + "canonical": "Pgo", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "PiercingDarkCloud", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Pin", + "arch": "trade", + "params": [ + 20 + ] + }, + { + "canonical": "PivotReversal", + "arch": "scalar_candle", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "PlusDi", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "PlusDm", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "Pmo", + "arch": "scalar_f64", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "PointAndFigureBars", + "arch": "bars_close", + "params": [ + 2.0, + 3 + ] + }, + { + "canonical": "PolarizedFractalEfficiency", + "arch": "scalar_f64", + "params": [ + 10, + 5 + ] + }, + { + "canonical": "Ppo", + "arch": "scalar_f64", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "PpoHistogram", + "arch": "scalar_f64", + "params": [ + 3, + 7, + 14 + ] + }, + { + "canonical": "ProfileShape", + "arch": "scalar_candle", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "ProfitFactor", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "ProjectionBands", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 3 + }, + { + "canonical": "ProjectionOscillator", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "Psar", + "arch": "scalar_candle", + "params": [ + 0.02, + 0.02, + 0.2 + ] + }, + { + "canonical": "Pvi", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Qqe", + "arch": "multi_f64", + "params": [ + 3, + 7, + 2.0 + ], + "n": 2 + }, + { + "canonical": "Qstick", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "QuartileBands", + "arch": "multi_f64", + "params": [ + 14 + ], + "n": 3 + }, + { + "canonical": "QuotedSpread", + "arch": "ob", + "params": [] + }, + { + "canonical": "RSquared", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "RangeBars", + "arch": "bars_close", + "params": [ + 2.0 + ] + }, + { + "canonical": "RealizedSpread", + "arch": "trademid", + "params": [ + 20 + ] + }, + { + "canonical": "RealizedVolatility", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "RecoveryFactor", + "arch": "scalar_f64", + "params": [] + }, + { + "canonical": "RectangleRange", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Reflex", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "RegimeLabel", + "arch": "scalar_f64", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "RelativeStrengthAB", + "arch": "multi_pairwise", + "params": [ + 14, + 14 + ], + "n": 3 + }, + { + "canonical": "RenkoBars", + "arch": "bars_close", + "params": [ + 2.0 + ] + }, + { + "canonical": "RenkoTrailingStop", + "arch": "scalar_f64", + "params": [ + 2.0 + ] + }, + { + "canonical": "RickshawMan", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "RisingThreeMethods", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Rmi", + "arch": "scalar_f64", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "Roc", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Rocp", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Rocr", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Rocr100", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "RogersSatchellVolatility", + "arch": "scalar_candle", + "params": [ + 20, + 252 + ] + }, + { + "canonical": "RollMeasure", + "arch": "trade", + "params": [ + 20 + ] + }, + { + "canonical": "RollingCorrelation", + "arch": "pairwise", + "params": [ + 14 + ] + }, + { + "canonical": "RollingCovariance", + "arch": "pairwise", + "params": [ + 14 + ] + }, + { + "canonical": "RollingIqr", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "RollingMinMaxScaler", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "RollingPercentileRank", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "RollingQuantile", + "arch": "scalar_f64", + "params": [ + 20, + 0.5 + ] + }, + { + "canonical": "RollingVwap", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "RoofingFilter", + "arch": "scalar_f64", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "Rsi", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Rsx", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "RunBars", + "arch": "bars_candle4", + "params": [ + 3 + ] + }, + { + "canonical": "Rvi", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "RviVolatility", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Rwi", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 2 + }, + { + "canonical": "SampleEntropy", + "arch": "scalar_f64", + "params": [ + 20, + 2, + 0.2 + ] + }, + { + "canonical": "SarExt", + "arch": "scalar_candle", + "params": [ + 2.0, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5 + ] + }, + { + "canonical": "SeasonalZScore", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "SeparatingLines", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "SessionHighLow", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 2 + }, + { + "canonical": "SessionRange", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 3 + }, + { + "canonical": "SessionVwap", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "ShannonEntropy", + "arch": "scalar_f64", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "Shark", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "SharpeRatio", + "arch": "scalar_f64", + "params": [ + 14, + 2.0 + ] + }, + { + "canonical": "ShootingStar", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "ShortLine", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "SignedVolume", + "arch": "trade", + "params": [] + }, + { + "canonical": "SineWave", + "arch": "scalar_f64", + "params": [] + }, + { + "canonical": "SineWeightedMa", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "SinglePrints", + "arch": "scalar_candle", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "Skewness", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Sma", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Smi", + "arch": "scalar_candle", + "params": [ + 3, + 7, + 14 + ] + }, + { + "canonical": "Smma", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "SmoothedHeikinAshi", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 4 + }, + { + "canonical": "SortinoRatio", + "arch": "scalar_f64", + "params": [ + 14, + 2.0 + ] + }, + { + "canonical": "SpearmanCorrelation", + "arch": "pairwise", + "params": [ + 14 + ] + }, + { + "canonical": "SpinningTop", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "SpreadAr1Coefficient", + "arch": "pairwise", + "params": [ + 14 + ] + }, + { + "canonical": "SpreadBollingerBands", + "arch": "multi_pairwise", + "params": [ + 14, + 2.0 + ], + "n": 4 + }, + { + "canonical": "SpreadHurst", + "arch": "pairwise", + "params": [ + 14 + ] + }, + { + "canonical": "StalledPattern", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "StandardError", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "StandardErrorBands", + "arch": "multi_f64", + "params": [ + 14, + 2.0 + ], + "n": 3 + }, + { + "canonical": "StarcBands", + "arch": "multi_candle", + "params": [ + 3, + 7, + 2.0 + ], + "n": 3 + }, + { + "canonical": "Stc", + "arch": "scalar_f64", + "params": [ + 10, + 23, + 10, + 0.5 + ] + }, + { + "canonical": "StdDev", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "StepTrailingStop", + "arch": "scalar_f64", + "params": [ + 2.0 + ] + }, + { + "canonical": "SterlingRatio", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "StickSandwich", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "StochRsi", + "arch": "scalar_f64", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "Stochastic", + "arch": "multi_candle", + "params": [ + 3, + 7 + ], + "n": 2 + }, + { + "canonical": "StochasticCci", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "SuperSmoother", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "SuperTrend", + "arch": "multi_candle", + "params": [ + 14, + 2.0 + ], + "n": 2 + }, + { + "canonical": "T3", + "arch": "scalar_f64", + "params": [ + 5, + 0.7 + ] + }, + { + "canonical": "TailRatio", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "TakerBuySellRatio", + "arch": "deriv", + "params": [] + }, + { + "canonical": "Takuri", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "TasukiGap", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "TdCamouflage", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "TdClop", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "TdClopwin", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "TdCombo", + "arch": "scalar_candle", + "params": [ + 3, + 7, + 14, + 28 + ] + }, + { + "canonical": "TdCountdown", + "arch": "scalar_candle", + "params": [ + 3, + 7, + 14, + 28 + ] + }, + { + "canonical": "TdDWave", + "arch": "scalar_candle", + "params": [ + 2 + ] + }, + { + "canonical": "TdDeMarker", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "TdDifferential", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "TdLines", + "arch": "multi_candle", + "params": [ + 3, + 7 + ], + "n": 2 + }, + { + "canonical": "TdMovingAverage", + "arch": "multi_candle", + "params": [ + 3, + 7 + ], + "n": 2 + }, + { + "canonical": "TdOpen", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "TdPressure", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "TdPropulsion", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "TdRangeProjection", + "arch": "multi_candle", + "params": [], + "n": 2 + }, + { + "canonical": "TdRei", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "TdRiskLevel", + "arch": "multi_candle", + "params": [ + 3, + 7 + ], + "n": 2 + }, + { + "canonical": "TdSequential", + "arch": "multi_candle", + "params": [ + 3, + 7, + 14, + 28 + ], + "n": 3 + }, + { + "canonical": "TdSetup", + "arch": "scalar_candle", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "TdTrap", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Tema", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "TermStructureBasis", + "arch": "deriv", + "params": [] + }, + { + "canonical": "ThreeDrives", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "ThreeInside", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "ThreeLineBreak", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "ThreeLineBreakBars", + "arch": "bars_close", + "params": [ + 3 + ] + }, + { + "canonical": "ThreeLineStrike", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "ThreeOutside", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "ThreeSoldiersOrCrows", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "ThreeStarsInSouth", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Thrusting", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "TickBars", + "arch": "bars_candle5", + "params": [ + 2 + ] + }, + { + "canonical": "TickIndex", + "arch": "cross", + "params": [] + }, + { + "canonical": "Tii", + "arch": "scalar_f64", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "TimeBasedStop", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "TimeOfDayReturnProfile", + "arch": "profile_bins", + "params": [ + 24, + 0 + ], + "width": 24 + }, + { + "canonical": "TowerTopBottom", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "TpoProfile", + "arch": "profile_pricebins", + "params": [ + 30, + 50 + ], + "width": 52 + }, + { + "canonical": "TradeImbalance", + "arch": "trade", + "params": [ + 20 + ] + }, + { + "canonical": "TradeSignAutocorrelation", + "arch": "trade", + "params": [ + 20 + ] + }, + { + "canonical": "TradeVolumeIndex", + "arch": "scalar_candle", + "params": [ + 2.0 + ] + }, + { + "canonical": "TrendLabel", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "TrendStrengthIndex", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Trendflex", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "TreynorRatio", + "arch": "pairwise", + "params": [ + 14, + 2.0 + ] + }, + { + "canonical": "Triangle", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Trima", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Trin", + "arch": "cross", + "params": [] + }, + { + "canonical": "TripleTopBottom", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Tristar", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Trix", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "TrueRange", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "Tsf", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "TsfOscillator", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Tsi", + "arch": "scalar_f64", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "Tsv", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "TtmSqueeze", + "arch": "multi_candle", + "params": [ + 14, + 2.0, + 0.5 + ], + "n": 2 + }, + { + "canonical": "TtmTrend", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "TurnOfMonth", + "arch": "scalar_candle", + "params": [ + 3, + 3, + 0 + ] + }, + { + "canonical": "Tweezer", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "TwiggsMoneyFlow", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "TwoCrows", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "TypicalPrice", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "UlcerIndex", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "UltimateOscillator", + "arch": "scalar_candle", + "params": [ + 3, + 7, + 14 + ] + }, + { + "canonical": "UniqueThreeRiver", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "UniversalOscillator", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "UpDownVolumeRatio", + "arch": "cross", + "params": [] + }, + { + "canonical": "UpsideGapThreeMethods", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "UpsideGapTwoCrows", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "UpsidePotentialRatio", + "arch": "scalar_f64", + "params": [ + 14, + 2.0 + ] + }, + { + "canonical": "ValueArea", + "arch": "multi_candle", + "params": [ + 20, + 50, + 0.7 + ], + "n": 3 + }, + { + "canonical": "ValueAtRisk", + "arch": "scalar_f64", + "params": [ + 20, + 0.95 + ] + }, + { + "canonical": "Variance", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "VarianceRatio", + "arch": "pairwise", + "params": [ + 60, + 2 + ] + }, + { + "canonical": "VerticalHorizontalFilter", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Vidya", + "arch": "scalar_f64", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "VolatilityCone", + "arch": "multi_candle", + "params": [ + 3, + 7 + ], + "n": 5 + }, + { + "canonical": "VolatilityOfVolatility", + "arch": "scalar_f64", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "VolatilityRatio", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "VoltyStop", + "arch": "scalar_candle", + "params": [ + 14, + 2.0 + ] + }, + { + "canonical": "VolumeBars", + "arch": "bars_candle5", + "params": [ + 500.0 + ] + }, + { + "canonical": "VolumeByTimeProfile", + "arch": "profile_bins", + "params": [ + 24, + 0 + ], + "width": 24 + }, + { + "canonical": "VolumeOscillator", + "arch": "scalar_candle", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "VolumePriceTrend", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "VolumeProfile", + "arch": "profile_pricebins", + "params": [ + 20, + 50 + ], + "width": 52 + }, + { + "canonical": "VolumeRsi", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "VolumeWeightedMacd", + "arch": "multi_candle", + "params": [ + 3, + 7, + 14 + ], + "n": 3 + }, + { + "canonical": "VolumeWeightedSr", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 2 + }, + { + "canonical": "Vortex", + "arch": "multi_candle", + "params": [ + 14 + ], + "n": 2 + }, + { + "canonical": "Vpin", + "arch": "trade", + "params": [ + 5000.0, + 10 + ] + }, + { + "canonical": "Vwap", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "VwapStdDevBands", + "arch": "multi_candle", + "params": [ + 2.0 + ], + "n": 4 + }, + { + "canonical": "Vwma", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "Vzo", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "Wad", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "WavePm", + "arch": "scalar_f64", + "params": [ + 3, + 7 + ] + }, + { + "canonical": "WaveTrend", + "arch": "multi_candle", + "params": [ + 3, + 7, + 14 + ], + "n": 2 + }, + { + "canonical": "Wedge", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "WeightedClose", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "WickRatio", + "arch": "scalar_candle", + "params": [] + }, + { + "canonical": "WilliamsFractals", + "arch": "multi_candle", + "params": [], + "n": 2 + }, + { + "canonical": "WilliamsR", + "arch": "scalar_candle", + "params": [ + 14 + ] + }, + { + "canonical": "WinRate", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "Wma", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "WoodiePivots", + "arch": "multi_candle", + "params": [], + "n": 5 + }, + { + "canonical": "YangZhangVolatility", + "arch": "scalar_candle", + "params": [ + 20, + 252 + ] + }, + { + "canonical": "YoyoExit", + "arch": "scalar_candle", + "params": [ + 14, + 2.0 + ] + }, + { + "canonical": "ZScore", + "arch": "scalar_f64", + "params": [ + 14 + ] + }, + { + "canonical": "ZeroLagMacd", + "arch": "multi_f64", + "params": [ + 3, + 7, + 14 + ], + "n": 3 + }, + { + "canonical": "ZigZag", + "arch": "multi_candle", + "params": [ + 0.02 + ], + "n": 2 + }, + { + "canonical": "Zlema", + "arch": "scalar_f64", + "params": [ + 14 + ] + } +] \ No newline at end of file diff --git a/testdata/golden/intraday_intensity.csv b/testdata/golden/intraday_intensity.csv new file mode 100644 index 00000000..2b786900 --- /dev/null +++ b/testdata/golden/intraday_intensity.csv @@ -0,0 +1,81 @@ +intraday_intensity +333.3333333333333 +254.1363429515297 +159.21218026367208 +25.471262948610985 +-162.11468557280506 +-275.5639865580575 +-280.2653200383195 +-262.50665874730413 +-218.8735932352261 +-103.84408831900444 +105.23375544225493 +207.1947618477897 +268.6994158475546 +311.5985125766722 +249.69931258968683 +108.95566116502461 +-46.836630492806 +-191.72894742709258 +-323.09994717772975 +-288.58996487537496 +-235.67842080969552 +-155.65775525995696 +2.100435879651156 +185.4312611006018 +248.6762296496047 +275.1982924441101 +281.1893417468346 +242.2725273795776 +51.57304408996733 +-110.94636927288005 +-217.14131571791896 +-302.1226541074004 +-288.7507591088784 +-201.32387334871783 +-88.93222193135111 +83.19947463053064 +261.3079552562619 +281.79643282662227 +272.2340363424082 +241.58046628196655 +167.39754796144638 +-34.92423888509019 +-172.31571826164188 +-245.88991850588297 +-295.848559948963 +-307.47694390172535 +-168.1719401970612 +-20.292897128175646 +133.12179835820857 +273.09298973661515 +305.6474161932076 +259.85953888632343 +194.02397184079686 +79.82072051333861 +-134.06397022724687 +-229.07272881151164 +-266.87336173284945 +-281.35196443601916 +-271.09489863939 +-130.0610520157447 +52.92744369611483 +176.82798574591337 +268.39107074462714 +321.0824376772539 +239.50177548911014 +140.60560160823164 +-5.002377587476302 +-194.38935986935482 +-278.65293252471673 +-278.61019779808186 +-257.4794083277237 +-206.95474896026698 +-62.03178317596654 +127.46867772081514 +219.3363825109581 +277.0703482141019 +316.87194783962406 +226.2879351762863 +84.32668869816054 +-72.45507985685082 diff --git a/testdata/golden/multi_manifest.json b/testdata/golden/multi_manifest.json new file mode 100644 index 00000000..77532ede --- /dev/null +++ b/testdata/golden/multi_manifest.json @@ -0,0 +1,856 @@ +[ + { + "canonical": "AccelerationBands", + "native": "AccelerationBands", + "params": [ + 14, + 2.0 + ], + "input": "Candle", + "n": 3 + }, + { + "canonical": "Adx", + "native": "ADX", + "params": [ + 14 + ], + "input": "Candle", + "n": 3 + }, + { + "canonical": "Alligator", + "native": "Alligator", + "params": [ + 3, + 7, + 14 + ], + "input": "Candle", + "n": 3 + }, + { + "canonical": "AndrewsPitchfork", + "native": "AndrewsPitchfork", + "params": [ + 14 + ], + "input": "Candle", + "n": 3 + }, + { + "canonical": "Aroon", + "native": "Aroon", + "params": [ + 14 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "AtrBands", + "native": "AtrBands", + "params": [ + 14, + 2.0 + ], + "input": "Candle", + "n": 3 + }, + { + "canonical": "AtrRatchet", + "native": "AtrRatchet", + "params": [ + 14, + 2.0, + 0.5 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "AutoFib", + "native": "AutoFib", + "params": [], + "input": "Candle", + "n": 7 + }, + { + "canonical": "BollingerBands", + "native": "BollingerBands", + "params": [ + 20, + 2.0 + ], + "input": "f64", + "n": 4 + }, + { + "canonical": "BomarBands", + "native": "BomarBands", + "params": [ + 4, + 0.85 + ], + "input": "f64", + "n": 3 + }, + { + "canonical": "Camarilla", + "native": "Camarilla", + "params": [], + "input": "Candle", + "n": 9 + }, + { + "canonical": "CandleVolume", + "native": "CandleVolume", + "params": [ + 14 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "CentralPivotRange", + "native": "CentralPivotRange", + "params": [], + "input": "Candle", + "n": 3 + }, + { + "canonical": "ChandeKrollStop", + "native": "ChandeKrollStop", + "params": [ + 3, + 2.0, + 7 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "ChandelierExit", + "native": "ChandelierExit", + "params": [ + 14, + 2.0 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "ClassicPivots", + "native": "ClassicPivots", + "params": [], + "input": "Candle", + "n": 7 + }, + { + "canonical": "Cointegration", + "native": "Cointegration", + "params": [ + 40, + 1 + ], + "input": "(f64, f64)", + "n": 3 + }, + { + "canonical": "CompositeProfile", + "native": "CompositeProfile", + "params": [ + 20, + 24, + 0.7 + ], + "input": "Candle", + "n": 3 + }, + { + "canonical": "DemarkPivots", + "native": "DemarkPivots", + "params": [], + "input": "Candle", + "n": 3 + }, + { + "canonical": "Donchian", + "native": "Donchian", + "params": [ + 14 + ], + "input": "Candle", + "n": 3 + }, + { + "canonical": "DonchianStop", + "native": "DonchianStop", + "params": [ + 14 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "DoubleBollinger", + "native": "DoubleBollinger", + "params": [ + 20, + 1.0, + 2.0 + ], + "input": "f64", + "n": 5 + }, + { + "canonical": "ElderRay", + "native": "ElderRay", + "params": [ + 14 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "ElderSafeZone", + "native": "ElderSafeZone", + "params": [ + 10, + 2.0 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "Equivolume", + "native": "Equivolume", + "params": [ + 14 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "FibArcs", + "native": "FibArcs", + "params": [], + "input": "Candle", + "n": 3 + }, + { + "canonical": "FibChannel", + "native": "FibChannel", + "params": [], + "input": "Candle", + "n": 4 + }, + { + "canonical": "FibConfluence", + "native": "FibConfluence", + "params": [], + "input": "Candle", + "n": 2 + }, + { + "canonical": "FibExtension", + "native": "FibExtension", + "params": [], + "input": "Candle", + "n": 5 + }, + { + "canonical": "FibFan", + "native": "FibFan", + "params": [], + "input": "Candle", + "n": 3 + }, + { + "canonical": "FibProjection", + "native": "FibProjection", + "params": [], + "input": "Candle", + "n": 4 + }, + { + "canonical": "FibRetracement", + "native": "FibRetracement", + "params": [], + "input": "Candle", + "n": 7 + }, + { + "canonical": "FibTimeZones", + "native": "FibTimeZones", + "params": [], + "input": "Candle", + "n": 2 + }, + { + "canonical": "FibonacciPivots", + "native": "FibonacciPivots", + "params": [], + "input": "Candle", + "n": 7 + }, + { + "canonical": "FractalChaosBands", + "native": "FractalChaosBands", + "params": [ + 14 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "GatorOscillator", + "native": "GatorOscillator", + "params": [ + 3, + 7, + 14 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "GoldenPocket", + "native": "GoldenPocket", + "params": [], + "input": "Candle", + "n": 3 + }, + { + "canonical": "HeikinAshi", + "native": "HeikinAshi", + "params": [], + "input": "Candle", + "n": 4 + }, + { + "canonical": "HighLowVolumeNodes", + "native": "HighLowVolumeNodes", + "params": [ + 3, + 7 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "HtPhasor", + "native": "HT_PHASOR", + "params": [], + "input": "f64", + "n": 2 + }, + { + "canonical": "HurstChannel", + "native": "HurstChannel", + "params": [ + 14, + 2.0 + ], + "input": "Candle", + "n": 3 + }, + { + "canonical": "Ichimoku", + "native": "Ichimoku", + "params": [ + 9, + 26, + 52, + 26 + ], + "input": "Candle", + "n": 5 + }, + { + "canonical": "InitialBalance", + "native": "InitialBalance", + "params": [ + 14 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "KalmanHedgeRatio", + "native": "KalmanHedgeRatio", + "params": [ + 0.01, + 0.001 + ], + "input": "(f64, f64)", + "n": 3 + }, + { + "canonical": "KaseDevStop", + "native": "KaseDevStop", + "params": [ + 14, + 2.0 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "KasePermissionStochastic", + "native": "KasePermissionStochastic", + "params": [ + 3, + 7 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "Keltner", + "native": "Keltner", + "params": [ + 3, + 7, + 2.0 + ], + "input": "Candle", + "n": 3 + }, + { + "canonical": "Kst", + "native": "KST", + "params": [ + 3, + 7, + 14, + 28, + 35, + 42, + 56, + 63, + 70 + ], + "input": "f64", + "n": 2 + }, + { + "canonical": "LeadLagCrossCorrelation", + "native": "LeadLagCrossCorrelation", + "params": [ + 20, + 10 + ], + "input": "(f64, f64)", + "n": 2 + }, + { + "canonical": "LinRegChannel", + "native": "LinRegChannel", + "params": [ + 14, + 2.0 + ], + "input": "f64", + "n": 3 + }, + { + "canonical": "MaEnvelope", + "native": "MaEnvelope", + "params": [ + 14, + 2.0 + ], + "input": "f64", + "n": 3 + }, + { + "canonical": "MacdExt", + "native": "MACDEXT", + "params": [ + 12, + 0, + 26, + 0, + 9, + 0 + ], + "input": "f64", + "n": 3 + }, + { + "canonical": "MacdFix", + "native": "MACDFIX", + "params": [ + 9 + ], + "input": "f64", + "n": 3 + }, + { + "canonical": "MacdIndicator", + "native": "MACD", + "params": [ + 12, + 26, + 9 + ], + "input": "f64", + "n": 3 + }, + { + "canonical": "Mama", + "native": "MAMA", + "params": [ + 0.5, + 0.05 + ], + "input": "f64", + "n": 2 + }, + { + "canonical": "MedianChannel", + "native": "MedianChannel", + "params": [ + 14, + 2.0 + ], + "input": "f64", + "n": 3 + }, + { + "canonical": "ModifiedMaStop", + "native": "ModifiedMaStop", + "params": [ + 14 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "MurreyMathLines", + "native": "MurreyMathLines", + "params": [ + 14 + ], + "input": "Candle", + "n": 9 + }, + { + "canonical": "Nrtr", + "native": "Nrtr", + "params": [ + 2.0 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "OpeningRange", + "native": "OpeningRange", + "params": [ + 14 + ], + "input": "Candle", + "n": 3 + }, + { + "canonical": "OvernightIntradayReturn", + "native": "OvernightIntradayReturn", + "params": [ + 14 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "ProjectionBands", + "native": "ProjectionBands", + "params": [ + 14 + ], + "input": "Candle", + "n": 3 + }, + { + "canonical": "Qqe", + "native": "QQE", + "params": [ + 3, + 7, + 2.0 + ], + "input": "f64", + "n": 2 + }, + { + "canonical": "QuartileBands", + "native": "QuartileBands", + "params": [ + 14 + ], + "input": "f64", + "n": 3 + }, + { + "canonical": "RelativeStrengthAB", + "native": "RelativeStrengthAB", + "params": [ + 14, + 14 + ], + "input": "(f64, f64)", + "n": 3 + }, + { + "canonical": "Rwi", + "native": "RWI", + "params": [ + 14 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "SessionHighLow", + "native": "SessionHighLow", + "params": [ + 14 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "SessionRange", + "native": "SessionRange", + "params": [ + 14 + ], + "input": "Candle", + "n": 3 + }, + { + "canonical": "SmoothedHeikinAshi", + "native": "SmoothedHeikinAshi", + "params": [ + 14 + ], + "input": "Candle", + "n": 4 + }, + { + "canonical": "SpreadBollingerBands", + "native": "SpreadBollingerBands", + "params": [ + 14, + 2.0 + ], + "input": "(f64, f64)", + "n": 4 + }, + { + "canonical": "StandardErrorBands", + "native": "StandardErrorBands", + "params": [ + 14, + 2.0 + ], + "input": "f64", + "n": 3 + }, + { + "canonical": "StarcBands", + "native": "StarcBands", + "params": [ + 3, + 7, + 2.0 + ], + "input": "Candle", + "n": 3 + }, + { + "canonical": "Stochastic", + "native": "Stochastic", + "params": [ + 3, + 7 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "SuperTrend", + "native": "SuperTrend", + "params": [ + 14, + 2.0 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "TdLines", + "native": "TDLines", + "params": [ + 3, + 7 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "TdMovingAverage", + "native": "TDMovingAverage", + "params": [ + 3, + 7 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "TdRangeProjection", + "native": "TDRangeProjection", + "params": [], + "input": "Candle", + "n": 2 + }, + { + "canonical": "TdRiskLevel", + "native": "TDRiskLevel", + "params": [ + 3, + 7 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "TdSequential", + "native": "TDSequential", + "params": [ + 3, + 7, + 14, + 28 + ], + "input": "Candle", + "n": 3 + }, + { + "canonical": "TtmSqueeze", + "native": "TtmSqueeze", + "params": [ + 14, + 2.0, + 0.5 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "ValueArea", + "native": "ValueArea", + "params": [ + 20, + 50, + 0.7 + ], + "input": "Candle", + "n": 3 + }, + { + "canonical": "VolatilityCone", + "native": "VolatilityCone", + "params": [ + 3, + 7 + ], + "input": "Candle", + "n": 5 + }, + { + "canonical": "VolumeWeightedMacd", + "native": "VolumeWeightedMacd", + "params": [ + 3, + 7, + 14 + ], + "input": "Candle", + "n": 3 + }, + { + "canonical": "VolumeWeightedSr", + "native": "VolumeWeightedSr", + "params": [ + 14 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "Vortex", + "native": "Vortex", + "params": [ + 14 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "VwapStdDevBands", + "native": "VwapStdDevBands", + "params": [ + 2.0 + ], + "input": "Candle", + "n": 4 + }, + { + "canonical": "WaveTrend", + "native": "WaveTrend", + "params": [ + 3, + 7, + 14 + ], + "input": "Candle", + "n": 2 + }, + { + "canonical": "WilliamsFractals", + "native": "WilliamsFractals", + "params": [], + "input": "Candle", + "n": 2 + }, + { + "canonical": "WoodiePivots", + "native": "WoodiePivots", + "params": [], + "input": "Candle", + "n": 5 + }, + { + "canonical": "ZeroLagMacd", + "native": "ZeroLagMACD", + "params": [ + 3, + 7, + 14 + ], + "input": "f64", + "n": 3 + }, + { + "canonical": "ZigZag", + "native": "ZigZag", + "params": [ + 0.02 + ], + "input": "Candle", + "n": 2 + } +] \ No newline at end of file diff --git a/testdata/golden/node_manifest.json b/testdata/golden/node_manifest.json new file mode 100644 index 00000000..ddb24c0c --- /dev/null +++ b/testdata/golden/node_manifest.json @@ -0,0 +1,10720 @@ +[ + { + "canonical": "AbandonedBaby", + "native": "AbandonedBaby", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Abcd", + "native": "Abcd", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AbsoluteBreadthIndex", + "native": "AbsoluteBreadthIndex", + "ctor": [], + "args": [ + { + "name": "change", + "array": true + }, + { + "name": "volume", + "array": true + }, + { + "name": "newHigh", + "array": true + }, + { + "name": "newLow", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "AccelerationBands", + "native": "AccelerationBands", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "upper", + "middle", + "lower" + ] + }, + { + "canonical": "AcceleratorOscillator", + "native": "AcceleratorOscillator", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AdOscillator", + "native": "ADOSC", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AdVolumeLine", + "native": "AdVolumeLine", + "ctor": [], + "args": [ + { + "name": "change", + "array": true + }, + { + "name": "volume", + "array": true + }, + { + "name": "newHigh", + "array": true + }, + { + "name": "newLow", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "AdaptiveCci", + "native": "ADAPTIVECCI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AdaptiveCycle", + "native": "AdaptiveCycle", + "ctor": [], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AdaptiveLaguerreFilter", + "native": "AdaptiveLaguerre", + "ctor": [ + 20 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AdaptiveRsi", + "native": "ADAPTIVERSI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Adl", + "native": "ADL", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AdvanceBlock", + "native": "AdvanceBlock", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AdvanceDecline", + "native": "AdvanceDecline", + "ctor": [], + "args": [ + { + "name": "change", + "array": true + }, + { + "name": "volume", + "array": true + }, + { + "name": "newHigh", + "array": true + }, + { + "name": "newLow", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "AdvanceDeclineRatio", + "native": "AdvanceDeclineRatio", + "ctor": [], + "args": [ + { + "name": "change", + "array": true + }, + { + "name": "volume", + "array": true + }, + { + "name": "newHigh", + "array": true + }, + { + "name": "newLow", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "Adx", + "native": "ADX", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "plusDi", + "minusDi", + "adx" + ] + }, + { + "canonical": "Adxr", + "native": "ADXR", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Alligator", + "native": "Alligator", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "jaw", + "teeth", + "lips" + ] + }, + { + "canonical": "Alma", + "native": "ALMA", + "ctor": [ + 9, + 0.85, + 6.0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Alpha", + "native": "Alpha", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "asset", + "array": false + }, + { + "name": "benchmark", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AmihudIlliquidity", + "native": "AmihudIlliquidity", + "ctor": [ + 20 + ], + "args": [ + { + "name": "price", + "array": false + }, + { + "name": "size", + "array": false + }, + { + "name": "isBuy", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AnchoredRsi", + "native": "AnchoredRSI", + "ctor": [], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AnchoredVwap", + "native": "AnchoredVWAP", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AndrewsPitchfork", + "native": "AndrewsPitchfork", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "median", + "upper", + "lower" + ] + }, + { + "canonical": "Apo", + "native": "APO", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Aroon", + "native": "Aroon", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "up", + "down" + ] + }, + { + "canonical": "AroonOscillator", + "native": "AroonOscillator", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Atr", + "native": "ATR", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AtrBands", + "native": "AtrBands", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "upper", + "middle", + "lower" + ] + }, + { + "canonical": "AtrRatchet", + "native": "AtrRatchet", + "ctor": [ + 14, + 2.0, + 0.5 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "value", + "direction" + ] + }, + { + "canonical": "AtrTrailingStop", + "native": "AtrTrailingStop", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AutoFib", + "native": "AutoFib", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "level0", + "level236", + "level382", + "level500", + "level618", + "level786", + "level1000" + ] + }, + { + "canonical": "Autocorrelation", + "native": "Autocorrelation", + "ctor": [ + 10, + 1 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AutocorrelationPeriodogram", + "native": "AUTOCORRPGRAM", + "ctor": [ + 10, + 48 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AverageDailyRange", + "native": "AverageDailyRange", + "ctor": [ + 14, + 0 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + }, + { + "name": "timestamp", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AverageDrawdown", + "native": "AverageDrawdown", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AvgPrice", + "native": "AVGPRICE", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AwesomeOscillator", + "native": "AwesomeOscillator", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "AwesomeOscillatorHistogram", + "native": "AwesomeOscillatorHistogram", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "BalanceOfPower", + "native": "BalanceOfPower", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "BandpassFilter", + "native": "BANDPASS", + "ctor": [ + 20, + 0.3 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Bat", + "native": "Bat", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "BeltHold", + "native": "BeltHold", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Beta", + "native": "Beta", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false + }, + { + "name": "y", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "BetaNeutralSpread", + "native": "BetaNeutralSpread", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false + }, + { + "name": "y", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "BetterVolume", + "native": "BetterVolume", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "BipowerVariation", + "native": "BipowerVariation", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "BodySizePct", + "native": "BodySizePct", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "BollingerBands", + "native": "BollingerBands", + "ctor": [ + 20, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "multi", + "fields": [ + "upper", + "middle", + "lower", + "stddev" + ] + }, + { + "canonical": "BollingerBandwidth", + "native": "BollingerBandwidth", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "BomarBands", + "native": "BomarBands", + "ctor": [ + 4, + 0.85 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "multi", + "fields": [ + "upper", + "middle", + "lower" + ] + }, + { + "canonical": "BreadthThrust", + "native": "BreadthThrust", + "ctor": [ + 10 + ], + "args": [ + { + "name": "change", + "array": true + }, + { + "name": "volume", + "array": true + }, + { + "name": "newHigh", + "array": true + }, + { + "name": "newLow", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "Breakaway", + "native": "Breakaway", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "BullishPercentIndex", + "native": "BullishPercentIndex", + "ctor": [], + "args": [ + { + "name": "change", + "array": true + }, + { + "name": "volume", + "array": true + }, + { + "name": "newHigh", + "array": true + }, + { + "name": "newLow", + "array": true + }, + { + "name": "onBuySignal", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "BurkeRatio", + "native": "BurkeRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Butterfly", + "native": "Butterfly", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "CalendarSpread", + "native": "CalendarSpread", + "ctor": [], + "args": [ + { + "name": "futuresPrice", + "array": false + }, + { + "name": "markPrice", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "CalmarRatio", + "native": "CalmarRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Camarilla", + "native": "Camarilla", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "pp", + "r1", + "r2", + "r3", + "r4", + "s1", + "s2", + "s3", + "s4" + ] + }, + { + "canonical": "CandleVolume", + "native": "CandleVolume", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "multi", + "fields": [ + "body", + "width" + ] + }, + { + "canonical": "Cci", + "native": "CCI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "CenterOfGravity", + "native": "CenterOfGravity", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "CentralPivotRange", + "native": "CentralPivotRange", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "pivot", + "tc", + "bc" + ] + }, + { + "canonical": "Cfo", + "native": "CFO", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ChaikinMoneyFlow", + "native": "ChaikinMoneyFlow", + "ctor": [ + 20 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ChaikinOscillator", + "native": "ChaikinOscillator", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ChaikinVolatility", + "native": "ChaikinVolatility", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ChandeKrollStop", + "native": "ChandeKrollStop", + "ctor": [ + 3, + 2.0, + 7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "stopLong", + "stopShort" + ] + }, + { + "canonical": "ChandelierExit", + "native": "ChandelierExit", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "longStop", + "shortStop" + ] + }, + { + "canonical": "ChoppinessIndex", + "native": "ChoppinessIndex", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ClassicPivots", + "native": "ClassicPivots", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "pp", + "r1", + "r2", + "r3", + "s1", + "s2", + "s3" + ] + }, + { + "canonical": "CloseVsOpen", + "native": "CloseVsOpen", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ClosingMarubozu", + "native": "ClosingMarubozu", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Cmo", + "native": "CMO", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "CoefficientOfVariation", + "native": "CoefficientOfVariation", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Cointegration", + "native": "Cointegration", + "ctor": [ + 40, + 1 + ], + "args": [ + { + "name": "a", + "array": false + }, + { + "name": "b", + "array": false + } + ], + "out": "multi", + "fields": [ + "hedgeRatio", + "spread", + "adfStat" + ] + }, + { + "canonical": "CommonSenseRatio", + "native": "CommonSenseRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "CompositeProfile", + "native": "CompositeProfile", + "ctor": [ + 20, + 24, + 0.7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "multi", + "fields": [ + "poc", + "vah", + "val" + ] + }, + { + "canonical": "ConcealingBabySwallow", + "native": "ConcealingBabySwallow", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ConditionalValueAtRisk", + "native": "ConditionalValueAtRisk", + "ctor": [ + 20, + 0.95 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ConnorsRsi", + "native": "ConnorsRSI", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Coppock", + "native": "Coppock", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "CorrelationTrendIndicator", + "native": "CTI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Counterattack", + "native": "Counterattack", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Crab", + "native": "Crab", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "CumulativeVolumeDelta", + "native": "CumulativeVolumeDelta", + "ctor": [], + "args": [ + { + "name": "price", + "array": false + }, + { + "name": "size", + "array": false + }, + { + "name": "isBuy", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "CumulativeVolumeIndex", + "native": "CumulativeVolumeIndex", + "ctor": [], + "args": [ + { + "name": "change", + "array": true + }, + { + "name": "volume", + "array": true + }, + { + "name": "newHigh", + "array": true + }, + { + "name": "newLow", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "CupAndHandle", + "native": "CupAndHandle", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "CyberneticCycle", + "native": "CyberneticCycle", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Cypher", + "native": "Cypher", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "DayOfWeekProfile", + "native": "DayOfWeekProfile", + "ctor": [ + 0 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + }, + { + "name": "timestamp", + "array": false + } + ], + "out": "profile_bins", + "width": 7 + }, + { + "canonical": "Decycler", + "native": "Decycler", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "DecyclerOscillator", + "native": "DecyclerOscillator", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Dema", + "native": "DEMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "DemandIndex", + "native": "DemandIndex", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "DemarkPivots", + "native": "DemarkPivots", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "pp", + "r1", + "s1" + ] + }, + { + "canonical": "DepthSlope", + "native": "DepthSlope", + "ctor": [], + "args": [ + { + "name": "bidPx", + "array": true + }, + { + "name": "bidSz", + "array": true + }, + { + "name": "askPx", + "array": true + }, + { + "name": "askSz", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "DerivativeOscillator", + "native": "DerivativeOscillator", + "ctor": [ + 3, + 7, + 14, + 28 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "DetrendedStdDev", + "native": "DetrendedStdDev", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "DisparityIndex", + "native": "DisparityIndex", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "DistanceSsd", + "native": "DistanceSsd", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false + }, + { + "name": "y", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Doji", + "native": "Doji", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "DojiStar", + "native": "DojiStar", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "DollarBars", + "native": "DollarBars", + "ctor": [ + 50000.0 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "bars", + "fields": [ + "open", + "high", + "low", + "close", + "volume", + "dollar" + ] + }, + { + "canonical": "Donchian", + "native": "Donchian", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "upper", + "middle", + "lower" + ] + }, + { + "canonical": "DonchianStop", + "native": "DonchianStop", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "stopLong", + "stopShort" + ] + }, + { + "canonical": "DoubleBollinger", + "native": "DoubleBollinger", + "ctor": [ + 20, + 1.0, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "multi", + "fields": [ + "upperOuter", + "upperInner", + "middle", + "lowerInner", + "lowerOuter" + ] + }, + { + "canonical": "DoubleTopBottom", + "native": "DoubleTopBottom", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "DownsideGapThreeMethods", + "native": "DownsideGapThreeMethods", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Dpo", + "native": "DPO", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "DragonflyDoji", + "native": "DragonflyDoji", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "DrawdownDuration", + "native": "DrawdownDuration", + "ctor": [], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "DumplingTop", + "native": "DumplingTop", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Dx", + "native": "DX", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "DynamicMomentumIndex", + "native": "DynamicMomentumIndex", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "EaseOfMovement", + "native": "EaseOfMovement", + "ctor": [ + 14, + 100000000.0 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "EffectiveSpread", + "native": "EffectiveSpread", + "ctor": [], + "args": [ + { + "name": "price", + "array": false + }, + { + "name": "size", + "array": false + }, + { + "name": "isBuy", + "array": false + }, + { + "name": "mid", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "EhlersStochastic", + "native": "EhlersStochastic", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Ehma", + "native": "EHMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ElderImpulse", + "native": "ElderImpulse", + "ctor": [ + 3, + 7, + 14, + 28 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ElderRay", + "native": "ElderRay", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "bullPower", + "bearPower" + ] + }, + { + "canonical": "ElderSafeZone", + "native": "ElderSafeZone", + "ctor": [ + 10, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "value", + "direction" + ] + }, + { + "canonical": "Ema", + "native": "EMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "EmpiricalModeDecomposition", + "native": "EmpiricalModeDecomposition", + "ctor": [ + 20, + 0.1 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Engulfing", + "native": "Engulfing", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Equivolume", + "native": "Equivolume", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "multi", + "fields": [ + "height", + "width" + ] + }, + { + "canonical": "EstimatedLeverageRatio", + "native": "EstimatedLeverageRatio", + "ctor": [], + "args": [ + { + "name": "openInterest", + "array": false + }, + { + "name": "longSize", + "array": false + }, + { + "name": "shortSize", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "EvenBetterSinewave", + "native": "EVENBETTERSINE", + "ctor": [ + 40, + 10 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "EveningDojiStar", + "native": "EveningDojiStar", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Evwma", + "native": "EVWMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "EwmaVolatility", + "native": "EwmaVolatility", + "ctor": [ + 0.94 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Expectancy", + "native": "Expectancy", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "FallingThreeMethods", + "native": "FallingThreeMethods", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Fama", + "native": "FAMA", + "ctor": [ + 0.5, + 0.05 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "FibArcs", + "native": "FibArcs", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "arc382", + "arc500", + "arc618" + ] + }, + { + "canonical": "FibChannel", + "native": "FibChannel", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "base", + "level618", + "level1000", + "level1618" + ] + }, + { + "canonical": "FibConfluence", + "native": "FibConfluence", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "price", + "strength" + ] + }, + { + "canonical": "FibExtension", + "native": "FibExtension", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "level1272", + "level1414", + "level1618", + "level2000", + "level2618" + ] + }, + { + "canonical": "FibFan", + "native": "FibFan", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "fan382", + "fan500", + "fan618" + ] + }, + { + "canonical": "FibProjection", + "native": "FibProjection", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "level618", + "level1000", + "level1618", + "level2618" + ] + }, + { + "canonical": "FibRetracement", + "native": "FibRetracement", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "level0", + "level236", + "level382", + "level500", + "level618", + "level786", + "level1000" + ] + }, + { + "canonical": "FibTimeZones", + "native": "FibTimeZones", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "onZone", + "barsToNext" + ] + }, + { + "canonical": "FibonacciPivots", + "native": "FibonacciPivots", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "pp", + "r1", + "r2", + "r3", + "s1", + "s2", + "s3" + ] + }, + { + "canonical": "FisherRsi", + "native": "FisherRSI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "FisherTransform", + "native": "FisherTransform", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "FlagPennant", + "native": "FlagPennant", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Footprint", + "native": "Footprint", + "ctor": [ + 1.0 + ], + "args": [ + { + "name": "price", + "array": false + }, + { + "name": "size", + "array": false + }, + { + "name": "isBuy", + "array": false + } + ], + "out": "footprint", + "fields": [ + "price", + "bidVol", + "askVol" + ] + }, + { + "canonical": "ForceIndex", + "native": "ForceIndex", + "ctor": [ + 14 + ], + "args": [ + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "FractalChaosBands", + "native": "FractalChaosBands", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "upper", + "lower" + ] + }, + { + "canonical": "Frama", + "native": "FRAMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "FryPanBottom", + "native": "FryPanBottom", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "FundingBasis", + "native": "FundingBasis", + "ctor": [], + "args": [ + { + "name": "markPrice", + "array": false + }, + { + "name": "indexPrice", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "FundingImpliedApr", + "native": "FundingImpliedApr", + "ctor": [ + 1095.0 + ], + "args": [ + { + "name": "fundingRate", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "FundingRate", + "native": "FundingRate", + "ctor": [], + "args": [ + { + "name": "fundingRate", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "FundingRateMean", + "native": "FundingRateMean", + "ctor": [ + 20 + ], + "args": [ + { + "name": "fundingRate", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "FundingRateZScore", + "native": "FundingRateZScore", + "ctor": [ + 20 + ], + "args": [ + { + "name": "fundingRate", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "GainLossRatio", + "native": "GainLossRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "GainToPainRatio", + "native": "GainToPainRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "GapSideBySideWhite", + "native": "GapSideBySideWhite", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Garch11", + "native": "Garch11", + "ctor": [ + 2e-06, + 0.1, + 0.88 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "GarmanKlassVolatility", + "native": "GarmanKlassVolatility", + "ctor": [ + 20, + 252 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Gartley", + "native": "Gartley", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "GatorOscillator", + "native": "GatorOscillator", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "upper", + "lower" + ] + }, + { + "canonical": "GeneralizedDema", + "native": "GD", + "ctor": [ + 5, + 0.7 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "GeometricMa", + "native": "GMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "GoldenPocket", + "native": "GoldenPocket", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "low", + "mid", + "high" + ] + }, + { + "canonical": "GrangerCausality", + "native": "GrangerCausality", + "ctor": [ + 60, + 1 + ], + "args": [ + { + "name": "a", + "array": false + }, + { + "name": "b", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "GravestoneDoji", + "native": "GravestoneDoji", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Hammer", + "native": "Hammer", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "HangingMan", + "native": "HangingMan", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Harami", + "native": "Harami", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "HaramiCross", + "native": "HaramiCross", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "HasbrouckInformationShare", + "native": "HasbrouckInformationShare", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false + }, + { + "name": "y", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "HeadAndShoulders", + "native": "HeadAndShoulders", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "HeikinAshi", + "native": "HeikinAshi", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "open", + "high", + "low", + "close" + ] + }, + { + "canonical": "HeikinAshiOscillator", + "native": "HeikinAshiOscillator", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "HiLoActivator", + "native": "HiLoActivator", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "HighLowIndex", + "native": "HighLowIndex", + "ctor": [ + 10 + ], + "args": [ + { + "name": "change", + "array": true + }, + { + "name": "volume", + "array": true + }, + { + "name": "newHigh", + "array": true + }, + { + "name": "newLow", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "HighLowRange", + "native": "HighLowRange", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "HighLowVolumeNodes", + "native": "HighLowVolumeNodes", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "multi", + "fields": [ + "hvn", + "lvn" + ] + }, + { + "canonical": "HighWave", + "native": "HighWave", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "HighpassFilter", + "native": "HIGHPASS", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Hikkake", + "native": "Hikkake", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "HikkakeModified", + "native": "HikkakeModified", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "HilbertDominantCycle", + "native": "HilbertDominantCycle", + "ctor": [], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "HistoricalVolatility", + "native": "HistoricalVolatility", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Hma", + "native": "HMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "HoltWinters", + "native": "HoltWinters", + "ctor": [ + 0.5, + 0.1 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "HomingPigeon", + "native": "HomingPigeon", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "HtDcPhase", + "native": "HT_DCPHASE", + "ctor": [], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "HtPhasor", + "native": "HT_PHASOR", + "ctor": [], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "multi", + "fields": [ + "inphase", + "quadrature" + ] + }, + { + "canonical": "HtTrendMode", + "native": "HT_TRENDMODE", + "ctor": [], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "HurstChannel", + "native": "HurstChannel", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "upper", + "middle", + "lower" + ] + }, + { + "canonical": "HurstExponent", + "native": "HurstExponent", + "ctor": [ + 100, + 4 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Ichimoku", + "native": "Ichimoku", + "ctor": [ + 9, + 26, + 52, + 26 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "tenkan", + "kijun", + "senkouA", + "senkouB", + "chikou" + ] + }, + { + "canonical": "IdenticalThreeCrows", + "native": "IdenticalThreeCrows", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ImbalanceBars", + "native": "ImbalanceBars", + "ctor": [ + 5.0 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "bars", + "fields": [ + "open", + "high", + "low", + "close", + "imbalance", + "direction" + ] + }, + { + "canonical": "InNeck", + "native": "InNeck", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Inertia", + "native": "Inertia", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "InformationRatio", + "native": "InformationRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "asset", + "array": false + }, + { + "name": "benchmark", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "InitialBalance", + "native": "InitialBalance", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "high", + "low" + ] + }, + { + "canonical": "InstantaneousTrendline", + "native": "InstantaneousTrendline", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "IntradayIntensity", + "native": "IntradayIntensity", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "IntradayMomentumIndex", + "native": "IMI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "IntradayVolatilityProfile", + "native": "IntradayVolatilityProfile", + "ctor": [ + 24, + 0 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + }, + { + "name": "timestamp", + "array": false + } + ], + "out": "profile_bins", + "width": 24 + }, + { + "canonical": "InverseFisherTransform", + "native": "InverseFisherTransform", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "InvertedHammer", + "native": "InvertedHammer", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "JarqueBera", + "native": "JARQUEBERA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Jma", + "native": "JMA", + "ctor": [ + 7, + 0.0, + 2 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "JumpIndicator", + "native": "JumpIndicator", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "KRatio", + "native": "KRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "KagiBars", + "native": "KagiBars", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "close", + "array": false + } + ], + "out": "bars", + "fields": [ + "start", + "end", + "direction" + ] + }, + { + "canonical": "KalmanHedgeRatio", + "native": "KalmanHedgeRatio", + "ctor": [ + 0.01, + 0.001 + ], + "args": [ + { + "name": "a", + "array": false + }, + { + "name": "b", + "array": false + } + ], + "out": "multi", + "fields": [ + "hedgeRatio", + "intercept", + "spread" + ] + }, + { + "canonical": "Kama", + "native": "KAMA", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "KaseDevStop", + "native": "KaseDevStop", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "value", + "direction" + ] + }, + { + "canonical": "KasePermissionStochastic", + "native": "KasePermissionStochastic", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "fast", + "slow" + ] + }, + { + "canonical": "KellyCriterion", + "native": "KellyCriterion", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Keltner", + "native": "Keltner", + "ctor": [ + 3, + 7, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "upper", + "middle", + "lower" + ] + }, + { + "canonical": "KendallTau", + "native": "KendallTau", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false + }, + { + "name": "y", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Kicking", + "native": "Kicking", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "KickingByLength", + "native": "KickingByLength", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Kst", + "native": "KST", + "ctor": [ + 3, + 7, + 14, + 28, + 35, + 42, + 56, + 63, + 70 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "multi", + "fields": [ + "kst", + "signal" + ] + }, + { + "canonical": "Kurtosis", + "native": "Kurtosis", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Kvo", + "native": "KVO", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "KylesLambda", + "native": "KylesLambda", + "ctor": [ + 20 + ], + "args": [ + { + "name": "price", + "array": false + }, + { + "name": "size", + "array": false + }, + { + "name": "isBuy", + "array": false + }, + { + "name": "mid", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "LadderBottom", + "native": "LadderBottom", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "LaguerreRsi", + "native": "LaguerreRSI", + "ctor": [ + 0.5 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "LeadLagCrossCorrelation", + "native": "LeadLagCrossCorrelation", + "ctor": [ + 20, + 10 + ], + "args": [ + { + "name": "a", + "array": false + }, + { + "name": "b", + "array": false + } + ], + "out": "multi", + "fields": [ + "lag", + "correlation" + ] + }, + { + "canonical": "LinRegAngle", + "native": "LinRegAngle", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "LinRegChannel", + "native": "LinRegChannel", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "multi", + "fields": [ + "upper", + "middle", + "lower" + ] + }, + { + "canonical": "LinRegIntercept", + "native": "LINEARREG_INTERCEPT", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "LinRegSlope", + "native": "LinRegSlope", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "LinearRegression", + "native": "LinearRegression", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "LiquidationFeatures", + "native": "LiquidationFeatures", + "ctor": [], + "args": [ + { + "name": "longLiquidation", + "array": false + }, + { + "name": "shortLiquidation", + "array": false + } + ], + "out": "multi", + "fields": [ + "long", + "short", + "net", + "total", + "imbalance" + ] + }, + { + "canonical": "LogReturn", + "native": "LogReturn", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "LongLeggedDoji", + "native": "LongLeggedDoji", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "LongLine", + "native": "LongLine", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "LongShortRatio", + "native": "LongShortRatio", + "ctor": [], + "args": [ + { + "name": "longSize", + "array": false + }, + { + "name": "shortSize", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "M2Measure", + "native": "M2Measure", + "ctor": [ + 14, + 2.0, + 0.5 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "MaEnvelope", + "native": "MaEnvelope", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "multi", + "fields": [ + "upper", + "middle", + "lower" + ] + }, + { + "canonical": "MacdExt", + "native": "MACDEXT", + "ctor": [ + 12, + 0, + 26, + 0, + 9, + 0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "multi", + "fields": [ + "macd", + "signal", + "histogram" + ] + }, + { + "canonical": "MacdFix", + "native": "MACDFIX", + "ctor": [ + 9 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "multi", + "fields": [ + "macd", + "signal", + "histogram" + ] + }, + { + "canonical": "MacdHistogram", + "native": "MacdHistogram", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "MacdIndicator", + "native": "MACD", + "ctor": [ + 12, + 26, + 9 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "multi", + "fields": [ + "macd", + "signal", + "histogram" + ] + }, + { + "canonical": "Mama", + "native": "MAMA", + "ctor": [ + 0.5, + 0.05 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "multi", + "fields": [ + "mama", + "fama" + ] + }, + { + "canonical": "MarketFacilitationIndex", + "native": "MarketFacilitationIndex", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "MartinRatio", + "native": "MartinRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Marubozu", + "native": "Marubozu", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "MassIndex", + "native": "MassIndex", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "MatHold", + "native": "MatHold", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "MatchingLow", + "native": "MatchingLow", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "MaxDrawdown", + "native": "MaxDrawdown", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "McClellanOscillator", + "native": "McClellanOscillator", + "ctor": [], + "args": [ + { + "name": "change", + "array": true + }, + { + "name": "volume", + "array": true + }, + { + "name": "newHigh", + "array": true + }, + { + "name": "newLow", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "McClellanSummationIndex", + "native": "McClellanSummationIndex", + "ctor": [], + "args": [ + { + "name": "change", + "array": true + }, + { + "name": "volume", + "array": true + }, + { + "name": "newHigh", + "array": true + }, + { + "name": "newLow", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "McGinleyDynamic", + "native": "McGinleyDynamic", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "MedianAbsoluteDeviation", + "native": "MedianAbsoluteDeviation", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "MedianChannel", + "native": "MedianChannel", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "multi", + "fields": [ + "upper", + "middle", + "lower" + ] + }, + { + "canonical": "MedianMa", + "native": "MedianMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "MedianPrice", + "native": "MedianPrice", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Mfi", + "native": "MFI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Microprice", + "native": "Microprice", + "ctor": [], + "args": [ + { + "name": "bidPx", + "array": true + }, + { + "name": "bidSz", + "array": true + }, + { + "name": "askPx", + "array": true + }, + { + "name": "askSz", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "MidPoint", + "native": "MIDPOINT", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "MidPrice", + "native": "MIDPRICE", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "MinusDi", + "native": "MINUS_DI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "MinusDm", + "native": "MINUS_DM", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ModifiedMaStop", + "native": "ModifiedMaStop", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "value", + "direction" + ] + }, + { + "canonical": "Mom", + "native": "MOM", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "MorningDojiStar", + "native": "MorningDojiStar", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "MorningEveningStar", + "native": "MorningEveningStar", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "MurreyMathLines", + "native": "MurreyMathLines", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "mm88", + "mm78", + "mm68", + "mm58", + "mm48", + "mm38", + "mm28", + "mm18", + "mm08" + ] + }, + { + "canonical": "NakedPoc", + "native": "NakedPoc", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Natr", + "native": "NATR", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "NewHighsNewLows", + "native": "NewHighsNewLows", + "ctor": [], + "args": [ + { + "name": "change", + "array": true + }, + { + "name": "volume", + "array": true + }, + { + "name": "newHigh", + "array": true + }, + { + "name": "newLow", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "NewPriceLines", + "native": "NewPriceLines", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Nrtr", + "native": "Nrtr", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "value", + "direction" + ] + }, + { + "canonical": "Nvi", + "native": "NVI", + "ctor": [], + "args": [ + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "OIPriceDivergence", + "native": "OIPriceDivergence", + "ctor": [ + 20 + ], + "args": [ + { + "name": "openInterest", + "array": false + }, + { + "name": "markPrice", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "OIWeighted", + "native": "OIWeighted", + "ctor": [], + "args": [ + { + "name": "markPrice", + "array": false + }, + { + "name": "openInterest", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Obv", + "native": "OBV", + "ctor": [], + "args": [ + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "OiToVolumeRatio", + "native": "OiToVolumeRatio", + "ctor": [], + "args": [ + { + "name": "openInterest", + "array": false + }, + { + "name": "takerBuyVolume", + "array": false + }, + { + "name": "takerSellVolume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "OmegaRatio", + "native": "OmegaRatio", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "OnNeck", + "native": "OnNeck", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "OpenInterestDelta", + "native": "OpenInterestDelta", + "ctor": [], + "args": [ + { + "name": "openInterest", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "OpenInterestMomentum", + "native": "OpenInterestMomentum", + "ctor": [ + 10 + ], + "args": [ + { + "name": "openInterest", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "OpeningMarubozu", + "native": "OpeningMarubozu", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "OpeningRange", + "native": "OpeningRange", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "high", + "low", + "breakoutDistance" + ] + }, + { + "canonical": "OrderBookImbalanceFull", + "native": "OrderBookImbalanceFull", + "ctor": [], + "args": [ + { + "name": "bidPx", + "array": true + }, + { + "name": "bidSz", + "array": true + }, + { + "name": "askPx", + "array": true + }, + { + "name": "askSz", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "OrderBookImbalanceTop1", + "native": "OrderBookImbalanceTop1", + "ctor": [], + "args": [ + { + "name": "bidPx", + "array": true + }, + { + "name": "bidSz", + "array": true + }, + { + "name": "askPx", + "array": true + }, + { + "name": "askSz", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "OrderBookImbalanceTopN", + "native": "OrderBookImbalanceTopN", + "ctor": [ + 5 + ], + "args": [ + { + "name": "bidPx", + "array": true + }, + { + "name": "bidSz", + "array": true + }, + { + "name": "askPx", + "array": true + }, + { + "name": "askSz", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "OrderFlowImbalance", + "native": "OrderFlowImbalance", + "ctor": [ + 20 + ], + "args": [ + { + "name": "bidPx", + "array": true + }, + { + "name": "bidSz", + "array": true + }, + { + "name": "askPx", + "array": true + }, + { + "name": "askSz", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "OuHalfLife", + "native": "OuHalfLife", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false + }, + { + "name": "y", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "OvernightGap", + "native": "OvernightGap", + "ctor": [ + 0 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + }, + { + "name": "timestamp", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "OvernightIntradayReturn", + "native": "OvernightIntradayReturn", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + }, + { + "name": "timestamp", + "array": false + } + ], + "out": "multi", + "fields": [ + "overnight", + "intraday" + ] + }, + { + "canonical": "PainIndex", + "native": "PainIndex", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "PairSpreadZScore", + "native": "PairSpreadZScore", + "ctor": [ + 20, + 20 + ], + "args": [ + { + "name": "a", + "array": false + }, + { + "name": "b", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "PairwiseBeta", + "native": "PairwiseBeta", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false + }, + { + "name": "y", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ParkinsonVolatility", + "native": "ParkinsonVolatility", + "ctor": [ + 20, + 252 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "PearsonCorrelation", + "native": "PearsonCorrelation", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false + }, + { + "name": "y", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "PercentAboveMa", + "native": "PercentAboveMa", + "ctor": [], + "args": [ + { + "name": "change", + "array": true + }, + { + "name": "volume", + "array": true + }, + { + "name": "newHigh", + "array": true + }, + { + "name": "newLow", + "array": true + }, + { + "name": "aboveMa", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "PercentB", + "native": "PercentB", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "PercentageTrailingStop", + "native": "PercentageTrailingStop", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "PerpetualPremiumIndex", + "native": "PerpetualPremiumIndex", + "ctor": [], + "args": [ + { + "name": "markPrice", + "array": false + }, + { + "name": "indexPrice", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Pgo", + "native": "PGO", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "PiercingDarkCloud", + "native": "PiercingDarkCloud", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Pin", + "native": "Pin", + "ctor": [ + 20 + ], + "args": [ + { + "name": "price", + "array": false + }, + { + "name": "size", + "array": false + }, + { + "name": "isBuy", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "PivotReversal", + "native": "PivotReversal", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "PlusDi", + "native": "PLUS_DI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "PlusDm", + "native": "PLUS_DM", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Pmo", + "native": "PMO", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "PointAndFigureBars", + "native": "PointAndFigureBars", + "ctor": [ + 2.0, + 3 + ], + "args": [ + { + "name": "close", + "array": false + } + ], + "out": "bars", + "fields": [ + "direction", + "high", + "low" + ] + }, + { + "canonical": "PolarizedFractalEfficiency", + "native": "POLARIZED_FRACTAL_EFFICIENCY", + "ctor": [ + 10, + 5 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Ppo", + "native": "PPO", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "PpoHistogram", + "native": "PpoHistogram", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ProfileShape", + "native": "ProfileShape", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ProfitFactor", + "native": "ProfitFactor", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ProjectionBands", + "native": "ProjectionBands", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "upper", + "middle", + "lower" + ] + }, + { + "canonical": "ProjectionOscillator", + "native": "ProjectionOscillator", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Psar", + "native": "PSAR", + "ctor": [ + 0.02, + 0.02, + 0.2 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Pvi", + "native": "PVI", + "ctor": [], + "args": [ + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Qqe", + "native": "QQE", + "ctor": [ + 3, + 7, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "multi", + "fields": [ + "rsiMa", + "trailingLine" + ] + }, + { + "canonical": "Qstick", + "native": "Qstick", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "QuartileBands", + "native": "QuartileBands", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "multi", + "fields": [ + "upper", + "middle", + "lower" + ] + }, + { + "canonical": "QuotedSpread", + "native": "QuotedSpread", + "ctor": [], + "args": [ + { + "name": "bidPx", + "array": true + }, + { + "name": "bidSz", + "array": true + }, + { + "name": "askPx", + "array": true + }, + { + "name": "askSz", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "RSquared", + "native": "RSquared", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RangeBars", + "native": "RangeBars", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "close", + "array": false + } + ], + "out": "bars", + "fields": [ + "open", + "close", + "direction" + ] + }, + { + "canonical": "RealizedSpread", + "native": "RealizedSpread", + "ctor": [ + 20 + ], + "args": [ + { + "name": "price", + "array": false + }, + { + "name": "size", + "array": false + }, + { + "name": "isBuy", + "array": false + }, + { + "name": "mid", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RealizedVolatility", + "native": "RealizedVolatility", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RecoveryFactor", + "native": "RecoveryFactor", + "ctor": [], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RectangleRange", + "native": "RectangleRange", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Reflex", + "native": "REFLEX", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RegimeLabel", + "native": "RegimeLabel", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RelativeStrengthAB", + "native": "RelativeStrengthAB", + "ctor": [ + 14, + 14 + ], + "args": [ + { + "name": "a", + "array": false + }, + { + "name": "b", + "array": false + } + ], + "out": "multi", + "fields": [ + "ratio", + "ratioMa", + "ratioRsi" + ] + }, + { + "canonical": "RenkoBars", + "native": "RenkoBars", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "close", + "array": false + } + ], + "out": "bars", + "fields": [ + "open", + "close", + "direction" + ] + }, + { + "canonical": "RenkoTrailingStop", + "native": "RenkoTrailingStop", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RickshawMan", + "native": "RickshawMan", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RisingThreeMethods", + "native": "RisingThreeMethods", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Rmi", + "native": "RMI", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Roc", + "native": "ROC", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Rocp", + "native": "ROCP", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Rocr", + "native": "ROCR", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Rocr100", + "native": "ROCR100", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RogersSatchellVolatility", + "native": "RogersSatchellVolatility", + "ctor": [ + 20, + 252 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RollMeasure", + "native": "RollMeasure", + "ctor": [ + 20 + ], + "args": [ + { + "name": "price", + "array": false + }, + { + "name": "size", + "array": false + }, + { + "name": "isBuy", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RollingCorrelation", + "native": "RollingCorrelation", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false + }, + { + "name": "y", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RollingCovariance", + "native": "RollingCovariance", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false + }, + { + "name": "y", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RollingIqr", + "native": "RollingIqr", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RollingMinMaxScaler", + "native": "ROLLINGMINMAX", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RollingPercentileRank", + "native": "RollingPercentileRank", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RollingQuantile", + "native": "RollingQuantile", + "ctor": [ + 20, + 0.5 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RollingVwap", + "native": "RollingVWAP", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RoofingFilter", + "native": "RoofingFilter", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Rsi", + "native": "RSI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Rsx", + "native": "RSX", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RunBars", + "native": "RunBars", + "ctor": [ + 3 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "bars", + "fields": [ + "open", + "high", + "low", + "close", + "length", + "direction" + ] + }, + { + "canonical": "Rvi", + "native": "RVI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "RviVolatility", + "native": "RVIVolatility", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Rwi", + "native": "RWI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "high", + "low" + ] + }, + { + "canonical": "SampleEntropy", + "native": "SAMPLEENT", + "ctor": [ + 20, + 2, + 0.2 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "SarExt", + "native": "SAREXT", + "ctor": [ + 2.0, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "SeasonalZScore", + "native": "SeasonalZScore", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + }, + { + "name": "timestamp", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "SeparatingLines", + "native": "SeparatingLines", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "SessionHighLow", + "native": "SessionHighLow", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + }, + { + "name": "timestamp", + "array": false + } + ], + "out": "multi", + "fields": [ + "high", + "low" + ] + }, + { + "canonical": "SessionRange", + "native": "SessionRange", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + }, + { + "name": "timestamp", + "array": false + } + ], + "out": "multi", + "fields": [ + "asia", + "eu", + "us" + ] + }, + { + "canonical": "SessionVwap", + "native": "SessionVwap", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + }, + { + "name": "timestamp", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ShannonEntropy", + "native": "SHANNONENT", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Shark", + "native": "Shark", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "SharpeRatio", + "native": "SharpeRatio", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ShootingStar", + "native": "ShootingStar", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ShortLine", + "native": "ShortLine", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "SignedVolume", + "native": "SignedVolume", + "ctor": [], + "args": [ + { + "name": "price", + "array": false + }, + { + "name": "size", + "array": false + }, + { + "name": "isBuy", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "SineWave", + "native": "SineWave", + "ctor": [], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "SineWeightedMa", + "native": "SWMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "SinglePrints", + "native": "SinglePrints", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Skewness", + "native": "Skewness", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Sma", + "native": "SMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Smi", + "native": "SMI", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Smma", + "native": "SMMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "SmoothedHeikinAshi", + "native": "SmoothedHeikinAshi", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "open", + "high", + "low", + "close" + ] + }, + { + "canonical": "SortinoRatio", + "native": "SortinoRatio", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "SpearmanCorrelation", + "native": "SpearmanCorrelation", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false + }, + { + "name": "y", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "SpinningTop", + "native": "SpinningTop", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "SpreadAr1Coefficient", + "native": "SpreadAr1Coefficient", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false + }, + { + "name": "y", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "SpreadBollingerBands", + "native": "SpreadBollingerBands", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "a", + "array": false + }, + { + "name": "b", + "array": false + } + ], + "out": "multi", + "fields": [ + "middle", + "upper", + "lower", + "percentB" + ] + }, + { + "canonical": "SpreadHurst", + "native": "SpreadHurst", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false + }, + { + "name": "y", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "StalledPattern", + "native": "StalledPattern", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "StandardError", + "native": "StandardError", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "StandardErrorBands", + "native": "StandardErrorBands", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "multi", + "fields": [ + "upper", + "middle", + "lower" + ] + }, + { + "canonical": "StarcBands", + "native": "StarcBands", + "ctor": [ + 3, + 7, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "upper", + "middle", + "lower" + ] + }, + { + "canonical": "Stc", + "native": "STC", + "ctor": [ + 10, + 23, + 10, + 0.5 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "StdDev", + "native": "StdDev", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "StepTrailingStop", + "native": "StepTrailingStop", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "SterlingRatio", + "native": "SterlingRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "StickSandwich", + "native": "StickSandwich", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "StochRsi", + "native": "StochRSI", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Stochastic", + "native": "Stochastic", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "k", + "d" + ] + }, + { + "canonical": "StochasticCci", + "native": "StochasticCCI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "SuperSmoother", + "native": "SuperSmoother", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "SuperTrend", + "native": "SuperTrend", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "value", + "direction" + ] + }, + { + "canonical": "T3", + "native": "T3", + "ctor": [ + 5, + 0.7 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TailRatio", + "native": "TailRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TakerBuySellRatio", + "native": "TakerBuySellRatio", + "ctor": [], + "args": [ + { + "name": "takerBuyVolume", + "array": false + }, + { + "name": "takerSellVolume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Takuri", + "native": "Takuri", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TasukiGap", + "native": "TasukiGap", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TdCamouflage", + "native": "TDCamouflage", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TdClop", + "native": "TDClop", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TdClopwin", + "native": "TDClopwin", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TdCombo", + "native": "TDCombo", + "ctor": [ + 3, + 7, + 14, + 28 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TdCountdown", + "native": "TDCountdown", + "ctor": [ + 3, + 7, + 14, + 28 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TdDWave", + "native": "TDDWave", + "ctor": [ + 2 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TdDeMarker", + "native": "TDDeMarker", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TdDifferential", + "native": "TDDifferential", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TdLines", + "native": "TDLines", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "resistance", + "support" + ] + }, + { + "canonical": "TdMovingAverage", + "native": "TDMovingAverage", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "st1", + "st2" + ] + }, + { + "canonical": "TdOpen", + "native": "TDOpen", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TdPressure", + "native": "TDPressure", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TdPropulsion", + "native": "TDPropulsion", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TdRangeProjection", + "native": "TDRangeProjection", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "high", + "low" + ] + }, + { + "canonical": "TdRei", + "native": "TDREI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TdRiskLevel", + "native": "TDRiskLevel", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "buyRisk", + "sellRisk" + ] + }, + { + "canonical": "TdSequential", + "native": "TDSequential", + "ctor": [ + 3, + 7, + 14, + 28 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "setup", + "countdown", + "direction" + ] + }, + { + "canonical": "TdSetup", + "native": "TDSetup", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TdTrap", + "native": "TDTrap", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Tema", + "native": "TEMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TermStructureBasis", + "native": "TermStructureBasis", + "ctor": [], + "args": [ + { + "name": "futuresPrice", + "array": false + }, + { + "name": "indexPrice", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ThreeDrives", + "native": "ThreeDrives", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ThreeInside", + "native": "ThreeInside", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ThreeLineBreak", + "native": "ThreeLineBreak", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ThreeLineBreakBars", + "native": "ThreeLineBreakBars", + "ctor": [ + 3 + ], + "args": [ + { + "name": "close", + "array": false + } + ], + "out": "bars", + "fields": [ + "open", + "close", + "direction" + ] + }, + { + "canonical": "ThreeLineStrike", + "native": "ThreeLineStrike", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ThreeOutside", + "native": "ThreeOutside", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ThreeSoldiersOrCrows", + "native": "ThreeSoldiersOrCrows", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ThreeStarsInSouth", + "native": "ThreeStarsInSouth", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Thrusting", + "native": "Thrusting", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TickBars", + "native": "TickBars", + "ctor": [ + 2 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "bars", + "fields": [ + "open", + "high", + "low", + "close", + "volume" + ] + }, + { + "canonical": "TickIndex", + "native": "TickIndex", + "ctor": [], + "args": [ + { + "name": "change", + "array": true + }, + { + "name": "volume", + "array": true + }, + { + "name": "newHigh", + "array": true + }, + { + "name": "newLow", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "Tii", + "native": "TII", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TimeBasedStop", + "native": "TimeBasedStop", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TimeOfDayReturnProfile", + "native": "TimeOfDayReturnProfile", + "ctor": [ + 24, + 0 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + }, + { + "name": "timestamp", + "array": false + } + ], + "out": "profile_bins", + "width": 24 + }, + { + "canonical": "TowerTopBottom", + "native": "TowerTopBottom", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TpoProfile", + "native": "TpoProfile", + "ctor": [ + 30, + 50 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "profile_pricebins", + "width": 52, + "arrayField": "counts" + }, + { + "canonical": "TradeImbalance", + "native": "TradeImbalance", + "ctor": [ + 20 + ], + "args": [ + { + "name": "price", + "array": false + }, + { + "name": "size", + "array": false + }, + { + "name": "isBuy", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TradeSignAutocorrelation", + "native": "TradeSignAutocorrelation", + "ctor": [ + 20 + ], + "args": [ + { + "name": "price", + "array": false + }, + { + "name": "size", + "array": false + }, + { + "name": "isBuy", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TradeVolumeIndex", + "native": "TradeVolumeIndex", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TrendLabel", + "native": "TrendLabel", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TrendStrengthIndex", + "native": "TREND_STRENGTH_INDEX", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Trendflex", + "native": "TRENDFLEX", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TreynorRatio", + "native": "TreynorRatio", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "asset", + "array": false + }, + { + "name": "benchmark", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Triangle", + "native": "Triangle", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Trima", + "native": "TRIMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Trin", + "native": "Trin", + "ctor": [], + "args": [ + { + "name": "change", + "array": true + }, + { + "name": "volume", + "array": true + }, + { + "name": "newHigh", + "array": true + }, + { + "name": "newLow", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "TripleTopBottom", + "native": "TripleTopBottom", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Tristar", + "native": "Tristar", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Trix", + "native": "TRIX", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TrueRange", + "native": "TrueRange", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Tsf", + "native": "TSF", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TsfOscillator", + "native": "TsfOscillator", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Tsi", + "native": "TSI", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Tsv", + "native": "TSV", + "ctor": [ + 14 + ], + "args": [ + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TtmSqueeze", + "native": "TtmSqueeze", + "ctor": [ + 14, + 2.0, + 0.5 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "squeeze", + "momentum" + ] + }, + { + "canonical": "TtmTrend", + "native": "TTM_TREND", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TurnOfMonth", + "native": "TurnOfMonth", + "ctor": [ + 3, + 3, + 0 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + }, + { + "name": "timestamp", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Tweezer", + "native": "Tweezer", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TwiggsMoneyFlow", + "native": "TwiggsMoneyFlow", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TwoCrows", + "native": "TwoCrows", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "TypicalPrice", + "native": "TypicalPrice", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "UlcerIndex", + "native": "UlcerIndex", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "UltimateOscillator", + "native": "UltimateOscillator", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "UniqueThreeRiver", + "native": "UniqueThreeRiver", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "UniversalOscillator", + "native": "UNIVERSALOSC", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "UpDownVolumeRatio", + "native": "UpDownVolumeRatio", + "ctor": [], + "args": [ + { + "name": "change", + "array": true + }, + { + "name": "volume", + "array": true + }, + { + "name": "newHigh", + "array": true + }, + { + "name": "newLow", + "array": true + } + ], + "out": "scalar" + }, + { + "canonical": "UpsideGapThreeMethods", + "native": "UpsideGapThreeMethods", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "UpsideGapTwoCrows", + "native": "UpsideGapTwoCrows", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "UpsidePotentialRatio", + "native": "UpsidePotentialRatio", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ValueArea", + "native": "ValueArea", + "ctor": [ + 20, + 50, + 0.7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "multi", + "fields": [ + "poc", + "vah", + "val" + ] + }, + { + "canonical": "ValueAtRisk", + "native": "ValueAtRisk", + "ctor": [ + 20, + 0.95 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Variance", + "native": "Variance", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "VarianceRatio", + "native": "VarianceRatio", + "ctor": [ + 60, + 2 + ], + "args": [ + { + "name": "a", + "array": false + }, + { + "name": "b", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "VerticalHorizontalFilter", + "native": "VerticalHorizontalFilter", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Vidya", + "native": "VIDYA", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "VolatilityCone", + "native": "VolatilityCone", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "current", + "min", + "median", + "max", + "percentile" + ] + }, + { + "canonical": "VolatilityOfVolatility", + "native": "VolatilityOfVolatility", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "VolatilityRatio", + "native": "VolatilityRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "VoltyStop", + "native": "VoltyStop", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "VolumeBars", + "native": "VolumeBars", + "ctor": [ + 500.0 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "bars", + "fields": [ + "open", + "high", + "low", + "close", + "volume" + ] + }, + { + "canonical": "VolumeByTimeProfile", + "native": "VolumeByTimeProfile", + "ctor": [ + 24, + 0 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + }, + { + "name": "timestamp", + "array": false + } + ], + "out": "profile_bins", + "width": 24 + }, + { + "canonical": "VolumeOscillator", + "native": "VolumeOscillator", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "VolumePriceTrend", + "native": "VolumePriceTrend", + "ctor": [], + "args": [ + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "VolumeProfile", + "native": "VolumeProfile", + "ctor": [ + 20, + 50 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "profile_pricebins", + "width": 52, + "arrayField": "bins" + }, + { + "canonical": "VolumeRsi", + "native": "VolumeRsi", + "ctor": [ + 14 + ], + "args": [ + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "VolumeWeightedMacd", + "native": "VolumeWeightedMacd", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "multi", + "fields": [ + "macd", + "signal", + "histogram" + ] + }, + { + "canonical": "VolumeWeightedSr", + "native": "VolumeWeightedSr", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "multi", + "fields": [ + "support", + "resistance" + ] + }, + { + "canonical": "Vortex", + "native": "Vortex", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "plus", + "minus" + ] + }, + { + "canonical": "Vpin", + "native": "Vpin", + "ctor": [ + 5000.0, + 10 + ], + "args": [ + { + "name": "price", + "array": false + }, + { + "name": "size", + "array": false + }, + { + "name": "isBuy", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Vwap", + "native": "VWAP", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "VwapStdDevBands", + "native": "VwapStdDevBands", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "multi", + "fields": [ + "upper", + "middle", + "lower", + "stddev" + ] + }, + { + "canonical": "Vwma", + "native": "VWMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Vzo", + "native": "VZO", + "ctor": [ + 14 + ], + "args": [ + { + "name": "close", + "array": false + }, + { + "name": "volume", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Wad", + "native": "Wad", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "WavePm", + "native": "WAVE_PM", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "WaveTrend", + "native": "WaveTrend", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "wt1", + "wt2" + ] + }, + { + "canonical": "Wedge", + "native": "Wedge", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "WeightedClose", + "native": "WeightedClose", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "WickRatio", + "native": "WickRatio", + "ctor": [], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "WilliamsFractals", + "native": "WilliamsFractals", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "up", + "down" + ] + }, + { + "canonical": "WilliamsR", + "native": "WilliamsR", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "WinRate", + "native": "WinRate", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "Wma", + "native": "WMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "WoodiePivots", + "native": "WoodiePivots", + "ctor": [], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "multi", + "fields": [ + "pp", + "r1", + "r2", + "s1", + "s2" + ] + }, + { + "canonical": "YangZhangVolatility", + "native": "YangZhangVolatility", + "ctor": [ + 20, + 252 + ], + "args": [ + { + "name": "open", + "array": false + }, + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "YoyoExit", + "native": "YoyoExit", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + }, + { + "name": "close", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ZScore", + "native": "ZScore", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + }, + { + "canonical": "ZeroLagMacd", + "native": "ZeroLagMACD", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "multi", + "fields": [ + "macd", + "signal", + "histogram" + ] + }, + { + "canonical": "ZigZag", + "native": "ZigZag", + "ctor": [ + 0.02 + ], + "args": [ + { + "name": "high", + "array": false + }, + { + "name": "low", + "array": false + } + ], + "out": "multi", + "fields": [ + "swing", + "direction" + ] + }, + { + "canonical": "Zlema", + "native": "ZLEMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false + } + ], + "out": "scalar" + } +] \ No newline at end of file diff --git a/testdata/golden/profile_manifest.json b/testdata/golden/profile_manifest.json new file mode 100644 index 00000000..8014fe64 --- /dev/null +++ b/testdata/golden/profile_manifest.json @@ -0,0 +1,61 @@ +[ + { + "canonical": "TimeOfDayReturnProfile", + "native": "TimeOfDayReturnProfile", + "params": [ + 24, + 0 + ], + "kind": "bins", + "width": 24 + }, + { + "canonical": "IntradayVolatilityProfile", + "native": "IntradayVolatilityProfile", + "params": [ + 24, + 0 + ], + "kind": "bins", + "width": 24 + }, + { + "canonical": "VolumeByTimeProfile", + "native": "VolumeByTimeProfile", + "params": [ + 24, + 0 + ], + "kind": "bins", + "width": 24 + }, + { + "canonical": "DayOfWeekProfile", + "native": "DayOfWeekProfile", + "params": [ + 0 + ], + "kind": "bins", + "width": 7 + }, + { + "canonical": "TpoProfile", + "native": "TpoProfile", + "params": [ + 30, + 50 + ], + "kind": "pricebins", + "width": 52 + }, + { + "canonical": "VolumeProfile", + "native": "VolumeProfile", + "params": [ + 20, + 50 + ], + "kind": "pricebins", + "width": 52 + } +] \ No newline at end of file diff --git a/testdata/golden/scalar_manifest.json b/testdata/golden/scalar_manifest.json new file mode 100644 index 00000000..c912ef8d --- /dev/null +++ b/testdata/golden/scalar_manifest.json @@ -0,0 +1,2735 @@ +[ + { + "canonical": "AbandonedBaby", + "native": "AbandonedBaby", + "params": [], + "input": "Candle" + }, + { + "canonical": "Abcd", + "native": "Abcd", + "params": [], + "input": "Candle" + }, + { + "canonical": "AcceleratorOscillator", + "native": "AcceleratorOscillator", + "params": [ + 3, + 7, + 14 + ], + "input": "Candle" + }, + { + "canonical": "AdOscillator", + "native": "ADOSC", + "params": [], + "input": "Candle" + }, + { + "canonical": "AdaptiveCci", + "native": "ADAPTIVECCI", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "AdaptiveCycle", + "native": "AdaptiveCycle", + "params": [], + "input": "f64" + }, + { + "canonical": "AdaptiveLaguerreFilter", + "native": "AdaptiveLaguerre", + "params": [ + 20 + ], + "input": "f64" + }, + { + "canonical": "AdaptiveRsi", + "native": "ADAPTIVERSI", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Adl", + "native": "ADL", + "params": [], + "input": "Candle" + }, + { + "canonical": "AdvanceBlock", + "native": "AdvanceBlock", + "params": [], + "input": "Candle" + }, + { + "canonical": "Adxr", + "native": "ADXR", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "Alma", + "native": "ALMA", + "params": [ + 9, + 0.85, + 6.0 + ], + "input": "f64" + }, + { + "canonical": "Alpha", + "native": "Alpha", + "params": [ + 14, + 2.0 + ], + "input": "(f64, f64)" + }, + { + "canonical": "AnchoredRsi", + "native": "AnchoredRSI", + "params": [], + "input": "f64" + }, + { + "canonical": "AnchoredVwap", + "native": "AnchoredVWAP", + "params": [], + "input": "Candle" + }, + { + "canonical": "Apo", + "native": "APO", + "params": [ + 3, + 7 + ], + "input": "f64" + }, + { + "canonical": "AroonOscillator", + "native": "AroonOscillator", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "Atr", + "native": "ATR", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "AtrTrailingStop", + "native": "AtrTrailingStop", + "params": [ + 14, + 2.0 + ], + "input": "Candle" + }, + { + "canonical": "Autocorrelation", + "native": "Autocorrelation", + "params": [ + 10, + 1 + ], + "input": "f64" + }, + { + "canonical": "AutocorrelationPeriodogram", + "native": "AUTOCORRPGRAM", + "params": [ + 10, + 48 + ], + "input": "f64" + }, + { + "canonical": "AverageDailyRange", + "native": "AverageDailyRange", + "params": [ + 14, + 0 + ], + "input": "Candle" + }, + { + "canonical": "AverageDrawdown", + "native": "AverageDrawdown", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "AvgPrice", + "native": "AVGPRICE", + "params": [], + "input": "Candle" + }, + { + "canonical": "AwesomeOscillator", + "native": "AwesomeOscillator", + "params": [ + 3, + 7 + ], + "input": "Candle" + }, + { + "canonical": "AwesomeOscillatorHistogram", + "native": "AwesomeOscillatorHistogram", + "params": [ + 3, + 7, + 14 + ], + "input": "Candle" + }, + { + "canonical": "BalanceOfPower", + "native": "BalanceOfPower", + "params": [], + "input": "Candle" + }, + { + "canonical": "BandpassFilter", + "native": "BANDPASS", + "params": [ + 20, + 0.3 + ], + "input": "f64" + }, + { + "canonical": "Bat", + "native": "Bat", + "params": [], + "input": "Candle" + }, + { + "canonical": "BeltHold", + "native": "BeltHold", + "params": [], + "input": "Candle" + }, + { + "canonical": "Beta", + "native": "Beta", + "params": [ + 14 + ], + "input": "(f64, f64)" + }, + { + "canonical": "BetaNeutralSpread", + "native": "BetaNeutralSpread", + "params": [ + 14 + ], + "input": "(f64, f64)" + }, + { + "canonical": "BetterVolume", + "native": "BetterVolume", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "BipowerVariation", + "native": "BipowerVariation", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "BodySizePct", + "native": "BodySizePct", + "params": [], + "input": "Candle" + }, + { + "canonical": "BollingerBandwidth", + "native": "BollingerBandwidth", + "params": [ + 14, + 2.0 + ], + "input": "f64" + }, + { + "canonical": "Breakaway", + "native": "Breakaway", + "params": [], + "input": "Candle" + }, + { + "canonical": "BurkeRatio", + "native": "BurkeRatio", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Butterfly", + "native": "Butterfly", + "params": [], + "input": "Candle" + }, + { + "canonical": "CalmarRatio", + "native": "CalmarRatio", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Cci", + "native": "CCI", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "CenterOfGravity", + "native": "CenterOfGravity", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Cfo", + "native": "CFO", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "ChaikinMoneyFlow", + "native": "ChaikinMoneyFlow", + "params": [ + 20 + ], + "input": "Candle" + }, + { + "canonical": "ChaikinOscillator", + "native": "ChaikinOscillator", + "params": [ + 3, + 7 + ], + "input": "Candle" + }, + { + "canonical": "ChaikinVolatility", + "native": "ChaikinVolatility", + "params": [ + 3, + 7 + ], + "input": "Candle" + }, + { + "canonical": "ChoppinessIndex", + "native": "ChoppinessIndex", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "CloseVsOpen", + "native": "CloseVsOpen", + "params": [], + "input": "Candle" + }, + { + "canonical": "ClosingMarubozu", + "native": "ClosingMarubozu", + "params": [], + "input": "Candle" + }, + { + "canonical": "Cmo", + "native": "CMO", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "CoefficientOfVariation", + "native": "CoefficientOfVariation", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "CommonSenseRatio", + "native": "CommonSenseRatio", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "ConcealingBabySwallow", + "native": "ConcealingBabySwallow", + "params": [], + "input": "Candle" + }, + { + "canonical": "ConditionalValueAtRisk", + "native": "ConditionalValueAtRisk", + "params": [ + 20, + 0.95 + ], + "input": "f64" + }, + { + "canonical": "ConnorsRsi", + "native": "ConnorsRSI", + "params": [ + 3, + 7, + 14 + ], + "input": "f64" + }, + { + "canonical": "Coppock", + "native": "Coppock", + "params": [ + 3, + 7, + 14 + ], + "input": "f64" + }, + { + "canonical": "CorrelationTrendIndicator", + "native": "CTI", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Counterattack", + "native": "Counterattack", + "params": [], + "input": "Candle" + }, + { + "canonical": "Crab", + "native": "Crab", + "params": [], + "input": "Candle" + }, + { + "canonical": "CupAndHandle", + "native": "CupAndHandle", + "params": [], + "input": "Candle" + }, + { + "canonical": "CyberneticCycle", + "native": "CyberneticCycle", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Cypher", + "native": "Cypher", + "params": [], + "input": "Candle" + }, + { + "canonical": "Decycler", + "native": "Decycler", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "DecyclerOscillator", + "native": "DecyclerOscillator", + "params": [ + 3, + 7 + ], + "input": "f64" + }, + { + "canonical": "Dema", + "native": "DEMA", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "DemandIndex", + "native": "DemandIndex", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "DerivativeOscillator", + "native": "DerivativeOscillator", + "params": [ + 3, + 7, + 14, + 28 + ], + "input": "f64" + }, + { + "canonical": "DetrendedStdDev", + "native": "DetrendedStdDev", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "DisparityIndex", + "native": "DisparityIndex", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "DistanceSsd", + "native": "DistanceSsd", + "params": [ + 14 + ], + "input": "(f64, f64)" + }, + { + "canonical": "Doji", + "native": "Doji", + "params": [], + "input": "Candle" + }, + { + "canonical": "DojiStar", + "native": "DojiStar", + "params": [], + "input": "Candle" + }, + { + "canonical": "DoubleTopBottom", + "native": "DoubleTopBottom", + "params": [], + "input": "Candle" + }, + { + "canonical": "DownsideGapThreeMethods", + "native": "DownsideGapThreeMethods", + "params": [], + "input": "Candle" + }, + { + "canonical": "Dpo", + "native": "DPO", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "DragonflyDoji", + "native": "DragonflyDoji", + "params": [], + "input": "Candle" + }, + { + "canonical": "DrawdownDuration", + "native": "DrawdownDuration", + "params": [], + "input": "f64" + }, + { + "canonical": "DumplingTop", + "native": "DumplingTop", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "Dx", + "native": "DX", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "DynamicMomentumIndex", + "native": "DynamicMomentumIndex", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "EaseOfMovement", + "native": "EaseOfMovement", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "EhlersStochastic", + "native": "EhlersStochastic", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Ehma", + "native": "EHMA", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "ElderImpulse", + "native": "ElderImpulse", + "params": [ + 3, + 7, + 14, + 28 + ], + "input": "f64" + }, + { + "canonical": "Ema", + "native": "EMA", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "EmpiricalModeDecomposition", + "native": "EmpiricalModeDecomposition", + "params": [ + 20, + 0.1 + ], + "input": "f64" + }, + { + "canonical": "Engulfing", + "native": "Engulfing", + "params": [], + "input": "Candle" + }, + { + "canonical": "EvenBetterSinewave", + "native": "EVENBETTERSINE", + "params": [ + 40, + 10 + ], + "input": "f64" + }, + { + "canonical": "EveningDojiStar", + "native": "EveningDojiStar", + "params": [], + "input": "Candle" + }, + { + "canonical": "Evwma", + "native": "EVWMA", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "EwmaVolatility", + "native": "EwmaVolatility", + "params": [ + 0.94 + ], + "input": "f64" + }, + { + "canonical": "Expectancy", + "native": "Expectancy", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "FallingThreeMethods", + "native": "FallingThreeMethods", + "params": [], + "input": "Candle" + }, + { + "canonical": "Fama", + "native": "FAMA", + "params": [ + 0.5, + 0.05 + ], + "input": "f64" + }, + { + "canonical": "FisherRsi", + "native": "FisherRSI", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "FisherTransform", + "native": "FisherTransform", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "FlagPennant", + "native": "FlagPennant", + "params": [], + "input": "Candle" + }, + { + "canonical": "ForceIndex", + "native": "ForceIndex", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "Frama", + "native": "FRAMA", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "FryPanBottom", + "native": "FryPanBottom", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "GainLossRatio", + "native": "GainLossRatio", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "GainToPainRatio", + "native": "GainToPainRatio", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "GapSideBySideWhite", + "native": "GapSideBySideWhite", + "params": [], + "input": "Candle" + }, + { + "canonical": "Garch11", + "native": "Garch11", + "params": [ + 2e-06, + 0.1, + 0.88 + ], + "input": "f64" + }, + { + "canonical": "GarmanKlassVolatility", + "native": "GarmanKlassVolatility", + "params": [ + 20, + 252 + ], + "input": "Candle" + }, + { + "canonical": "Gartley", + "native": "Gartley", + "params": [], + "input": "Candle" + }, + { + "canonical": "GeneralizedDema", + "native": "GD", + "params": [ + 5, + 0.7 + ], + "input": "f64" + }, + { + "canonical": "GeometricMa", + "native": "GMA", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "GrangerCausality", + "native": "GrangerCausality", + "params": [ + 60, + 1 + ], + "input": "(f64, f64)" + }, + { + "canonical": "GravestoneDoji", + "native": "GravestoneDoji", + "params": [], + "input": "Candle" + }, + { + "canonical": "Hammer", + "native": "Hammer", + "params": [], + "input": "Candle" + }, + { + "canonical": "HangingMan", + "native": "HangingMan", + "params": [], + "input": "Candle" + }, + { + "canonical": "Harami", + "native": "Harami", + "params": [], + "input": "Candle" + }, + { + "canonical": "HaramiCross", + "native": "HaramiCross", + "params": [], + "input": "Candle" + }, + { + "canonical": "HasbrouckInformationShare", + "native": "HasbrouckInformationShare", + "params": [ + 14 + ], + "input": "(f64, f64)" + }, + { + "canonical": "HeadAndShoulders", + "native": "HeadAndShoulders", + "params": [], + "input": "Candle" + }, + { + "canonical": "HeikinAshiOscillator", + "native": "HeikinAshiOscillator", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "HiLoActivator", + "native": "HiLoActivator", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "HighLowRange", + "native": "HighLowRange", + "params": [], + "input": "Candle" + }, + { + "canonical": "HighWave", + "native": "HighWave", + "params": [], + "input": "Candle" + }, + { + "canonical": "HighpassFilter", + "native": "HIGHPASS", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Hikkake", + "native": "Hikkake", + "params": [], + "input": "Candle" + }, + { + "canonical": "HikkakeModified", + "native": "HikkakeModified", + "params": [], + "input": "Candle" + }, + { + "canonical": "HilbertDominantCycle", + "native": "HilbertDominantCycle", + "params": [], + "input": "f64" + }, + { + "canonical": "HistoricalVolatility", + "native": "HistoricalVolatility", + "params": [ + 3, + 7 + ], + "input": "f64" + }, + { + "canonical": "Hma", + "native": "HMA", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "HoltWinters", + "native": "HoltWinters", + "params": [ + 0.5, + 0.1 + ], + "input": "f64" + }, + { + "canonical": "HomingPigeon", + "native": "HomingPigeon", + "params": [], + "input": "Candle" + }, + { + "canonical": "HtDcPhase", + "native": "HT_DCPHASE", + "params": [], + "input": "f64" + }, + { + "canonical": "HtTrendMode", + "native": "HT_TRENDMODE", + "params": [], + "input": "f64" + }, + { + "canonical": "HurstExponent", + "native": "HurstExponent", + "params": [ + 100, + 4 + ], + "input": "f64" + }, + { + "canonical": "IdenticalThreeCrows", + "native": "IdenticalThreeCrows", + "params": [], + "input": "Candle" + }, + { + "canonical": "InNeck", + "native": "InNeck", + "params": [], + "input": "Candle" + }, + { + "canonical": "Inertia", + "native": "Inertia", + "params": [ + 3, + 7 + ], + "input": "Candle" + }, + { + "canonical": "InformationRatio", + "native": "InformationRatio", + "params": [ + 14 + ], + "input": "(f64, f64)" + }, + { + "canonical": "InstantaneousTrendline", + "native": "InstantaneousTrendline", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "IntradayIntensity", + "native": "IntradayIntensity", + "params": [], + "input": "Candle" + }, + { + "canonical": "IntradayMomentumIndex", + "native": "IMI", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "InverseFisherTransform", + "native": "InverseFisherTransform", + "params": [ + 2.0 + ], + "input": "f64" + }, + { + "canonical": "InvertedHammer", + "native": "InvertedHammer", + "params": [], + "input": "Candle" + }, + { + "canonical": "JarqueBera", + "native": "JARQUEBERA", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Jma", + "native": "JMA", + "params": [ + 7, + 0.0, + 2 + ], + "input": "f64" + }, + { + "canonical": "JumpIndicator", + "native": "JumpIndicator", + "params": [ + 14, + 2.0 + ], + "input": "f64" + }, + { + "canonical": "KRatio", + "native": "KRatio", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Kama", + "native": "KAMA", + "params": [ + 3, + 7, + 14 + ], + "input": "f64" + }, + { + "canonical": "KellyCriterion", + "native": "KellyCriterion", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "KendallTau", + "native": "KendallTau", + "params": [ + 14 + ], + "input": "(f64, f64)" + }, + { + "canonical": "Kicking", + "native": "Kicking", + "params": [], + "input": "Candle" + }, + { + "canonical": "KickingByLength", + "native": "KickingByLength", + "params": [], + "input": "Candle" + }, + { + "canonical": "Kurtosis", + "native": "Kurtosis", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Kvo", + "native": "KVO", + "params": [ + 3, + 7 + ], + "input": "Candle" + }, + { + "canonical": "LadderBottom", + "native": "LadderBottom", + "params": [], + "input": "Candle" + }, + { + "canonical": "LaguerreRsi", + "native": "LaguerreRSI", + "params": [ + 0.5 + ], + "input": "f64" + }, + { + "canonical": "LinRegAngle", + "native": "LinRegAngle", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "LinRegIntercept", + "native": "LINEARREG_INTERCEPT", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "LinRegSlope", + "native": "LinRegSlope", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "LinearRegression", + "native": "LinearRegression", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "LogReturn", + "native": "LogReturn", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "LongLeggedDoji", + "native": "LongLeggedDoji", + "params": [], + "input": "Candle" + }, + { + "canonical": "LongLine", + "native": "LongLine", + "params": [], + "input": "Candle" + }, + { + "canonical": "M2Measure", + "native": "M2Measure", + "params": [ + 14, + 2.0, + 0.5 + ], + "input": "f64" + }, + { + "canonical": "MacdHistogram", + "native": "MacdHistogram", + "params": [ + 3, + 7, + 14 + ], + "input": "f64" + }, + { + "canonical": "MarketFacilitationIndex", + "native": "MarketFacilitationIndex", + "params": [], + "input": "Candle" + }, + { + "canonical": "MartinRatio", + "native": "MartinRatio", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Marubozu", + "native": "Marubozu", + "params": [], + "input": "Candle" + }, + { + "canonical": "MassIndex", + "native": "MassIndex", + "params": [ + 3, + 7 + ], + "input": "Candle" + }, + { + "canonical": "MatHold", + "native": "MatHold", + "params": [], + "input": "Candle" + }, + { + "canonical": "MatchingLow", + "native": "MatchingLow", + "params": [], + "input": "Candle" + }, + { + "canonical": "MaxDrawdown", + "native": "MaxDrawdown", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "McGinleyDynamic", + "native": "McGinleyDynamic", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "MedianAbsoluteDeviation", + "native": "MedianAbsoluteDeviation", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "MedianMa", + "native": "MedianMA", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "MedianPrice", + "native": "MedianPrice", + "params": [], + "input": "Candle" + }, + { + "canonical": "Mfi", + "native": "MFI", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "MidPoint", + "native": "MIDPOINT", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "MidPrice", + "native": "MIDPRICE", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "MinusDi", + "native": "MINUS_DI", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "MinusDm", + "native": "MINUS_DM", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "Mom", + "native": "MOM", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "MorningDojiStar", + "native": "MorningDojiStar", + "params": [], + "input": "Candle" + }, + { + "canonical": "MorningEveningStar", + "native": "MorningEveningStar", + "params": [], + "input": "Candle" + }, + { + "canonical": "NakedPoc", + "native": "NakedPoc", + "params": [ + 3, + 7 + ], + "input": "Candle" + }, + { + "canonical": "Natr", + "native": "NATR", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "NewPriceLines", + "native": "NewPriceLines", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "Nvi", + "native": "NVI", + "params": [], + "input": "Candle" + }, + { + "canonical": "Obv", + "native": "OBV", + "params": [], + "input": "Candle" + }, + { + "canonical": "OmegaRatio", + "native": "OmegaRatio", + "params": [ + 14, + 2.0 + ], + "input": "f64" + }, + { + "canonical": "OnNeck", + "native": "OnNeck", + "params": [], + "input": "Candle" + }, + { + "canonical": "OpeningMarubozu", + "native": "OpeningMarubozu", + "params": [], + "input": "Candle" + }, + { + "canonical": "OuHalfLife", + "native": "OuHalfLife", + "params": [ + 14 + ], + "input": "(f64, f64)" + }, + { + "canonical": "OvernightGap", + "native": "OvernightGap", + "params": [ + 0 + ], + "input": "Candle" + }, + { + "canonical": "PainIndex", + "native": "PainIndex", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "PairSpreadZScore", + "native": "PairSpreadZScore", + "params": [ + 20, + 20 + ], + "input": "(f64, f64)" + }, + { + "canonical": "PairwiseBeta", + "native": "PairwiseBeta", + "params": [ + 14 + ], + "input": "(f64, f64)" + }, + { + "canonical": "ParkinsonVolatility", + "native": "ParkinsonVolatility", + "params": [ + 20, + 252 + ], + "input": "Candle" + }, + { + "canonical": "PearsonCorrelation", + "native": "PearsonCorrelation", + "params": [ + 14 + ], + "input": "(f64, f64)" + }, + { + "canonical": "PercentB", + "native": "PercentB", + "params": [ + 14, + 2.0 + ], + "input": "f64" + }, + { + "canonical": "PercentageTrailingStop", + "native": "PercentageTrailingStop", + "params": [ + 2.0 + ], + "input": "f64" + }, + { + "canonical": "Pgo", + "native": "PGO", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "PiercingDarkCloud", + "native": "PiercingDarkCloud", + "params": [], + "input": "Candle" + }, + { + "canonical": "PivotReversal", + "native": "PivotReversal", + "params": [ + 3, + 7 + ], + "input": "Candle" + }, + { + "canonical": "PlusDi", + "native": "PLUS_DI", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "PlusDm", + "native": "PLUS_DM", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "Pmo", + "native": "PMO", + "params": [ + 3, + 7 + ], + "input": "f64" + }, + { + "canonical": "PolarizedFractalEfficiency", + "native": "POLARIZED_FRACTAL_EFFICIENCY", + "params": [ + 10, + 5 + ], + "input": "f64" + }, + { + "canonical": "Ppo", + "native": "PPO", + "params": [ + 3, + 7 + ], + "input": "f64" + }, + { + "canonical": "PpoHistogram", + "native": "PpoHistogram", + "params": [ + 3, + 7, + 14 + ], + "input": "f64" + }, + { + "canonical": "ProfileShape", + "native": "ProfileShape", + "params": [ + 3, + 7 + ], + "input": "Candle" + }, + { + "canonical": "ProfitFactor", + "native": "ProfitFactor", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "ProjectionOscillator", + "native": "ProjectionOscillator", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "Psar", + "native": "PSAR", + "params": [ + 0.02, + 0.02, + 0.2 + ], + "input": "Candle" + }, + { + "canonical": "Pvi", + "native": "PVI", + "params": [], + "input": "Candle" + }, + { + "canonical": "Qstick", + "native": "Qstick", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "RSquared", + "native": "RSquared", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "RealizedVolatility", + "native": "RealizedVolatility", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "RecoveryFactor", + "native": "RecoveryFactor", + "params": [], + "input": "f64" + }, + { + "canonical": "RectangleRange", + "native": "RectangleRange", + "params": [], + "input": "Candle" + }, + { + "canonical": "Reflex", + "native": "REFLEX", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "RegimeLabel", + "native": "RegimeLabel", + "params": [ + 3, + 7 + ], + "input": "f64" + }, + { + "canonical": "RenkoTrailingStop", + "native": "RenkoTrailingStop", + "params": [ + 2.0 + ], + "input": "f64" + }, + { + "canonical": "RickshawMan", + "native": "RickshawMan", + "params": [], + "input": "Candle" + }, + { + "canonical": "RisingThreeMethods", + "native": "RisingThreeMethods", + "params": [], + "input": "Candle" + }, + { + "canonical": "Rmi", + "native": "RMI", + "params": [ + 3, + 7 + ], + "input": "f64" + }, + { + "canonical": "Roc", + "native": "ROC", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Rocp", + "native": "ROCP", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Rocr", + "native": "ROCR", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Rocr100", + "native": "ROCR100", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "RogersSatchellVolatility", + "native": "RogersSatchellVolatility", + "params": [ + 20, + 252 + ], + "input": "Candle" + }, + { + "canonical": "RollingCorrelation", + "native": "RollingCorrelation", + "params": [ + 14 + ], + "input": "(f64, f64)" + }, + { + "canonical": "RollingCovariance", + "native": "RollingCovariance", + "params": [ + 14 + ], + "input": "(f64, f64)" + }, + { + "canonical": "RollingIqr", + "native": "RollingIqr", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "RollingMinMaxScaler", + "native": "ROLLINGMINMAX", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "RollingPercentileRank", + "native": "RollingPercentileRank", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "RollingQuantile", + "native": "RollingQuantile", + "params": [ + 20, + 0.5 + ], + "input": "f64" + }, + { + "canonical": "RollingVwap", + "native": "RollingVWAP", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "RoofingFilter", + "native": "RoofingFilter", + "params": [ + 3, + 7 + ], + "input": "f64" + }, + { + "canonical": "Rsi", + "native": "RSI", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Rsx", + "native": "RSX", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Rvi", + "native": "RVI", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "RviVolatility", + "native": "RVIVolatility", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "SampleEntropy", + "native": "SAMPLEENT", + "params": [ + 20, + 2, + 0.2 + ], + "input": "f64" + }, + { + "canonical": "SarExt", + "native": "SAREXT", + "params": [ + 2.0, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5 + ], + "input": "Candle" + }, + { + "canonical": "SeasonalZScore", + "native": "SeasonalZScore", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "SeparatingLines", + "native": "SeparatingLines", + "params": [], + "input": "Candle" + }, + { + "canonical": "SessionVwap", + "native": "SessionVwap", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "ShannonEntropy", + "native": "SHANNONENT", + "params": [ + 3, + 7 + ], + "input": "f64" + }, + { + "canonical": "Shark", + "native": "Shark", + "params": [], + "input": "Candle" + }, + { + "canonical": "SharpeRatio", + "native": "SharpeRatio", + "params": [ + 14, + 2.0 + ], + "input": "f64" + }, + { + "canonical": "ShootingStar", + "native": "ShootingStar", + "params": [], + "input": "Candle" + }, + { + "canonical": "ShortLine", + "native": "ShortLine", + "params": [], + "input": "Candle" + }, + { + "canonical": "SineWave", + "native": "SineWave", + "params": [], + "input": "f64" + }, + { + "canonical": "SineWeightedMa", + "native": "SWMA", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "SinglePrints", + "native": "SinglePrints", + "params": [ + 3, + 7 + ], + "input": "Candle" + }, + { + "canonical": "Skewness", + "native": "Skewness", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Sma", + "native": "SMA", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Smi", + "native": "SMI", + "params": [ + 3, + 7, + 14 + ], + "input": "Candle" + }, + { + "canonical": "Smma", + "native": "SMMA", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "SortinoRatio", + "native": "SortinoRatio", + "params": [ + 14, + 2.0 + ], + "input": "f64" + }, + { + "canonical": "SpearmanCorrelation", + "native": "SpearmanCorrelation", + "params": [ + 14 + ], + "input": "(f64, f64)" + }, + { + "canonical": "SpinningTop", + "native": "SpinningTop", + "params": [], + "input": "Candle" + }, + { + "canonical": "SpreadAr1Coefficient", + "native": "SpreadAr1Coefficient", + "params": [ + 14 + ], + "input": "(f64, f64)" + }, + { + "canonical": "SpreadHurst", + "native": "SpreadHurst", + "params": [ + 14 + ], + "input": "(f64, f64)" + }, + { + "canonical": "StalledPattern", + "native": "StalledPattern", + "params": [], + "input": "Candle" + }, + { + "canonical": "StandardError", + "native": "StandardError", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Stc", + "native": "STC", + "params": [ + 10, + 23, + 10, + 0.5 + ], + "input": "f64" + }, + { + "canonical": "StdDev", + "native": "StdDev", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "StepTrailingStop", + "native": "StepTrailingStop", + "params": [ + 2.0 + ], + "input": "f64" + }, + { + "canonical": "SterlingRatio", + "native": "SterlingRatio", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "StickSandwich", + "native": "StickSandwich", + "params": [], + "input": "Candle" + }, + { + "canonical": "StochRsi", + "native": "StochRSI", + "params": [ + 3, + 7 + ], + "input": "f64" + }, + { + "canonical": "StochasticCci", + "native": "StochasticCCI", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "SuperSmoother", + "native": "SuperSmoother", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "T3", + "native": "T3", + "params": [ + 5, + 0.7 + ], + "input": "f64" + }, + { + "canonical": "TailRatio", + "native": "TailRatio", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Takuri", + "native": "Takuri", + "params": [], + "input": "Candle" + }, + { + "canonical": "TasukiGap", + "native": "TasukiGap", + "params": [], + "input": "Candle" + }, + { + "canonical": "TdCamouflage", + "native": "TDCamouflage", + "params": [], + "input": "Candle" + }, + { + "canonical": "TdClop", + "native": "TDClop", + "params": [], + "input": "Candle" + }, + { + "canonical": "TdClopwin", + "native": "TDClopwin", + "params": [], + "input": "Candle" + }, + { + "canonical": "TdCombo", + "native": "TDCombo", + "params": [ + 3, + 7, + 14, + 28 + ], + "input": "Candle" + }, + { + "canonical": "TdCountdown", + "native": "TDCountdown", + "params": [ + 3, + 7, + 14, + 28 + ], + "input": "Candle" + }, + { + "canonical": "TdDWave", + "native": "TDDWave", + "params": [ + 2 + ], + "input": "Candle" + }, + { + "canonical": "TdDeMarker", + "native": "TDDeMarker", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "TdDifferential", + "native": "TDDifferential", + "params": [], + "input": "Candle" + }, + { + "canonical": "TdOpen", + "native": "TDOpen", + "params": [], + "input": "Candle" + }, + { + "canonical": "TdPressure", + "native": "TDPressure", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "TdPropulsion", + "native": "TDPropulsion", + "params": [], + "input": "Candle" + }, + { + "canonical": "TdRei", + "native": "TDREI", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "TdSetup", + "native": "TDSetup", + "params": [ + 3, + 7 + ], + "input": "Candle" + }, + { + "canonical": "TdTrap", + "native": "TDTrap", + "params": [], + "input": "Candle" + }, + { + "canonical": "Tema", + "native": "TEMA", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "ThreeDrives", + "native": "ThreeDrives", + "params": [], + "input": "Candle" + }, + { + "canonical": "ThreeInside", + "native": "ThreeInside", + "params": [], + "input": "Candle" + }, + { + "canonical": "ThreeLineBreak", + "native": "ThreeLineBreak", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "ThreeLineStrike", + "native": "ThreeLineStrike", + "params": [], + "input": "Candle" + }, + { + "canonical": "ThreeOutside", + "native": "ThreeOutside", + "params": [], + "input": "Candle" + }, + { + "canonical": "ThreeSoldiersOrCrows", + "native": "ThreeSoldiersOrCrows", + "params": [], + "input": "Candle" + }, + { + "canonical": "ThreeStarsInSouth", + "native": "ThreeStarsInSouth", + "params": [], + "input": "Candle" + }, + { + "canonical": "Thrusting", + "native": "Thrusting", + "params": [], + "input": "Candle" + }, + { + "canonical": "Tii", + "native": "TII", + "params": [ + 3, + 7 + ], + "input": "f64" + }, + { + "canonical": "TimeBasedStop", + "native": "TimeBasedStop", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "TowerTopBottom", + "native": "TowerTopBottom", + "params": [], + "input": "Candle" + }, + { + "canonical": "TradeVolumeIndex", + "native": "TradeVolumeIndex", + "params": [ + 2.0 + ], + "input": "Candle" + }, + { + "canonical": "TrendLabel", + "native": "TrendLabel", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "TrendStrengthIndex", + "native": "TREND_STRENGTH_INDEX", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Trendflex", + "native": "TRENDFLEX", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "TreynorRatio", + "native": "TreynorRatio", + "params": [ + 14, + 2.0 + ], + "input": "(f64, f64)" + }, + { + "canonical": "Triangle", + "native": "Triangle", + "params": [], + "input": "Candle" + }, + { + "canonical": "Trima", + "native": "TRIMA", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "TripleTopBottom", + "native": "TripleTopBottom", + "params": [], + "input": "Candle" + }, + { + "canonical": "Tristar", + "native": "Tristar", + "params": [], + "input": "Candle" + }, + { + "canonical": "Trix", + "native": "TRIX", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "TrueRange", + "native": "TrueRange", + "params": [], + "input": "Candle" + }, + { + "canonical": "Tsf", + "native": "TSF", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "TsfOscillator", + "native": "TsfOscillator", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Tsi", + "native": "TSI", + "params": [ + 3, + 7 + ], + "input": "f64" + }, + { + "canonical": "Tsv", + "native": "TSV", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "TtmTrend", + "native": "TTM_TREND", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "TurnOfMonth", + "native": "TurnOfMonth", + "params": [ + 3, + 3, + 0 + ], + "input": "Candle" + }, + { + "canonical": "Tweezer", + "native": "Tweezer", + "params": [], + "input": "Candle" + }, + { + "canonical": "TwiggsMoneyFlow", + "native": "TwiggsMoneyFlow", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "TwoCrows", + "native": "TwoCrows", + "params": [], + "input": "Candle" + }, + { + "canonical": "TypicalPrice", + "native": "TypicalPrice", + "params": [], + "input": "Candle" + }, + { + "canonical": "UlcerIndex", + "native": "UlcerIndex", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "UltimateOscillator", + "native": "UltimateOscillator", + "params": [ + 3, + 7, + 14 + ], + "input": "Candle" + }, + { + "canonical": "UniqueThreeRiver", + "native": "UniqueThreeRiver", + "params": [], + "input": "Candle" + }, + { + "canonical": "UniversalOscillator", + "native": "UNIVERSALOSC", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "UpsideGapThreeMethods", + "native": "UpsideGapThreeMethods", + "params": [], + "input": "Candle" + }, + { + "canonical": "UpsideGapTwoCrows", + "native": "UpsideGapTwoCrows", + "params": [], + "input": "Candle" + }, + { + "canonical": "UpsidePotentialRatio", + "native": "UpsidePotentialRatio", + "params": [ + 14, + 2.0 + ], + "input": "f64" + }, + { + "canonical": "ValueAtRisk", + "native": "ValueAtRisk", + "params": [ + 20, + 0.95 + ], + "input": "f64" + }, + { + "canonical": "Variance", + "native": "Variance", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "VarianceRatio", + "native": "VarianceRatio", + "params": [ + 60, + 2 + ], + "input": "(f64, f64)" + }, + { + "canonical": "VerticalHorizontalFilter", + "native": "VerticalHorizontalFilter", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Vidya", + "native": "VIDYA", + "params": [ + 3, + 7 + ], + "input": "f64" + }, + { + "canonical": "VolatilityOfVolatility", + "native": "VolatilityOfVolatility", + "params": [ + 3, + 7 + ], + "input": "f64" + }, + { + "canonical": "VolatilityRatio", + "native": "VolatilityRatio", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "VoltyStop", + "native": "VoltyStop", + "params": [ + 14, + 2.0 + ], + "input": "Candle" + }, + { + "canonical": "VolumeOscillator", + "native": "VolumeOscillator", + "params": [ + 3, + 7 + ], + "input": "Candle" + }, + { + "canonical": "VolumePriceTrend", + "native": "VolumePriceTrend", + "params": [], + "input": "Candle" + }, + { + "canonical": "VolumeRsi", + "native": "VolumeRsi", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "Vwap", + "native": "VWAP", + "params": [], + "input": "Candle" + }, + { + "canonical": "Vwma", + "native": "VWMA", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "Vzo", + "native": "VZO", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "Wad", + "native": "Wad", + "params": [], + "input": "Candle" + }, + { + "canonical": "WavePm", + "native": "WAVE_PM", + "params": [ + 3, + 7 + ], + "input": "f64" + }, + { + "canonical": "Wedge", + "native": "Wedge", + "params": [], + "input": "Candle" + }, + { + "canonical": "WeightedClose", + "native": "WeightedClose", + "params": [], + "input": "Candle" + }, + { + "canonical": "WickRatio", + "native": "WickRatio", + "params": [], + "input": "Candle" + }, + { + "canonical": "WilliamsR", + "native": "WilliamsR", + "params": [ + 14 + ], + "input": "Candle" + }, + { + "canonical": "WinRate", + "native": "WinRate", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Wma", + "native": "WMA", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "YangZhangVolatility", + "native": "YangZhangVolatility", + "params": [ + 20, + 252 + ], + "input": "Candle" + }, + { + "canonical": "YoyoExit", + "native": "YoyoExit", + "params": [ + 14, + 2.0 + ], + "input": "Candle" + }, + { + "canonical": "ZScore", + "native": "ZScore", + "params": [ + 14 + ], + "input": "f64" + }, + { + "canonical": "Zlema", + "native": "ZLEMA", + "params": [ + 14 + ], + "input": "f64" + } +] \ No newline at end of file diff --git a/testdata/golden/wasm_manifest.json b/testdata/golden/wasm_manifest.json new file mode 100644 index 00000000..92ba43ac --- /dev/null +++ b/testdata/golden/wasm_manifest.json @@ -0,0 +1,11569 @@ +[ + { + "canonical": "AbandonedBaby", + "js": "AbandonedBaby", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Abcd", + "js": "Abcd", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "AbsoluteBreadthIndex", + "js": "AbsoluteBreadthIndex", + "ctor": [], + "args": [ + { + "name": "change", + "array": true, + "bigint": false + }, + { + "name": "volume", + "array": true, + "bigint": false + }, + { + "name": "new_high", + "array": true, + "bigint": false + }, + { + "name": "new_low", + "array": true, + "bigint": false + } + ], + "out": "cross" + }, + { + "canonical": "AccelerationBands", + "js": "AccelerationBands", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "AcceleratorOscillator", + "js": "AcceleratorOscillator", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "AdOscillator", + "js": "ADOSC", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "AdVolumeLine", + "js": "AdVolumeLine", + "ctor": [], + "args": [ + { + "name": "change", + "array": true, + "bigint": false + }, + { + "name": "volume", + "array": true, + "bigint": false + }, + { + "name": "new_high", + "array": true, + "bigint": false + }, + { + "name": "new_low", + "array": true, + "bigint": false + } + ], + "out": "cross" + }, + { + "canonical": "AdaptiveCci", + "js": "ADAPTIVECCI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "AdaptiveCycle", + "js": "AdaptiveCycle", + "ctor": [], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "AdaptiveLaguerreFilter", + "js": "AdaptiveLaguerre", + "ctor": [ + 20 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "AdaptiveRsi", + "js": "ADAPTIVERSI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Adl", + "js": "ADL", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "AdvanceBlock", + "js": "AdvanceBlock", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "AdvanceDecline", + "js": "AdvanceDecline", + "ctor": [], + "args": [ + { + "name": "change", + "array": true, + "bigint": false + }, + { + "name": "volume", + "array": true, + "bigint": false + }, + { + "name": "new_high", + "array": true, + "bigint": false + }, + { + "name": "new_low", + "array": true, + "bigint": false + } + ], + "out": "cross" + }, + { + "canonical": "AdvanceDeclineRatio", + "js": "AdvanceDeclineRatio", + "ctor": [], + "args": [ + { + "name": "change", + "array": true, + "bigint": false + }, + { + "name": "volume", + "array": true, + "bigint": false + }, + { + "name": "new_high", + "array": true, + "bigint": false + }, + { + "name": "new_low", + "array": true, + "bigint": false + } + ], + "out": "cross" + }, + { + "canonical": "Adx", + "js": "ADX", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "Adxr", + "js": "ADXR", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Alligator", + "js": "Alligator", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "Alma", + "js": "ALMA", + "ctor": [ + 9, + 0.85, + 6.0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Alpha", + "js": "Alpha", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "asset", + "array": false, + "bigint": false + }, + { + "name": "benchmark", + "array": false, + "bigint": false + } + ], + "out": "pairwise" + }, + { + "canonical": "AmihudIlliquidity", + "js": "AmihudIlliquidity", + "ctor": [ + 20 + ], + "args": [ + { + "name": "price", + "array": false, + "bigint": false + }, + { + "name": "size", + "array": false, + "bigint": false + }, + { + "name": "is_buy", + "array": false, + "bigint": false + } + ], + "out": "trade" + }, + { + "canonical": "AnchoredRsi", + "js": "AnchoredRSI", + "ctor": [], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "AnchoredVwap", + "js": "AnchoredVWAP", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "AndrewsPitchfork", + "js": "AndrewsPitchfork", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "Apo", + "js": "APO", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Aroon", + "js": "Aroon", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "AroonOscillator", + "js": "AroonOscillator", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Atr", + "js": "ATR", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "AtrBands", + "js": "AtrBands", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "AtrRatchet", + "js": "AtrRatchet", + "ctor": [ + 14, + 2.0, + 0.5 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "AtrTrailingStop", + "js": "AtrTrailingStop", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "AutoFib", + "js": "AutoFib", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 7 + }, + { + "canonical": "Autocorrelation", + "js": "Autocorrelation", + "ctor": [ + 10, + 1 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "AutocorrelationPeriodogram", + "js": "AUTOCORRPGRAM", + "ctor": [ + 10, + 48 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "AverageDailyRange", + "js": "AverageDailyRange", + "ctor": [ + 14, + 0 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + }, + { + "name": "timestamp", + "array": false, + "bigint": true + } + ], + "out": "scalar_candle" + }, + { + "canonical": "AverageDrawdown", + "js": "AverageDrawdown", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "AvgPrice", + "js": "AVGPRICE", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "AwesomeOscillator", + "js": "AwesomeOscillator", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "AwesomeOscillatorHistogram", + "js": "AwesomeOscillatorHistogram", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "BalanceOfPower", + "js": "BalanceOfPower", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "BandpassFilter", + "js": "BANDPASS", + "ctor": [ + 20, + 0.3 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Bat", + "js": "Bat", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "BeltHold", + "js": "BeltHold", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Beta", + "js": "Beta", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false, + "bigint": false + }, + { + "name": "y", + "array": false, + "bigint": false + } + ], + "out": "pairwise" + }, + { + "canonical": "BetaNeutralSpread", + "js": "BetaNeutralSpread", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false, + "bigint": false + }, + { + "name": "y", + "array": false, + "bigint": false + } + ], + "out": "pairwise" + }, + { + "canonical": "BetterVolume", + "js": "BetterVolume", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "BipowerVariation", + "js": "BipowerVariation", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "BodySizePct", + "js": "BodySizePct", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "BollingerBands", + "js": "BollingerBands", + "ctor": [ + 20, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "multi_f64", + "n": 4 + }, + { + "canonical": "BollingerBandwidth", + "js": "BollingerBandwidth", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "BomarBands", + "js": "BomarBands", + "ctor": [ + 4, + 0.85 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "multi_f64", + "n": 3 + }, + { + "canonical": "BreadthThrust", + "js": "BreadthThrust", + "ctor": [ + 10 + ], + "args": [ + { + "name": "change", + "array": true, + "bigint": false + }, + { + "name": "volume", + "array": true, + "bigint": false + }, + { + "name": "new_high", + "array": true, + "bigint": false + }, + { + "name": "new_low", + "array": true, + "bigint": false + } + ], + "out": "cross" + }, + { + "canonical": "Breakaway", + "js": "Breakaway", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "BullishPercentIndex", + "js": "BullishPercentIndex", + "ctor": [], + "args": [ + { + "name": "change", + "array": true, + "bigint": false + }, + { + "name": "volume", + "array": true, + "bigint": false + }, + { + "name": "new_high", + "array": true, + "bigint": false + }, + { + "name": "new_low", + "array": true, + "bigint": false + }, + { + "name": "on_buy_signal", + "array": true, + "bigint": false + } + ], + "out": "cross" + }, + { + "canonical": "BurkeRatio", + "js": "BurkeRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Butterfly", + "js": "Butterfly", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "CalendarSpread", + "js": "CalendarSpread", + "ctor": [], + "args": [ + { + "name": "futures_price", + "array": false, + "bigint": false + }, + { + "name": "mark_price", + "array": false, + "bigint": false + } + ], + "out": "deriv" + }, + { + "canonical": "CalmarRatio", + "js": "CalmarRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Camarilla", + "js": "Camarilla", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 9 + }, + { + "canonical": "CandleVolume", + "js": "CandleVolume", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "Cci", + "js": "CCI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "CenterOfGravity", + "js": "CenterOfGravity", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "CentralPivotRange", + "js": "CentralPivotRange", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "Cfo", + "js": "CFO", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "ChaikinMoneyFlow", + "js": "ChaikinMoneyFlow", + "ctor": [ + 20 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "ChaikinOscillator", + "js": "ChaikinOscillator", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "ChaikinVolatility", + "js": "ChaikinVolatility", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "ChandeKrollStop", + "js": "ChandeKrollStop", + "ctor": [ + 3, + 2.0, + 7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "ChandelierExit", + "js": "ChandelierExit", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "ChoppinessIndex", + "js": "ChoppinessIndex", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "ClassicPivots", + "js": "ClassicPivots", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 7 + }, + { + "canonical": "CloseVsOpen", + "js": "CloseVsOpen", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "ClosingMarubozu", + "js": "ClosingMarubozu", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Cmo", + "js": "CMO", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "CoefficientOfVariation", + "js": "CoefficientOfVariation", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Cointegration", + "js": "Cointegration", + "ctor": [ + 40, + 1 + ], + "args": [ + { + "name": "a", + "array": false, + "bigint": false + }, + { + "name": "b", + "array": false, + "bigint": false + } + ], + "out": "multi_pairwise", + "n": 3 + }, + { + "canonical": "CommonSenseRatio", + "js": "CommonSenseRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "CompositeProfile", + "js": "CompositeProfile", + "ctor": [ + 20, + 24, + 0.7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "ConcealingBabySwallow", + "js": "ConcealingBabySwallow", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "ConditionalValueAtRisk", + "js": "ConditionalValueAtRisk", + "ctor": [ + 20, + 0.95 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "ConnorsRsi", + "js": "ConnorsRSI", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Coppock", + "js": "Coppock", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "CorrelationTrendIndicator", + "js": "CTI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Counterattack", + "js": "Counterattack", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Crab", + "js": "Crab", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "CumulativeVolumeDelta", + "js": "CumulativeVolumeDelta", + "ctor": [], + "args": [ + { + "name": "price", + "array": false, + "bigint": false + }, + { + "name": "size", + "array": false, + "bigint": false + }, + { + "name": "is_buy", + "array": false, + "bigint": false + } + ], + "out": "trade" + }, + { + "canonical": "CumulativeVolumeIndex", + "js": "CumulativeVolumeIndex", + "ctor": [], + "args": [ + { + "name": "change", + "array": true, + "bigint": false + }, + { + "name": "volume", + "array": true, + "bigint": false + }, + { + "name": "new_high", + "array": true, + "bigint": false + }, + { + "name": "new_low", + "array": true, + "bigint": false + } + ], + "out": "cross" + }, + { + "canonical": "CupAndHandle", + "js": "CupAndHandle", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "CyberneticCycle", + "js": "CyberneticCycle", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Cypher", + "js": "Cypher", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "DayOfWeekProfile", + "js": "DayOfWeekProfile", + "ctor": [ + 0 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + }, + { + "name": "timestamp", + "array": false, + "bigint": true + } + ], + "out": "profile_bins", + "width": 7 + }, + { + "canonical": "Decycler", + "js": "Decycler", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "DecyclerOscillator", + "js": "DecyclerOscillator", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Dema", + "js": "DEMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "DemandIndex", + "js": "DemandIndex", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "DemarkPivots", + "js": "DemarkPivots", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "DepthSlope", + "js": "DepthSlope", + "ctor": [], + "args": [ + { + "name": "bid_px", + "array": true, + "bigint": false + }, + { + "name": "bid_sz", + "array": true, + "bigint": false + }, + { + "name": "ask_px", + "array": true, + "bigint": false + }, + { + "name": "ask_sz", + "array": true, + "bigint": false + } + ], + "out": "ob" + }, + { + "canonical": "DerivativeOscillator", + "js": "DerivativeOscillator", + "ctor": [ + 3, + 7, + 14, + 28 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "DetrendedStdDev", + "js": "DetrendedStdDev", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "DisparityIndex", + "js": "DisparityIndex", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "DistanceSsd", + "js": "DistanceSsd", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false, + "bigint": false + }, + { + "name": "y", + "array": false, + "bigint": false + } + ], + "out": "pairwise" + }, + { + "canonical": "Doji", + "js": "Doji", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "DojiStar", + "js": "DojiStar", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "DollarBars", + "js": "DollarBars", + "ctor": [ + 50000.0 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "bars" + }, + { + "canonical": "Donchian", + "js": "Donchian", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "DonchianStop", + "js": "DonchianStop", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "DoubleBollinger", + "js": "DoubleBollinger", + "ctor": [ + 20, + 1.0, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "multi_f64", + "n": 5 + }, + { + "canonical": "DoubleTopBottom", + "js": "DoubleTopBottom", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "DownsideGapThreeMethods", + "js": "DownsideGapThreeMethods", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Dpo", + "js": "DPO", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "DragonflyDoji", + "js": "DragonflyDoji", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "DrawdownDuration", + "js": "DrawdownDuration", + "ctor": [], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "DumplingTop", + "js": "DumplingTop", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Dx", + "js": "DX", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "DynamicMomentumIndex", + "js": "DynamicMomentumIndex", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "EaseOfMovement", + "js": "EaseOfMovement", + "ctor": [ + 14, + 100000000.0 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "EffectiveSpread", + "js": "EffectiveSpread", + "ctor": [], + "args": [ + { + "name": "price", + "array": false, + "bigint": false + }, + { + "name": "size", + "array": false, + "bigint": false + }, + { + "name": "is_buy", + "array": false, + "bigint": false + }, + { + "name": "mid", + "array": false, + "bigint": false + } + ], + "out": "trademid" + }, + { + "canonical": "EhlersStochastic", + "js": "EhlersStochastic", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Ehma", + "js": "EHMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "ElderImpulse", + "js": "ElderImpulse", + "ctor": [ + 3, + 7, + 14, + 28 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "ElderRay", + "js": "ElderRay", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "ElderSafeZone", + "js": "ElderSafeZone", + "ctor": [ + 10, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "Ema", + "js": "EMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "EmpiricalModeDecomposition", + "js": "EmpiricalModeDecomposition", + "ctor": [ + 20, + 0.1 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Engulfing", + "js": "Engulfing", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Equivolume", + "js": "Equivolume", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "EstimatedLeverageRatio", + "js": "EstimatedLeverageRatio", + "ctor": [], + "args": [ + { + "name": "open_interest", + "array": false, + "bigint": false + }, + { + "name": "long_size", + "array": false, + "bigint": false + }, + { + "name": "short_size", + "array": false, + "bigint": false + } + ], + "out": "deriv" + }, + { + "canonical": "EvenBetterSinewave", + "js": "EVENBETTERSINE", + "ctor": [ + 40, + 10 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "EveningDojiStar", + "js": "EveningDojiStar", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Evwma", + "js": "EVWMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "EwmaVolatility", + "js": "EwmaVolatility", + "ctor": [ + 0.94 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Expectancy", + "js": "Expectancy", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "FallingThreeMethods", + "js": "FallingThreeMethods", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Fama", + "js": "FAMA", + "ctor": [ + 0.5, + 0.05 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "FibArcs", + "js": "FibArcs", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "FibChannel", + "js": "FibChannel", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 4 + }, + { + "canonical": "FibConfluence", + "js": "FibConfluence", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "FibExtension", + "js": "FibExtension", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 5 + }, + { + "canonical": "FibFan", + "js": "FibFan", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "FibProjection", + "js": "FibProjection", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 4 + }, + { + "canonical": "FibRetracement", + "js": "FibRetracement", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 7 + }, + { + "canonical": "FibTimeZones", + "js": "FibTimeZones", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "FibonacciPivots", + "js": "FibonacciPivots", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 7 + }, + { + "canonical": "FisherRsi", + "js": "FisherRSI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "FisherTransform", + "js": "FisherTransform", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "FlagPennant", + "js": "FlagPennant", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Footprint", + "js": "Footprint", + "ctor": [ + 1.0 + ], + "args": [ + { + "name": "price", + "array": false, + "bigint": false + }, + { + "name": "size", + "array": false, + "bigint": false + }, + { + "name": "is_buy", + "array": false, + "bigint": false + } + ], + "out": "footprint" + }, + { + "canonical": "ForceIndex", + "js": "ForceIndex", + "ctor": [ + 14 + ], + "args": [ + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "FractalChaosBands", + "js": "FractalChaosBands", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "Frama", + "js": "FRAMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "FryPanBottom", + "js": "FryPanBottom", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "FundingBasis", + "js": "FundingBasis", + "ctor": [], + "args": [ + { + "name": "mark_price", + "array": false, + "bigint": false + }, + { + "name": "index_price", + "array": false, + "bigint": false + } + ], + "out": "deriv" + }, + { + "canonical": "FundingImpliedApr", + "js": "FundingImpliedApr", + "ctor": [ + 1095.0 + ], + "args": [ + { + "name": "funding_rate", + "array": false, + "bigint": false + } + ], + "out": "deriv" + }, + { + "canonical": "FundingRate", + "js": "FundingRate", + "ctor": [], + "args": [ + { + "name": "funding_rate", + "array": false, + "bigint": false + } + ], + "out": "deriv" + }, + { + "canonical": "FundingRateMean", + "js": "FundingRateMean", + "ctor": [ + 20 + ], + "args": [ + { + "name": "funding_rate", + "array": false, + "bigint": false + } + ], + "out": "deriv" + }, + { + "canonical": "FundingRateZScore", + "js": "FundingRateZScore", + "ctor": [ + 20 + ], + "args": [ + { + "name": "funding_rate", + "array": false, + "bigint": false + } + ], + "out": "deriv" + }, + { + "canonical": "GainLossRatio", + "js": "GainLossRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "GainToPainRatio", + "js": "GainToPainRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "GapSideBySideWhite", + "js": "GapSideBySideWhite", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Garch11", + "js": "Garch11", + "ctor": [ + 2e-06, + 0.1, + 0.88 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "GarmanKlassVolatility", + "js": "GarmanKlassVolatility", + "ctor": [ + 20, + 252 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Gartley", + "js": "Gartley", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "GatorOscillator", + "js": "GatorOscillator", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "GeneralizedDema", + "js": "GD", + "ctor": [ + 5, + 0.7 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "GeometricMa", + "js": "GMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "GoldenPocket", + "js": "GoldenPocket", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "GrangerCausality", + "js": "GrangerCausality", + "ctor": [ + 60, + 1 + ], + "args": [ + { + "name": "a", + "array": false, + "bigint": false + }, + { + "name": "b", + "array": false, + "bigint": false + } + ], + "out": "pairwise" + }, + { + "canonical": "GravestoneDoji", + "js": "GravestoneDoji", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Hammer", + "js": "Hammer", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "HangingMan", + "js": "HangingMan", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Harami", + "js": "Harami", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "HaramiCross", + "js": "HaramiCross", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "HasbrouckInformationShare", + "js": "HasbrouckInformationShare", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false, + "bigint": false + }, + { + "name": "y", + "array": false, + "bigint": false + } + ], + "out": "pairwise" + }, + { + "canonical": "HeadAndShoulders", + "js": "HeadAndShoulders", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "HeikinAshi", + "js": "HeikinAshi", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 4 + }, + { + "canonical": "HeikinAshiOscillator", + "js": "HeikinAshiOscillator", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "HiLoActivator", + "js": "HiLoActivator", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "HighLowIndex", + "js": "HighLowIndex", + "ctor": [ + 10 + ], + "args": [ + { + "name": "change", + "array": true, + "bigint": false + }, + { + "name": "volume", + "array": true, + "bigint": false + }, + { + "name": "new_high", + "array": true, + "bigint": false + }, + { + "name": "new_low", + "array": true, + "bigint": false + } + ], + "out": "cross" + }, + { + "canonical": "HighLowRange", + "js": "HighLowRange", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "HighLowVolumeNodes", + "js": "HighLowVolumeNodes", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "HighWave", + "js": "HighWave", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "HighpassFilter", + "js": "HIGHPASS", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Hikkake", + "js": "Hikkake", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "HikkakeModified", + "js": "HikkakeModified", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "HilbertDominantCycle", + "js": "HilbertDominantCycle", + "ctor": [], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "HistoricalVolatility", + "js": "HistoricalVolatility", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Hma", + "js": "HMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "HoltWinters", + "js": "HoltWinters", + "ctor": [ + 0.5, + 0.1 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "HomingPigeon", + "js": "HomingPigeon", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "HtDcPhase", + "js": "HT_DCPHASE", + "ctor": [], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "HtPhasor", + "js": "HT_PHASOR", + "ctor": [], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "multi_f64", + "n": 2 + }, + { + "canonical": "HtTrendMode", + "js": "HT_TRENDMODE", + "ctor": [], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "HurstChannel", + "js": "HurstChannel", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "HurstExponent", + "js": "HurstExponent", + "ctor": [ + 100, + 4 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Ichimoku", + "js": "Ichimoku", + "ctor": [ + 9, + 26, + 52, + 26 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 5 + }, + { + "canonical": "IdenticalThreeCrows", + "js": "IdenticalThreeCrows", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "ImbalanceBars", + "js": "ImbalanceBars", + "ctor": [ + 5.0 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "bars" + }, + { + "canonical": "InNeck", + "js": "InNeck", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Inertia", + "js": "Inertia", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "InformationRatio", + "js": "InformationRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "asset", + "array": false, + "bigint": false + }, + { + "name": "benchmark", + "array": false, + "bigint": false + } + ], + "out": "pairwise" + }, + { + "canonical": "InitialBalance", + "js": "InitialBalance", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "InstantaneousTrendline", + "js": "InstantaneousTrendline", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "IntradayIntensity", + "js": "IntradayIntensity", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "IntradayMomentumIndex", + "js": "IMI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "IntradayVolatilityProfile", + "js": "IntradayVolatilityProfile", + "ctor": [ + 24, + 0 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + }, + { + "name": "timestamp", + "array": false, + "bigint": true + } + ], + "out": "profile_bins", + "width": 24 + }, + { + "canonical": "InverseFisherTransform", + "js": "InverseFisherTransform", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "InvertedHammer", + "js": "InvertedHammer", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "JarqueBera", + "js": "JARQUEBERA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Jma", + "js": "JMA", + "ctor": [ + 7, + 0.0, + 2 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "JumpIndicator", + "js": "JumpIndicator", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "KRatio", + "js": "KRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "KagiBars", + "js": "KagiBars", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "bars" + }, + { + "canonical": "KalmanHedgeRatio", + "js": "KalmanHedgeRatio", + "ctor": [ + 0.01, + 0.001 + ], + "args": [ + { + "name": "a", + "array": false, + "bigint": false + }, + { + "name": "b", + "array": false, + "bigint": false + } + ], + "out": "multi_pairwise", + "n": 3 + }, + { + "canonical": "Kama", + "js": "KAMA", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "KaseDevStop", + "js": "KaseDevStop", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "KasePermissionStochastic", + "js": "KasePermissionStochastic", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "KellyCriterion", + "js": "KellyCriterion", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Keltner", + "js": "Keltner", + "ctor": [ + 3, + 7, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "KendallTau", + "js": "KendallTau", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false, + "bigint": false + }, + { + "name": "y", + "array": false, + "bigint": false + } + ], + "out": "pairwise" + }, + { + "canonical": "Kicking", + "js": "Kicking", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "KickingByLength", + "js": "KickingByLength", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Kst", + "js": "KST", + "ctor": [ + 3, + 7, + 14, + 28, + 35, + 42, + 56, + 63, + 70 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "multi_f64", + "n": 2 + }, + { + "canonical": "Kurtosis", + "js": "Kurtosis", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Kvo", + "js": "KVO", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "KylesLambda", + "js": "KylesLambda", + "ctor": [ + 20 + ], + "args": [ + { + "name": "price", + "array": false, + "bigint": false + }, + { + "name": "size", + "array": false, + "bigint": false + }, + { + "name": "is_buy", + "array": false, + "bigint": false + }, + { + "name": "mid", + "array": false, + "bigint": false + } + ], + "out": "trademid" + }, + { + "canonical": "LadderBottom", + "js": "LadderBottom", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "LaguerreRsi", + "js": "LaguerreRSI", + "ctor": [ + 0.5 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "LeadLagCrossCorrelation", + "js": "LeadLagCrossCorrelation", + "ctor": [ + 20, + 10 + ], + "args": [ + { + "name": "a", + "array": false, + "bigint": false + }, + { + "name": "b", + "array": false, + "bigint": false + } + ], + "out": "multi_pairwise", + "n": 2 + }, + { + "canonical": "LinRegAngle", + "js": "LinRegAngle", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "LinRegChannel", + "js": "LinRegChannel", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "multi_f64", + "n": 3 + }, + { + "canonical": "LinRegIntercept", + "js": "LINEARREG_INTERCEPT", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "LinRegSlope", + "js": "LinRegSlope", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "LinearRegression", + "js": "LinearRegression", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "LiquidationFeatures", + "js": "LiquidationFeatures", + "ctor": [], + "args": [ + { + "name": "long_liquidation", + "array": false, + "bigint": false + }, + { + "name": "short_liquidation", + "array": false, + "bigint": false + } + ], + "out": "deriv_multi", + "n": 5 + }, + { + "canonical": "LogReturn", + "js": "LogReturn", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "LongLeggedDoji", + "js": "LongLeggedDoji", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "LongLine", + "js": "LongLine", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "LongShortRatio", + "js": "LongShortRatio", + "ctor": [], + "args": [ + { + "name": "long_size", + "array": false, + "bigint": false + }, + { + "name": "short_size", + "array": false, + "bigint": false + } + ], + "out": "deriv" + }, + { + "canonical": "M2Measure", + "js": "M2Measure", + "ctor": [ + 14, + 2.0, + 0.5 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "MaEnvelope", + "js": "MaEnvelope", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "multi_f64", + "n": 3 + }, + { + "canonical": "MacdExt", + "js": "MACDEXT", + "ctor": [ + 12, + 0, + 26, + 0, + 9, + 0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "multi_f64", + "n": 3 + }, + { + "canonical": "MacdFix", + "js": "MACDFIX", + "ctor": [ + 9 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "multi_f64", + "n": 3 + }, + { + "canonical": "MacdHistogram", + "js": "MacdHistogram", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "MacdIndicator", + "js": "MACD", + "ctor": [ + 12, + 26, + 9 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "multi_f64", + "n": 3 + }, + { + "canonical": "Mama", + "js": "MAMA", + "ctor": [ + 0.5, + 0.05 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "multi_f64", + "n": 2 + }, + { + "canonical": "MarketFacilitationIndex", + "js": "MarketFacilitationIndex", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "MartinRatio", + "js": "MartinRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Marubozu", + "js": "Marubozu", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "MassIndex", + "js": "MassIndex", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "MatHold", + "js": "MatHold", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "MatchingLow", + "js": "MatchingLow", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "MaxDrawdown", + "js": "MaxDrawdown", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "McClellanOscillator", + "js": "McClellanOscillator", + "ctor": [], + "args": [ + { + "name": "change", + "array": true, + "bigint": false + }, + { + "name": "volume", + "array": true, + "bigint": false + }, + { + "name": "new_high", + "array": true, + "bigint": false + }, + { + "name": "new_low", + "array": true, + "bigint": false + } + ], + "out": "cross" + }, + { + "canonical": "McClellanSummationIndex", + "js": "McClellanSummationIndex", + "ctor": [], + "args": [ + { + "name": "change", + "array": true, + "bigint": false + }, + { + "name": "volume", + "array": true, + "bigint": false + }, + { + "name": "new_high", + "array": true, + "bigint": false + }, + { + "name": "new_low", + "array": true, + "bigint": false + } + ], + "out": "cross" + }, + { + "canonical": "McGinleyDynamic", + "js": "McGinleyDynamic", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "MedianAbsoluteDeviation", + "js": "MedianAbsoluteDeviation", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "MedianChannel", + "js": "MedianChannel", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "multi_f64", + "n": 3 + }, + { + "canonical": "MedianMa", + "js": "MedianMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "MedianPrice", + "js": "MedianPrice", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Mfi", + "js": "MFI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Microprice", + "js": "Microprice", + "ctor": [], + "args": [ + { + "name": "bid_px", + "array": true, + "bigint": false + }, + { + "name": "bid_sz", + "array": true, + "bigint": false + }, + { + "name": "ask_px", + "array": true, + "bigint": false + }, + { + "name": "ask_sz", + "array": true, + "bigint": false + } + ], + "out": "ob" + }, + { + "canonical": "MidPoint", + "js": "MIDPOINT", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "MidPrice", + "js": "MIDPRICE", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "MinusDi", + "js": "MINUS_DI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "MinusDm", + "js": "MINUS_DM", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "ModifiedMaStop", + "js": "ModifiedMaStop", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "Mom", + "js": "MOM", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "MorningDojiStar", + "js": "MorningDojiStar", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "MorningEveningStar", + "js": "MorningEveningStar", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "MurreyMathLines", + "js": "MurreyMathLines", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 9 + }, + { + "canonical": "NakedPoc", + "js": "NakedPoc", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Natr", + "js": "NATR", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "NewHighsNewLows", + "js": "NewHighsNewLows", + "ctor": [], + "args": [ + { + "name": "change", + "array": true, + "bigint": false + }, + { + "name": "volume", + "array": true, + "bigint": false + }, + { + "name": "new_high", + "array": true, + "bigint": false + }, + { + "name": "new_low", + "array": true, + "bigint": false + } + ], + "out": "cross" + }, + { + "canonical": "NewPriceLines", + "js": "NewPriceLines", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Nrtr", + "js": "Nrtr", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "Nvi", + "js": "NVI", + "ctor": [], + "args": [ + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "OIPriceDivergence", + "js": "OIPriceDivergence", + "ctor": [ + 20 + ], + "args": [ + { + "name": "open_interest", + "array": false, + "bigint": false + }, + { + "name": "mark_price", + "array": false, + "bigint": false + } + ], + "out": "deriv" + }, + { + "canonical": "OIWeighted", + "js": "OIWeighted", + "ctor": [], + "args": [ + { + "name": "mark_price", + "array": false, + "bigint": false + }, + { + "name": "open_interest", + "array": false, + "bigint": false + } + ], + "out": "deriv" + }, + { + "canonical": "Obv", + "js": "OBV", + "ctor": [], + "args": [ + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "OiToVolumeRatio", + "js": "OiToVolumeRatio", + "ctor": [], + "args": [ + { + "name": "open_interest", + "array": false, + "bigint": false + }, + { + "name": "taker_buy_volume", + "array": false, + "bigint": false + }, + { + "name": "taker_sell_volume", + "array": false, + "bigint": false + } + ], + "out": "deriv" + }, + { + "canonical": "OmegaRatio", + "js": "OmegaRatio", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "OnNeck", + "js": "OnNeck", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "OpenInterestDelta", + "js": "OpenInterestDelta", + "ctor": [], + "args": [ + { + "name": "open_interest", + "array": false, + "bigint": false + } + ], + "out": "deriv" + }, + { + "canonical": "OpenInterestMomentum", + "js": "OpenInterestMomentum", + "ctor": [ + 10 + ], + "args": [ + { + "name": "open_interest", + "array": false, + "bigint": false + } + ], + "out": "deriv" + }, + { + "canonical": "OpeningMarubozu", + "js": "OpeningMarubozu", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "OpeningRange", + "js": "OpeningRange", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "OrderBookImbalanceFull", + "js": "OrderBookImbalanceFull", + "ctor": [], + "args": [ + { + "name": "bid_px", + "array": true, + "bigint": false + }, + { + "name": "bid_sz", + "array": true, + "bigint": false + }, + { + "name": "ask_px", + "array": true, + "bigint": false + }, + { + "name": "ask_sz", + "array": true, + "bigint": false + } + ], + "out": "ob" + }, + { + "canonical": "OrderBookImbalanceTop1", + "js": "OrderBookImbalanceTop1", + "ctor": [], + "args": [ + { + "name": "bid_px", + "array": true, + "bigint": false + }, + { + "name": "bid_sz", + "array": true, + "bigint": false + }, + { + "name": "ask_px", + "array": true, + "bigint": false + }, + { + "name": "ask_sz", + "array": true, + "bigint": false + } + ], + "out": "ob" + }, + { + "canonical": "OrderBookImbalanceTopN", + "js": "OrderBookImbalanceTopN", + "ctor": [ + 5 + ], + "args": [ + { + "name": "bid_px", + "array": true, + "bigint": false + }, + { + "name": "bid_sz", + "array": true, + "bigint": false + }, + { + "name": "ask_px", + "array": true, + "bigint": false + }, + { + "name": "ask_sz", + "array": true, + "bigint": false + } + ], + "out": "ob" + }, + { + "canonical": "OrderFlowImbalance", + "js": "OrderFlowImbalance", + "ctor": [ + 20 + ], + "args": [ + { + "name": "bid_px", + "array": true, + "bigint": false + }, + { + "name": "bid_sz", + "array": true, + "bigint": false + }, + { + "name": "ask_px", + "array": true, + "bigint": false + }, + { + "name": "ask_sz", + "array": true, + "bigint": false + } + ], + "out": "ob" + }, + { + "canonical": "OuHalfLife", + "js": "OuHalfLife", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false, + "bigint": false + }, + { + "name": "y", + "array": false, + "bigint": false + } + ], + "out": "pairwise" + }, + { + "canonical": "OvernightGap", + "js": "OvernightGap", + "ctor": [ + 0 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + }, + { + "name": "timestamp", + "array": false, + "bigint": true + } + ], + "out": "scalar_candle" + }, + { + "canonical": "OvernightIntradayReturn", + "js": "OvernightIntradayReturn", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + }, + { + "name": "timestamp", + "array": false, + "bigint": true + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "PainIndex", + "js": "PainIndex", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "PairSpreadZScore", + "js": "PairSpreadZScore", + "ctor": [ + 20, + 20 + ], + "args": [ + { + "name": "a", + "array": false, + "bigint": false + }, + { + "name": "b", + "array": false, + "bigint": false + } + ], + "out": "pairwise" + }, + { + "canonical": "PairwiseBeta", + "js": "PairwiseBeta", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false, + "bigint": false + }, + { + "name": "y", + "array": false, + "bigint": false + } + ], + "out": "pairwise" + }, + { + "canonical": "ParkinsonVolatility", + "js": "ParkinsonVolatility", + "ctor": [ + 20, + 252 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "PearsonCorrelation", + "js": "PearsonCorrelation", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false, + "bigint": false + }, + { + "name": "y", + "array": false, + "bigint": false + } + ], + "out": "pairwise" + }, + { + "canonical": "PercentAboveMa", + "js": "PercentAboveMa", + "ctor": [], + "args": [ + { + "name": "change", + "array": true, + "bigint": false + }, + { + "name": "volume", + "array": true, + "bigint": false + }, + { + "name": "new_high", + "array": true, + "bigint": false + }, + { + "name": "new_low", + "array": true, + "bigint": false + }, + { + "name": "above_ma", + "array": true, + "bigint": false + } + ], + "out": "cross" + }, + { + "canonical": "PercentB", + "js": "PercentB", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "PercentageTrailingStop", + "js": "PercentageTrailingStop", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "PerpetualPremiumIndex", + "js": "PerpetualPremiumIndex", + "ctor": [], + "args": [ + { + "name": "mark_price", + "array": false, + "bigint": false + }, + { + "name": "index_price", + "array": false, + "bigint": false + } + ], + "out": "deriv" + }, + { + "canonical": "Pgo", + "js": "PGO", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "PiercingDarkCloud", + "js": "PiercingDarkCloud", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Pin", + "js": "Pin", + "ctor": [ + 20 + ], + "args": [ + { + "name": "price", + "array": false, + "bigint": false + }, + { + "name": "size", + "array": false, + "bigint": false + }, + { + "name": "is_buy", + "array": false, + "bigint": false + } + ], + "out": "trade" + }, + { + "canonical": "PivotReversal", + "js": "PivotReversal", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "PlusDi", + "js": "PLUS_DI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "PlusDm", + "js": "PLUS_DM", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Pmo", + "js": "PMO", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "PointAndFigureBars", + "js": "PointAndFigureBars", + "ctor": [ + 2.0, + 3 + ], + "args": [ + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "bars" + }, + { + "canonical": "PolarizedFractalEfficiency", + "js": "POLARIZED_FRACTAL_EFFICIENCY", + "ctor": [ + 10, + 5 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Ppo", + "js": "PPO", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "PpoHistogram", + "js": "PpoHistogram", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "ProfileShape", + "js": "ProfileShape", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "ProfitFactor", + "js": "ProfitFactor", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "ProjectionBands", + "js": "ProjectionBands", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "ProjectionOscillator", + "js": "ProjectionOscillator", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Psar", + "js": "PSAR", + "ctor": [ + 0.02, + 0.02, + 0.2 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Pvi", + "js": "PVI", + "ctor": [], + "args": [ + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Qqe", + "js": "QQE", + "ctor": [ + 3, + 7, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "multi_f64", + "n": 2 + }, + { + "canonical": "Qstick", + "js": "Qstick", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "QuartileBands", + "js": "QuartileBands", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "multi_f64", + "n": 3 + }, + { + "canonical": "QuotedSpread", + "js": "QuotedSpread", + "ctor": [], + "args": [ + { + "name": "bid_px", + "array": true, + "bigint": false + }, + { + "name": "bid_sz", + "array": true, + "bigint": false + }, + { + "name": "ask_px", + "array": true, + "bigint": false + }, + { + "name": "ask_sz", + "array": true, + "bigint": false + } + ], + "out": "ob" + }, + { + "canonical": "RSquared", + "js": "RSquared", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "RangeBars", + "js": "RangeBars", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "bars" + }, + { + "canonical": "RealizedSpread", + "js": "RealizedSpread", + "ctor": [ + 20 + ], + "args": [ + { + "name": "price", + "array": false, + "bigint": false + }, + { + "name": "size", + "array": false, + "bigint": false + }, + { + "name": "is_buy", + "array": false, + "bigint": false + }, + { + "name": "mid", + "array": false, + "bigint": false + } + ], + "out": "trademid" + }, + { + "canonical": "RealizedVolatility", + "js": "RealizedVolatility", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "RecoveryFactor", + "js": "RecoveryFactor", + "ctor": [], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "RectangleRange", + "js": "RectangleRange", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Reflex", + "js": "REFLEX", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "RegimeLabel", + "js": "RegimeLabel", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "RelativeStrengthAB", + "js": "RelativeStrengthAB", + "ctor": [ + 14, + 14 + ], + "args": [ + { + "name": "a", + "array": false, + "bigint": false + }, + { + "name": "b", + "array": false, + "bigint": false + } + ], + "out": "multi_pairwise", + "n": 3 + }, + { + "canonical": "RenkoBars", + "js": "RenkoBars", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "bars" + }, + { + "canonical": "RenkoTrailingStop", + "js": "RenkoTrailingStop", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "RickshawMan", + "js": "RickshawMan", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "RisingThreeMethods", + "js": "RisingThreeMethods", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Rmi", + "js": "RMI", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Roc", + "js": "ROC", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Rocp", + "js": "ROCP", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Rocr", + "js": "ROCR", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Rocr100", + "js": "ROCR100", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "RogersSatchellVolatility", + "js": "RogersSatchellVolatility", + "ctor": [ + 20, + 252 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "RollMeasure", + "js": "RollMeasure", + "ctor": [ + 20 + ], + "args": [ + { + "name": "price", + "array": false, + "bigint": false + }, + { + "name": "size", + "array": false, + "bigint": false + }, + { + "name": "is_buy", + "array": false, + "bigint": false + } + ], + "out": "trade" + }, + { + "canonical": "RollingCorrelation", + "js": "RollingCorrelation", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false, + "bigint": false + }, + { + "name": "y", + "array": false, + "bigint": false + } + ], + "out": "pairwise" + }, + { + "canonical": "RollingCovariance", + "js": "RollingCovariance", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false, + "bigint": false + }, + { + "name": "y", + "array": false, + "bigint": false + } + ], + "out": "pairwise" + }, + { + "canonical": "RollingIqr", + "js": "RollingIqr", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "RollingMinMaxScaler", + "js": "ROLLINGMINMAX", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "RollingPercentileRank", + "js": "RollingPercentileRank", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "RollingQuantile", + "js": "RollingQuantile", + "ctor": [ + 20, + 0.5 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "RollingVwap", + "js": "RollingVWAP", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "RoofingFilter", + "js": "RoofingFilter", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Rsi", + "js": "RSI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Rsx", + "js": "RSX", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "RunBars", + "js": "RunBars", + "ctor": [ + 3 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "bars" + }, + { + "canonical": "Rvi", + "js": "RVI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "RviVolatility", + "js": "RVIVolatility", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Rwi", + "js": "RWI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "SampleEntropy", + "js": "SAMPLEENT", + "ctor": [ + 20, + 2, + 0.2 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "SarExt", + "js": "SAREXT", + "ctor": [ + 2.0, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5, + 0.5 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "SeasonalZScore", + "js": "SeasonalZScore", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + }, + { + "name": "timestamp", + "array": false, + "bigint": true + } + ], + "out": "scalar_candle" + }, + { + "canonical": "SeparatingLines", + "js": "SeparatingLines", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "SessionHighLow", + "js": "SessionHighLow", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + }, + { + "name": "timestamp", + "array": false, + "bigint": true + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "SessionRange", + "js": "SessionRange", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + }, + { + "name": "timestamp", + "array": false, + "bigint": true + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "SessionVwap", + "js": "SessionVwap", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + }, + { + "name": "timestamp", + "array": false, + "bigint": true + } + ], + "out": "scalar_candle" + }, + { + "canonical": "ShannonEntropy", + "js": "SHANNONENT", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Shark", + "js": "Shark", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "SharpeRatio", + "js": "SharpeRatio", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "ShootingStar", + "js": "ShootingStar", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "ShortLine", + "js": "ShortLine", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "SignedVolume", + "js": "SignedVolume", + "ctor": [], + "args": [ + { + "name": "price", + "array": false, + "bigint": false + }, + { + "name": "size", + "array": false, + "bigint": false + }, + { + "name": "is_buy", + "array": false, + "bigint": false + } + ], + "out": "trade" + }, + { + "canonical": "SineWave", + "js": "SineWave", + "ctor": [], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "SineWeightedMa", + "js": "SWMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "SinglePrints", + "js": "SinglePrints", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Skewness", + "js": "Skewness", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Sma", + "js": "SMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Smi", + "js": "SMI", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Smma", + "js": "SMMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "SmoothedHeikinAshi", + "js": "SmoothedHeikinAshi", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 4 + }, + { + "canonical": "SortinoRatio", + "js": "SortinoRatio", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "SpearmanCorrelation", + "js": "SpearmanCorrelation", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false, + "bigint": false + }, + { + "name": "y", + "array": false, + "bigint": false + } + ], + "out": "pairwise" + }, + { + "canonical": "SpinningTop", + "js": "SpinningTop", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "SpreadAr1Coefficient", + "js": "SpreadAr1Coefficient", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false, + "bigint": false + }, + { + "name": "y", + "array": false, + "bigint": false + } + ], + "out": "pairwise" + }, + { + "canonical": "SpreadBollingerBands", + "js": "SpreadBollingerBands", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "a", + "array": false, + "bigint": false + }, + { + "name": "b", + "array": false, + "bigint": false + } + ], + "out": "multi_pairwise", + "n": 4 + }, + { + "canonical": "SpreadHurst", + "js": "SpreadHurst", + "ctor": [ + 14 + ], + "args": [ + { + "name": "x", + "array": false, + "bigint": false + }, + { + "name": "y", + "array": false, + "bigint": false + } + ], + "out": "pairwise" + }, + { + "canonical": "StalledPattern", + "js": "StalledPattern", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "StandardError", + "js": "StandardError", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "StandardErrorBands", + "js": "StandardErrorBands", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "multi_f64", + "n": 3 + }, + { + "canonical": "StarcBands", + "js": "StarcBands", + "ctor": [ + 3, + 7, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "Stc", + "js": "STC", + "ctor": [ + 10, + 23, + 10, + 0.5 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "StdDev", + "js": "StdDev", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "StepTrailingStop", + "js": "StepTrailingStop", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "SterlingRatio", + "js": "SterlingRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "StickSandwich", + "js": "StickSandwich", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "StochRsi", + "js": "StochRSI", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Stochastic", + "js": "Stochastic", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "StochasticCci", + "js": "StochasticCCI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "SuperSmoother", + "js": "SuperSmoother", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "SuperTrend", + "js": "SuperTrend", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "T3", + "js": "T3", + "ctor": [ + 5, + 0.7 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "TailRatio", + "js": "TailRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "TakerBuySellRatio", + "js": "TakerBuySellRatio", + "ctor": [], + "args": [ + { + "name": "taker_buy_volume", + "array": false, + "bigint": false + }, + { + "name": "taker_sell_volume", + "array": false, + "bigint": false + } + ], + "out": "deriv" + }, + { + "canonical": "Takuri", + "js": "Takuri", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TasukiGap", + "js": "TasukiGap", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TdCamouflage", + "js": "TDCamouflage", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TdClop", + "js": "TDClop", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TdClopwin", + "js": "TDClopwin", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TdCombo", + "js": "TDCombo", + "ctor": [ + 3, + 7, + 14, + 28 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TdCountdown", + "js": "TDCountdown", + "ctor": [ + 3, + 7, + 14, + 28 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TdDWave", + "js": "TDDWave", + "ctor": [ + 2 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TdDeMarker", + "js": "TDDeMarker", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TdDifferential", + "js": "TDDifferential", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TdLines", + "js": "TDLines", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "TdMovingAverage", + "js": "TDMovingAverage", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "TdOpen", + "js": "TDOpen", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TdPressure", + "js": "TDPressure", + "ctor": [ + 14 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TdPropulsion", + "js": "TDPropulsion", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TdRangeProjection", + "js": "TDRangeProjection", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "TdRei", + "js": "TDREI", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TdRiskLevel", + "js": "TDRiskLevel", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "TdSequential", + "js": "TDSequential", + "ctor": [ + 3, + 7, + 14, + 28 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "TdSetup", + "js": "TDSetup", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TdTrap", + "js": "TDTrap", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Tema", + "js": "TEMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "TermStructureBasis", + "js": "TermStructureBasis", + "ctor": [], + "args": [ + { + "name": "futures_price", + "array": false, + "bigint": false + }, + { + "name": "index_price", + "array": false, + "bigint": false + } + ], + "out": "deriv" + }, + { + "canonical": "ThreeDrives", + "js": "ThreeDrives", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "ThreeInside", + "js": "ThreeInside", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "ThreeLineBreak", + "js": "ThreeLineBreak", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "ThreeLineBreakBars", + "js": "ThreeLineBreakBars", + "ctor": [ + 3 + ], + "args": [ + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "bars" + }, + { + "canonical": "ThreeLineStrike", + "js": "ThreeLineStrike", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "ThreeOutside", + "js": "ThreeOutside", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "ThreeSoldiersOrCrows", + "js": "ThreeSoldiersOrCrows", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "ThreeStarsInSouth", + "js": "ThreeStarsInSouth", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Thrusting", + "js": "Thrusting", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TickBars", + "js": "TickBars", + "ctor": [ + 2 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "bars" + }, + { + "canonical": "TickIndex", + "js": "TickIndex", + "ctor": [], + "args": [ + { + "name": "change", + "array": true, + "bigint": false + }, + { + "name": "volume", + "array": true, + "bigint": false + }, + { + "name": "new_high", + "array": true, + "bigint": false + }, + { + "name": "new_low", + "array": true, + "bigint": false + } + ], + "out": "cross" + }, + { + "canonical": "Tii", + "js": "TII", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "TimeBasedStop", + "js": "TimeBasedStop", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TimeOfDayReturnProfile", + "js": "TimeOfDayReturnProfile", + "ctor": [ + 24, + 0 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + }, + { + "name": "timestamp", + "array": false, + "bigint": true + } + ], + "out": "profile_bins", + "width": 24 + }, + { + "canonical": "TowerTopBottom", + "js": "TowerTopBottom", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TpoProfile", + "js": "TpoProfile", + "ctor": [ + 30, + 50 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "profile_pricebins", + "width": 52, + "arrayField": "counts" + }, + { + "canonical": "TradeImbalance", + "js": "TradeImbalance", + "ctor": [ + 20 + ], + "args": [ + { + "name": "price", + "array": false, + "bigint": false + }, + { + "name": "size", + "array": false, + "bigint": false + }, + { + "name": "is_buy", + "array": false, + "bigint": false + } + ], + "out": "trade" + }, + { + "canonical": "TradeSignAutocorrelation", + "js": "TradeSignAutocorrelation", + "ctor": [ + 20 + ], + "args": [ + { + "name": "price", + "array": false, + "bigint": false + }, + { + "name": "size", + "array": false, + "bigint": false + }, + { + "name": "is_buy", + "array": false, + "bigint": false + } + ], + "out": "trade" + }, + { + "canonical": "TradeVolumeIndex", + "js": "TradeVolumeIndex", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TrendLabel", + "js": "TrendLabel", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "TrendStrengthIndex", + "js": "TREND_STRENGTH_INDEX", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Trendflex", + "js": "TRENDFLEX", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "TreynorRatio", + "js": "TreynorRatio", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "asset", + "array": false, + "bigint": false + }, + { + "name": "benchmark", + "array": false, + "bigint": false + } + ], + "out": "pairwise" + }, + { + "canonical": "Triangle", + "js": "Triangle", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Trima", + "js": "TRIMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Trin", + "js": "Trin", + "ctor": [], + "args": [ + { + "name": "change", + "array": true, + "bigint": false + }, + { + "name": "volume", + "array": true, + "bigint": false + }, + { + "name": "new_high", + "array": true, + "bigint": false + }, + { + "name": "new_low", + "array": true, + "bigint": false + } + ], + "out": "cross" + }, + { + "canonical": "TripleTopBottom", + "js": "TripleTopBottom", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Tristar", + "js": "Tristar", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Trix", + "js": "TRIX", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "TrueRange", + "js": "TrueRange", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Tsf", + "js": "TSF", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "TsfOscillator", + "js": "TsfOscillator", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Tsi", + "js": "TSI", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Tsv", + "js": "TSV", + "ctor": [ + 14 + ], + "args": [ + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TtmSqueeze", + "js": "TtmSqueeze", + "ctor": [ + 14, + 2.0, + 0.5 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "TtmTrend", + "js": "TTM_TREND", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TurnOfMonth", + "js": "TurnOfMonth", + "ctor": [ + 3, + 3, + 0 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + }, + { + "name": "timestamp", + "array": false, + "bigint": true + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Tweezer", + "js": "Tweezer", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TwiggsMoneyFlow", + "js": "TwiggsMoneyFlow", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TwoCrows", + "js": "TwoCrows", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "TypicalPrice", + "js": "TypicalPrice", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "UlcerIndex", + "js": "UlcerIndex", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "UltimateOscillator", + "js": "UltimateOscillator", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "UniqueThreeRiver", + "js": "UniqueThreeRiver", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "UniversalOscillator", + "js": "UNIVERSALOSC", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "UpDownVolumeRatio", + "js": "UpDownVolumeRatio", + "ctor": [], + "args": [ + { + "name": "change", + "array": true, + "bigint": false + }, + { + "name": "volume", + "array": true, + "bigint": false + }, + { + "name": "new_high", + "array": true, + "bigint": false + }, + { + "name": "new_low", + "array": true, + "bigint": false + } + ], + "out": "cross" + }, + { + "canonical": "UpsideGapThreeMethods", + "js": "UpsideGapThreeMethods", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "UpsideGapTwoCrows", + "js": "UpsideGapTwoCrows", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "UpsidePotentialRatio", + "js": "UpsidePotentialRatio", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "ValueArea", + "js": "ValueArea", + "ctor": [ + 20, + 50, + 0.7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "ValueAtRisk", + "js": "ValueAtRisk", + "ctor": [ + 20, + 0.95 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Variance", + "js": "Variance", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "VarianceRatio", + "js": "VarianceRatio", + "ctor": [ + 60, + 2 + ], + "args": [ + { + "name": "a", + "array": false, + "bigint": false + }, + { + "name": "b", + "array": false, + "bigint": false + } + ], + "out": "pairwise" + }, + { + "canonical": "VerticalHorizontalFilter", + "js": "VerticalHorizontalFilter", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Vidya", + "js": "VIDYA", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "VolatilityCone", + "js": "VolatilityCone", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 5 + }, + { + "canonical": "VolatilityOfVolatility", + "js": "VolatilityOfVolatility", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "VolatilityRatio", + "js": "VolatilityRatio", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "VoltyStop", + "js": "VoltyStop", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "VolumeBars", + "js": "VolumeBars", + "ctor": [ + 500.0 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "bars" + }, + { + "canonical": "VolumeByTimeProfile", + "js": "VolumeByTimeProfile", + "ctor": [ + 24, + 0 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + }, + { + "name": "timestamp", + "array": false, + "bigint": true + } + ], + "out": "profile_bins", + "width": 24 + }, + { + "canonical": "VolumeOscillator", + "js": "VolumeOscillator", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "VolumePriceTrend", + "js": "VolumePriceTrend", + "ctor": [], + "args": [ + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "VolumeProfile", + "js": "VolumeProfile", + "ctor": [ + 20, + 50 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "profile_pricebins", + "width": 52, + "arrayField": "bins" + }, + { + "canonical": "VolumeRsi", + "js": "VolumeRsi", + "ctor": [ + 14 + ], + "args": [ + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "VolumeWeightedMacd", + "js": "VolumeWeightedMacd", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 3 + }, + { + "canonical": "VolumeWeightedSr", + "js": "VolumeWeightedSr", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "Vortex", + "js": "Vortex", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "Vpin", + "js": "Vpin", + "ctor": [ + 5000.0, + 10 + ], + "args": [ + { + "name": "price", + "array": false, + "bigint": false + }, + { + "name": "size", + "array": false, + "bigint": false + }, + { + "name": "is_buy", + "array": false, + "bigint": false + } + ], + "out": "trade" + }, + { + "canonical": "Vwap", + "js": "VWAP", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "VwapStdDevBands", + "js": "VwapStdDevBands", + "ctor": [ + 2.0 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 4 + }, + { + "canonical": "Vwma", + "js": "VWMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Vzo", + "js": "VZO", + "ctor": [ + 14 + ], + "args": [ + { + "name": "close", + "array": false, + "bigint": false + }, + { + "name": "volume", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "Wad", + "js": "Wad", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "WavePm", + "js": "WAVE_PM", + "ctor": [ + 3, + 7 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "WaveTrend", + "js": "WaveTrend", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "Wedge", + "js": "Wedge", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "WeightedClose", + "js": "WeightedClose", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "WickRatio", + "js": "WickRatio", + "ctor": [], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "WilliamsFractals", + "js": "WilliamsFractals", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "WilliamsR", + "js": "WilliamsR", + "ctor": [ + 14 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "WinRate", + "js": "WinRate", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "Wma", + "js": "WMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "WoodiePivots", + "js": "WoodiePivots", + "ctor": [], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 5 + }, + { + "canonical": "YangZhangVolatility", + "js": "YangZhangVolatility", + "ctor": [ + 20, + 252 + ], + "args": [ + { + "name": "open", + "array": false, + "bigint": false + }, + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "YoyoExit", + "js": "YoyoExit", + "ctor": [ + 14, + 2.0 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + }, + { + "name": "close", + "array": false, + "bigint": false + } + ], + "out": "scalar_candle" + }, + { + "canonical": "ZScore", + "js": "ZScore", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + }, + { + "canonical": "ZeroLagMacd", + "js": "ZeroLagMACD", + "ctor": [ + 3, + 7, + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "multi_f64", + "n": 3 + }, + { + "canonical": "ZigZag", + "js": "ZigZag", + "ctor": [ + 0.02 + ], + "args": [ + { + "name": "high", + "array": false, + "bigint": false + }, + { + "name": "low", + "array": false, + "bigint": false + } + ], + "out": "multi_candle", + "n": 2 + }, + { + "canonical": "Zlema", + "js": "ZLEMA", + "ctor": [ + 14 + ], + "args": [ + { + "name": "value", + "array": false, + "bigint": false + } + ], + "out": "scalar_f64" + } +] \ No newline at end of file