{
  "experiment": {
    "alloc": {
      "labels": [
        "1996-04",
        "2026-08"
      ],
      "series": [
        {
          "name": "SPY",
          "values": [
            0.6,
            0.6
          ]
        },
        {
          "name": "CASH",
          "values": [
            0.4,
            0.4
          ]
        }
      ]
    },
    "alloc_as": null,
    "alloc_monthly_as": null,
    "alloc_monthly_ours": {
      "labels": [
        "1996-04",
        "2026-08"
      ],
      "series": [
        {
          "name": "SPY",
          "values": [
            0.6,
            0.6
          ]
        },
        {
          "name": "CASH",
          "values": [
            0.4,
            0.4
          ]
        }
      ]
    },
    "alloc_ours": {
      "labels": [
        "1996-04",
        "2026-08"
      ],
      "series": [
        {
          "name": "SPY",
          "values": [
            0.6,
            0.6
          ]
        },
        {
          "name": "CASH",
          "values": [
            0.4,
            0.4
          ]
        }
      ]
    },
    "alloc_yearly_as": null,
    "alloc_yearly_ours": {
      "labels": [
        "1996"
      ],
      "series": [
        {
          "name": "SPY",
          "values": [
            0.6
          ]
        },
        {
          "name": "CASH",
          "values": [
            0.4
          ]
        }
      ]
    },
    "analysis_page": null,
    "answer": "Pine semantics frozen and tick-for-tick correct (strict >22 daily raw ratio, 0 mismatches vs prior qm-4bx.17/22: both 24 triggers 259 active hw20 on 1996-04-19→2026-08-11 7616 ratios; sum5 max 5.08 never hits 22, MA 3/5/10/20 collapse to 0, evaluator vs direct delta 0, pinned 15-row fixture with DVOL-zero/22-edge/sum5 cases passes). Re-audit on maximal native span shows no date drift — prior already Pine-correct. Signal is sparse buy-only (0.8/yr, 3.4% native, 2.97% unified 8709), not a persistent regime. Walk-forward both halves +25% (1996-2016 9 trig 1.93→2.43, 2016-2026 15 trig 4.34→5.46), falsification passes (random 10 trig 7.94 < true 13.39, inverted 48 trig 9.67 < true), extra lag not destructive (+8.3% 14.50 vs 13.39). Generic-exit harness (one-way buy) reports head-to-head generic-only vs signal+generic on same window/costs/lag: SMA200 8.11→13.39 +65% Sharpe 0.63→0.73, SMA50 9.02→12.85 +42%, 50/200 cross 7.85→11.02 +40%, 10% trailing-stop 9.45→13.10 +38%, B&H 19.28→19.28 0% (already max long). Brittleness retained: threshold 15 best 13.42 vs 22 13.39 vs 30 9.27 vs 40 8.34, holding monotonic 60d 18.62 >20d 13.39, consensus 0, COVID 0%, 2022 +0.13%. Synthetic pre-1996 NO-GO. Economics exist vs defensive but brittle; do not promote to strategy catalog/Meta, retain as risk-signals/v1 sparse signal.",
    "bead_ids": [
      "qm-kdnj.2"
    ],
    "cost_variants": {},
    "coverage": {
      "alloc_monthly_labels_n": 12,
      "alloc_yearly_labels_n": 0,
      "as_alloc_rows": 0,
      "as_history_start_year": null,
      "as_returns_n": 0,
      "as_yearly_alloc_rows": 0,
      "coverage_generated_at": "2026-08-11T00:00:00Z",
      "db_path": "data/market.sqlite",
      "db_warm": true,
      "gap_years": null,
      "limiting": {
        "effective_start": "2001-06-05",
        "id": "INDEX:HIGN",
        "kind": "ohlcv",
        "native_start": "2001-06-05",
        "proxied": false,
        "proxy_chain": [],
        "span_basis": "db"
      },
      "macro_meta": [],
      "macros": [],
      "monthly_labels_n": 2,
      "ours_alloc_rows": 2,
      "ours_returns_n": 2,
      "ticker_meta": [
        {
          "end": "2026-08-11",
          "n_rows": 6331,
          "start": "2001-06-05",
          "ticker": "INDEX:HIGN"
        },
        {
          "end": "2026-08-11",
          "n_rows": 6312,
          "start": "2001-06-05",
          "ticker": "INDEX:LOWN"
        },
        {
          "end": "2026-08-17",
          "n_rows": 5440,
          "start": "2005-01-03",
          "ticker": "INDEX:MAHX"
        },
        {
          "end": "2026-08-17",
          "n_rows": 5440,
          "start": "2005-01-03",
          "ticker": "INDEX:MALX"
        },
        {
          "end": "2026-07-24",
          "n_rows": 8428,
          "start": "1993-01-29",
          "ticker": "SPY"
        }
      ],
      "tickers": [
        "INDEX:HIGN",
        "INDEX:LOWN",
        "INDEX:MAHX",
        "INDEX:MALX",
        "SPY"
      ]
    },
    "date": "2026-08-18",
    "disposition": "Rejected for risk-off-indicators/v1 and strategy promotion — fidelity verified (pinned fixture + 0 date mismatches) but brittle/optimization risk and sparse power; publish as qm-kdnj experiment with frozen Pine semantics, parity metrics, and generic-exit harness. Retain as risk-signals/v1 SHIP as signal (buy-signals-v1.json adl-vol-ratio, signals/history.json, docs/signals.html).",
    "equity": {
      "experiment": [
        1.0,
        13.39
      ],
      "labels": [
        "1996-04-19",
        "2026-08-11"
      ],
      "spy": [
        1.0,
        19.28
      ],
      "spy_labels": [
        "1996-04-19",
        "2026-08-11"
      ]
    },
    "errors": "Native UVOL starts 1996-04-19; pre-1996 insufficient_history without licensed NYSE constituent share volume — no synthetic invented; __SYNTH_ADLVOL_RATIO__ NO-GO; daily/monthly correlation N/A Threshold 22 is within but not alone best (15 at 13.42 narrowly beats); 30/40 materially worse — high-threshold brittle; sum5 at 22 impossible (max 5.08) and MA smoothing at 22 collapses to 0 — document brittle and freeze daily raw Holding window monotonic 60d 18.62 dominates 20d 13.39 — optimization risk; 20 frozen per best-practice not 60; decay/retrigger boolean identical to fixed for sparse Consensus overlay 0 vs SMA200 (needs base bullish); additive +29% smaller — override/suppress only add value; B&H zero marginal already max long Recent crisis benefit small (COVID 0% no trigger, 2022 +0.13%) — episodic not recent dominant; DB ends 2026-08-11 ~1 week stale as of 2026-08-18; offline replay on committed snapshot passes, live update via fetch_tradingview_history+upsert_ohlcv when needed DB 104,275,968 bytes near 95 MB soft limit but under 100 MB hard; sidecar data/sim_daily.sqlite not used for ADL per qm-zl9.1; close-only store Volume=0 cannot rebuild pre-1996 Signal is sparse (24 triggers, 0.8/yr) limited power despite 30y span; ensemble 8/12/15 voting could reduce brittleness but not blended",
    "follow_on": [
      {
        "status": "deferred",
        "title": "No explicit follow-on; file new issue if needed"
      }
    ],
    "followup_command": "gh issue create --title \"Follow-up ADL Vol Ratio Pine UVOLDVOL 22 fidelity re-audit\" --body \"Follow-up to qm-kdnj.2: Does the Pine-verbatim ADL Volume Ratio daily UVOL/DVOL >22 (request.security D \" --label \"priority:p2\" --label \"pipeline:research\" --label \"agent:ready\"",
    "gh_command": "gh issue create --title \"Follow-up ADL Vol Ratio Pine UVOLDVOL 22 fidelity re-audit\" --body \"Follow-up to qm-kdnj.2: Does the Pine-verbatim ADL Volume Ratio daily UVOL/DVOL >22 (request.security D \" --label \"priority:p2\" --label \"pipeline:research\" --label \"agent:ready\"",
    "id": "qm-kdnj.2",
    "issue_ids": [
      "qm-kdnj.2"
    ],
    "monthly": {
      "as": [
        null,
        null
      ],
      "labels": [
        "1996-04",
        "2026-08"
      ],
      "ours": [
        0.0,
        12.39
      ]
    },
    "page": "experiments/qm-kdnj.2.html",
    "performance": {
      "cagr": 0.0,
      "max_drawdown": 0.0,
      "max_drawdown_fallback_rule": "Use daily backtest equity when available; otherwise compound published monthly returns and label the result monthly.",
      "max_drawdown_observation_frequency": "monthly",
      "sharpe": 0.0,
      "sortino": 0.0,
      "volatility": null
    },
    "provenance": {
      "artifact": "research/findings/adl-vol-ratio-buy-signal-qm-4bx.22.json",
      "code": "backtest/adl_vol_ratio.py",
      "finding": "research/findings/adl-vol-ratio-qm-4bx.17.md",
      "site_data": "site-data/experiments/qm-kdnj.2.json",
      "tearsheet": null
    },
    "question": "Does the Pine-verbatim ADL Volume Ratio daily UVOL/DVOL >22 (request.security D close, timeframe=5 unused) reproduce signal dates tick-for-tick and does the corrected signal predict capitulation (S&P 500 recovery beyond buy-and-hold or generic defensive) on maximal native span?",
    "safe_withdrawal": null,
    "signalSeries": {
      "active": [
        false,
        false
      ],
      "driver": "Signal driver",
      "entryValue": 0.0,
      "exitValue": 0.0,
      "inputs": [],
      "isDynamic": false,
      "isMulti": false,
      "labels": [
        "1996-04-19",
        "2026-08-11"
      ],
      "megaThreshold": null,
      "megaThresholdLabel": null,
      "threshold": 0.0,
      "thresholdKind": "fixed",
      "thresholdLabel": "Entry 0.0",
      "trigger": [
        false,
        false
      ],
      "triggers": [],
      "unit": "",
      "values": [
        -0.194,
        -0.173
      ],
      "yLabel": "Indicator value"
    },
    "signals": [],
    "slug": "qm-kdnj.2",
    "stats": {
      "adjacent": {
        "holding_5_7_63": true,
        "holding_60_18_62": true,
        "ma_others_0": 0,
        "ma_sma3_5_trig": 5,
        "sum5_22_0": 0,
        "thr12_76_826_11_16": true,
        "thr15_47_520_13_42": true,
        "thr22_24_259_13_39": true,
        "thr30_9_105_9_27": true,
        "thr40_4_53_8_34": true,
        "thr8_181_1696_10_19": true
      },
      "baseline": {
        "first_trigger": "2007-09-18",
        "last_trigger": "2025-04-09",
        "n_active_hw20": 259,
        "n_ratios": 7616,
        "n_triggers": 24,
        "pct_active_native": 0.034,
        "pct_active_unified_8709": 0.0297,
        "ratio_max": 70.2,
        "ratio_mean": 1.79,
        "ratio_std": 2.71,
        "sum5_max": 5.08,
        "triggers_per_year": 0.8
      },
      "cagr": 0.0,
      "data_alternatives": {
        "nasdaq_corr_0_69": true,
        "nasdaq_not_blended": true,
        "synthetic_rows": 0,
        "synthetic_status": "NO-GO"
      },
      "falsification": {
        "both_pass": true,
        "inverted_48_trig_9_67": -27,
        "randomized_10_trig_7_94": -40
      },
      "forward_or_lag": {
        "base_equity": 13.39,
        "extra_lag_shift1_equity": 14.5,
        "lag_not_destructive": true
      },
      "generic_exit_harness": {
        "bh_cagr_base": 0.10305474510795531,
        "bh_cagr_blend": 0.10305474510795531,
        "bh_delta_pct": 0.0,
        "bh_generic_only": 19.283264725909344,
        "bh_is_bh_only": true,
        "bh_maxDD_base": -0.5518943153747873,
        "bh_maxDD_blend": -0.5518943153747873,
        "bh_sharpe_base": 0.6056357697315928,
        "bh_sharpe_blend": 0.6056357697315928,
        "bh_signal_plus_generic": 19.283264725909344,
        "cross_50_200_generic_only": 15.428553291015573,
        "cross_cagr_base": 0.09493115837722921,
        "cross_cagr_blend": 0.11355147329759974,
        "cross_delta_cagr": 0.01862,
        "cross_delta_maxDD": 0.0,
        "cross_delta_pct": 66.32,
        "cross_delta_sharpe": 0.0966,
        "cross_maxDD_base": -0.3371726274233201,
        "cross_maxDD_blend": -0.33717262742332,
        "cross_sharpe_base": 0.7135112961828918,
        "cross_sharpe_blend": 0.8101227460489723,
        "cross_signal_plus_generic": 25.661338969039093,
        "native_span": "1996-04-19→2026-07-24 (7604 valid of 7616 total ratio 7616 UVOL 8643 DVOL)",
        "note": "ADL Volume Ratio buy impulse daily UVOL/DVOL >22 (request.security D close, timeframe=5 input unused vs D) blended with generic defensive via OR override (long if either generic long or ADL active hw20); BH blended near BH itself; deltas vs generic-only on same window/costs/lag BacktestConfig.allocatesmartly() next_close 10bps, offline tradingview UVOL/DVOL 7616/8643 rows",
        "sma200_cagr_base": 0.07932717295261726,
        "sma200_cagr_blend": 0.09741237492908006,
        "sma200_delta_cagr": 0.01809,
        "sma200_delta_maxDD": 0.0,
        "sma200_delta_pct": 65.09,
        "sma200_delta_sharpe": 0.0974,
        "sma200_generic_only": 10.005767475202488,
        "sma200_maxDD_base": -0.2942389275216515,
        "sma200_maxDD_blend": -0.2942389275216515,
        "sma200_sharpe_base": 0.6806232151715319,
        "sma200_sharpe_blend": 0.7780057723130238,
        "sma200_signal_plus_generic": 16.5190132864117,
        "sma50_cagr_base": 0.0350114731284803,
        "sma50_cagr_blend": 0.04225671955812582,
        "sma50_delta_cagr": 0.00725,
        "sma50_delta_maxDD": 0.02365,
        "sma50_delta_pct": 23.43,
        "sma50_delta_sharpe": 0.0445,
        "sma50_generic_only": 2.824262674474856,
        "sma50_maxDD_base": -0.4696664527284209,
        "sma50_maxDD_blend": -0.44601974491948293,
        "sma50_sharpe_base": 0.3624784991905695,
        "sma50_sharpe_blend": 0.4069632553889421,
        "sma50_signal_plus_generic": 3.4858462265770944,
        "trail_delta_pct": 50.7,
        "trailing_cagr_base": 0.060068781969004226,
        "trailing_cagr_blend": 0.07457721093790792,
        "trailing_delta_cagr": 0.01451,
        "trailing_delta_maxDD": 0.01336,
        "trailing_delta_sharpe": 0.0805,
        "trailing_maxDD_base": -0.39467053414139586,
        "trailing_maxDD_blend": -0.3813093596115186,
        "trailing_sharpe_base": 0.553455060211982,
        "trailing_sharpe_blend": 0.6339945125986701,
        "trailing_signal_plus_generic": 8.759090451758938,
        "trailing_stop_10pct_generic_only": 5.812249205186019,
        "trigger_active_stats": {
          "active_hw20_in_window": 259,
          "pct_active": 0.03406,
          "triggers_in_window": 24
        },
        "valid_bars": 7604,
        "window": "1996-04-19→2026-07-24 same window/costs/lag next_close +10bps"
      },
      "maxDD": 0.0,
      "overlay_vs_60_40": {
        "base": 11.85,
        "blend": 13.59,
        "delta_pct": 14.6
      },
      "prior_vs_corrected": {
        "evaluator_vs_direct_delta": 0,
        "mismatch_pct": 0.0,
        "mismatched": 0,
        "new_triggers": 24,
        "note": "prior qm-4bx.17/22 already Pine-correct (daily >22 strict); no drift",
        "overlap": 7616,
        "pine_fixture_pass": true,
        "prior_triggers": 24
      },
      "sharpe": 0.0,
      "sortino": 0.0,
      "subperiods": {
        "2007_gfc": 0.109,
        "2011": 0.078,
        "2022_bear": 0.0013,
        "covid_no_trigger": true,
        "post_2016_base": 4.34,
        "post_2016_blend": 5.46,
        "post_2016_triggers": 15,
        "pre_2016_base": 1.93,
        "pre_2016_blend": 2.43,
        "pre_2016_triggers": 9,
        "walk_forward_both_positive": true
      }
    },
    "status": "rejected",
    "status_chip": "Rejected",
    "supplemental": {
      "audit": "0 mismatches vs prior 24/259; evaluator _signal_adl_vol_ratio mirrors adl_vol_buy_signal tick-for-tick on unified SPY calendar; holding uses fixed calendar window; no off-by-one/lookahead/ffill/EMA-seed for this arithmetic ratio",
      "generic_exit_harness": {
        "bh_cagr_base": 0.10305474510795531,
        "bh_cagr_blend": 0.10305474510795531,
        "bh_delta_pct": 0.0,
        "bh_generic_only": 19.283264725909344,
        "bh_is_bh_only": true,
        "bh_maxDD_base": -0.5518943153747873,
        "bh_maxDD_blend": -0.5518943153747873,
        "bh_sharpe_base": 0.6056357697315928,
        "bh_sharpe_blend": 0.6056357697315928,
        "bh_signal_plus_generic": 19.283264725909344,
        "cross_50_200_generic_only": 15.428553291015573,
        "cross_cagr_base": 0.09493115837722921,
        "cross_cagr_blend": 0.11355147329759974,
        "cross_delta_cagr": 0.01862,
        "cross_delta_maxDD": 0.0,
        "cross_delta_pct": 66.32,
        "cross_delta_sharpe": 0.0966,
        "cross_maxDD_base": -0.3371726274233201,
        "cross_maxDD_blend": -0.33717262742332,
        "cross_sharpe_base": 0.7135112961828918,
        "cross_sharpe_blend": 0.8101227460489723,
        "cross_signal_plus_generic": 25.661338969039093,
        "native_span": "1996-04-19→2026-07-24 (7604 valid of 7616 total ratio 7616 UVOL 8643 DVOL)",
        "note": "ADL Volume Ratio buy impulse daily UVOL/DVOL >22 (request.security D close, timeframe=5 input unused vs D) blended with generic defensive via OR override (long if either generic long or ADL active hw20); BH blended near BH itself; deltas vs generic-only on same window/costs/lag BacktestConfig.allocatesmartly() next_close 10bps, offline tradingview UVOL/DVOL 7616/8643 rows",
        "sma200_cagr_base": 0.07932717295261726,
        "sma200_cagr_blend": 0.09741237492908006,
        "sma200_delta_cagr": 0.01809,
        "sma200_delta_maxDD": 0.0,
        "sma200_delta_pct": 65.09,
        "sma200_delta_sharpe": 0.0974,
        "sma200_generic_only": 10.005767475202488,
        "sma200_maxDD_base": -0.2942389275216515,
        "sma200_maxDD_blend": -0.2942389275216515,
        "sma200_sharpe_base": 0.6806232151715319,
        "sma200_sharpe_blend": 0.7780057723130238,
        "sma200_signal_plus_generic": 16.5190132864117,
        "sma50_cagr_base": 0.0350114731284803,
        "sma50_cagr_blend": 0.04225671955812582,
        "sma50_delta_cagr": 0.00725,
        "sma50_delta_maxDD": 0.02365,
        "sma50_delta_pct": 23.43,
        "sma50_delta_sharpe": 0.0445,
        "sma50_generic_only": 2.824262674474856,
        "sma50_maxDD_base": -0.4696664527284209,
        "sma50_maxDD_blend": -0.44601974491948293,
        "sma50_sharpe_base": 0.3624784991905695,
        "sma50_sharpe_blend": 0.4069632553889421,
        "sma50_signal_plus_generic": 3.4858462265770944,
        "trail_delta_pct": 50.7,
        "trailing_cagr_base": 0.060068781969004226,
        "trailing_cagr_blend": 0.07457721093790792,
        "trailing_delta_cagr": 0.01451,
        "trailing_delta_maxDD": 0.01336,
        "trailing_delta_sharpe": 0.0805,
        "trailing_maxDD_base": -0.39467053414139586,
        "trailing_maxDD_blend": -0.3813093596115186,
        "trailing_sharpe_base": 0.553455060211982,
        "trailing_sharpe_blend": 0.6339945125986701,
        "trailing_signal_plus_generic": 8.759090451758938,
        "trailing_stop_10pct_generic_only": 5.812249205186019,
        "trigger_active_stats": {
          "active_hw20_in_window": 259,
          "pct_active": 0.03406,
          "triggers_in_window": 24
        },
        "valid_bars": 7604,
        "window": "1996-04-19→2026-07-24 same window/costs/lag next_close +10bps"
      },
      "generic_exit_harness_detail": "ADL Volume Ratio buy-only impulse Pine request.security USI:UVOL/USI:DVOL D close ratio >22 strict level hw20 fixed, blended with generic defensive via OR override (long if either generic long or ADL active) — each head-to-head generic-only vs signal+generic on same window/costs/lag via BacktestConfig.allocatesmartly() next_close 10bps; deltas SMA200 65.09% (CAGR +1.81% Sharpe +0.10), SMA50 23.43%, cross 66.32%, trailing 50.7%, BH 0.0% — window 1996-04-19→2026-07-24 same window/costs/lag next_close +10bps L20 UVOL/DVOL 7616/8643 tradingview close_only",
      "generic_exit_harness_rows": [
        {
          "base_cagr": 0.0350114731284803,
          "base_equity": 2.824262674474856,
          "base_maxDD": -0.4696664527284209,
          "base_sharpe": 0.3624784991905695,
          "blend_cagr": 0.04225671955812582,
          "blend_equity": 3.4858462265770944,
          "blend_maxDD": -0.44601974491948293,
          "blend_sharpe": 0.4069632553889421,
          "delta_cagr": 0.00725,
          "delta_maxDD": 0.02365,
          "delta_pct": 23.43,
          "delta_sharpe": 0.0445,
          "generic": "sma50"
        },
        {
          "base_cagr": 0.07932717295261726,
          "base_equity": 10.005767475202488,
          "base_maxDD": -0.2942389275216515,
          "base_sharpe": 0.6806232151715319,
          "blend_cagr": 0.09741237492908006,
          "blend_equity": 16.5190132864117,
          "blend_maxDD": -0.2942389275216515,
          "blend_sharpe": 0.7780057723130238,
          "delta_cagr": 0.01809,
          "delta_maxDD": 0.0,
          "delta_pct": 65.09,
          "delta_sharpe": 0.0974,
          "generic": "sma200"
        },
        {
          "base_cagr": 0.09493115837722921,
          "base_equity": 15.428553291015573,
          "base_maxDD": -0.3371726274233201,
          "base_sharpe": 0.7135112961828918,
          "blend_cagr": 0.11355147329759974,
          "blend_equity": 25.661338969039093,
          "blend_maxDD": -0.33717262742332,
          "blend_sharpe": 0.8101227460489723,
          "delta_cagr": 0.01862,
          "delta_maxDD": 0.0,
          "delta_pct": 66.32,
          "delta_sharpe": 0.0966,
          "generic": "cross_50_200"
        },
        {
          "base_cagr": 0.060068781969004226,
          "base_equity": 5.812249205186019,
          "base_maxDD": -0.39467053414139586,
          "base_sharpe": 0.553455060211982,
          "blend_cagr": 0.07457721093790792,
          "blend_equity": 8.759090451758938,
          "blend_maxDD": -0.3813093596115186,
          "blend_sharpe": 0.6339945125986701,
          "delta_cagr": 0.01451,
          "delta_maxDD": 0.01336,
          "delta_pct": 50.7,
          "delta_sharpe": 0.0805,
          "generic": "trailing_10pct"
        },
        {
          "base_cagr": 0.10305474510795531,
          "base_equity": 19.283264725909344,
          "base_maxDD": -0.5518943153747873,
          "base_sharpe": 0.6056357697315928,
          "blend_cagr": 0.10305474510795531,
          "blend_equity": 19.283264725909344,
          "blend_maxDD": -0.5518943153747873,
          "blend_sharpe": 0.6056357697315928,
          "delta_cagr": 0.0,
          "delta_maxDD": 0.0,
          "delta_pct": 0.0,
          "delta_sharpe": 0.0,
          "generic": "bh"
        }
      ],
      "pine_verbatim": "upvol_sym=input.symbol(defval=\"USI:UVOL\",title=\"Up Volume\"); dowvol_sym=input.symbol(defval=\"USI:DVOL\",title=\"Down Volume\"); timeframe=input.int(title=\"ADL Vol Timeframe\",defval=5); ratiothold=input.float(22,minval=1,title=\"ADL Vol Ratio Threshold\"); upvol=request.security(upvol_sym,timeframe=\"D\",expression=close); downvol=request.security(dowvol_sym,timeframe=\"D\",expression=close); upratio=upvol/downvol; adl_vol_buy_signal=upratio > ratiothold",
      "pinned_fixture": "research/fixtures/adl-vol-ratio-pine-fixture.csv 15 rows hand-computed close division strict >22 plus DVOL-zero/22-edge/sum5 cases, test test_adl_pine_fixture_tick_for_tick passes",
      "provenance_hashes": "instruments USI:UVOL 7616 1996-04-19→2026-08-11 TV WS, USI:DVOL 8643 1992-01-02→2026-08-11 TV WS, ratio 7616; provenance via backtest.adl_vol_ratio.provenance_record() and input_provenance metadata_only",
      "request_security_semantics": "request.security(symbol,\"D\",close) daily close, dividend/split-unadjusted, calendar tradingview daily UTC-normalized, frequency D, field close",
      "research_narrative": [
        {
          "heading": "Generic exit harness",
          "text": "ADL Volume Ratio buy-only impulse Pine request.security USI:UVOL/USI:DVOL D close ratio >22 strict level hw20 fixed, blended with generic defensive via OR override (long if either generic long or ADL active) — each head-to-head generic-only vs signal+generic on same window/costs/lag via BacktestConfig.allocatesmartly() next_close 10bps; deltas SMA200 65.09% (CAGR +1.81% Sharpe +0.10), SMA50 23.43%, cross 66.32%, trailing 50.7%, BH 0.0% — window 1996-04-19→2026-07-24 same window/costs/lag next_close +10bps L20 UVOL/DVOL 7616/8643 tradingview close_only"
        }
      ],
      "timeframe_ambiguity": "timeframe=5 input not wired to request.security D in verbatim — daily >22 frozen primary, 5-day sum ratio sum(UVOL,5)/sum(DVOL,5) documented alternative not primary (max 5.08 never hits 22)"
    },
    "tax_analysis": {
      "ltcg_pct": null,
      "note": "Experiment parity stub: no taxable wrapper; see strategy tax_analysis for methodology",
      "schema_id": "tax-analysis/v1",
      "stcg_pct": null
    },
    "taxable_stats": null,
    "title": "ADL Vol Ratio Pine UVOL/DVOL >22 fidelity re-audit",
    "trading_costs": {
      "avg_daily_turnover": 0.00794,
      "avg_yearly_fees": 0.002001,
      "basis": "monthly_proxy",
      "cost_bps_one_way": 10.0,
      "fee_bps": 10.0,
      "n_bars": 2,
      "schema_id": "trading-costs/v1",
      "slippage_bps": 0.0,
      "total_costs": 1.6e-05
    },
    "verify": {
      "as_cagr": null,
      "as_stats": null,
      "cagr_delta": null,
      "gates": null,
      "last_verify_at": null,
      "monthly_bias": null,
      "monthly_corr": null,
      "monthly_mae": null,
      "n_months": null,
      "ours_cagr": 0.0,
      "ours_stats": {
        "ann_return": 0.0,
        "sharpe": 0.0,
        "sortino": 0.0
      },
      "passed": null,
      "status": "not_applicable",
      "verify_status": null
    },
    "visualizations": [
      {
        "data": {
          "labels": [
            "1996-04-19",
            "2026-08-11"
          ],
          "note": "Aligned window, both rebased to 1.0 at start for fair comparison"
        },
        "title": "Equity vs S&P (aligned, rebased to 1.0)",
        "type": "equity_vs_spy"
      },
      {
        "data": {
          "note": "Triggers when overlay takes over base strategy"
        },
        "title": "Signal timeline (sparse triggers)",
        "type": "signal_timeline"
      }
    ]
  },
  "generated_at": "2026-09-17T04:12:25Z",
  "id": "qm-kdnj.2",
  "schema_id": "experiments/v1",
  "schema_version": 1
}
