Backtesting Arena
Crypto backtesting & Bitcoin cycle analytics. Point-in-time, DSR-corrected, look-ahead-aware.
Connect it
Settings → Connectors → Add custom connector
URL: https://tradingstrategies.work/api/mcpSettings → Apps & Connectors → Advanced → Developer mode
Create connector with URL: https://tradingstrategies.work/api/mcp{
"mcpServers": {
"backtesting-arena": {
"url": "https://tradingstrategies.work/api/mcp",
"headers": {
"Authorization": "<YOUR_AUTHORIZATION>"
}
}
}
}claude mcp add --transport http backtesting-arena https://tradingstrategies.work/api/mcp --header "Authorization: <value>"{
"servers": {
"backtesting-arena": {
"type": "http",
"url": "https://tradingstrategies.work/api/mcp",
"headers": {
"Authorization": "<YOUR_AUTHORIZATION>"
}
}
}
}49 tools, verified live
arena_get_pulseHow hot is the Bitcoin market today? Daily 0-100 heat score for the Bitcoin market, aggregated from 8 components (BTC-Cycle, F&G, Altcoin-Season, Bullmarket-Ampel, Funding-Rate, Hash-Ribbons, Mayer-Multiple, MVRV-Z). Returns score, band label, color, 7d/30d delta, verdict, components breakdown, plus score_percentile ranking todayâs score against its own history (e.g. 42 = 44th percentile â how
arena_get_cycleCrypto cycle position â where are we in the cycle? Default BTC: point-in-time 9-indicator aggregation (Pi-Cycle Top & Bottom, Mayer Multiple, weekly RSI, 200-week-MA distance, halving position, Fear & Greed, BTC-dominance trend, mining-difficulty trend â each indicatorâs 0-100 sub-score is in the score_* fields; the weights are not part of the payload; components without input are excluded a
arena_get_spot_priceCurrent BTC, ETH and SOL spot price â what is Bitcoin (or ETH/SOL) worth right now? Live USDT-quoted last price plus 24h change %, high and low from Binance. Use this to anchor the connectorâs own analytics (cycle, historical-analog, gem scores) with the current market price instead of switching to web search mid-analysis. [Free tier]
arena_get_stablecoin_supplyAggregate stablecoin supply (crypto-liquidity proxy) â is the liquidity impulse turning or accelerating? macro_regime only gives the 30d delta; this exposes the trend: current supply, 30d/90d change (USD + %) plus a daily time series (`days`, default 365; `resolution` states points and spacing) so direction and speed are visible, not just a single delta. Read `impulse` for what the supply change
arena_get_etf_flowsSpot-ETF net flows (USD millions) â is the flow impulse turning or accelerating? The summary only gives point-in-time deltas; this exposes the trend: 30d/90d net flow, a direction label (inflows/outflows/flat) and a daily series (every US trading day: cumulative inflow + that day's net flow; `resolution` states points and spacing) so direction and speed are visible, not just a single delta. Read
arena_get_altcoin_seasonIs it altcoin season? Daily Altcoin-Season indicator (v7 Native-Filter methodology). Returns BTC-, alt- and stablecoin dominance, the 4 Layer-1 signals (alt_dominance, total_market_cap, btc_dominance, stable_dominance â weekly smoothed-Heikin-Ashi directions; weights in methodology.layer1), overall color (red/yellow/green) and Layer 2: altcoin_season_pct (share of top-50 alts beating BTC over 90
arena_get_fear_greedHow fearful or greedy is the market right now? Crypto Fear & Greed Index (alternative.me). Returns the current `value` (0-100) and `classification` (extreme fear / fear / neutral / greed / extreme greed) as their own fields, plus `history` â the last 90 daily readings by default, so you can see whether today is a move or a plateau. The window is capped in SIZE but free in POSITION: `end_date` mo
arena_get_bullmarket_ampelIs this still a bull market? Bitcoin Bullmarket-Ampel current state (0-5 active stages). Returns active_count, a stages[] breakdown (each stage with key, label, active and `since` = first day of its current state; null when the state predates the 400-day lookup) and stage_history â per day active_count PLUS all five per-stage booleans, so which stage flipped when is readable directly (history_da
arena_get_funding_rateAre longs or shorts paying right now? Latest BTC perpetual funding rate, averaged across up to 4 exchanges (Binance, Bybit, OKX, Deribit; 8h settlement cadence). Returns the day's averaged value plus each exchange's own value (no moving average or Z-score â for the history use arena_get_funding_rate_history via arena_call_extended). Positive = longs pay shorts (bullish bias), negative = shorts p
arena_get_macro_regimeWhat is the macro backdrop doing? Daily Macro Regime snapshot from 18 components in 6 tiers (Liquidity 30%, Financial Conditions 20%, Risk Appetite 15%, Crypto Liquidity 10%, Business Cycle 15%, Inflation/Real Rates 10%). FRED-sourced. Returns composite_score (0-100), regime_label (risk_off/neutral/risk_on_leaning/risk_on), cycle_phase_label (contraction/early_expansion/mid_expansion/late_expansio
arena_get_btc_market_structureIs the trend up or down, and how fresh is the flip? Daily Bitcoin market structure from 1000-bar Phantomflow adaptation (BTCUSDT 1d). Returns current_trend (up/down/sideways), last trend change timestamp, counts of waves + fractals, last-5 fractals on each side (up = pivot highs, down = pivot lows), and trend_context: previous trend + its duration, flip_age_days, and a descriptive historical flip
arena_get_key_levelsWhich price levels matter above and below spot? Reproducible Bitcoin structural levels on BOTH sides of spot, in TWO distinct provenance classes. (1) resistance/support: swing-pivot clusters â where past pivot highs+lows cluster into price zones (touch-count, band, last-touch date, signed distance), resistance above spot, support below, nearest-first. (2) indicator_levels.above / .below: named i
arena_get_iv_snapshotWhat is the options market pricing in? Latest Deribit volatility snapshot for BTC or ETH. Returns DVOL (30d vol index), constant-maturity ATM implied vol (30/60/90/180d via options chain), 30d realized vol, and `vol_risk_premium_30d`, which is the TRAILING spread: ATM implied vol (30d, from the options chain â not DVOL) minus the realised volatility of the PAST 30 days. It answers "are options p
arena_list_onchain_seriesWhich on-chain series are available? Lists all 69 available Bitcoin Research Kit (BRK) on-chain series across the groups pilot, sentiment, mining, supply, cointime, activity, liquidity (e.g. MVRV, NUPL, SOPR, Realized-Price, Mayer, Puell, STH/LTH SOPR, Hash-Ribbons). Returns id + label + group. Use the id with arena_get_onchain_latest / _history. [Free tier]
arena_get_onchain_latestWhat does this on-chain metric read right now? Returns the most recent value of ONE on-chain series from the Bitcoin Research Kit as { series_id, metric_name, date, value }. Cheapest way to answer "what is X right now" (MVRV, SOPR, realized price, hash rate, â¦). Discover valid series_ids with arena_list_onchain_series; for the history behind the number use arena_get_onchain_history. A single rea
arena_get_sth_cost_basisWhat did recent buyers pay on average â and how far is spot from that? Latest BTC short-term-holder cost basis (realized price of coins younger than ~155 days, BRK brk_sth_realized_price), derived STH-MVRV (spot ÷ STH cost basis), an in_loss flag, plus ±1Ï/±2Ï bands: basis à exp(±k·Ï), Ï of ln(price ÷ basis) over a 730-day ROLLING window (sigma_method/sigma_window_days travel in the p
arena_get_onchain_historyHow has this on-chain metric moved over time? Returns the full TIME SERIES of one on-chain metric from the Bitcoin Research Kit â date/value pairs in ascending order, with history back to 2009 for most series. Use it for trend and percentile work; for the single current reading call arena_get_onchain_latest, and to discover valid series_ids call arena_list_onchain_series. Values are as-reported:
arena_get_max_painWhat happened at the last Deribit expiry? Max pain and how spot settled against it: max_pain_strike, spot_at_expiry, %-diff, put_call_ratio, notional. Plus up to 10 upcoming expiries, each with current live max-pain level, days_to_expiry, open_interest_contracts and open_notional_usd. Field semantics: days_to_expiry is floored at 0 and cannot separate "expires later today" from "already settled" â
arena_get_max_pain_historyDoes max pain actually pull price to the strike? Settled Deribit BTC options expiries with the max-pain level we compute per expiry, for measuring the convergence question: does spot drift toward the max-pain level as expiry approaches? Each row: expiry_date, max_pain_strike, spot_at_expiry, %-diff, P/C ratio, notional, expiry-type flags. The mandatory base_rates block answers the convergence ques
arena_statusAm I connected, and what can this key do? Returns auth status (key kind: oauth connector or bearer API key, tier), server version, current UTC time, and the rate-limit state (hour/day used, remaining, reset) WITHOUT consuming extra quota beyond this call itself. Call this first when other tools fail: it separates auth problems (reconnect), tier problems (upgrade) and rate limits (wait) from real o
arena_list_strategiesWhich strategies can I backtest here? Lists all backtest strategies (key, label, plan, supported asset classes, primary indicators). Filterable by asset class and plan. Use this before calling arena_run_backtest to discover valid strategy names. Entries deprecated for an asset class stay listed (historical results depend on them) and carry deprecated_for + deprecation {since, reason} â do NOT ca
arena_list_universesWhich asset universes can I test against? Lists all crypto asset universes (BTC, top-10 crypto, top-50 crypto, etc.) â the underlying pair-sets used by custom-report and universe-backtest endpoints. [Free tier]
arena_get_universeWhich pairs are in this universe? Returns one pair universe in full: its id, label, selection rule and the complete list of pairs it currently contains. Use it to see what you are about to test BEFORE handing a universe_id to arena_run_universe_backtest, or to resolve a universe into explicit pairs. For the list of available universes call arena_list_universes. Without as_of the universe reflects
arena_get_strategy_insightsWhich strategy and interval combinations actually performed? Aggregated backtest performance per (strategy à interval) cell. If `strategy` AND `interval` provided, returns detail with per-asset breakdown + param variants. Otherwise returns the matrix. Free tier is limited to the same strategies that are free in the backtester itself (rsi_sma, golden_cross, rsi_ob_os, bnh_fixed, dca_reference, dca
arena_get_strategy_performanceHow did this exact strategy, asset and interval perform? Aggregated backtest performance for ONE specific (strategy, asset, interval) combination. Returns run_count, avg_cagr, avg_win_rate, avg_drawdown, effective_years, vs_buy_hold comparison (beats_buy_hold, cagr_delta) and an `evidence` block declaring the gate machine-readably (gate_applies_to: stats.run_count, threshold 5 runs, benchmark valu
arena_get_strategy_filter_effectWhat would each entry filter have changed for this strategy? Per-(strategy, asset, interval) filter-effect analysis. Returns baseline-stats (no filters) + each observed filter-variant's stats with cagr_delta / drawdown_delta / win_rate_delta vs the time-overlap-matched baseline + best_by_cagr pick (null with best_by_cagr_reason when every variant is low_data or none beats the baseline â no pick
arena_get_strategy_performance_by_regimeIn which macro regime has this strategy worked? Historical backtest performance for ONE (strategy, asset, interval) combination SPLIT BY macro market regime (sweet_spot / late_cycle_warning / crisis / recovery â classified at each trade's entry date), PLUS the CURRENT live regime so you can align the buckets yourself. You get the per-regime numbers to weigh directly (per-bucket verdicts live in
arena_get_edge_reportsWhich entry filter carries a real edge? Platform-wide aggregated analysis: how each Pro+ entry filter (200 WMA, ATR low/high/expansion, Altcoin Season, Bullmarket confirm/strict) affects strategy CAGR â baseline vs. filtered, asset-equal-weighted (per-asset medians over param-deduplicated runs, then the median across assets â no single asset's run grid can dominate an arm). delta_cagr is the m
arena_list_backtestsWhich backtests have I run? Lists the backtest runs belonging to the authenticated user â newest first, with id, strategy, pair, interval, date range and headline metrics per run. Use it to find a run_id, then call arena_get_backtest for its detail or arena_get_backtest_trades for the individual trades. Only your OWN runs; for the public cross-user leaderboard use arena_get_winners. Paginated vi
arena_get_backtestWhat exactly did that backtest do? Returns the full record of ONE backtest run by id: strategy, pair, interval, date range, parameters, filters and the aggregate metrics (CAGR, total return, win-rate, max drawdown, trade count, Buy & Hold comparison, net-of-fees figures). Only your own runs (admins may read others). Get ids from arena_list_backtests; for the individual trades add arena_get_backtes
validate_strategyDoes this strategy survive an honest test? Backtest a trading strategy honestly â look-ahead-aware validation with Deflated-Sharpe-Ratio / multiple-testing correction (Bailey & López de Prado). Returns an EVIDENCE verdict (insufficient_evidence | anecdote | failed_oos | passed_oos) plus metrics, flags and caveats â NOT a buy/sell recommendation. Call this before acting on a strategy or signal
arena_run_backtestHow would this strategy have performed? Run ONE strategy on ONE pair over a date range and get the full result: CAGR, total return, max drawdown, win-rate, trade count, Buy & Hold comparison, net-of-fees figures, and a run_id for later retrieval. Synchronous, typically 3â10s. Use this when the user wants a concrete result for a specific setup. For several strategies side by side use arena_compar
arena_compare_strategiesWhich of these strategies performed best on the same data? Run 2â5 strategies against the SAME pair, interval and date range and return per-strategy metrics plus a comparison summary (best by CAGR, best by win-rate, worst by drawdown). Use this when the user asks which of several strategies fits a market â it holds the pair, interval and requested date range fixed, which a series of separate a
arena_run_universe_backtestDoes this strategy hold up across a whole universe? Runs it against every pair in the universe. Pair cap depends on your API tier: Pro 50, Power 250 â Power covers crypto-top-250 in ONE job, and a single job keeps the ranking on one pair set (merging results across different pair sets measures pair selection, not strategy quality). THIS CALL IS ASYNCHRONOUS AND RETURNS NOTHING BUT A job_id: the
arena_get_job_statusIs my universe backtest finished? Polls an async job by job_id (created via arena_run_universe_backtest). Returns status (pending/running/completed/failed), progress_pct, pairs_completed, and once completed: the full result (summary + per-pair results). [Free tier]
arena_run_grid_backtestWould a grid bot have made money here? Simulate a GRID BOT (buy-low / sell-high ladder inside a fixed price range) on historical candles. Returns final value, return %, CAGR, trade count, fees paid and a Buy & Hold comparison â plus `zerlegung` (spot runs): `decomposition` splits the result into ladder P&L from completed buyâsell cycles, allocation P&L of the starting coins, open grid buys and
arena_get_gem_scoresAltcoin screener ranking â which altcoins look strong right now? Today's CoinGecko Top-200 minus stablecoins and tokenized fiat, scored by a composite of 3 factor groups: Mean-Reversion (A), Tokenomics (B), Market-Structure (C). Each score carries `plain` (one sentence: rank with its base `scored_total`, composite, factor groups) and the response carries `scored_total`. Backtest-validated factor
arena_get_volatility_historyHow volatile has Bitcoin been? Daily Bitcoin volatility time series: realized volatility (30d & 90d, â365-annualized â calendar days, the same basis as DVOL â close-to-close) and ATR% (Wilder EMA-14, captures intraday range + gaps), on the same scale. Ranks come in two flavours answering different questions: `rvRank`/`atrPctAnnRank` expand from the start of history and are look-ahead-free, b
arena_list_knowledgeWhat knowledge objects exist here? Discover what Knowledge Objects exist: lists all published types + their subjects (with min_tier, api_path, seo_slug, latest as_of). Use this BEFORE arena_get_knowledge to learn valid type/subject pairs instead of guessing. New types appear automatically. [Free tier]
arena_get_knowledgeWhat does the platform know about this subject? Fetch a versioned, explainable Knowledge Object by type + subject (e.g. type='market_regime', subject='GLOBAL'). Returns the current published envelope: payload, explanation (factors + weights + confidence), provenance (inputs + params), ontology binding, compute version. ONE tool covers ALL knowledge types. Set include_graph=true to also walk the kn
arena_dip_decisionBuy now or wait for the dip? Decision-math over the user's OWN assumptions (target/dip prices, probabilities, capital). Two modes: "compare" = expected value of Buy-Now vs Wait vs Split + the breakeven dip probability (prices as MULTIPLES of today); "allocate" = the risk-adjusted (Kelly / risk-aversion γ) optimal fraction to deploy now vs reserve for the dip (ABSOLUTE prices). Ask the user for th
arena_get_historical_analogWhat happened historically after the Bitcoin cycle looked like this? Conditional forward-return distribution for a named preset cycle state â over N DISTINCT historical episodes matching that state (matched_episodes), returns median/IQR/positive-share forward returns (30/90/180/365d) with per-horizon n, small-n warnings, point-in-time integrity and an `evidence` block that names which field its
arena_get_robustness_fieldIs this backtest result real, or a lucky cell? Assess one backtest result against its neighborhood instead of trusting a single "+X% CAGR" cell. Given a (strategy, interval, pair) and YOUR result (user_cagr, optional user_sharpe), returns: the cross-asset distribution of the SAME strategy+interval across every pair the backtest factory ran it on (median, IQR, positive-share, your percentile), a pl
arena_is_distinguishableDo these two backtest figures actually differ? Check before ranking them. Pass the two values as `a` and `b` (same metric, same basis) plus `axes` â which arbitrary choices went into them â and the tool returns whether their gap clears the MEASURED noise floor of those choices, along with the floor itself, the dominant axis, and the probe + date it was measured on. `axes` accepts: grid_phase (
arena_get_indicator_snapshotWhat do the classic indicators read right now? Current RSI(14), MACD(12/26/9), Bollinger(20,2), ATR(14) and OBV for a pair â each with a PERCENTILE RANK against that indicator's own history on that pair, plus the observation count â the rank turns a raw reading into a placement. ATR comes as a percentage of price so it is comparable across time, and OBV as a 30-bar slope normalised by that win
arena_get_signal_contextShould I take this entry? Answers it for one (strategy, pair, interval) in ONE call instead of seven. Aligns what each entry filter historically did to this strategy (arena_get_strategy_filter_effect) with where that filter stands TODAY (bull-market gauge, altcoin-season signal, volatility phase, 200-week trend for BTC): `filters[].blocks_this_entry` says which filter would sit this entry out, wit
arena_get_asset_snapshotWhere does this coin stand? ONE call per Binance USDT pair instead of six: last daily close, 7/30/90/365-day returns, relative strength vs BTC and vs ETH on the same horizons (with the MEASURED base rate next to it â the median altcoin loses against Bitcoin, so a positive number is a description, not an edge), the F6 trend state vs BTC, ATH/drawdown/days-since-ATH on the available exchange histo
arena_batchSeveral market snapshots in ONE call instead of one roundtrip per read. Batchable reads (14): spot_price, pulse, cycle, fear_greed, funding_rate, macro_regime, iv_snapshot, etf_flows, stablecoin_supply, mayer_multiple, onchain_latest, max_pain, altcoin_season, bullmarket_ampel. Pass 1-6 queries; each returns its result OR a structured error (partial success â one failing query does not abort the
arena_call_extendedGateway to the EXTENDED tools of this server â listed here in one line each instead of individually, to keep the tool list short. Use it when no listed tool fits: per-metric daily history series, subscriptions, chart images, niche primitives. mode="call" runs the tool with `arguments` (same result, auth, tier and rate limits as calling it directly); mode="describe" returns its full description a
Alternatives in Crypto & Web3
Compare →AAAgoragentic Agent OS MCPB
Triptych OS (Agent OS) MCP for governed routing, receipts, and USDC settlement on Base.
PDPhilidor DeFi Vault Risk AnalyticsB
Search 700+ DeFi vaults, compare risk scores, analyze protocols. No API key needed.
GMGoTRON MCPB
TRON blockchain: accounts, TRC20 tokens, staking, contracts, resources and transaction builders
IBM Granite x402 RemoteB
Pay-per-use IBM Granite AI via x402: chat, code, embeddings, forecasting. USDC on Base or Solana.
GNGate News MCPB
Gate news MCP for crypto news, structured events, announcements, and social sentiment.
APApibaseB
MCP endpoint to APIbase catalog (https://apibase.pro/llms.txt). USDC: x402 Base, MPP Tempo.