Objective
Audit the prior SMA50(raw NH-NL) < 0 experiment against the authoritative Pine default—INDEX:MAHX - INDEX:MALX, ta.cum, inclusive SMA50/population-stdev50, and strict z < 0—over the maximal native input span. Quantify signal-date and equity differences, preserve the negative economics without retuning, and republish the corrected result through the qm-kdnj experiment-as-strategy page contract with real metrics and charts.
Approach
- Froze the Pine rule, 50-bar availability gate, native daily calendar, population standard deviation, strict threshold, and next-close/10 bps execution contract.
- Built a deterministic offline audit from pinned MAHX/MALX, HIGN/LOWN, and SPY data. The same-input comparator isolates formula drift; the actual-legacy comparator also captures the prior input-family change.
- Separated indicator meaning from the tradable overlay by measuring forward SPY returns/drawdowns, causal SPY/cash performance, lag, subperiods, adjacent windows/thresholds, index alternatives, circular-shift falsification, and inversion.
- Projected the frozen audit into
research-experiment/v1, including real monthly engine equity, real monthly cumulative-z/state data, exact daily transitions, research narrative, date/performance/robustness tables, provenance, limitations, and the reject disposition. - Extended the experiment publisher/detail renderer to accept explicitly sourced real signal series and heterogeneous table/narrative supplements while retaining the existing fallback for older manifests.
Files changed
research/scripts/audit_cumu_nhnl_z50.py— deterministic maximal-span audit producer.research/findings/cumu-nhnl-z50-qm-kdnj.4.jsonand.md— machine-readable evidence and plain-English audit report.research/scripts/publish_cumu_nhnl_z50_experiment.pyandresearch/experiments/qm-kdnj.4.json— deterministic experiment manifest producer and frozen manifest.research/reports/experiments.pyandresearch/reports/scaffold.py— real manifest signal-series binding plus table/narrative/generic-exit rendering.docs/site-data/experiments/qm-kdnj.4.json,docs/experiments/qm-kdnj.4.html,docs/site-data/experiments/index.json, anddocs/experiments.html— generated public payload, detail page, and discovery surfaces.tests/test_nhnl_breadth.py,tests/test_experiments_payload.py, andtests/test_experiments_browser.py— unavailable-input, evidence-binding, and browser-visible workflow coverage.research/findings/README.md,docs/.shared-artifact-manifest.json, and this result note — durable discovery and generated-artifact ownership.
Validation
python3 -m pytest -q tests/test_nhnl_breadth.py tests/test_engine.py tests/test_datastore.py— 78 passed; two pre-existing timestamp deprecation warnings.- Focused experiment payload and browser scenarios — 2 passed; verified 257 real points, 56 markers, source provenance, 7.44%/13.27% tables, strategy comparison, robustness narrative, thresholds, triggers, and generic-exit disposition.
- Audit and manifest regeneration preserved SHA-256 hashes
1928ce5a…andc9054366…. strategy_experimentartifact contract — passed all four required paths, required commands, reject disposition, index discovery, evidence ownership, and no-catalog-admission rules.python3 -m research.artifacts check --mode full --offline— deterministic shared artifacts current after rebuild.python3 research/scripts/check_static_reports.py docs— local bundle OK: 1,237 files; 182 canary routes.python3 -m research.pipeline validateandpython3 -m research.pipeline verify --offline— 28 nodes/38 edges and all route/guard fixtures passed.- The full isolated repository run completed with 1,687 passing tests; its unrelated baseline failures include four experiment-suite failures reproduced unchanged on detached
origin/main, plus missing Firefox/WebKit binaries. No qm-kdnj.4-focused scenario failed.
Results
The corrected native indicator is finite on 5,391 dates from 2005-03-15 through 2026-08-17, risk-off on 1,812 dates (33.61%), and has 28 entries/exits. It disagrees with the same-input raw-SMA rule on 401 dates (7.44%) and with the actual HIGN/LOWN legacy on 711 of 5,359 common dates (13.27%). Corrected risk-off states precede deeper mean SPY drawdowns at 21 days (-3.79% versus -2.02%) and 63 days (-6.89% versus -3.70%), and falsification confirms non-random defensive timing.
The causal corrected SPY/cash overlay nevertheless earns 7.11% CAGR, 0.710 Sharpe, 0.717 Sortino, -17.89% max drawdown, and 4.334 terminal equity. It trails the same-input prior (7.76% CAGR, 4.937 equity), actual legacy (8.68%, 5.915), and SPY buy-and-hold (10.90%, 9.110), while its drawdown is also worse than the closest same-input prior. The exact Pine result is therefore published as rejected without threshold, lookback, or index-family retuning; no risk-indicator registry or strategy catalog entry is added. The generic-opposite exit harness is not applicable because this is already a persistent two-state buy/sell regime.