Market Regime Oracle
Fuses five market signals into a five-state regime classifier to determine market conditions and recommend trading postures for risk management.
README
Market Regime Oracle — CMC Strategy Skill
A CoinMarketCap Agent Hub Strategy Skill (BNB Chain AI Trading Agent — Track 2) that fuses 5 market signals into a 5-state regime classifier, maps each regime to an explicit trading posture, and backtests the result against buy-and-hold with demo-ready equity-curve charts.
⚠️ Research / backtest artifact — Track 2 only. No live trading, no wallet connection, no token launch. Not submitted to any contest portal; only the admin approves submissions. Nothing here is financial advice.
TL;DR — what it does
Ask: "What kind of BTC market is this, and how much risk should I take?"
The oracle answers with one of 5 regimes + a documented posture:
| Regime | Target exposure | Posture / action |
|---|---|---|
RISK_ON |
100% | Uptrend — accumulate, full exposure |
RANGE_BOUND |
40% | Sideways — light exposure, hold core |
RISK_OFF |
20% | Downtrend — defensive, raise cash to ~80% |
CAPITULATION |
10% | Panic sell-off — max defensive, near-full cash |
EUPHORIA |
30% | Blow-off top — take profit, fade strength |
The classifier is a priority-ordered, deterministic rule hierarchy over a fused
composite score (extreme regimes CAPITULATION / EUPHORIA override the trend
regimes). See src/market_regime_oracle/classifier/fusion.py.
Backtest result (real BTC data, ~1y)
Data: CoinGecko BTC daily (2025-06-19 → 2026-06-17, 364 days). Start capital $10,000. Transaction cost 10 bps per unit of turnover. Strategy = regime posture; benchmark = 100% BTC buy-and-hold.
| Metric | Regime Strategy | Buy & Hold |
|---|---|---|
| Total return | −12.7% | −37.4% |
| Max drawdown | −24.2% | −51.2% |
| Annualized volatility | 19.3% | 43.1% |
| Sharpe (rf 4%) | −0.82 | −0.97 |
| Sortino | −1.01 | −1.32 |
| Final equity | $8,733 | $6,264 |
Reading: over a down-trending year (BTC −37%), staying defensive in
RISK_OFF / CAPITULATION cut the drawdown roughly in half and more than
halved volatility, outperforming buy-and-hold by ~25 points while still being
long BTC in RISK_ON. Regime mix observed: RISK_OFF 38%, RISK_ON 27%,
RANGE_BOUND 25%, CAPITULATION 8% (acute panics), EUPHORIA 1.6% (blow-off).
Charts (regenerated in results/): equity_curve.png, regime_overlay.png,
drawdown.png, regime_summary.png.
The 5 signals
| # | Signal | Source | Real? |
|---|---|---|---|
| 1 | Funding rate sentiment | — (proxy from price) | ⚠️ proxy |
| 2 | Fear & Greed Index | alternative.me | ✅ real |
| 3 | Exchange flow pressure | — (proxy from volume) | ⚠️ proxy |
| 4 | RSI / MACD momentum | CoinGecko price | ✅ real |
| 5 | Volatility regime | CoinGecko price | ✅ real |
Each signal outputs a normalized bullishness score in [-1, +1] and is an
independently runnable, unit-tested module under
src/market_regime_oracle/signals/.
Assumptions & proxies (transparency)
The hard rules allow only CoinGecko + alternative.me (public, free). Two signals have no free public feed, so they are clearly-labeled proxies reconstructed from authorized price/volume data — not fabricated "real" data:
- Funding rate (proxy). Funding reflects crowded directional bets: strongly
positive when the market overheats (longs pay shorts), negative during flushes.
We approximate it with a risk-adjusted momentum term (recent return ÷ its vol).
Columns prefixed
funding_proxy_*. - Exchange flows (proxy). True on-chain flows need paid data. We reconstruct
flow pressure from signed volume (volume × sign of return): high-volume up
days ≈ accumulation/outflows (risk-on), high-volume down days ≈ distribution/
inflows (risk-off). Columns prefixed
flow_proxy_*.
If you later connect a real funding/on-chain feed, drop in a new Signal
subclass — the fusion layer is feed-agnostic.
Quick start
pip install -r requirements.txt
# run the full pipeline: fetch -> classify -> backtest -> charts -> save results
PYTHONPATH=src python -m market_regime_oracle.run # or: python main.py
# run the test suite (offline, synthetic data — no network)
PYTHONPATH=src:tests python -m pytest tests/
# run as a CMC Agent Hub skill (MCP server over stdio)
PYTHONPATH=src python -m market_regime_oracle.mcp_server
Outputs land in results/ (CSVs, metrics.json, PNG charts) and raw JSON is
cached under data_cache/ to stay gentle on free rate limits.
From a clean clone
git clone <repo> && cd market_regime_oracle
pip install -r requirements.txt
python main.py # reproduces all results/ artifacts
CMC Agent Hub skill packaging
Packaged as an MCP server — the same model the CMC Agent Hub uses to route
prompts to cloud Skills. Any MCP-compatible client (Claude Desktop, Cursor,
OpenClaw, VS Code, the CMC Agent Hub) can call the get_market_regime tool.
- Manifest (marketplace format):
packaging/cmc-skill/skill.mdandskill.json - MCP client config:
packaging/cmc-skill/mcp_config.json - Server:
src/market_regime_oracle/mcp_server.py - Verify the skill runs end-to-end:
PYTHONPATH=src MRO_HOME=. python tests/_mcp_smoke.py(performs a realinitialize→tools/list→tools/callround-trip)
The CMC MCP already exposes the raw primitives this skill fuses
(get_crypto_technical_analysis, get_global_metrics_latest,
get_global_crypto_derivatives_metrics, on-chain metrics); this skill is the
fusion + posture layer on top.
Architecture
data/ CoinGecko (BTC price+vol) + alternative.me (Fear & Greed), cached
└─ loader builds the aligned daily feature frame
signals/ 5 independent, unit-tested signal modules -> score in [-1,1]
classifier/ weighted fusion -> composite -> priority rule hierarchy -> regime
└─ posture regime -> target exposure + documented action
backtest/ vector engine, no look-ahead, with costs; metrics + trade log
viz/ matplotlib equity / drawdown / regime-overlay / summary charts
mcp_server exposes get_market_regime + list_regimes over MCP stdio
run.py end-to-end pipeline + CLI
Decision model (no look-ahead): the regime and target exposure are decided at day t's close from information up to and including t; the position earns the t → t+1 BTC return. Rebalancing incurs a linear transaction cost.
Project layout
market_regime_oracle/
├── README.md # this file
├── requirements.txt # pinned deps
├── pyproject.toml # installable package + console script
├── main.py # convenience entry point
├── src/market_regime_oracle/ # core package (data, signals, classifier, backtest, viz, mcp_server, run)
├── tests/ # pytest: signals, classifier, backtest, mcp smoke
├── packaging/cmc-skill/ # CMC Agent Hub skill manifest + mcp_config
├── results/ # generated CSV/JSON + PNG charts (demo artifacts)
└── data_cache/ # cached raw API responses (gitignored)
Data sources
- CoinGecko v3 public free API — BTC daily close + volume.
- alternative.me — Fear & Greed Index history.
Both are public and free. No API keys are required or stored.
Hard rules enforced
- ✅ Track 2 only — research / backtest.
- ✅ No live trading, no wallet connection, no token launch.
- ✅ Not submitted to DoraHacks or any portal — admin approval only.
- ✅ Only authorized public/free sources; proxies are clearly labeled.
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.