* test: golden-pin the four de-duplicated indicators across all C-ABI bindings Extend gen_golden to emit reference fixtures for AdOscillator (ADOSC), IntradayIntensity, AwesomeOscillatorHistogram and AverageDrawdown, and replay them through the Go / C# / Java / R golden harnesses so their corrected definitions stay bit-identical to the Rust core in every binding. Go suite verified locally (gcc 13 + cgo): all 9 golden tests pass; C#/Java/R use the same fixtures and harness pattern (CI-verified). First step of extending the golden coverage beyond the seven archetype representatives. * test: golden-pin the scalar-output tranche (308 indicators) against Rust Extend gen_golden with a generated emit_scalar that writes reference fixtures for every single-f64-output indicator (scalar / candle / pairwise input) using valid constructor params, and add a manifest-driven generic Python golden replay that reconstructs each by its native name and checks it bit-for-bit against the Rust output. 308 indicators now value-tied to the Rust core in Python (pytest: 308/308). Takes golden coverage from the 7 archetype representatives to 308+ of the catalogue. 22 scalar indicators with non-default constructor constraints are skipped by gen_golden for now (logged), as are non-f64-output ones; multi-output, exotic inputs and the per-indicator arg arities of the C-ABI/Node replays follow. Generated + verified locally with the full toolchain. * test: golden-pin the multi-output tranche (70 indicators) in Python Add a generated emit_multi to gen_golden (per-indicator Output-field access, one CSV column per field) and a manifest-driven generic Python replay that checks every field of each multi-output indicator against the Rust reference. 70 multi-output indicators now value-tied to Rust in Python; combined with the scalar tranche, 378 indicators are golden-pinned. 8 multi with non-default param constraints and 5 with non-f64 Output fields (Option/Vec/i64) are deferred. pytest green. * test(golden): add 30 constraint-tuned indicators to scalar/multi golden suite Emit golden fixtures for 22 scalar-output and 8 multi-output indicators whose constructors need non-default parameters (Alma, Jma, Psar, T3, Mama, DoubleBollinger, ZigZag, ...). All 408 fixtures replay bit-for-bit through the Python binding. * test(golden): cover 36 missed scalar/multi indicators Add 26 single-output (LinearRegression family, HT cycle, Candle volatility estimators, DrawdownDuration) and 10 multi-output (BollingerBands, MACD/MACDEXT/MACDFIX, Camarilla, VWAP bands, ...) indicators to the golden suite. 444 fixtures replay bit-for-bit through the Python binding. * test(golden): cover 50 exotic-input indicators Add deterministic synthetic feeders for the DerivativesTick (17), CrossSection (15), Trade (8), TradeQuote (3) and OrderBook (7) families, derived from the shared OHLCV input series in both gen_golden and a new Python replay harness (test_golden_exotic). All 494 fixtures replay bit-for-bit through the Python binding. * test(golden): complete 514-indicator golden coverage Add the final tranches: 3 mixed multi-output indicators (Ichimoku, WilliamsFractals, LeadLagCrossCorrelation), 6 histogram profiles (time/volume seasonality + TPO/volume price profiles), 10 alt-chart bar builders and the footprint. Every one of the 514 distinct indicators now has a Rust-generated g_<Canonical>.csv fixture and a generic Python replay (scalar/multi/exotic/profile/bars), all passing bit-for-bit. * test(golden): add generic Node replay for all 514 indicators A manifest-driven node:test harness reconstructs every indicator by its native class, feeds the same synthetic stream derived from the shared golden input, and checks output bit-for-bit against the Rust reference fixtures (scalar/multi/exotic/profile/bars). node_manifest.json is generated from index.d.ts plus the Python-side manifests. 514/514 pass. * test(golden): add generated Go replay for all 514 indicators golden_all_test.go (generated by gen_golden_test.py) reconstructs every Go indicator, feeds the shared synthetic stream and checks output bit-for-bit against the Rust reference fixtures. A reflection-based comparator flattens multi-output structs, profiles and bar slices so one path covers all archetypes. This is the first C-ABI binding verified across the full catalogue. 514/514 pass. * test(golden): add generated C# replay for all 514 indicators GoldenAllTests.g.cs (generated by gen_golden_test.py) reconstructs every C# indicator, feeds the shared synthetic stream and checks output bit-for-bit against the Rust reference fixtures via a reflection-based flatten covering scalar/multi/profile/bar archetypes. 514/514 pass. Also add the '#nullable enable' directive the compiler requires to the generated Indicators.g.cs, clearing the four CS8669 warnings on the nullable double[] profile return types. * fix(java): marshal C ABI bool params correctly; add 514 golden replay The Java FFM binding marshalled the cross-section state flags (newHigh, newLow, aboveMa, onBuySignal) as JAVA_DOUBLE arrays, but the C ABI takes them as const bool* (one byte each), so the native side read the low byte of each 8-byte double and saw every flag as false. Add WickraNative. boolSegment and use it across the 15 cross-section indicators. Also pass the MacdExt MaType arguments as byte to match the uint8_t downcall descriptor (was int, throwing WrongMethodTypeException). Add GoldenAllTest.java (generated by gen_golden_test.py): a reflection runner replaying all 514 indicators against the Rust reference fixtures. The bugs above were found by this test; 514/514 now pass. * fix(r): marshal C ABI bool flags correctly; add 514 golden replay The R wrapper passed the cross-section state flags as (bool *)REAL(x), reinterpreting the 8-byte doubles as 1-byte bools so the native side read every flag as false. Add wk_bool_vec to convert each flag vector into a real C bool buffer and use it for all 15 cross-section update wrappers. Add test-golden-all.R + generated golden_specs.R: a reflective runner replaying all 514 indicators against the Rust reference fixtures. The bug above was found by this test; verified 514/514 pass locally. * test(golden): add WASM replay for all 514 indicators A manifest-driven node:test harness loads the nodejs-target wasm-pack build, reconstructs every indicator by its JS class, feeds the shared synthetic stream and checks output bit-for-bit against the Rust reference fixtures. wasm_manifest.json is generated from the wasm .d.ts plus the shared manifests; a recursive flattener covers scalar, multi (Reflect objects), profile and bar shapes. 514/514 pass locally (wasm-pack build --target nodejs, then node --test). * test(golden): add C and C++ replay for all 514 indicators golden_test.c (generated by gen_golden_test.py) drives every indicator through the C ABI (wickra.h) and checks output bit-for-bit against the Rust reference fixtures. golden_test.cpp #includes the same source so the identical runner is compiled and run under both gcc (C) and g++ (C++) via the CMake targets golden_test / golden_test_cpp — proving the extern "C" header is consumable from each language. Both 514/514 (verified via ctest). * test(golden): gofmt the generated Go golden replay * test(golden): make the Node fixture reader CRLF-safe and pin fixtures to LF
7.3 KiB
7.3 KiB
| 1 | pp | r1 | r2 | s1 | s2 |
|---|---|---|---|---|---|
| 2 | 99.75 | 101.5 | 102.75 | 98.5 | 96.75 |
| 3 | 103.2358064261408 | 105.21610219117743 | 106.75760667526887 | 101.69430194204935 | 99.71400617701272 |
| 4 | 106.51134915748332 | 108.40930075187866 | 110.03710119333992 | 104.88354871602206 | 102.98559712162672 |
| 5 | 109.31558479585792 | 110.80024238043313 | 112.24953136417449 | 107.86629581211656 | 106.38163822754134 |
| 6 | 111.42442756880905 | 112.6959583530238 | 114.1755625555121 | 109.94482336632075 | 108.673292582106 |
| 7 | 112.67523576992727 | 114.0509132876588 | 115.82716261316382 | 110.89898644442225 | 109.52330892669072 |
| 8 | 112.98597443293207 | 114.66926044328898 | 116.84754270194611 | 110.80769217427493 | 109.12440616391802 |
| 9 | 112.36620783831144 | 114.0915483164463 | 116.28511713822658 | 110.17263901653116 | 108.4472985383963 |
| 10 | 110.9180427107274 | 112.39708693487947 | 114.20295296946335 | 109.11217667614352 | 107.63313245199146 |
| 11 | 108.82649775219599 | 109.88760365229585 | 111.05410745211113 | 107.65999395238072 | 106.59888805228086 |
| 12 | 106.34028453423286 | 107.88152447268968 | 109.28093331841488 | 104.94087568850766 | 103.39963575005085 |
| 13 | 103.74537561499469 | 105.77096206265162 | 107.44221362316294 | 102.07412405448336 | 100.04853760682643 |
| 14 | 101.3347529953889 | 103.48218016442083 | 105.14952219012756 | 99.66741096968217 | 97.51998380065024 |
| 15 | 99.37819150172825 | 101.27018140219896 | 102.67387748980565 | 97.97449541412156 | 96.08250551365086 |
| 16 | 98.09576671227829 | 99.84443296766173 | 101.21614809587352 | 96.7240515840665 | 94.97538532868306 |
| 17 | 97.63803999389027 | 99.33786436225238 | 100.86437107169697 | 96.11153328444568 | 94.41170891608358 |
| 18 | 98.07472892009375 | 99.60069279312157 | 101.1994066830537 | 96.47601503016162 | 94.9500511571338 |
| 19 | 99.39235615239389 | 100.85192768418362 | 102.61250516731575 | 97.63177866926176 | 96.17220713747203 |
| 20 | 101.5001376899113 | 102.74473177899304 | 104.44489099901712 | 99.79997846988722 | 98.55538438080548 |
| 21 | 104.24243761307272 | 105.82651553322012 | 107.90917953146571 | 102.15977361482713 | 100.57569569467974 |
| 22 | 107.41561290027985 | 109.1206844603964 | 111.24529178505117 | 105.29100557562509 | 103.58593401550854 |
| 23 | 110.78702323684249 | 112.32878088441295 | 114.10830699598142 | 109.00749712527401 | 107.46573947770355 |
| 24 | 114.11430721063675 | 115.26918566250063 | 116.4218512653705 | 112.96164160776688 | 111.806763155903 |
| 25 | 117.16357145419374 | 118.7170857318505 | 120.02894763013074 | 115.8517095559135 | 114.29819527825674 |
| 26 | 119.7257151488084 | 121.80238913464852 | 123.45713614112239 | 118.07096814233454 | 115.99429415649442 |
| 27 | 121.63055019795274 | 123.86671191007076 | 125.60397448259948 | 119.89328762542402 | 117.657125913306 |
| 28 | 122.75857175838351 | 124.7415732556743 | 126.27085136223998 | 121.22929365181783 | 119.24629215452704 |
| 29 | 123.05016794262339 | 124.52156978400922 | 125.6955112937401 | 121.87622643289251 | 120.40482459150668 |
| 30 | 122.51180477633085 | 123.95533950002078 | 125.3305056146068 | 121.13663866174483 | 119.69310393805489 |
| 31 | 121.21842336751901 | 122.80353763713414 | 124.56611404014362 | 119.45584696450953 | 117.8707326948944 |
| 32 | 119.31110683063227 | 120.919356628115 | 122.90745038202715 | 117.32301307672012 | 115.71476327923739 |
| 33 | 116.98915760077536 | 118.37729729214395 | 120.25466371492199 | 115.11179117799732 | 113.72365148662873 |
| 34 | 114.49614705785103 | 115.93433976949258 | 117.85136222129584 | 112.57912460604777 | 111.14093189440622 |
| 35 | 112.10024032662247 | 113.72343327490799 | 115.69782475194486 | 110.1258488495856 | 108.50265590130007 |
| 36 | 110.07004395857749 | 111.62473401596233 | 113.31700574237296 | 108.37777223216686 | 106.82308217478202 |
| 37 | 108.64818240948043 | 110.10844114682158 | 111.458979902557 | 107.297643653745 | 105.83738491640385 |
| 38 | 108.02555852227405 | 109.55440008971985 | 110.75308330304362 | 106.82687530895028 | 105.29803374150448 |
| 39 | 108.31959289452305 | 110.37131889896037 | 111.95328245652354 | 106.73762933695988 | 104.68590333252257 |
| 40 | 109.55953858880657 | 111.7983894393855 | 113.54288798087109 | 107.81504004732099 | 105.57618919674206 |
| 41 | 111.68121041835619 | 113.69173559601434 | 115.30435328876551 | 110.06859272560501 | 108.05806754794686 |
| 42 | 114.5322503045423 | 115.97376474505627 | 117.21123815466355 | 113.29477689493503 | 111.85326245442106 |
| 43 | 117.88757297816161 | 119.11392764460153 | 120.3800640946807 | 116.62143652808244 | 115.39508186164252 |
| 44 | 121.47316278726743 | 123.06137240642857 | 124.92344665570188 | 119.61108853799412 | 118.02287891883297 |
| 45 | 124.99519232326226 | 126.69948832121449 | 128.8446801829374 | 122.85000046153937 | 121.14570446358714 |
| 46 | 128.1707253536709 | 129.7095730824924 | 131.74840122451127 | 126.13189721165205 | 124.59304948283052 |
| 47 | 130.7561704255396 | 132.01648381340888 | 133.7134495213249 | 129.0592047176236 | 127.79889132975433 |
| 48 | 132.57016494952438 | 134.0564579331979 | 135.80916742703812 | 130.81745545568415 | 129.33116247201065 |
| 49 | 133.50857021097778 | 135.0221674988538 | 136.56671743372704 | 131.96402027610455 | 130.45042298822852 |
| 50 | 133.55053301365854 | 135.2775503964245 | 136.79247827552194 | 132.03560513456108 | 130.30858775179513 |
| 51 | 132.75586593795128 | 134.48801422480747 | 135.81695776470755 | 131.4269223980512 | 129.69477411119502 |
| 52 | 131.2550776986053 | 133.212571142251 | 134.67446317996493 | 129.79318566089137 | 127.83569221724568 |
| 53 | 129.23407695329016 | 131.38889662325485 | 133.0770587371876 | 127.54591483935741 | 125.39109516939271 |
| 54 | 126.91580669241227 | 128.88265629639562 | 130.52604623921468 | 125.27241674959325 | 123.30556714560988 |
| 55 | 124.54088040616134 | 125.97443635807687 | 127.3069247497988 | 123.20839201443941 | 121.77483606252387 |
| 56 | 122.34881483819879 | 123.47220808887849 | 124.74167074392513 | 121.07935218315215 | 119.95595893247246 |
| 57 | 120.56086831850368 | 122.09857735708441 | 123.99372988005499 | 118.6657157955331 | 117.12800675695237 |
| 58 | 119.36498113076334 | 121.10441130679563 | 123.32514441598471 | 117.14424802157426 | 115.40481784554197 |
| 59 | 118.90301126811374 | 120.5506592888774 | 122.68562994750138 | 116.76804060948976 | 115.1203925887261 |
| 60 | 119.26042057771592 | 120.56662839601262 | 122.24686497915383 | 117.58018399457471 | 116.27397617627801 |
| 61 | 120.45875530483092 | 121.76499347299884 | 123.24039124665228 | 118.98335753117748 | 117.67711936300955 |
| 62 | 122.45156466981135 | 124.02551403118485 | 125.52233766761456 | 120.95474103338164 | 119.38079167200813 |
| 63 | 125.1246501097061 | 127.06077807176187 | 128.69237804576446 | 123.49305013570351 | 121.55692217364773 |
| 64 | 128.30157779318262 | 130.2626065463162 | 131.76626412054748 | 126.7979202189513 | 124.83689146581774 |
| 65 | 131.7551099011788 | 133.56117646326018 | 134.86900907156303 | 130.44727729287595 | 128.64121073079457 |
| 66 | 135.2245934480723 | 137.21504933714863 | 138.78839354597167 | 133.65124923924927 | 131.66079335017295 |
| 67 | 138.43846573713427 | 140.2885600535255 | 141.90478844979313 | 136.82223734086662 | 134.9721430244754 |
| 68 | 141.1400565618768 | 142.54235180704387 | 143.95128542582248 | 139.7311229430982 | 138.32882769793113 |
| 69 | 143.1140042174615 | 144.34777490454061 | 145.8270629535848 | 141.63471616841733 | 140.40094548133823 |
| 70 | 144.21007157012286 | 145.6513768660649 | 147.51696729939925 | 142.34448113678852 | 140.90317584084647 |
| 71 | 144.36111380188333 | 146.07225900794367 | 148.2825773277284 | 142.1507954820986 | 140.43965027603826 |
| 72 | 143.59247943663343 | 145.29527881428604 | 147.44992429448442 | 141.43783395643504 | 139.73503457878243 |
| 73 | 142.0211716648925 | 143.43602898414937 | 145.1447777101864 | 140.3124229388555 | 138.89756561959862 |
| 74 | 139.84449583895628 | 140.94354287518595 | 142.1065717562293 | 138.68146695791293 | 137.58241992168325 |
| 75 | 137.31942780989448 | 138.96230317160737 | 140.42358582911223 | 135.85814515238962 | 134.21526979067673 |
| 76 | 134.73528228094608 | 136.80901381844578 | 138.50003832997277 | 133.0442577694191 | 130.9705262319194 |
| 77 | 132.38319421519236 | 134.512228809292 | 136.1511420829866 | 130.74428094149775 | 128.6152463473981 |
| 78 | 130.52628402854575 | 132.34538845178253 | 133.68695605299564 | 129.18471642733263 | 127.36561200409585 |
| 79 | 129.3741089943372 | 131.1327632752579 | 132.54338290124667 | 127.96348936834846 | 126.20483508742775 |
| 80 | 129.06418368570354 | 130.7288919142122 | 132.26027867654088 | 127.53279692337486 | 125.8680886948662 |
| 81 | 129.6521615246492 | 131.18346010512911 | 132.8287921528506 | 128.0068294769277 | 126.47553089644776 |