RecessionAlert Bear Market High-Risk Alert — Issue 1359¶
This notebook is an exploratory, public-proxy campaign. The source discloses CMHI Diffusion-zero cash advice after 3 of 7 bearish paw prints, but no native series, release lag, or BUY/re-entry map.
In [1]:
from pathlib import Path
import sys
ROOT = Path.cwd()
if not (ROOT / "research").is_dir():
ROOT = Path("../..").resolve()
sys.path.insert(0, str(ROOT))
from research.research_campaign.recessionalert_1359 import load_proxy_panel, default_variants, evaluate_variant
panel = load_proxy_panel(db_path=ROOT / "data" / "market.sqlite")
print({"rows": len(panel), "start": str(panel.index.min().date()), "end": str(panel.index.max().date())})
Causal protocol¶
Month-end latest-available observations are evaluated with one or two available-bar lags. Lag zero is retained only as a lookahead control. Unknown values stay unavailable; IEF/BIL are inferred defensive sleeves.
In [2]:
rows = []
for variant in default_variants():
result = evaluate_variant(panel, **{key: variant[key] for key in ("family", "lookback_months", "threshold", "lag_bars")})
returns = result["portfolio_returns"].dropna()
curve = (1.0 + returns).cumprod()
rows.append({"id": variant["id"], "lag": variant["lag_bars"], "risk_off_months": int((result["warning"] == 1).sum()), "total_return": round(float(curve.iloc[-1] - 1), 4), "max_drawdown": round(float((curve / curve.cummax() - 1).min()), 4)})
rows
Out[2]:
Interpretation¶
The output is deliberately not an official indicator admission. Compare the causal rows with the lag-0 control, retain negative 2022 behavior, and treat all proxy charts as exploratory analogues.