4f708d410d
* 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
10 KiB
10 KiB
| 1 | pp | r1 | r2 | r3 | s1 | s2 | s3 |
|---|---|---|---|---|---|---|---|
| 2 | 99.66666666666667 | 101.33333333333334 | 102.66666666666667 | 104.33333333333334 | 98.33333333333334 | 96.66666666666667 | 95.33333333333334 |
| 3 | 103.16267454598328 | 105.06983843086239 | 106.68447479511136 | 108.59163867999047 | 101.54803818173431 | 99.6408742968552 | 98.02623793260624 |
| 4 | 106.46632396532765 | 108.3192503675673 | 109.99207600118424 | 111.8450024034239 | 104.79349833171071 | 102.94057192947105 | 101.26774629585411 |
| 5 | 109.30969002905226 | 110.78845284682183 | 112.24363659736883 | 113.7223994151384 | 107.85450627850526 | 106.37574346073569 | 104.92055971018868 |
| 6 | 111.45910647185464 | 112.76531615911497 | 114.21024145855769 | 115.51645114581802 | 110.01418117241192 | 108.70797148515159 | 107.26304618570887 |
| 7 | 112.74199773788952 | 114.1844372235833 | 115.89392458112607 | 117.33636406681985 | 111.03251038034675 | 109.59007089465297 | 107.8805835371102 |
| 8 | 113.06847380764877 | 114.83425919272239 | 116.93004207666282 | 118.69582746173643 | 110.97269092370834 | 109.20690553863473 | 107.1111226546943 |
| 9 | 112.44424589558567 | 114.24762443099476 | 116.36315519550081 | 118.1665337309099 | 110.32871513107962 | 108.52533659567052 | 106.40980583116448 |
| 10 | 110.97251301246604 | 112.50602753835673 | 114.25742327120199 | 115.79093779709268 | 109.22111727962078 | 107.68760275373009 | 105.93620702088484 |
| 11 | 108.84406406881523 | 109.92273628553433 | 111.07167376873036 | 112.15034598544946 | 107.69512658561919 | 106.6164543689001 | 105.46751688570406 |
| 12 | 106.3166460187776 | 107.83424744177915 | 109.25729480295962 | 110.77489622596117 | 104.89359865759714 | 103.37599723459559 | 101.95294987341512 |
| 13 | 103.68631980047041 | 105.65285043360308 | 107.38315780863867 | 109.34968844177133 | 101.95601242543482 | 99.98948179230216 | 98.25917441726656 |
| 14 | 101.25473880483469 | 103.3221517833124 | 105.06950799957335 | 107.13692097805107 | 99.50738258857375 | 97.43996961009603 | 95.69261339383509 |
| 15 | 99.29680919958425 | 101.10741679791094 | 102.59249518766164 | 104.40310278598834 | 97.81173080983355 | 96.00112321150685 | 94.51604482175615 |
| 16 | 98.03294152441634 | 99.71878259193784 | 101.15332290801157 | 102.83916397553307 | 96.59840120834261 | 94.91256014082111 | 93.47801982474738 |
| 17 | 97.60915371740403 | 99.28009180927988 | 100.83548479521072 | 102.50642288708657 | 96.05376073147319 | 94.38282263959734 | 92.8274296536665 |
| 18 | 98.08685392291113 | 99.62494279875634 | 101.21153168587108 | 102.74962056171628 | 96.50026503579639 | 94.96217615995118 | 93.37558727283644 |
| 19 | 99.44252381095095 | 100.95226300129774 | 102.6626728258728 | 104.1724120162196 | 97.73211398637588 | 96.22237479602909 | 94.51196497145402 |
| 20 | 101.57606521173501 | 102.89658682264047 | 104.52081852084083 | 105.84134013174629 | 99.95183351353465 | 98.6313119026292 | 97.00708020442883 |
| 21 | 104.32553529275576 | 105.99271089258619 | 107.99227721114875 | 109.65945281097918 | 102.3259689741932 | 100.65879337436277 | 98.65922705580022 |
| 22 | 107.48553552770288 | 109.26052971524246 | 111.31521441247419 | 113.09020860001377 | 105.43085083047114 | 103.65585664293157 | 101.60117194569983 |
| 23 | 110.82665131417549 | 112.40803703907896 | 114.14793507331443 | 115.7293207982179 | 109.08675327994003 | 107.50536755503656 | 105.76546952080109 |
| 24 | 114.11393840247109 | 115.26844804616931 | 116.42148245720485 | 117.57599210090306 | 112.96090399143556 | 111.80639434773734 | 110.6533599367018 |
| 25 | 117.12329605763098 | 118.63653493872498 | 119.98867223356798 | 121.50191111466198 | 115.77115876278798 | 114.25791988169398 | 112.90578258685098 |
| 26 | 119.6553939855807 | 121.66174680819312 | 123.38681497789469 | 125.3931678005071 | 117.93032581587913 | 115.92397299326672 | 114.19890482356514 |
| 27 | 121.54740034135453 | 123.70041219687434 | 125.52082462600127 | 127.67383648152108 | 119.7269879122276 | 117.57397605670779 | 115.75356362758086 |
| 28 | 122.68295119326267 | 124.59033212543261 | 126.19523079711914 | 128.1026117292891 | 121.07805252157614 | 119.1706715894062 | 117.56577291771967 |
| 29 | 123.0005912206809 | 124.42241634012424 | 125.64593457179761 | 127.06775969124095 | 121.77707298900754 | 120.3552478695642 | 119.13172963789083 |
| 30 | 122.50041000814686 | 123.9325499636528 | 125.31911084642282 | 126.75125080192876 | 121.11384912537684 | 119.6817091698709 | 118.29514828710089 |
| 31 | 121.2480003897514 | 122.86269168159892 | 124.595691062376 | 126.21038235422353 | 119.51500100897431 | 117.90030971712679 | 116.1673103363497 |
| 32 | 119.37441415670385 | 121.04597128025816 | 122.97075770809873 | 124.64231483165304 | 117.44962772886328 | 115.77807060530897 | 113.8532841774684 |
| 33 | 117.0706953893436 | 118.54037286928043 | 120.33620150349023 | 121.80587898342706 | 115.2748667551338 | 113.80518927519697 | 112.00936064098717 |
| 34 | 114.57595201454465 | 116.09394968287982 | 117.93116717798947 | 119.44916484632463 | 112.73873451943501 | 111.22073685109984 | 109.3835193559902 |
| 35 | 112.1587734147477 | 113.84049945115845 | 115.7563578400701 | 117.43808387648085 | 110.24291502583606 | 108.5611889894253 | 106.64533060051366 |
| 36 | 110.09297423674845 | 111.67059457230425 | 113.33993602054392 | 114.91755635609972 | 108.42363278850878 | 106.84601245295298 | 105.17667100471331 |
| 37 | 108.62989574587948 | 110.07186781961968 | 111.44069323895606 | 112.88266531269626 | 107.2610703265431 | 105.8190982528029 | 104.45027283346653 |
| 38 | 107.97053212992039 | 109.44434730501251 | 110.69805691068996 | 112.17187208578208 | 106.71682252424294 | 105.24300734915082 | 103.98929774347337 |
| 39 | 108.24129915337737 | 110.214731416669 | 111.87498871537785 | 113.84842097866948 | 106.58104185466851 | 104.60760959137689 | 102.94735229266803 |
| 40 | 109.47714653729103 | 111.63360533635442 | 113.46049592935555 | 115.61695472841893 | 107.65025594428991 | 105.49379714522652 | 103.6669065522254 |
| 41 | 111.61489250420503 | 113.55909976771203 | 115.23803537461436 | 117.18224263812135 | 109.9359568973027 | 107.9917496337957 | 106.31281402689338 |
| 42 | 114.49824346605784 | 115.90575106808735 | 117.17723131617909 | 118.5847389182086 | 113.22676321796611 | 111.8192556159366 | 110.54777536784486 |
| 43 | 117.8942032754348 | 119.12718823914791 | 120.3866943919539 | 121.619679355667 | 116.63469712262882 | 115.40171215891571 | 114.14220600610973 |
| 44 | 121.51880689228612 | 123.15266061646597 | 124.96909076072058 | 126.60294448490042 | 119.70237674803151 | 118.06852302385167 | 116.25209287959706 |
| 45 | 125.06867496722403 | 126.84645360913802 | 128.91816282689916 | 130.69594146881315 | 122.9969657494629 | 121.2191871075489 | 119.14747788978778 |
| 46 | 128.2540554225371 | 129.87623322022483 | 131.83173129337746 | 133.4539090910652 | 126.29855734938448 | 124.67637955169674 | 122.72088147854411 |
| 47 | 130.82894581221407 | 132.1620345867578 | 133.78622490799935 | 135.1193136825431 | 129.20475549097253 | 127.87166671642879 | 126.24747639518725 |
| 48 | 132.61456770121885 | 134.14526343658682 | 135.85357017873258 | 137.38426591410055 | 130.90626095907308 | 129.3755652237051 | 127.66725848155934 |
| 49 | 133.51372898547731 | 135.03248504785287 | 136.57187620822657 | 138.09063227060213 | 131.97433782510362 | 130.45558176272806 | 128.91619060235436 |
| 50 | 133.51518476304713 | 135.20685389520168 | 136.75713002491054 | 138.44879915706508 | 131.96490863333827 | 130.27323950118372 | 128.72296337147486 |
| 51 | 132.68866514679192 | 134.35361264248874 | 135.7497569735482 | 137.414704469245 | 131.29252081573247 | 129.62757332003565 | 128.2314289889762 |
| 52 | 131.17247746428333 | 133.04737067360705 | 134.59186294564296 | 136.46675615496667 | 129.62798519224742 | 127.7530919829237 | 126.2085997108878 |
| 53 | 129.1563006939515 | 131.23334410457753 | 132.99928247784894 | 135.07632588847497 | 127.39036232068008 | 125.31331891005405 | 123.54738053678264 |
| 54 | 126.86189674888487 | 128.77483640934082 | 130.47213629568728 | 132.38507595614323 | 125.16459686253845 | 123.25165720208248 | 121.55435731573606 |
| 55 | 124.52403581279573 | 125.94074717134566 | 127.29008015643319 | 128.70679151498314 | 123.1747028277082 | 121.75799146915827 | 120.40865848407074 |
| 56 | 122.37315973892662 | 123.52089789033414 | 124.76601564465295 | 125.91375379606048 | 121.1280419846078 | 119.98030383320028 | 118.73518607888147 |
| 57 | 120.62044223256866 | 122.21772518521438 | 124.05330379411997 | 125.65058674676568 | 118.78486362366307 | 117.18758067101736 | 115.35200206211177 |
| 58 | 119.44519828628948 | 121.26484561784791 | 123.40536157151085 | 125.22500890306928 | 117.30468233262654 | 115.48503500106811 | 113.34451904740517 |
| 59 | 118.98423170775713 | 120.71310016816417 | 122.76685038714477 | 124.49571884755181 | 116.93048148877654 | 115.2016130283695 | 113.1478628093889 |
| 60 | 119.32275870519 | 120.69130465096077 | 122.3092031066279 | 123.67774905239868 | 117.70486024952287 | 116.33631430375209 | 114.71841584808496 |
| 61 | 120.48694857241185 | 121.8213800081607 | 123.26858451423321 | 124.60301594998207 | 119.03974406633934 | 117.70531263059048 | 116.25810812451797 |
| 62 | 122.4387103823207 | 123.99980545620357 | 125.50948338012392 | 127.07057845400679 | 120.92903245840036 | 119.36793738451749 | 117.85825946059714 |
| 63 | 125.07389544503057 | 126.95926874241083 | 128.64162338108895 | 130.52699667846917 | 123.39154080635247 | 121.50616750897221 | 119.8238128702941 |
| 64 | 128.2253492633656 | 130.11014948668213 | 131.69003559073047 | 133.574835814047 | 126.64546315931725 | 124.76066293600071 | 123.18077683195237 |
| 65 | 131.67207090888238 | 133.39509847866734 | 134.7859700792666 | 136.50899764905157 | 130.2811993082831 | 128.55817173849815 | 127.16730013789888 |
| 66 | 135.15507483469676 | 137.07601211039753 | 138.71887493259612 | 140.6398122082969 | 133.51221201249817 | 131.5912747367974 | 129.9484119145988 |
| 67 | 138.3994880837803 | 140.21060474681758 | 141.86581079643918 | 143.67692745947645 | 136.74428203415872 | 134.93316537112145 | 133.27795932149985 |
| 68 | 141.1411629574787 | 142.5445645982477 | 143.95239182142438 | 145.35579346219336 | 139.73333573430202 | 138.32993409353304 | 136.92210687035634 |
| 69 | 143.154923777789 | 144.4296140251956 | 145.8679825139123 | 147.1426727613189 | 141.71655528907232 | 140.44186504166572 | 139.00349655294903 |
| 70 | 144.28078575968826 | 145.7928052451957 | 147.58768148896465 | 149.09970097447209 | 142.4859095159193 | 140.97389003041187 | 139.1790137866429 |
| 71 | 144.44430932083742 | 146.23865004585184 | 148.3657728466825 | 150.1601135716969 | 142.31718652000677 | 140.52284579499235 | 138.3957229941617 |
| 72 | 143.66778712039107 | 145.44589418180132 | 147.52523197824206 | 149.30333903965231 | 141.58844932395033 | 139.81034226254008 | 137.73100446609934 |
| 73 | 142.07015356602253 | 143.5339927864094 | 145.1937596113164 | 146.6575988317033 | 140.41038674111553 | 138.94654752072864 | 137.28678069582165 |
| 74 | 139.85515947975856 | 140.9648701567905 | 142.11723539703158 | 143.22694607406353 | 138.7027942395175 | 137.59308356248553 | 136.44071832224446 |
| 75 | 137.28916235919314 | 138.9017722702047 | 140.3933203784109 | 142.00593028942245 | 135.79761425098695 | 134.1850043399754 | 132.6934562317692 |
| 76 | 134.6714977766173 | 136.6814448097882 | 138.43625382564397 | 140.44620085881488 | 132.9166887607615 | 130.9067417275906 | 129.15193271173482 |
| 77 | 132.3015073284582 | 134.34885503582368 | 136.06945519625245 | 138.11680290361792 | 130.58090716802943 | 128.53355946066395 | 126.81295930023518 |
| 78 | 130.44669455820846 | 132.18620951110796 | 133.60736658265836 | 135.34688153555786 | 129.02553748665807 | 127.28602253375857 | 125.86486546220817 |
| 79 | 129.31610321851522 | 131.01675172361394 | 132.4853771254247 | 134.1860256305234 | 127.8474778167045 | 126.14682931160577 | 124.67820390979504 |
| 80 | 129.04196344134022 | 130.68445142548555 | 132.23805843217755 | 133.8805464163229 | 127.48835643464821 | 125.84586845050288 | 124.29226144381087 |
| 81 | 129.6711671025228 | 131.2214712608763 | 132.8477977307242 | 134.39810188907774 | 128.0448406326749 | 126.49453647432136 | 124.86821000447347 |