RecessionAlert Standard Charts — exploratory proxy campaign

This executed notebook uses only the checked-in RecessionAlert snapshot and the immutable offline market cache. Native component observations are absent, so all signal and equity paths are explicitly inferred public-proxy research, not source parity or investment advice.

In [1]:
from hashlib import sha256
import json
import sqlite3
from pathlib import Path

ROOT = Path.cwd()
DB = ROOT / "data" / "recessionalert.sqlite"
MANIFEST = ROOT / "research" / "artifacts" / "recessionalert" / "manifest.json"
INVENTORY = ROOT / "research" / "findings" / "recessionalert_inventory.md"
PAGE = "https://recessionalert.com/charts/"
EXPECTED = "sha256:c610205a996e580266e255a7b7999bc33e889b12bed140898f0056c3bacdae75"
with sqlite3.connect(f"file:{DB}?mode=ro", uri=True) as connection:
    connection.execute("PRAGMA query_only=ON")
    row = connection.execute("SELECT status, sha256, content_length, body FROM pages WHERE url = ?", (PAGE,)).fetchone()
    assets = connection.execute("SELECT COUNT(*) FROM assets WHERE page_url = ?", (PAGE,)).fetchone()[0]
manifest = json.loads(MANIFEST.read_text())
manifest_page = next(item for item in manifest if item.get("redacted_url") == PAGE)
inventory_text = INVENTORY.read_text()
assert row and row[1] == EXPECTED == manifest_page["sha256"]
assert sha256(row[3]).hexdigest() == EXPECTED.removeprefix("sha256:")
assert "CHARTS > Standard" in inventory_text and EXPECTED[:18] in inventory_text
print(f"source_sha256={row[1]}")
print(f"manifest_digest_verified={manifest_page['sha256'] == row[1]}")
print(f"inventory_digest_verified={EXPECTED[:18] in inventory_text}")
print(f"page_status={row[0]} body_bytes={row[2]} target_assets={assets}")
print("native_span=trough/top multi-decade claim; NEWHI August 2016; other spans unknown")
print("publication_schedule=daily 08:00 GMT/04:00 EST; weekly weekend/no later Monday; monthly third working day; intraday 15 minutes; ALIX end-of-day")
print("causal_policy=one available-period lag then next available bar; lag zero control only")
source_sha256=sha256:c610205a996e580266e255a7b7999bc33e889b12bed140898f0056c3bacdae75
manifest_digest_verified=True
inventory_digest_verified=True
page_status=200 body_bytes=123739 target_assets=0
native_span=trough/top multi-decade claim; NEWHI August 2016; other spans unknown
publication_schedule=daily 08:00 GMT/04:00 EST; weekly weekend/no later Monday; monthly third working day; intraday 15 minutes; ALIX end-of-day
causal_policy=one available-period lag then next available bar; lag zero control only
In [1]:
import sys
sys.path.insert(0, str(ROOT))
from research.research_campaign.recessionalert_1365 import default_variants, evaluate_variant, load_proxy_panel
panel = load_proxy_panel()
print(f"panel_span={panel.index.min().date()}..{panel.index.max().date()} observations={len(panel)}")
for variant in default_variants():
    result = evaluate_variant(panel, family=variant["family"], lookback_months=variant["lookback_months"], threshold=variant["threshold"], lag_bars=variant["lag_bars"])
    returns = result["portfolio_returns"].dropna()
    equity = (1.0 + returns).cumprod()
    drawdown = (equity / equity.cummax() - 1.0).min()
    cagr = equity.iloc[-1] ** (12.0 / len(returns)) - 1.0
    print(f"{variant['id']} status=tested cagr={cagr:.6f} max_dd={drawdown:.6f} label={variant['claim_kind']}")
print("tested_variants=6 causal_variants=5 lag_zero_control_excluded=True")
panel_span=1993-01-31..2026-07-31 observations=403
standard-percentile-lag0-lb6-t85 status=tested cagr=-0.190332 max_dd=-0.877604 label=control_only
standard-percentile-lag1-lb12-t90 status=tested cagr=0.085900 max_dd=-0.299960 label=inferred_best_guess
standard-percentile-lag2-lb21-t95 status=tested cagr=0.089248 max_dd=-0.137639 label=inferred_nearby_variant
standard-hilo-lag1-lb12-t0 status=tested cagr=0.042215 max_dd=-0.363890 label=inferred_family_variant
standard-stress-lag1-lb12-t0 status=tested cagr=0.108585 max_dd=-0.206250 label=inferred_family_variant
standard-combined-lag1-lb12-t90 status=tested cagr=0.079357 max_dd=-0.186469 label=speculative_extension
tested_variants=6 causal_variants=5 lag_zero_control_excluded=True

Interpretation boundary

The proxy panel is long enough to test related hypotheses, but SPY is not constituent breadth, ^VIX/BAA10Y/WALCL are not the proprietary MCOS/ALIX components, and the source does not disclose a canonical scalar or portfolio map. The causal runs use an observation lag and next available bar; the lag-zero control is retained only as a non-causal warning. See the campaign state-space, diagnostics, and synthesis JSON for full metrics, regimes, events, and gaps.