← Experiments

Turbulence Index — labelled search vs blogpost (qm-pft.1)

Rejected qm-pft.1 ·

Decision

No blog-fidelity accept for qm-pft.1 (search complete). Catalog registration of a labelled proxy is handled separately in qm-pft.3 as turbulence-index-proxy (search baseline defaults) — still not a Sharpe~2.20 claim. Frozen rejected t352–t356 (OriginalTurbulenceIndex) remains unpublished.

Equity vs S&P (aligned, rebased to 1.0)

No signal overlay for this experiment (parameter sweep / search)

Aligned window, both rebased to 1.0 at start — Aligned window, both rebased to 1.0 at start for fair comparison · S&P dashed, experiment solid. X = Date, Y = Equity (rebased to 1.0).

Signal driver & thresholds (x-aligned)

Stats

CAGR3.06%Sharpe60.13%
Sortino87.69%maxDD-19.22%

Disposition

**No blog-fidelity accept** for qm-pft.1 (search complete). Catalog registration of a *labelled proxy* is handled separately in **qm-pft.3** as `turbulence-index-proxy` (search baseline defaults) — still not a Sharpe~2.20 claim. Frozen rejected t352–t356 (`OriginalTurbulenceIndex`) remains unpublished. A reproducible 31-trial experiment matrix around `backtest/turbulence.py::LabelledTurbulenceSearch` was scored against the Portfolio Optimizer article’s rounded April 2009–March 2022 summary stats (~50% average SPY exposure, Sharpe ~2.20, maximum **weekly** drawdown ~6%). No labelled variant recovers those headlines on ETF proxies. Best-by-distance (`broader_zero_fee_quintiles_L52`) reaches we

Follow-on work

Errors & data gaps

No additional vendor or coverage gaps beyond frozen panel window; see finding for panel dates and synthetic reconstruction limits.

Follow-up

gh issue create --title "Follow-up Turbulence Index  labelled search vs blogpost qm-pft1" --body "Follow-up to qm-pft.1:  Decision" --label "priority:p2" --label "pipeline:research" --label "agent:ready"
# deep-link