Macro Regime Detector
Detect structural macro regime transitions using monthly-frequency cross-asset ratio analysis. This skill identifies 1-2 year regime shifts that inform strategic portfolio positioning.
When to Use
- User asks about current macro regime or regime transitions
- User wants to understand structural market rotations (concentration vs broadening)
- User asks about long-term positioning based on yield curve, credit, or cross-asset signals
- User references RSP/SPY ratio, IWM/SPY, HYG/LQD, or other cross-asset ratios
- User wants to assess whether a regime change is underway
Workflow
Load reference documents for methodology context:
references/regime_detection_methodology.mdreferences/indicator_interpretation_guide.md
Execute the main analysis script:
python3 -m pip install -r skills/macro-regime-detector/requirements.txt uv run python3 skills/macro-regime-detector/scripts/macro_regime_detector.py --output-dir reports/This fetches 600 days of data for 9 ETFs. With an FMP key, the client tries FMP first and fetches Treasury rates (~10 API calls total), then falls back to yfinance for unavailable ETF history. Without an FMP key, it runs in yfinance-only mode and uses SHY/TLT as the yield-curve fallback.
The detector fails closed and writes no report when none of its six components has usable data. Do not treat a missing report or non-zero exit as a valid low-transition regime.
Read the generated Markdown report and present findings to user.
Provide additional context using
references/historical_regimes.mdwhen user asks about historical parallels.
Prerequisites
- Python dependencies (required): install
requirements.txt, including yfinance and requests - FMP API Key (optional): set
FMP_API_KEYor pass--api-keyto use FMP and Treasury data before the yfinance/SHY-TLT fallbacks - The FMP free tier may not serve every ETF; unavailable symbols automatically use yfinance
6 Components
| # | Component | Ratio/Data | Weight | What It Detects |
|---|---|---|---|---|
| 1 | Market Concentration | RSP/SPY | 25% | Mega-cap concentration vs market broadening |
| 2 | Yield Curve | 10Y-2Y spread | 20% | Interest rate cycle transitions |
| 3 | Credit Conditions | HYG/LQD | 15% | Credit cycle risk appetite |
| 4 | Size Factor | IWM/SPY | 15% | Small vs large cap rotation |
| 5 | Equity-Bond | SPY/TLT + correlation | 15% | Stock-bond relationship regime |
| 6 | Sector Rotation | XLY/XLP | 10% | Cyclical vs defensive appetite |
5 Regime Classifications
- Concentration: Mega-cap leadership, narrow market
- Broadening: Expanding participation, small-cap/value rotation
- Contraction: Credit tightening, defensive rotation, risk-off
- Inflationary: Positive stock-bond correlation, traditional hedging fails
- Transitional: Multiple signals but unclear pattern
Output
macro_regime_YYYY-MM-DD_HHMMSS.json— Structured data for programmatic usemacro_regime_YYYY-MM-DD_HHMMSS.md— Human-readable report with:- Current Regime Assessment
- Transition Signal Dashboard
- Component Details
- Regime Classification Evidence
- Portfolio Posture Recommendations
Relationship to Other Skills
| Aspect | Macro Regime Detector | Market Top Detector | Market Breadth Analyzer |
|---|---|---|---|
| Time Horizon | 1-2 years (structural) | 2-8 weeks (tactical) | Current snapshot |
| Data Granularity | Monthly (6M/12M SMA) | Daily (25 business days) | Daily CSV |
| Detection Target | Regime transitions | 10-20% corrections | Breadth health score |
| API Calls | ~10 | ~33 | 0 (Free CSV) |
Script Arguments
python3 macro_regime_detector.py [options]
Options:
--api-key KEY FMP API key (default: $FMP_API_KEY)
--output-dir DIR Output directory (default: current directory)
--days N Days of history to fetch (default: 600)
Resources
references/regime_detection_methodology.md— Detection methodology and signal interpretationreferences/indicator_interpretation_guide.md— Guide for interpreting cross-asset ratiosreferences/historical_regimes.md— Historical regime examples for context