{"serverId":"mcp-registry/io.github.schoasch/backtesting-arena","tools":[{"name":"arena_compare_strategies","fixed":{"name":"arena_compare_strategies","description":"Which 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 arena_run_backtest calls does not guarantee. What it does NOT equalize is the EVALUATION window: a strate","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["strategies","pair","asset_type","interval","date_from"],"properties":{"pair":{"type":"string","minLength":1,"description":"Crypto pair symbol, e.g. BTCUSDT — the same pair for every strategy."},"capital":{"type":"number","description":"Starting capital in quote currency. Default 10000. Affects absolute figures only, not CAGR or win-rate.","exclusiveMinimum":0},"date_to":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"End date, YYYY-MM-DD. Default: today."},"filters":{"type":"object","properties":{"wma200":{"type":"boolean","description":"200-week MA filter (BTC-derived): only take entries while BTC trades above its 200-week SMA."},"atrMode":{"enum":["off","low","high","expansion"],"type":"string","description":"ATR volatility regime filter. 'low'/'high' restrict entries to that volatility band, 'expansion' to rising volatility. Default 'off'."},"stochRsiWeekly":{"type":"boolean","description":"Asset-specific weekly Stoch-RSI gate: entries only while the pair's weekly StochRSI(14) sits above its SMA(3). Default false."},"altcoinSeasonMode":{"enum":["off","aggressive","conservative"],"type":"string","description":"Altcoin-Season gate. 'conservative' needs a confirmed alt season, 'aggressive' an early one. Default 'off'."},"bullmarketStageMode":{"enum":["off","early","confirmed","strict"],"type":"string","description":"Bull-market stage gate from the BTC cycle model; rising strictness from 'early' to 'strict'. Default 'off'."},"minProfitGuardThreshold":{"type":"number","description":"Per-trade min profit guard (negative cap, e.g. -10 = exit once a trade is 10% under water)."}},"description":"Optional entry filters (Pro+). Each one only ever REMOVES entries — filters never create trades. Omit for the unfiltered baseline.","additionalProperties":false},"interval":{"enum":["1d","2d","3d","1w","1M"],"type":"string","description":"Candle interval: '1d' daily, '2d'/'3d' multi-day, '1w' weekly, '1M' monthly. Multi-day candles (2d/3d) are anchored to the Unix epoch, so one of n possible alignments is used. Measured on our own corpus, the choice of alignment alone moves CAGR by 6.66 pp on average (max 12.30). Treat differences below that as not distinguishable — 1d/2d/3d behaved as one block in our tests, not a ranking."},"date_from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Start date, YYYY-MM-DD. Earlier than the pair listing is clamped to the first available candle."},"asset_type":{"enum":["crypto","tokenized_equity","tokenized_etf","commodities"],"type":"string","description":"Asset class. Use 'crypto' unless you are explicitly backtesting a tokenized real-world asset. Note: tokenized stocks/ETFs/gold trade AS crypto pairs (e.g. spybUSDT, qqqbUSDT) — there is no separate stocks/forex backtest surface; non-crypto asset classes were retired."},"strategies":{"type":"array","items":{"type":"object","required":["strategy"],"properties":{"params":{"type":"object","description":"Optional per-strategy parameter overrides; omit for audited defaults.","additionalProperties":{}},"strategy":{"type":"string","minLength":1,"description":"Strategy key — use arena_list_strategies."}},"additionalProperties":false},"maxItems":5,"minItems":2,"description":"The 2–5 strategies to compare, each with optional own params."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Compare 2-5 Strategies"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":1105,"tokensAfter":1105},{"name":"arena_dip_decision","fixed":{"name":"arena_dip_decision","description":"Buy 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 the missing inputs, then call. Returns scenario numbers and which option wins on expected value — NOT a","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"mode":{"enum":["compare","allocate"],"type":"string","default":"compare","description":"'compare' (default): EV of buy-now vs wait vs split + breakeven dip probability. 'allocate': risk-adjusted optimal deploy-now fraction under γ."},"compare":{"type":"object","required":["target_mult","dip_mult","dip_probability","target_probability","capital"],"properties":{"capital":{"type":"number","description":"Total capital for the position.","exclusiveMinimum":0},"dip_mult":{"type":"number","description":"Dip price as × today, below 1 (e.g. 0.5 = wait for a 50% drop).","exclusiveMinimum":0},"target_mult":{"type":"number","description":"Target price as × today (e.g. 2.0 = a doubling).","exclusiveMinimum":0},"failure_mult":{"type":"number","default":1,"minimum":0,"description":"Price if the target is never hit, as × today. Default 1.0."},"split_now_pct":{"type":"number","default":50,"maximum":100,"minimum":0,"description":"Split scenario: share deployed now, percent. Default 50."},"dip_probability":{"type":"number","maximum":100,"minimum":0,"description":"P(dip is actually reached), percent."},"target_probability":{"type":"number","maximum":100,"minimum":0,"description":"Unconditional P(target is eventually hit), percent."}},"description":"Required when mode='compare'.","additionalProperties":false},"allocate":{"type":"object","required":["capital","current_price","dip_price","target_price","dip_then_target_probability","straight_up_probability"],"properties":{"capital":{"type":"number","description":"Total budget for the position.","exclusiveMinimum":0},"dip_price":{"type":"number","description":"Dip price (absolute, must be below current).","exclusiveMinimum":0},"target_price":{"type":"number","description":"Target price (absolute, must be above current).","exclusiveMinimum":0},"current_price":{"type":"number","description":"Current price (absolute).","exclusiveMinimum":0},"risk_aversion":{"type":"number","default":1,"description":"Risk aversion γ. 1 = growth-optimal Kelly (default).","exclusiveMinimum":0},"straight_up_probability":{"type":"number","maximum":100,"minimum":0,"description":"P(goes straight up to target, no dip), percent."},"dip_then_target_probability":{"type":"number","maximum":100,"minimum":0,"description":"P(dips first, THEN recovers to target), percent."}},"description":"Required when mode='allocate'.","additionalProperties":false}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Dip Decision — buy now or wait?"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":851,"tokensAfter":851},{"name":"arena_get_altcoin_season","fixed":{"name":"arena_get_altcoin_season","description":"Is 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 days) with altcoin_season_pct_basis (beating / eligible / expected — coins without a 90-day return dr","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"fields":{"enum":["full"],"type":"string","description":"Omit for the default response, which carries `provenance` in short form (grade full/partial/thin, sources_used, sources_expected). 'full' adds the long form: sources_missing (named), sources (licence attribution names), grade_reason, as_of — plus per-part provenance where the composite has parts. A `thin` grade (under half the expected inputs) is never a basis for a verdict or a ranking."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Altcoin Season Snapshot"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":314,"tokensAfter":314},{"name":"arena_get_asset_snapshot","fixed":{"name":"arena_get_asset_snapshot","description":"Where 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 history (`ath_scope` says which), SMA200 distance, a `parabolic` state (in a parabolic run now? last run? p","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["pair"],"properties":{"pair":{"type":"string","minLength":1,"description":"Binance USDT pair, e.g. 'SOLUSDT'. Case-insensitive."},"detail":{"enum":["standard","full"],"type":"string","description":"'standard' (default). 'full' adds the raw BTC/ETH benchmark returns used for the relative numbers."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Asset Snapshot — one coin, one call"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":272,"tokensAfter":272},{"name":"arena_get_backtest","fixed":{"name":"arena_get_backtest","description":"What 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_backtest_trades; to create a new run use arena_run_backtest. [API Pro tier]","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["id"],"properties":{"id":{"type":"string","format":"uuid","description":"UUID of the backtest run."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Backtest Detail"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":206,"tokensAfter":206},{"name":"arena_get_btc_market_structure","fixed":{"name":"arena_get_btc_market_structure","description":"Is 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 base rate over the SAME 1000 bars (total flips, share reverted within 5 bars, median trend duration)","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get BTC Market Structure"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":169,"tokensAfter":169},{"name":"arena_get_bullmarket_ampel","fixed":{"name":"arena_get_bullmarket_ampel","description":"Is 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_days 1-365, default 30). Higher count = more bull-market signals firing. Stages evaluate weekly 20W/50W-","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"history_days":{"type":"integer","maximum":365,"minimum":1,"description":"Days of stage_history to return (1-365, default 30). Each row carries active_count plus all five per-stage booleans, so stage flips are readable per day instead of only via the derived `since` of the current run."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Bullmarket Ampel Snapshot"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":270,"tokensAfter":270},{"name":"arena_get_cycle","fixed":{"name":"arena_get_cycle","description":"Crypto 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 in drivers[] under fields=\"full\"; components without input are excluded and weights renormalized, see indicator_coverage). Includes an `ath` block (E32): ATH on UTC daily","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"asset":{"enum":["BTC","ETH","SOL"],"type":"string","description":"Which asset’s cycle. Default BTC. ETH/SOL return a price-derived cycle read with not_applicable fields for BTC-native indicators."},"fields":{"enum":["full"],"type":"string","description":"BTC only. 'full' adds `drivers[]` (indicator sub-scores with renormalized weight, contribution summing to raw_score, percentile_rank with basis and n) plus drivers_note."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Crypto Cycle Snapshot (BTC / ETH / SOL)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":306,"tokensAfter":306},{"name":"arena_get_edge_reports","fixed":{"name":"arena_get_edge_reports","description":"Which 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 median of PER-ASSET deltas over MATCHED assets only (present in both arms) — so it usually differs from f","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["market"],"properties":{"limit":{"type":"integer","maximum":100,"minimum":1,"description":"Strategies per page (1–100). Omit for all."},"market":{"enum":["crypto","tokenized"],"type":"string","description":"Market to analyze (crypto or tokenized)."},"offset":{"type":"integer","minimum":0,"description":"Strategies to skip (paging)."},"verdict":{"enum":["helps","neutral","hurts","insufficient_evidence","insufficient_data","all"],"type":"string","description":"Filter by verdict. Default 'all'. Note 'insufficient_evidence' is NOT the same as 'insufficient_data': the former has enough runs but they disagree (the effect's 90% interval straddles the ±1pp line), the latter simply lacks runs."},"strategy":{"type":"string","description":"Restrict to a single strategy key (e.g. golden_cross). Omit for all strategies."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Edge Library — Filter Effect Reports"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":416,"tokensAfter":416},{"name":"arena_get_etf_flows","fixed":{"name":"arena_get_etf_flows","description":"Spot-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 `impulse` for what the flow is doing — it has four states (accelerating / decelerating / reversal / f","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"days":{"type":"integer","description":"Length of the returned daily series in days (every US trading day in the window). Default 365, clamped 7–1095."},"asset":{"enum":["BTC","ETH","SOL","XRP","LTC","HBAR","DOGE","LINK","AVAX","DOT"],"type":"string","description":"Which US spot-ETF flows. Default BTC. XRP/LTC/HBAR/DOGE/LINK/AVAX/DOT: stored history starts 2026-09-21 (grows daily)."},"format":{"enum":["rows","columns"],"type":"string","description":"Default 'rows' (series[] of objects). 'columns' returns series_columns instead — parallel arrays (date, cum_net_inflow_usd_m, net_flow_usd_m, market_closed) with each field name once; use it for long windows, it is much smaller."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Spot-ETF Net-Flow Trend (BTC / ETH / SOL / XRP and more)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":378,"tokensAfter":378},{"name":"arena_get_fear_greed","fixed":{"name":"arena_get_fear_greed","description":"How 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` moves it anywhere in the history since 2018 (e.g. end_date=2025-10-06 reads the sentiment around the Oct","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"days":{"type":"integer","maximum":365,"minimum":1,"description":"How many daily readings to return (1-365, default 90). The full history since 2018 is deliberately not offered in one response — it is ~3,100 points and does not fit a tool response. The cap limits window SIZE, not position: combine with end_date to read any window since 2018."},"end_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Last day of the window (YYYY-MM-DD, inclusive). Positions the window anywhere in the history since 2018-02 — e.g. end_date=2025-10-06 answers \"what was sentiment at the October 2025 top\". Omit for a window ending today. value/classification/as_of describe the LAST day of the window; cadence/tempo (Pro+) compute on the history up to end_date only, never on later data."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Fear & Greed Index"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":410,"tokensAfter":410},{"name":"arena_get_funding_rate","fixed":{"name":"arena_get_funding_rate","description":"Are 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 pay longs (bearish bias). Read `coverage` before comparing values across dates: it says how many exchan","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"fields":{"enum":["full"],"type":"string","description":"Omit for the default response, which carries `provenance` in short form (grade full/partial/thin, sources_used, sources_expected). 'full' adds the long form: sources_missing (named), sources (licence attribution names), grade_reason, as_of — plus per-part provenance where the composite has parts. A `thin` grade (under half the expected inputs) is never a basis for a verdict or a ranking."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Funding Rate Snapshot"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":314,"tokensAfter":314},{"name":"arena_get_gem_scores","fixed":{"name":"arena_get_gem_scores","description":"Altcoin 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 factors, not a hype list. Limit gated by tier: Free top-10, Pro top-50, Power up to 200 (the full scored set","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"limit":{"type":"integer","maximum":200,"minimum":1,"description":"Number of coins to return (tier-capped)"},"from_rank":{"type":"integer","minimum":1,"description":"Start from this rank (default 1)"}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Altcoin Screener Rankings"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":244,"tokensAfter":244},{"name":"arena_get_historical_analog","fixed":{"name":"arena_get_historical_analog","description":"What 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 sample-size gate checked (gate_applies_to), against which threshold, over which data window. A distrib","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["preset"],"properties":{"asset":{"enum":["BTC","ETH","SOL"],"type":"string","description":"Which asset’s cycle history. Default BTC. ETH/SOL support only price-derived presets (cycle_bottom_cluster, cycle_top_cluster)."},"preset":{"enum":["cycle_bottom_cluster","cycle_top_cluster","deep_fear","euphoria","quiet_volatility"],"type":"string","description":"Named ex-ante cycle-state condition set. One of: cycle_bottom_cluster, cycle_top_cluster, deep_fear, euphoria, quiet_volatility."},"include_path":{"type":"boolean","description":"Default false. true adds path_statistics per horizon (MAE/MFE, days under water, longest under-water streak, days to first recovery) over the same episodes as forward_returns. BTC and predicate presets only (not quiet_volatility, not ETH/SOL in v1)."},"forward_horizons":{"type":"array","items":{"type":"integer","exclusiveMinimum":0},"description":"Forward-return horizons in days. Default [30, 90, 180, 365] — except for quiet_volatility, which defaults to the horizons its study actually tested ([30, 90, 180]); anything beyond that is flagged as outside the protocol."},"vol_rank_threshold":{"enum":[5,10,20,50],"type":"number","description":"quiet_volatility only. Reference threshold as a FIXED step: 50 (default, below trailing median — the studied definition) or 5/10/20 (unusually quiet: RV30 below its trailing Nth percentile). Any value other than 50 sets study_finding_applies=false — the null study covered only the default."},"direction_window_days":{"type":"integer","maximum":90,"minimum":1,"description":"Classification window for condition_on_direction (default 5). Only meaningful together with condition_on_direction."},"condition_on_direction":{"enum":["up","down"],"type":"string","description":"quiet_volatility only. Condition episodes on the direction of the FIRST post-anchor move (sign of the direction_window_days-day return). Horizons <= direction_window_days are suppressed as circular. Sets study_finding_applies=false."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Historical analog — conditional forward returns"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":742,"tokensAfter":742},{"name":"arena_get_indicator_snapshot","fixed":{"name":"arena_get_indicator_snapshot","description":"What 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 window's volume (raw cumulative OBV would mostly rank how long the series has existed). Where the reading s","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"pair":{"type":"string","description":"Pair, e.g. \"BTCUSDT\" (default), \"ETHUSDT\", \"PAXGUSDT\"."},"interval":{"enum":["1d","1w"],"type":"string","description":"Default '1d'. '1w' computes every indicator on weekly bars."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Indicator Snapshot with Historical Percentile Ranks"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":253,"tokensAfter":253},{"name":"arena_get_iv_snapshot","fixed":{"name":"arena_get_iv_snapshot","description":"What 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 priced expensively right now?\". Set include_implied=true to additionally get the FORWARD premium in an ","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["currency"],"properties":{"currency":{"enum":["BTC","ETH"],"type":"string","description":"Currency to fetch IV snapshot for"},"include_implied":{"type":"boolean","description":"Default false (response unchanged). When true, adds an `implied` block with the FORWARD volatility risk premium, its percentile and the historical base rate."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Deribit IV Snapshot"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":282,"tokensAfter":282},{"name":"arena_get_job_status","fixed":{"name":"arena_get_job_status","description":"Is 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]","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["job_id"],"properties":{"job_id":{"type":"string","pattern":"^[0-9a-f-]{36}$","description":"UUID job_id returned by arena_run_universe_backtest."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Async Job Status"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":164,"tokensAfter":164},{"name":"arena_get_key_levels","fixed":{"name":"arena_get_key_levels","description":"Which 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 indicator STANDS as marks — 200-day & 200-week simple moving averages, short-term-holder cost basis, Pi","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get BTC Key Levels (S/R clusters + indicator levels)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":166,"tokensAfter":166},{"name":"arena_get_knowledge","fixed":{"name":"arena_get_knowledge","description":"What 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 knowledge graph: resolved outbound edges (what this object is derived_from / references) + inbound edg","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["type","subject"],"properties":{"type":{"type":"string","description":"Knowledge object type, e.g. 'market_regime'."},"as_of":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Specific date YYYY-MM-DD. Omit for latest."},"subject":{"type":"string","description":"Subject ref, e.g. 'GLOBAL', 'BTC'."},"include_graph":{"type":"boolean","description":"If true, attach the resolved edge neighbourhood (outbound + inbound) for graph traversal."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Knowledge Object"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":315,"tokensAfter":315},{"name":"arena_get_macro_regime","fixed":{"name":"arena_get_macro_regime","description":"What 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_expansion), matrix_quadrant (sweet_spot/late_cycle_warning/crisis/recovery), tier_scores (6 sub-scores), com","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"fields":{"enum":["full"],"type":"string","description":"Omit for the default response, which carries `provenance` in short form (grade full/partial/thin, sources_used, sources_expected). 'full' adds the long form: sources_missing (named), sources (licence attribution names), grade_reason, as_of — plus per-part provenance where the composite has parts. A `thin` grade (under half the expected inputs) is never a basis for a verdict or a ranking."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Macro Regime Snapshot"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":314,"tokensAfter":314},{"name":"arena_get_max_pain","fixed":{"name":"arena_get_max_pain","description":"What 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\" — settles_at (full ISO timestamp) and hours_to_settlement (SIGNED; negative = settled but not yet fin","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"market":{"enum":["DERIBIT_BTC"],"type":"string","description":"Options market. Only DERIBIT_BTC is served: IBIT (BlackRock spot-ETF options) is still collected daily but no longer delivered — the chain comes from an unlicensed source, so it cannot be redistributed (2026-09-24)."},"expiry_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Optional YYYY-MM-DD of ONE open expiry: upcoming[] (and its strike_ladder/gex) is restricted to it, which keeps ladder/GEX responses small; gex_totals still covers the whole book. An expiry that is not open returns invalid_input listing the open ones. Omit for all upcoming expiries."},"include_gex":{"type":"boolean","description":"Default false (response unchanged). DERIBIT_BTC only. When true, each upcoming expiry carries a `gex` block plus `gex_totals` across the whole book: Black-Scholes gamma notional (USD per 1 % spot move) per 2.5 % band from LIVE Deribit mark IV per strike (gex_data_as_of names the fetch, ~10 min cache — a different observation time than the 02:00 UTC snapshot fields). The dealer SIGN is an assumption, not a measurement: both conventions are published side by side (assuming_dealers_short_all, assuming_squeezemetrics_convention); where they disagree, the data does not know the answer. zero_gamma_level flips only under the SqueezeMetrics convention — short-all is <= 0 everywhere and has no zero crossing by construction (its null is structural; zero_gamma_level.note says so). Tau floor 2 h near expiry (tau_clamped flags it); instruments without usable IV are excluded and counted."},"include_strike_ladder":{"type":"boolean","description":"Default false (response unchanged). When true, every expiry carries a `strike_ladder`: open interest per 2.5 % price band around the snapshot spot (±25 %, calls/puts separate, absolute contracts, share_pct), below_range/above_range sums, max_pain_recomputed (cross-check against the stored level) and `delta` vs the previous day's snapshot on the same band grid (null with delta_reason when there is none). OI is a stock, not a side — no hedge direction follows; the note travels with the response."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Deribit BTC Max Pain (latest + upcoming)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":784,"tokensAfter":784},{"name":"arena_get_max_pain_history","fixed":{"name":"arena_get_max_pain_history","description":"Does 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 question PER expiry class (n, median |diff|, shares within 1%/2%, max, sample_adequate at n>=30) — the p","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"days":{"type":"integer","description":"Days back from today (default 90, capped by tier).","exclusiveMinimum":0},"market":{"enum":["DERIBIT_BTC"],"type":"string","description":"Options market. Only DERIBIT_BTC is served: IBIT (BlackRock spot-ETF options) is still collected daily but no longer delivered — the chain comes from an unlicensed source, so it cannot be redistributed (2026-09-24)."},"expiry_type":{"enum":["daily","weekly","monthly","quarterly"],"type":"string","description":"Filter expiries AND open_snapshots to one expiry class (label = highest level reached; the nesting booleans stay untouched). base_rates are always computed BEFORE this filter."},"min_contracts":{"type":"integer","description":"Only finalized expiries with total_contracts >= this (rows with unknown contracts drop out when set).","exclusiveMinimum":0},"snapshot_expiry_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Reduce open_snapshots[] to exactly this expiry date (YYYY-MM-DD). Only meaningful with include_open_snapshots=true."},"include_open_snapshots":{"type":"boolean","description":"Default false. When true, adds open_snapshots[] (daily observations of not-yet-expired contracts) plus open_snapshot_coverage. Omit for the unchanged response."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Deribit BTC Max Pain History"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":543,"tokensAfter":543},{"name":"arena_get_onchain_history","fixed":{"name":"arena_get_onchain_history","description":"How 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: on-chain metrics can be revised retroactively, so this is not a point-in-time vintage. Range capped b","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["series_id"],"properties":{"days":{"type":"integer","description":"Days back from today (clamped by tier).","exclusiveMinimum":0},"series_id":{"type":"string","minLength":1,"description":"BRK series id, e.g. 'mvrv'."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get On-Chain Series Historical Values"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":250,"tokensAfter":250},{"name":"arena_get_onchain_latest","fixed":{"name":"arena_get_onchain_latest","description":"What 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 reading has no context — pair it with the series percentile before calling any level high or low. [Free t","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["series_id"],"properties":{"series_id":{"type":"string","minLength":1,"description":"BRK series id, e.g. 'mvrv', 'sopr', 'realized_price'."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get On-Chain Series Latest Value"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":229,"tokensAfter":229},{"name":"arena_get_pulse","fixed":{"name":"arena_get_pulse","description":"How 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 hot/cold vs history, not just the raw number). score_semantics says which value you hold: the daily sna","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"fields":{"enum":["full"],"type":"string","description":"Omit for the default response. 'full' adds `drivers[]` — each component with value, weight, contribution (the contributions add up to the headline score), percentile_rank against its own stored history (expanding, with basis and n) — plus drivers_note with the exact arithmetic."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Arena Pulse Today"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":281,"tokensAfter":281},{"name":"arena_get_robustness_field","fixed":{"name":"arena_get_robustness_field","description":"Is 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 plateau/spike/fragile/mixed verdict, and — where Sharpe coverage allows — a Deflated Sharpe threshold ","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["strategy","interval","pair","user_cagr"],"properties":{"axis":{"enum":["cross_asset","parameter"],"type":"string","default":"cross_asset","description":"Neighborhood axis. 'cross_asset' (default, dense, carries the verdict + DSR-N) or 'parameter' (secondary, always anecdotal — the parameter settings tested on this one pair)."},"pair":{"type":"string","minLength":1,"description":"Trading pair of your cell, e.g. 'BTCUSDT'."},"params":{"type":"object","description":"Optional: numeric strategy parameters of your cell. Only numeric params define the neighborhood; matched per pair where the factory ran them.","additionalProperties":{"type":"number"}},"interval":{"type":"string","minLength":1,"description":"Candle interval, e.g. '1d', '1w', '1M'."},"strategy":{"type":"string","minLength":1,"description":"Strategy key, e.g. 'rsi_sma'."},"user_cagr":{"type":"number","description":"Your result: CAGR in percent (e.g. 41 for +41%) — the cell being assessed."},"asset_type":{"type":"string","description":"Asset class filter (default 'crypto')."},"user_sharpe":{"type":"number","description":"Optional: your annualized Sharpe (result_sharpe scale). Used for the counted-N Deflated Sharpe where neighbor coverage allows."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Robustness Field — plateau vs. spike + Deflated Sharpe with a counted N"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":530,"tokensAfter":530},{"name":"arena_get_signal_context","fixed":{"name":"arena_get_signal_context","description":"Should 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, with the measured worst-loss / return deltas next to it. Adds the current signal state (anticipated is ","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["strategy","pair"],"properties":{"pair":{"type":"string","minLength":1,"description":"Pair, e.g. 'BTCUSDT'. Case-insensitive."},"detail":{"enum":["headline","full"],"type":"string","description":"'headline' (default): statement + key numbers + decisive filters. 'full': every measured variant plus the raw source blocks."},"interval":{"enum":["1d","2d","3d","1w","1M"],"type":"string","description":"Default '1w'. Candle interval: '1d' daily, '2d'/'3d' multi-day, '1w' weekly, '1M' monthly. Multi-day candles (2d/3d) are anchored to the Unix epoch, so one of n possible alignments is used. Measured on our own corpus, the choice of alignment alone moves CAGR by 6.66 pp on average (max 12.30). Treat differences below that as not distinguishable — 1d/2d/3d behaved as one block in our tests, not a ranking."},"strategy":{"type":"string","minLength":1,"description":"Strategy key, e.g. 'rsi_sma'. See arena_list_strategies."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Signal Context — filters vs. today, in one call"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":446,"tokensAfter":446},{"name":"arena_get_spot_price","fixed":{"name":"arena_get_spot_price","description":"Current 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]","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get BTC/ETH/SOL Spot Price"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":120,"tokensAfter":120},{"name":"arena_get_stablecoin_supply","fixed":{"name":"arena_get_stablecoin_supply","description":"Aggregate 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 is doing — four states (accelerating / decelerating / reversal / flat). The neighbouring `acceleratio","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"days":{"type":"integer","description":"Length of the returned daily series in days. Default 365, clamped 7–1095."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Stablecoin Supply Trend"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":222,"tokensAfter":222},{"name":"arena_get_sth_cost_basis","fixed":{"name":"arena_get_sth_cost_basis","description":"What 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 payload; similar construction to public STH band charts, own convention — not a rebuild). band_zone names the stat","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true},"title":"Get BTC Short-Term-Holder Cost Basis (latest)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":167,"tokensAfter":167},{"name":"arena_get_strategy_filter_effect","fixed":{"name":"arena_get_strategy_filter_effect","description":"What 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 below the data gate) + not_applicable_filters list (e.g. altcoin_season excluded on BTC-pair). Baselin","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["strategy","asset"],"properties":{"asset":{"type":"string","description":"Pair / symbol (e.g. BTCUSDT). Case-insensitive."},"interval":{"enum":["1d","2d","3d","1w","1M"],"type":"string","description":"Default '1w'. Candle interval: '1d' daily, '2d'/'3d' multi-day, '1w' weekly, '1M' monthly. Multi-day candles (2d/3d) are anchored to the Unix epoch, so one of n possible alignments is used. Measured on our own corpus, the choice of alignment alone moves CAGR by 6.66 pp on average (max 12.30). Treat differences below that as not distinguishable — 1d/2d/3d behaved as one block in our tests, not a ranking."},"strategy":{"type":"string","description":"Strategy key (see arena_get_strategies)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Strategy Filter Effect Snapshot (per Asset)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":384,"tokensAfter":384},{"name":"arena_get_strategy_insights","fixed":{"name":"arena_get_strategy_insights","description":"Which 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_reference_v2); the response then carries `plan_capped: true` plus `plan_cap_note`, so a short matrix","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"interval":{"enum":["1d","2d","3d","1w","1M"],"type":"string","description":"Detail mode: interval. Candle interval: '1d' daily, '2d'/'3d' multi-day, '1w' weekly, '1M' monthly. Multi-day candles (2d/3d) are anchored to the Unix epoch, so one of n possible alignments is used. Measured on our own corpus, the choice of alignment alone moves CAGR by 6.66 pp on average (max 12.30). Treat differences below that as not distinguishable — 1d/2d/3d behaved as one block in our tests, not a ranking."},"min_runs":{"type":"integer","description":"Matrix mode: minimum runs per cell. Default 5.","exclusiveMinimum":0},"strategy":{"type":"string","description":"Detail mode: strategy key (used together with `interval`)."},"asset_type":{"enum":["crypto","tokenized_equity","tokenized_etf","commodities"],"type":"string","description":"Restrict to one asset class."},"assets_mode":{"enum":["all","top10"],"type":"string","description":"'top10' restricts to top-10 pairs by run-count."},"ref_strategy":{"enum":["bh","dca"],"type":"string","description":"Benchmark reference. Default 'bh'."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Strategy Insights Matrix or Detail"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":490,"tokensAfter":490},{"name":"arena_get_strategy_performance","fixed":{"name":"arena_get_strategy_performance","description":"How 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 value, aggregation data window). For multi-strategy overview use arena_get_strategy_insights. Use this t","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["strategy","asset"],"properties":{"asset":{"type":"string","description":"Crypto pair / symbol (e.g. BTCUSDT, ETHUSDT). Case-insensitive."},"interval":{"enum":["1d","2d","3d","1w","1M"],"type":"string","description":"Default '1w'. Candle interval: '1d' daily, '2d'/'3d' multi-day, '1w' weekly, '1M' monthly. Multi-day candles (2d/3d) are anchored to the Unix epoch, so one of n possible alignments is used. Measured on our own corpus, the choice of alignment alone moves CAGR by 6.66 pp on average (max 12.30). Treat differences below that as not distinguishable — 1d/2d/3d behaved as one block in our tests, not a ranking."},"strategy":{"type":"string","description":"Strategy key (e.g. rsi_sma, golden_cross). See arena_get_strategies for valid keys."},"asset_type":{"enum":["crypto","tokenized_equity","tokenized_etf","commodities"],"type":"string","description":"Optional asset class filter to disambiguate (e.g. when same pair-name exists in two classes)."},"ref_strategy":{"enum":["bh","dca"],"type":"string","description":"Benchmark reference. Default 'bh' (Buy & Hold)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Strategy Performance Snapshot (per Asset)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":490,"tokensAfter":490},{"name":"arena_get_strategy_performance_by_regime","fixed":{"name":"arena_get_strategy_performance_by_regime","description":"In 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 the per-cell tools, where the pool is stable). Each regime bucket returns trades, trades_per_config (t","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["strategy","asset"],"properties":{"asset":{"type":"string","description":"Crypto pair / symbol (e.g. BTCUSDT, ETHUSDT). Case-insensitive."},"interval":{"enum":["1d","2d","3d","1w","1M"],"type":"string","description":"Default '1w'. Candle interval: '1d' daily, '2d'/'3d' multi-day, '1w' weekly, '1M' monthly. Multi-day candles (2d/3d) are anchored to the Unix epoch, so one of n possible alignments is used. Measured on our own corpus, the choice of alignment alone moves CAGR by 6.66 pp on average (max 12.30). Treat differences below that as not distinguishable — 1d/2d/3d behaved as one block in our tests, not a ranking."},"strategy":{"type":"string","description":"Strategy key (e.g. rsi_sma, golden_cross). See arena_get_strategies."},"asset_type":{"enum":["crypto","tokenized_equity","tokenized_etf","commodities"],"type":"string","description":"Optional asset class filter to disambiguate identical pair-names."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Regime-Aware Strategy Performance"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":449,"tokensAfter":449},{"name":"arena_get_universe","fixed":{"name":"arena_get_universe","description":"Which 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 the CURRENT membership (CoinGecko market-cap rank) — a backtest over it carries survivorship bias fo","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["universe_id"],"properties":{"as_of":{"type":"string","description":"Optional YYYY-MM-DD. Point-in-time membership on that day (recorded since 2026-07-14, volume-ranked)."},"universe_id":{"type":"string","minLength":1,"description":"Universe id, e.g. 'crypto-top-50'."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get Universe Detail"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":262,"tokensAfter":262},{"name":"arena_get_volatility_history","fixed":{"name":"arena_get_volatility_history","description":"How 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, but they include BTC's structural volatility decline; `rvRankRolling`/`atrPctAnnRankRolling` rank against a","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"to":{"type":"string","description":"ISO date (YYYY-MM-DD), inclusive. End of the window. Defaults to the latest bar."},"days":{"type":"integer","description":"Number of most recent days to return. Free tier capped at 365; API Pro unlimited. Ignored when from/to are given.","exclusiveMinimum":0},"from":{"type":"string","description":"ISO date (YYYY-MM-DD), inclusive. Start of the window. Free tier still only sees the last 365 days."},"meta":{"enum":["full","minimal"],"type":"string","description":"Default full. 'minimal' drops params/params_hash/warmup, which are only useful on the first call."},"fields":{"enum":["minimal","full"],"type":"string","description":"Default full. 'minimal' returns date, close, rv, rvRank, rvRankRolling, atrPctAnnRank, atrPctAnnRankRolling only — measured saving 18–20 % of characters (full-history series, 2026-07-31; the `size` block in the response has the figure for your actual call), not a fifth of the size. Combine with granularity or a from/to window for a real reduction; dropping fields alone saves less than it looks."},"format":{"enum":["rows","columns"],"type":"string","description":"Default 'rows' (series[] of objects). 'columns' returns series_columns instead — one array per field (date, close, rv, …) with each field name written once; the largest single saving for long ranges. Combines with fields, granularity and schema_version (the size block then measures the combined saving)."},"granularity":{"enum":["daily","weekly","monthly"],"type":"string","description":"Default daily. weekly/monthly keep the LAST observation of each period (a state, not an average)."},"schema_version":{"enum":["2026-07","2026-08"],"type":"string","description":"Default '2026-07' (unchanged output). '2026-08' rounds floats to 2 decimals (ranks 1) and reports the saving. Default flips 2026-11-01."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Get BTC Volatility History (RV + ATR%)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":702,"tokensAfter":702},{"name":"arena_list_backtests","fixed":{"name":"arena_list_backtests","description":"Which 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 via limit + offset. [API Pro tier]","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"pair":{"type":"string","description":"Filter by pair symbol, e.g. BTCUSDT. Omit for all."},"limit":{"type":"integer","maximum":100,"description":"Page size, max 100, default 50.","exclusiveMinimum":0},"offset":{"type":"integer","minimum":0,"description":"Rows to skip for paging; default 0."},"interval":{"enum":["1d","2d","3d","1w","1M"],"type":"string","description":"Filter by candle interval; omit for all. Candle interval: '1d' daily, '2d'/'3d' multi-day, '1w' weekly, '1M' monthly. Multi-day candles (2d/3d) are anchored to the Unix epoch, so one of n possible alignments is used. Measured on our own corpus, the choice of alignment alone moves CAGR by 6.66 pp on average (max 12.30). Treat differences below that as not distinguishable — 1d/2d/3d behaved as one block in our tests, not a ranking."},"strategy":{"type":"string","description":"Filter by strategy key, e.g. 'rsi_sma'. Omit for all."},"asset_type":{"enum":["crypto","tokenized_equity","tokenized_etf","commodities"],"type":"string","description":"Filter by asset class, e.g. 'crypto'. Omit for all."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List Your Backtests"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":467,"tokensAfter":467},{"name":"arena_list_knowledge","fixed":{"name":"arena_list_knowledge","description":"What 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]","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{}},"annotations":{"readOnlyHint":true},"title":"List Knowledge Objects (catalog)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":125,"tokensAfter":125},{"name":"arena_list_onchain_series","fixed":{"name":"arena_list_onchain_series","description":"Which on-chain series are available? Lists all 71 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]","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true},"title":"List Available BRK On-Chain Series"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":129,"tokensAfter":129},{"name":"arena_list_strategies","fixed":{"name":"arena_list_strategies","description":"Which 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 call arena_run_backtest or validate_strategy for those combinations, they return 400. [Free tier]","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","properties":{"lang":{"enum":["de","en"],"type":"string","description":"Localized names/taglines. Default 'en'."},"plan":{"enum":["free","pro","elite"],"type":"string","description":"Filter to strategies of this plan tier."},"asset_class":{"enum":["crypto","tokenized_rwa"],"type":"string","description":"Filter to strategies supporting this asset class (crypto or tokenized_rwa)."}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"List Available Trading Strategies"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":289,"tokensAfter":289},{"name":"arena_list_universes","fixed":{"name":"arena_list_universes","description":"Which 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]","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true},"title":"List Asset Universes"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":85,"tokensAfter":85},{"name":"arena_run_backtest","fixed":{"name":"arena_run_backtest","description":"How 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_compare_strategies; for many pairs at once use arena_run_universe_backtest; to judge whether an EXISTING res","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["strategy","pair","asset_type","interval","date_from"],"properties":{"pair":{"type":"string","minLength":1,"description":"Crypto pair symbol, e.g. BTCUSDT, ETHUSDT, SOLUSDT."},"params":{"type":"object","description":"Strategy-specific parameters, e.g. { rsi_period: 14 }. Omit to use the audited defaults — changing them without a reason is how overfitting starts.","additionalProperties":{}},"capital":{"type":"number","description":"Starting capital in quote currency. Default 10000. Affects absolute figures only, not CAGR or win-rate.","exclusiveMinimum":0},"date_to":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"End date, YYYY-MM-DD. Default: today."},"filters":{"type":"object","properties":{"wma200":{"type":"boolean","description":"200-week MA filter (BTC-derived): only take entries while BTC trades above its 200-week SMA."},"atrMode":{"enum":["off","low","high","expansion"],"type":"string","description":"ATR volatility regime filter. 'low'/'high' restrict entries to that volatility band, 'expansion' to rising volatility. Default 'off'."},"stochRsiWeekly":{"type":"boolean","description":"Asset-specific weekly Stoch-RSI gate: entries only while the pair's weekly StochRSI(14) sits above its SMA(3). Default false."},"altcoinSeasonMode":{"enum":["off","aggressive","conservative"],"type":"string","description":"Altcoin-Season gate. 'conservative' needs a confirmed alt season, 'aggressive' an early one. Default 'off'."},"bullmarketStageMode":{"enum":["off","early","confirmed","strict"],"type":"string","description":"Bull-market stage gate from the BTC cycle model; rising strictness from 'early' to 'strict'. Default 'off'."},"minProfitGuardThreshold":{"type":"number","description":"Per-trade min profit guard (negative cap, e.g. -10 = exit once a trade is 10% under water)."}},"description":"Optional entry filters (Pro+). Each one only ever REMOVES entries — filters never create trades. Omit for the unfiltered baseline.","additionalProperties":false},"interval":{"enum":["1d","2d","3d","1w","1M"],"type":"string","description":"Candle interval: '1d' daily, '2d'/'3d' multi-day, '1w' weekly, '1M' monthly. Multi-day candles (2d/3d) are anchored to the Unix epoch, so one of n possible alignments is used. Measured on our own corpus, the choice of alignment alone moves CAGR by 6.66 pp on average (max 12.30). Treat differences below that as not distinguishable — 1d/2d/3d behaved as one block in our tests, not a ranking."},"strategy":{"type":"string","minLength":1,"description":"Strategy key — use arena_list_strategies to find valid keys."},"date_from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Start date, YYYY-MM-DD. Earlier than the pair listing is clamped to the first available candle."},"asset_type":{"enum":["crypto","tokenized_equity","tokenized_etf","commodities"],"type":"string","description":"Asset class. Use 'crypto' unless you are explicitly backtesting a tokenized real-world asset. Note: tokenized stocks/ETFs/gold trade AS crypto pairs (e.g. spybUSDT, qqqbUSDT) — there is no separate stocks/forex backtest surface; non-crypto asset classes were retired."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Run a New Backtest"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":1061,"tokensAfter":1061},{"name":"arena_run_grid_backtest","fixed":{"name":"arena_run_grid_backtest","description":"Would 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 fees (identity_check_usd must be ~0); `benchmarks` anchors buy-and-hold, the never-touched starting spl","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["pair","start_date","end_date","total_investment","low_price","high_price","grid_count","grid_type","fee_rate"],"properties":{"pair":{"type":"string","minLength":1,"description":"Crypto pair symbol, e.g. BTCUSDT. Free tier: BTCUSDT or ETHUSDT only."},"end_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Simulation end, YYYY-MM-DD."},"fee_rate":{"type":"number","maximum":0.01,"minimum":0,"description":"Per-trade fee fraction, e.g. 0.001 for 0.1% (Binance spot taker)."},"leverage":{"enum":[1,2,3,5],"type":"number","description":"Optional, default 1 (spot grid, unchanged). 2/3/5 = isolated-margin long grid (grid_mode must be long; Pro). Adds liquidated, liquidation_time/price, funding_cost_usd and max_notional_exposure to the result; final_value/total_return are then on the margin."},"grid_mode":{"enum":["neutral","long"],"type":"string","description":"'neutral' (default): buys coins for every level above the entry at the start (the coin share follows the entry's position in the range — measured 2–83 %, NOT a fixed 50/50; see benchmarks.static_allocation.coin_share_start), then buys and sells around the entry. 'long': starts 100% in cash, buys dips below the entry, sells on recovery — required for leverage (with leverage the start follows start_rule)."},"grid_type":{"enum":["arithmetic","geometric"],"type":"string","description":"Level spacing: 'arithmetic' = equal price steps, 'geometric' = equal percentage steps (usually the better fit for crypto)."},"low_price":{"type":"number","description":"Lower bound of the grid range, in quote currency. Below it the bot is fully invested and stops buying.","exclusiveMinimum":0},"grid_count":{"type":"integer","maximum":200,"minimum":2,"description":"Number of grid levels between low_price and high_price (2–200). More levels = more, smaller trades = more fees."},"high_price":{"type":"number","description":"Upper bound of the grid range, in quote currency. Above it the bot is fully in cash and stops selling. Must exceed low_price.","exclusiveMinimum":0},"start_date":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Simulation start, YYYY-MM-DD."},"start_rule":{"enum":["initial_position","cash"],"type":"string","description":"Only with leverage > 1. 'initial_position' (default, exchange rule of a futures long grid): at the start the bot buys one grid amount for every level above the entry at the entry price, so it holds a position — and carries funding and liquidation risk — from the first candle. 'cash': starts 100% in cash and only buys once price falls to a buy level (idle after a rising start)."},"entry_price":{"type":"number","description":"Optional price at which the bot starts; default is the OPEN of the first candle (must lie inside low_price..high_price).","exclusiveMinimum":0},"funding_mode":{"enum":["none","conservative","historical"],"type":"string","description":"Only with leverage > 1. 'conservative' (default): flat 0.05%/day on the open position. 'historical': recorded daily average of three exchanges, BTCUSDT from 2019-09-08 only — otherwise falls back to conservative and flags funding_fell_back_to_conservative. 'none': no funding (optimistic)."},"stop_loss_price":{"type":"number","description":"Optional: liquidate the whole grid and stop once price falls to this level.","exclusiveMinimum":0},"total_investment":{"type":"number","description":"Capital in USDT spread across the grid; min 100.","exclusiveMinimum":0},"take_profit_price":{"type":"number","description":"Optional: liquidate the whole grid and stop once price rises to this level.","exclusiveMinimum":0},"stop_on_range_exit":{"type":"boolean","description":"Optional (default false): stop once a candle CLOSES outside low_price..high_price — sell all coins at that close, stop_reason range_exit_high/low. Default: the grid pauses outside the range and resumes when price returns."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Run a Grid-Trading Backtest"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":1271,"tokensAfter":1271},{"name":"arena_run_universe_backtest","fixed":{"name":"arena_run_universe_backtest","description":"Does 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 result is NOT in this response. You MUST poll arena_get_job_status until status is 'completed'; estima","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["strategy","interval","date_from"],"properties":{"pairs":{"type":"array","items":{"type":"string"},"maxItems":250,"description":"Explicit pair list. Hard schema limit 250; the effective cap is your tier (Pro 50, Power 250). Use instead of universe_id."},"params":{"type":"object","description":"Strategy-specific parameters applied to EVERY pair in the universe. Omit for audited defaults.","additionalProperties":{}},"capital":{"type":"number","description":"Starting capital in quote currency. Default 10000. Affects absolute figures only, not CAGR or win-rate.","exclusiveMinimum":0},"date_to":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"End date, YYYY-MM-DD. Default: today."},"filters":{"type":"object","properties":{"wma200":{"type":"boolean","description":"200-week MA filter (BTC-derived): only take entries while BTC trades above its 200-week SMA."},"atrMode":{"enum":["off","low","high","expansion"],"type":"string","description":"ATR volatility regime filter. 'low'/'high' restrict entries to that volatility band, 'expansion' to rising volatility. Default 'off'."},"stochRsiWeekly":{"type":"boolean","description":"Asset-specific weekly Stoch-RSI gate: entries only while the pair's weekly StochRSI(14) sits above its SMA(3). Default false."},"altcoinSeasonMode":{"enum":["off","aggressive","conservative"],"type":"string","description":"Altcoin-Season gate. 'conservative' needs a confirmed alt season, 'aggressive' an early one. Default 'off'."},"bullmarketStageMode":{"enum":["off","early","confirmed","strict"],"type":"string","description":"Bull-market stage gate from the BTC cycle model; rising strictness from 'early' to 'strict'. Default 'off'."},"minProfitGuardThreshold":{"type":"number","description":"Per-trade min profit guard (negative cap, e.g. -10 = exit once a trade is 10% under water)."}},"description":"Optional entry filters (Pro+). Each one only ever REMOVES entries — filters never create trades. Omit for the unfiltered baseline.","additionalProperties":false},"interval":{"enum":["1d","2d","3d","1w","1M"],"type":"string","description":"Candle interval: '1d' daily, '2d'/'3d' multi-day, '1w' weekly, '1M' monthly. Multi-day candles (2d/3d) are anchored to the Unix epoch, so one of n possible alignments is used. Measured on our own corpus, the choice of alignment alone moves CAGR by 6.66 pp on average (max 12.30). Treat differences below that as not distinguishable — 1d/2d/3d behaved as one block in our tests, not a ranking."},"strategy":{"type":"string","minLength":1,"description":"Strategy key — call arena_list_strategies."},"date_from":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$","description":"Start date, YYYY-MM-DD. Earlier than the pair listing is clamped to the first available candle."},"universe_id":{"type":"string","description":"Pre-curated universe — call arena_list_universes for valid IDs. Capped by tier (Pro 50, Power 250); a larger universe is rejected rather than silently truncated."}},"additionalProperties":false},"annotations":{"readOnlyHint":false,"destructiveHint":false,"idempotentHint":false},"title":"Run Backtest on a Pair Universe (async)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: false, destructiveHint: false, idempotentHint: false (inferred from the name).","verify":true}],"tokensBefore":1018,"tokensAfter":1018},{"name":"arena_status","fixed":{"name":"arena_status","description":"Am 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 outages. [Free tier]","inputSchema":{"type":"object","properties":{}},"annotations":{"readOnlyHint":true},"title":"Connection, Auth & Quota Status"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":141,"tokensAfter":141},{"name":"validate_strategy","fixed":{"name":"validate_strategy","description":"Does 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 list. Accepts a named catalog strategy (type=rules), a timestamped BUY/SELL signal list (signal_list), o","inputSchema":{"type":"object","$schema":"http://json-schema.org/draft-07/schema#","required":["strategy","market","window"],"properties":{"oos":{"type":"object","properties":{"scheme":{"enum":["split","walk_forward"],"type":"string","description":"Out-of-sample scheme: 'split' (one in-sample/out-of-sample cut, default) or 'walk_forward' (rolling re-evaluation)."},"split_frac":{"type":"number","maximum":0.9,"minimum":0.3,"description":"In-sample fraction for scheme=split; default 0.7."}},"description":"How the claim is tested out-of-sample. Omit for the default split — the out-of-sample part is what separates a finding from a fit.","additionalProperties":false},"costs":{"type":"object","required":["fee_bps"],"properties":{"fee_bps":{"type":"number","minimum":0,"description":"Per-side fee in basis points, e.g. 10 = 0.10%."}},"description":"Trading costs. Default 10 bps (crypto) / 5 bps (else) — a gross-only claim usually shrinks once these apply.","additionalProperties":false},"market":{"type":"object","required":["symbol","asset_type","interval"],"properties":{"symbol":{"type":"string","description":"Pair / symbol the strategy is claimed to work on, e.g. BTCUSDT."},"interval":{"enum":["1d","2d","3d","1w","1M"],"type":"string","description":"Candle interval the signals refer to. Candle interval: '1d' daily, '2d'/'3d' multi-day, '1w' weekly, '1M' monthly. Multi-day candles (2d/3d) are anchored to the Unix epoch, so one of n possible alignments is used. Measured on our own corpus, the choice of alignment alone moves CAGR by 6.66 pp on average (max 12.30). Treat differences below that as not distinguishable — 1d/2d/3d behaved as one block in our tests, not a ranking."},"asset_type":{"enum":["crypto","tokenized_equity","tokenized_etf","commodities"],"type":"string","description":"Asset class, normally 'crypto'."}},"description":"Which market the claim is about — prices are re-fetched from here, not taken from you.","additionalProperties":false},"window":{"type":"object","required":["from"],"properties":{"to":{"type":"string","description":"Evaluation end, YYYY-MM-DD. Default: today."},"from":{"type":"string","description":"Evaluation start, YYYY-MM-DD."}},"description":"Period over which the claim is checked.","additionalProperties":false},"strategy":{"type":"object","required":["type"],"properties":{"name":{"type":"string","description":"Catalog strategy key (type=rules), e.g. 'rsi_sma'."},"type":{"enum":["rules","signal_list","trade_list"],"type":"string","description":"How the claim is supplied: 'rules' = a catalog strategy re-run by us · 'signal_list' = your timestamped BUY/SELL decisions · 'trade_list' = your finished round-trips."},"params":{"type":"object","description":"Strategy parameters for type=rules; omit for the audited defaults.","additionalProperties":{}},"trades":{"type":"array","items":{"type":"object","required":["entry_ts","entry_px","exit_ts","exit_px"],"properties":{"side":{"enum":["long","short"],"type":"string"},"exit_px":{"type":"number"},"exit_ts":{"type":"string"},"entry_px":{"type":"number"},"entry_ts":{"type":"string"}},"additionalProperties":false},"description":"type=trade_list: timestamped round-trips with the prices you claim you got."},"signals":{"type":"array","items":{"type":"object","required":["ts","side"],"properties":{"ts":{"type":"string","description":"ISO timestamp of the decision."},"side":{"enum":["buy","sell"],"type":"string"}},"additionalProperties":false},"description":"type=signal_list: timestamped BUY/SELL signals (paired into round-trips)."}},"description":"The claim being validated — supply exactly one of: a catalog strategy (type=rules), your signals (type=signal_list) or your finished trades (type=trade_list).","additionalProperties":false}},"additionalProperties":false},"annotations":{"readOnlyHint":true},"title":"Validate a strategy/signal (honest backtest)"},"changes":[{"kind":"annotations","detail":"Added readOnlyHint: true (inferred from the name).","verify":true}],"tokensBefore":1204,"tokensAfter":1204}],"toolsChanged":46,"tokensSaved":0,"todo":[],"note":"Deterministic fixes. Changes marked verify need a human look before shipping (renames, inferred annotations, inferred types, removed text). Parameter descriptions in `todo` need to be written by someone who knows the API."}