What (One-liner)
US three-factor macro leading index: INDPRO / UNRATE / FEDFUNDS z-score standardized, weighted (0.4 / -0.3 / -0.3 with negative-weight sign-flip), 3-month rolling smoothed, last-two-period diff decides direction (rising / falling / turning). Outputs direction + smoothed value + ad-hoc confidence.
How to use
Drop macro_cli_v1 on Canvas, no params or limit=36 (months). Direct call: GET /mfle/leading-indicators/cli. Typical output:
→ { direction: "rising", value: 1.82, confidence: 0.95,
as_of_date: "2025-12-01", logic_lineage: [...] }Pair with macro_snapshot_v1 (current regime) + macro_cycle_v1 (cycle phase) as a three-piece macro overlay.
Core formulas
z_INDPRO = (INDPRO - mean) / std # positive contribution
z_UNRATE = -(UNRATE - mean) / std # sign-flipped (negative weight)
z_FEDFUNDS = -(FEDFUNDS - mean) / std # sign-flipped
cli_raw = z_INDPRO * 0.4 + z_UNRATE * 0.3 + z_FEDFUNDS * 0.3
cli_smooth = cli_raw.rolling(3).mean()
diff = cli_smooth[-1] - cli_smooth[-2]
|diff| < 0.05 → 'turning' (confidence=0.5)
diff > 0 → 'rising' (confidence=min(0.95, 0.5 + |diff|*2))
diff < 0 → 'falling' (confidence=min(0.95, 0.5 + |diff|*2))Rounding contract: value→4, confidence→2.
Assumptions & applicability
Assumptions: US FRED monthly only; 3 fixed-weight components; z-score standardization; 3-month rolling smoothing; ≥5 observations.
Applies to: macro-narrative direction input, Canvas cross-asset strategy overlay, teaching demo.
Does not apply to: strict OECD CLI reproduction; non-US economies; intraday signals; quantitative decisions requiring confidence intervals.
Input / Output contract
{limit?=36} → {available, direction, value, confidence, as_of_date, logic_lineage} (with reason when available=False).
Known limitations
- US-only 3-component: INDPRO / UNRATE / FEDFUNDS hard-coded; no geographic override
- Simplified z-score vs OECD HP-filter-based: no trend extraction, no phase-average-trend, no component-group normalization
- Actually coincident-ish: INDPRO is contemporaneous with GDP; true leading would need order books / term spread / consumer confidence
- Threshold (0.05) empirical: no empirical calibration
- Confidence formula ad-hoc: (0.5 + |diff|*2, cap 0.95); not a statistical confidence interval
- Monthly alignment ffill+bfill: forward-fills when components miss data, can produce false signals
- No regime-dependent weight shift
References
OECD (2012) System of CLI + Stock-Watson (1989) New Indexes of Coincident/Leading Economic Indicators + Hodrick-Prescott (1997) business cycles. See frontmatter.
Golden Test
tests/golden/fixtures/tier2/macro_cli/ — monkey-patched FRED deterministic snapshot. 1e-10 tolerance. 9 tests:
matches_snapshot— full output byte-equal (rising scenario)determinism— 5 reruns byte-identicalrising_direction— accelerating expansion → 'rising' + confidence 0.95falling_direction— reverse (unemployment up / output down) → 'falling'turning_direction— plateau tail → 'turning' + confidence 0.5result_structure— 6 fixed top-level keyslogic_lineage_locked— fixed string listunavailable_no_fred— FRED_API_KEY missing → available=False, direction=Noneconfidence_cap— extreme diff → confidence exactly 0.95
Changelog
- 1.0.0 (2026-04-20) — First Active (Tier 2 batch 7)

