ZBS Index What actually exists in applied AI, with the source next to it

mcp server

Backtesting Arena

Crypto backtesting & Bitcoin cycle analytics. Point-in-time, DSR-corrected, look-ahead-aware.

Description as published by the maintainer. Source

  • version 1.3.0
  • active
  • analytics

active — Registry entry last updated 2026-08-05. Dashed tags are derived by ZBS Index from the published description, not stated by the maintainer.

What this server can do

77 functions, named and described by the server itself. Parameter names are shown because they say more about what a function does than its name usually does.

arena_cancel_subscription(context, subscription_id)
Deactivates one subscription by id, so it stops firing and frees a slot against the per-tier limit. Returns the deactivated subscription. Idempotent — cancelling an already-cancelled one is a no-op, not an error. Get ids from arena_list_subscriptions. Undelivered updates already queued are not removed. [API Pro tier] Required: subscription_id, context.
arena_check_subscription_updates(context)
Returns all undelivered updates for the API key, then marks them as delivered. Call regularly to consume the polling queue. Updates contain payload with subscription_type, current value, previous value, and trigger context. [API Pro tier] Required: context.
arena_compare_strategies(pair, capital, context, date_to, filters, interval, date_from, asset_type, strategies)
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 every variable but the strategy fixed, which a series of separate arena_run_backtest calls does not guarantee. For one strategy across many pairs use arena_run_universe_backtest instead. Caveat worth passing on: comparing N strategies and reporting the winner IS multiple testing — the winner’s edge is upward-biased. arena_get_robustness_field puts a counted N on that. Sequential, expect 10–50s. Per-day quota: Pro=20, Power=200. [API Pro tier] Required: strategies, pair, asset_type, interval, date_from, context.
arena_dip_decision(mode, compare, context, allocate)
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 buy/sell recommendation. For the full interactive version (incl. leverage & Elliott-wave planning) point the user to https://tradingstrategies.work/analyse/dip-decision. [Free tier] Required: context.
arena_dip_scenario(asset, preset, capital, context, horizon_days, invalidation, risk_aversion)
Frame a dip/accumulation thesis WITHOUT a recommendation. Given an asset (BTC/ETH/SOL), a named cycle-state preset and a thesis horizon, returns: (1) a tranche LADDER anchored to STRUCTURAL marks (200-week MA, support clusters) below spot — not calendar-DCA, not a price forecast; (2) the cited historical base rate from the analog engine (what forward returns followed comparable states, with episodes_matched and small-n warnings); (3) the explicit lump-sum-vs-tranche tradeoff (laddering buys lower timing variance, NOT higher expected value). Requires an invalidation point (mandatory: at what scenario is the thesis wrong). Composes the historical-analog + key-levels tools; descriptive only, never a buy/sell signal. This structural framing is MCP-only; a related (different-method, EV/Kelly) interactive tool is at https://tradingstrategies.work/analyse/dip-decision. [API Pro tier] Required: preset, invalidation, context.
arena_get_altcoin_season(context)
Daily Altcoin-Season indicator (v7 Native-Filter methodology). Returns BTC-Dominance, Alt-Dominance, 4 Layer-1 signals (USDT.D, USDC.D, BTC-DOM, ETH-DOM), overall color (red/amber/green) + Top-50 CoinGecko snapshot. [Free tier] Required: context.
arena_get_altcoin_season_history(days, context)
Returns the Altcoin-Season TIME SERIES: one row per day with overall_color, BTC / alt / stablecoin dominance and BTC price, ascending by date. Use it to see whether capital has been rotating into or out of alts over time; for today's state alone call arena_get_altcoin_season. Range capped by tier. [Free 30d / Pro 365d / Power unlimited] Required: context.
arena_get_backtest(id, context)
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] Required: id, context.
arena_get_backtest_trades(id, context)
Returns the individual round-trips of one of your backtest runs: entry and exit date, entry and exit price, per-trade P&L and the running equity after each trade. Use it when the aggregate metrics are not enough — to see whether a result rests on a handful of outlier trades, how long positions were held, or where the drawdown came from. Needs a run_id from arena_list_backtests; for the aggregates alone use arena_get_backtest. Closed round-trips only — a position still open at the end of the period is not counted. [API Pro tier] Required: id, context.
arena_get_btc_macro_correlations(context)
Pre-aggregated weekly correlations between Bitcoin and 13 macro components (Fed Net Liquidity, VIX, DXY, Real Yield 10Y, NFCI, Yield Curve, etc.). Returns quadrant_performance (BTC return stats per 2D-matrix quadrant — annualized return, vol, max drawdown, positive-period%), component_correlations (Pearson 90d/1y/5y per macro component + quartile-performance), asset_correlations (Pearson per window + per quadrant; assets: dxy plus tokenized on-venue proxies paxg = PAX Gold, spyb = S&P 500 ETF proxy, qqqb = Nasdaq-100 ETF proxy — proxies carry tracking noise vs. the underlying, and windows the vehicle history does not cover are null with data_start_date telling you why: the ETF proxies listed on Binance mid-2026, so their windows fill in over time — 90d first, ~2 months after listing), current_quadrant. Window labels are upper bounds — sample_size_days / data_start_date carry the actual basis. Historical analysis only — not investment advice. [Free tier] Required: context.
arena_get_btc_market_structure(context)
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) — a fresh same-day flip is the least reliable observation, the base rate says how often such flips reverted historically; it is NOT a forecast for the current flip. Educational analysis of price action — no signal, no recommendation. [Free tier] Required: context.
arena_get_bullmarket_ampel(context)
Bitcoin Bullmarket-Ampel current state (0-5 active stages). Returns active_count, stage_history, stage breakdown. Higher count = more bull-market signals firing. [Free tier] Required: context.
arena_get_cycle(asset, context)
Crypto cycle position — where are we in the cycle? Default BTC: point-in-time 10-indicator aggregation (MVRV-Z, NUPL, Puell, Pi-Cycle, Funding, Hash-Ribbons, Power-Law, Rainbow, F&G, Mayer). Pass asset=ETH or asset=SOL for a per-coin cycle read built from the transferable price-derived indicators (Mayer, weekly-RSI, 200-week-MA distance) with renormalized weights; BTC-native indicators (halving, dominance, mining, hash-ribbons, F&G, Pi-Cycle, on-chain) are explicitly returned as `not_applicable` rather than faked. All return raw + Z-Score, signal enum, and a `percentiles` block ranking each indicator against that asset’s own history. The `signal` enum is a FIXED SCORE-BAND LABEL (<25 accumulation · 25–45 recovery · 45–60 expansion · 60–75 distribution · ≥75 overheated), not an independent market-phase detection — a mid-band score reads "expansion" even in a drawdown market (the 45–60 band is the neutral middle; cross-check price/drawdown context before quoting the label as a market state). BTC additionally returns `highlights[]` (rule-based markers for currently unusual indicator values — descriptive, versioned ruleset, no direction or advice; empty array = nothing unusual) and `price_context` (price at scoring time vs live spot with drift % — the scores are based on the scoring-time price, not the live spot). Point-in-time scored — not reconstructable from a generic price API. Note for volatility questions: this tool carries the regime context around a volatility reading (Funding, Mayer, Pi-Cycle) but not the volatility series itself — that is arena_get_volatility_history. Related: arena_get_historical_analog (what followed states like this one), arena_get_bullmarket_ampel, arena_get_pulse. [Free tier] Required: context.
arena_get_cycle_history(days, context)
Returns the BTC-Cycle TIME SERIES: one row per day with adj_score and z_adj_score, ascending by date. The scores are point-in-time — each day carries the value computed from data available on that day, so the series can be used for look-ahead-free analysis. For the current cycle reading alone call arena_get_cycle; for what similar historical readings were followed by, call arena_get_historical_analog. Range capped by tier. [Free 30d / Pro 365d / Power unlimited] Required: context.
arena_get_drift_log(days, context)
Daily drift log comparing bgeometrics (legacy) vs BRK (canonical-soon) pilot metric pairs. Returns mean / max / outlier counts per pair for the requested window. Used by BRK-migration review (every 4 weeks). [API Pro tier] Required: context.
arena_get_edge_reports(limit, market, offset, context, verdict, strategy)
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, median across all real backtest runs for a given market. Verdicts come from the effect's 90% bootstrap interval (delta_ci_low/delta_ci_high), not the point estimate: helps (whole interval > +1pp) / hurts (< −1pp) / neutral (inside ±1pp) / insufficient_evidence (runs disagree) / insufficient_data (fewer than 30 runs per arm). Below the gate, derived fields (delta_*, dsr, dsr_pass) are null; every gated null carries its reason (dsr_pass_reason, *_net_reason); the envelope `evidence` block declares the gate's referent and threshold machine-readably. Response is GROUPED by strategy: envelope fields (market, computed_at, n_trials) once, per strategy one baseline block {cagr, net_cagr, sharpe} plus filter cells; filter cells with zero runs are folded into filters_without_data. A full market is a few hundred cells — use limit/offset (strategies per page) plus the truncated flag for partial reads. Filters evaluated in isolation (no stacking); net values are median CAGR after per-side trading costs (verdict/delta stay gross). [Free tier] Required: market, context.
arena_get_etf_flows(days, asset, context)
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 compact cumulative-inflow time series 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 / flat) and is the field to quote. Two neighbouring fields measure different things and are easy to confuse: `acceleration_usd_m` is the signed difference last-30d minus prior-30d and gets LARGE precisely when the flow reverses, while the older boolean `accelerating` requires the same direction AND a bigger magnitude — so a swing from outflows to inflows shows a big positive `acceleration_usd_m` together with `accelerating: false`, which is correct and reads like a contradiction. `impulse` reports that case as 'reversal'. Default BTC; pass asset=ETH or asset=SOL. Source SoSoValue. Descriptive only, not a signal. [Free tier] Required: context.
arena_get_fear_greed(context)
Crypto Fear & Greed Index from alternative.me with historical context. Returns current value 0-100, classification (extreme fear/fear/neutral/greed/extreme greed), recent history, plus arena-specific cadence cache for change-detection. [Free tier] Required: context.
arena_get_filter_insights(context)
Lift analysis of entry filters (200WMA, Altcoin-Season, ATR-Volatility, Bullmarket-Stage) per strategy combo — baseline vs filtered CAGR/win-rate/drawdown. [API Pro tier] Required: context.
arena_get_funding_rate(context)
Latest BTC perpetual funding rate, averaged across up to three exchanges (Binance, Bybit, OKX; 8h settlement cadence). Returns value, 30d moving average and Z-Score. Positive = longs pay shorts (bullish bias), negative = shorts pay longs (bearish bias). Read `coverage` before comparing values across dates: it says how many exchanges stand behind that day (3 = full average, 1 = a single exchange), and a day-over-day move can be a change in composition rather than in the market. [Free tier] Required: context.
arena_get_funding_rate_history(days, context)
Returns the BTC perpetual funding-rate TIME SERIES, aggregated across the available perpetual venues (Binance, Bybit, OKX), at the 8h funding cadence, ascending by date. The response is SEGMENTED by venue composition: each segment covers a stretch with a STABLE venue set (venues, coverage, from/to, its rows); composition_breaks lists the transitions with a mechanically derived cause (venue_added / venue_removed / venue_changed — e.g. OKX joined 2026-01-28). Averages, z-scores or percentiles computed ACROSS segments mix different venue populations — compute within a segment, or accept the mix knowingly; composition_stable: true means the whole window is one segment and safe to treat as one series. Positive funding means longs pay shorts (crowded long positioning) and vice versa; sustained extremes are a positioning signal, single prints are noise. For the latest funding value alone call arena_get_funding_rate. Range capped by tier. [Free 30d / Pro 365d / Power unlimited] Required: context.
arena_get_gem_score(context, coingecko_id)
Returns the Altcoin-Screener score for ONE coin, addressed by its CoinGecko id: the composite score, its group breakdown and — for Pro+ — the 9 raw factor values across groups A/B/C. Use it once a candidate is known; to rank or filter the whole screened universe use arena_get_gem_scores (plural), and for how the score behaved out-of-sample use arena_get_gem_validation. The score ranks relative attributes, it is not a price forecast or a buy signal. [Free tier] Required: coingecko_id, context.
arena_get_gem_scores(limit, context, from_rank)
Altcoin screener ranking — which altcoins look strong right now? Today's CoinGecko Top-200 scored by a composite of 3 factor groups: Mean-Reversion (A), Tokenomics (B), Market-Structure (C). Backtest-validated factors, not a hype list. Limit gated by tier: Free top-10, Pro top-50, Power top-200. [Free tier, daily refresh] Required: context.
arena_get_gem_validation(top_n, context)
Bi-weekly equal-weight basket backtest for Top-N screener picks vs BTC and market average. Shows CAGR, max drawdown, win-rate. Free: top-10 default. Pro+: custom N. [Free tier] Required: context.
arena_get_hash_ribbons(context)
Latest Hash Ribbons indicator (Charles Edwards). Returns 30d and 60d hashrate moving averages — when 30d > 60d after a capitulation, signals miner recovery (bullish). [Free tier] Required: context.
arena_get_historical_analog(asset, preset, context, forward_horizons)
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 distribution, NOT a recommendation. Not obtainable from web search or public market-data APIs — requires point-in-time indicator history and look-ahead-free episode matching. Presets: cycle_bottom_cluster (Cycle bottom cluster), cycle_top_cluster (Cycle top cluster), deep_fear (Deep fear), euphoria (Euphoria), quiet_volatility (Quiet volatility regime). Some presets carry a "study_finding" field — a state we have already investigated and where the result was NULL; read that before the distribution, it is the more important answer. Where a preset also returns "vs_unconditional_drift", read THAT rather than the raw forward returns: the raw median measures BTC's contemporaneous drift as much as the state — the drift and excess columns in that block carry the honest comparison, and the excess can be negative while the raw median looks positive. Also works for asset=ETH/SOL (F2 cycle history), but only price-derived presets (cycle_bottom_cluster, cycle_top_cluster) — fear-greed and volatility presets are BTC-only. Related: arena_get_volatility_history (the series behind the volatility preset), arena_get_cycle (the current state to compare against), arena_dip_scenario (composes this base rate into a tranche structure). [API Pro tier] Required: preset, context.
arena_get_indicator_snapshot(pair, context, interval)
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 is the point of the tool: "RSI 43.2" is a number any charting package gives away, "RSI 43.2, 24th percentile of 2,808 observations" is 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, because raw cumulative OBV would mostly rank how long the series has existed. Where the reading sits in an extreme AND a study on this platform has tested that exact state, the payload carries the study verdict — including a null result: a Bollinger squeeze returns the `quiet_volatility` finding that tight bands did NOT carry an edge across 47 episodes. Below 500 bars (1d) / 150 (1w) the raw values still come but `percentile` is null with a reason, rather than a rounded number from too small a sample. Set `interval` to '1w' for the weekly view. Weekly RSI is deliberately NOT duplicated here — `arena_get_cycle` is its canonical source (a second computation of the same figure is an integrity risk, not a convenience). What this tool does NOT do: it emits no buy/sell state, and the `state` labels (oversold/neutral/overbought) are conventional descriptions of a level, not calls to act. Related: arena_get_trend_channels (structure), arena_get_historical_analog (did a condition like this one ever pay?), arena_get_volatility_history (the volatility series behind ATR). [Free tier] Required: context.
arena_get_iv_snapshot(context, currency)
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 (IV - RV). Useful for position sizing, options strategies, and market regime assessment. Backfill: BTC from 2021-04-01, ETH from 2022-02-15. [Free tier] Required: currency, context.
arena_get_job_status(job_id, context)
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] Required: job_id, context.
arena_get_key_levels(context)
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-Cycle legs — each carrying its source, formula and as_of date. The two classes are kept separate on purpose: pivots are where price REACTED before, indicator levels are where an indicator STANDS now. Both are descriptive only — NOT price targets, NOT support/resistance to break, NOT buy/sell signals. [Free tier] Required: context.
arena_get_knowledge(type, as_of, context, subject, include_graph)
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 edges (what derives from / references it), each with api_path + seo_slug so you can follow them. [Free tier; per-object access additionally gated by min_tier] Required: type, subject, context.
arena_get_macro_regime(context)
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), components (flat key/value of all 18), plus stale_components_detail dating each stale input (last_good_date + age_days + discontinued flag for series the upstream has retired for good) so freshness is quantified, not a vague caveat. Two component keys mean something narrower than their name suggests, so read them carefully: `vix_score` is the derived 0-100 score (a value of 71 means VIX around 18.6), NOT the VIX index level — the raw Cboe level is not redistributed over this channel; and `broad_dollar_index` is FRED DTWEXBGS (Broad USD Index, Jan 2006 = 100), NOT the ICE DXY, so readings near 120 are normal. The former names `vix` and `dxy` are still present with identical values but are deprecated and listed in deprecated_fields with their removal date. [Free tier] Required: context.
arena_get_max_pain(market, context)
Last finalized Deribit BTC options expiry: 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 and open_interest_contracts. On days_to_expiry, mind the clamp: it is floored at 0 and therefore CANNOT tell "expiry is today, still hours away" from "expiry was today, already settled" — the same reading covers a live state and a post-mortem. Use settles_at (full ISO timestamp of the settlement moment) and hours_to_settlement (SIGNED — negative means already settled but not yet finalized, so the row is still listed here) whenever that distinction matters. settlement_time_utc names the settlement time assumed for this market; it is 08:00:00Z for DERIBIT_BTC, measured against the exchange itself (public/get_instruments: 868 of 868 open instruments across 13 expiry dates, daily through quarterly, all exactly 08:00:00 UTC). For a market whose settlement time is not evidenced, all three fields are null rather than guessed — a precise-looking wrong timestamp would be worse than none. Read the OI: a max-pain level is only as meaningful as the open interest behind it — a daily expiry with 2,000 contracts and a quarterly with 154,000 are not the same observation. `oi_available` distinguishes "null" from "not collected". Upcoming expiries also carry open_notional_usd together with notional_spot and notional_spot_date. The two contract fields are the SAME measurement at different observation times, not two different quantities: open_interest_contracts on an upcoming expiry is the open interest at the LATEST daily snapshot, total_contracts on a settled one is the open interest at the LAST snapshot BEFORE expiry (verified in the cron: total_contracts is filled from lastSnap.total_oi_contracts). contracts_as_of names the snapshot those contracts came from. Where it equals expiry_date, contracts and settlement price are same-day — measured on all 64 finalized expiries, so a vintage mix inside total_notional_usd is structurally possible but has never occurred; the field exists so that a future cron gap becomes visible instead of passing silently. Mind the deliberate name split: total_notional_usd on a settled expiry is computed against the SETTLEMENT spot and never changes again, while open_notional_usd uses the CURRENT spot and therefore moves with spot every day, even if not a single contract trades. Same formula, different quantity — which is why the reference spot travels with it. Every expiry — upcoming ones included — now carries is_monthly, is_quarterly and expiry_type (daily | weekly | monthly | quarterly). These NEST rather than partition: quarterly ⊂ monthly ⊂ weekly ⊂ daily, so a quarterly expiry also has is_monthly=true. Filter on the booleans, read expiry_type as the label — it is the only field that separates a Friday expiry from a mid-week one (measured: Fri 18,613 contracts vs. Sat 2,852, and both used to read as false/false). All three are derived from the calendar (last Friday of the month; quarterly in Mar/Jun/Sep/Dec), which is why upcoming expiries can carry them at all — they have no settlement row yet. Cron collects daily 02:00 UTC from Deribit Public API. Related: arena_get_max_pain_history (base rates + daily snapshots of open expiries), arena_get_iv_snapshot (implied vol for the same expiries). [Free tier] Required: context.
arena_get_max_pain_history(days, market, context, include_open_snapshots)
Historical finalized Deribit BTC options expiries in one call — a complete base rate, not a page. Each row: expiry_date, max_pain_strike, spot_at_expiry, %-diff, P/C ratio, notional, expiry-type flags. With include_open_snapshots=true it also returns the DAILY observation series of still-open expiries, which is what makes the convergence question measurable (does spot drift toward the max-pain level as expiry approaches?). That series starts 2026-05-28, is not backfillable, and its per-expiry depth is thin — check open_snapshot_coverage before computing anything from it. Days auto-capped by tier: Pro 365d, Power 3650d. Related: arena_get_max_pain (current + upcoming), arena_get_iv_snapshot. [API Pro tier] Required: context.
arena_get_mayer_multiple(context)
Returns the current Mayer Multiple — BTC price divided by its 200-day SMA — as spelled-out fields: date, mayer_multiple, price_usd, sma_200d (with sma_200d_source declaring its provenance) and the Trace Mayer (2014) bands as a machine-readable field (<0.7 capitulation, 0.7–1.5 neutral, 1.5–2.4 bullish, >2.4 euphoria). The former raw row shape (d, value.v, value.close) is still present but deprecated — see deprecated_fields with removal date. One ratio, not a regime call: for the multi-indicator cycle read use arena_get_cycle, for the series behind this number arena_get_mayer_multiple_history. The bands are historical description, not thresholds to trade. [Free tier] Required: context.
arena_get_mayer_multiple_history(days, context)
Returns the Mayer-Multiple TIME SERIES (BTC price ÷ its 200-day SMA), one row per day, ascending by date. Values around 1 mean price sits at its 200d average; historically high readings clustered near cycle tops and low ones near bottoms — a descriptive ratio, not a trigger. For the current value alone call arena_get_mayer_multiple. Range capped by tier. [Free 30d / Pro 365d / Power unlimited] Required: context.
arena_get_onchain_history(days, context, series_id)
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 by tier. [Free 30d / Pro 365d / Power unlimited] Required: series_id, context.
arena_get_onchain_latest(context, series_id)
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 tier] Required: series_id, context.
arena_get_ontology_term(term, context, version)
Resolve a knowledge-platform term to its canonical definition (e.g. term='regime'). Returns label, definition (EN/DE), calculation, unit, source + source_ref, version, related terms. Use this to resolve the onto:<term>@<version> references inside Knowledge Objects. [Free tier] Required: term, context.
arena_get_pulse(context)
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). [Free tier] Required: context.
arena_get_pulse_history(days, context)
Returns the Arena-Pulse TIME SERIES: one row per day with date, 0–100 score and band, in ascending date order. Use it for trend, turning points and "how did we get here"; for today's value alone call arena_get_pulse (cheaper, one row). Range capped by tier. [Free 30d / Pro 365d / Power unlimited] Required: context.
arena_get_report_status(job_id, context)
Poll the status of a Custom-Report job. Lifecycle: pending_payment → queued → running → generating → success/failed. Returns progress_pct, succeeded/failed counts, plus pdf_url / xlsx_url when done. [API Pro tier] Required: job_id, context.
arena_get_robustness_field(axis, pair, params, context, interval, strategy, user_cagr, asset_type, user_sharpe)
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 whose N is COUNTED (the number of neighbor assets IS the testing family), not guessed. Honest small-n handling: fewer than 15 neighbors → "insufficient", no DSR-N claimed. Set axis="parameter" for the secondary, always-anecdotal view (the few parameter settings tested on this exact pair). Read-only over result aggregates, look-ahead free; never a recommendation. [API Pro tier] Required: strategy, interval, pair, user_cagr, context.
arena_get_sentiment(period, context)
PLATFORM ACTIVITY, NOT MARKET SENTIMENT — despite the name, this reports what is being backtested on Backtesting Arena, not how the market feels. Returns hotAssets, hotStrategies, trendingUp/trendingDown, profitTrend (share of profitable runs per pair), dailyActivity, assetDistribution, strategyAssetMatrix, weeklyTrend and totalRuns over a 7d/30d/90d window. Honesty note: the counts include our own bulk and admin snapshot runs, so this is coverage-weighted attention, NOT a clean crowd signal — never present it as 'traders are bullish on X'. For actual market sentiment use arena_get_fear_greed, arena_get_funding_rate, arena_get_altcoin_season or arena_get_pulse. [Free tier] Required: context.
arena_get_shared_backtest(context, share_id)
Fetches a backtest that someone published via a share link, addressed by its share_id — no ownership and no Pro tier required, which is what makes it the right tool when a user pastes a /shared/backtests URL. Returns the same result shape as arena_get_backtest (config plus aggregate metrics). Use arena_get_backtest instead for the user's own runs. [Free tier] Required: share_id, context.
arena_get_signal_status(pair, context, interval, strategy)
Current signal-status (green/yellow/red) for a strategy on a pair+interval. Backed by the daily check-signals cron — needs at least one user with an active Ampel on this combination. [Free tier] Required: strategy, pair, interval, context.
arena_get_spot_price(context)
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. Context only — not a recommendation. [Free tier] Required: context.
arena_get_stablecoin_supply(context)
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 compact time series 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 `acceleration_usd` is the signed difference last-30d minus prior-30d and gets LARGE exactly when the trend reverses, while the older boolean `accelerating` requires the same direction AND a bigger magnitude; a reversal therefore shows a big `acceleration_usd` next to `accelerating: false`. Source DefiLlama peggedUSD. Descriptive only, not a signal. [Free tier] Required: context.
arena_get_sth_cost_basis(context)
Latest BTC short-term-holder cost basis (realized price of coins younger than ~155 days, BRK brk_sth_realized_price) plus derived STH-MVRV (spot ÷ STH cost basis) and an in_loss flag (spot below cost basis = recent buyers underwater in aggregate, historically stress / near local bottoms). Descriptive on-chain context, not a buy/sell signal. [Free tier] Required: context.
arena_get_strategy_filter_effect(asset, context, interval, 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 + not_applicable_filters list (e.g. altcoin_season excluded on BTC-pair). Baseline and each variant carry their aggregation `window` (from/to + avg_run_years) — CAGR is time-normalized, so identical trade sets over different windows legitimately produce different CAGR. Based on REAL backtest aggregations — not theoretical 2^5 permutations. Use this to answer 'Which filters would improve my backtest for X on Y?'. [Free tier] Required: strategy, asset, context.
arena_get_strategy_insights(context, interval, min_runs, strategy, asset_type, assets_mode, ref_strategy)
Aggregated backtest performance per (strategy × interval) cell. If `strategy` AND `interval` provided, returns detail with per-asset breakdown + param variants. Otherwise returns the full matrix (Top-10 cells for Free tier; full for Pro+). [Free Top-10 / Pro+ full] Required: context.
arena_get_strategy_performance(asset, context, interval, strategy, asset_type, ref_strategy)
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 to answer 'How does strategy X perform on asset Y?'. [Free tier] Required: strategy, asset, context.
arena_get_strategy_performance_by_regime(asset, context, interval, strategy, asset_type)
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 a recommendation for the CURRENT live regime. Answers the killer question 'Should I trade this strategy NOW?'. Each regime bucket returns trades, trades_per_config (trade counts pool ALL parameter-variant configs — see config_count), win_rate, avg_pnl_pct (per-trade return, not annualized), reward_risk_ratio (per-trade mean/stddev, NOT annualized Sharpe), share_of_time_pct and a rating. The `benchmark` block anchors the payload with the combination's buy-and-hold CAGR (identical to arena_get_strategy_performance vs_buy_hold — without that anchor, regime avg_pnl_pct is a trajectory, not an excess). [Free tier] Required: strategy, asset, context.
arena_get_trend_channels(pair, context, interval)
Mechanically fitted trend channels for a pair: log-linear regression over close plus 1σ/2σ bands, computed over three windows at once (90/180/365 bars). The three windows are not selectable by design — a single window invites trying them until one supports the thesis, three side by side show whether a channel is robust or an artifact of the window choice, and `agreement.consistent` states which it is. The differentiator is `r_squared_percentile`: "R² 0.42" says nothing, "R² 0.42 — 31st percentile of all same-size windows on this pair" says this channel is worse defined than two thirds of past ones, which is what stops a wish-line being read as structure. Where history is too short the window is omitted and listed in `windows_unavailable` with a reason — never estimated from fewer bars; below 500 bars (1d) / 150 (1w) the raw values still come but `percentile` is null rather than a rounded number from too small a sample. Pairs listed within the last few months (the tokenized equities and ETFs) therefore return `data_sufficient: false` and an empty channel list — that is the answer, not an error. Set `interval` to '1w' for the weekly view; note that a window is counted in bars, so 365 on '1w' means 365 weeks and most pairs do not reach it. What this tool does NOT do: it names no target, no breakout probability and no signal, and a band edge is not support or resistance — it is a description of past dispersion. Related: arena_get_key_levels (pivot clusters), arena_get_btc_market_structure (trend flips and their base rate), arena_get_historical_analog (whether a condition like the current one ever paid). [Free tier] Required: context.
arena_get_universe(context, universe_id)
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. Universes reflect the CURRENT membership — they are not point-in-time, so a backtest over them carries survivorship bias for the earlier years. [Free tier] Required: universe_id, context.
arena_get_volatility_history(to, days, from, meta, fields, context, granularity, schema_version)
Daily Bitcoin volatility time series: realized volatility (30d & 90d, √252-annualized, close-to-close) and ATR% (Wilder EMA-14, captures intraday range + gaps), on the same scale. Ranks come in two flavours and they answer different questions — `rvRank`/`atrPctAnnRank` expand from the start of history and are look-ahead-free, but BTC volatility has fallen structurally, so a filter like "rank below 10" mostly picks up that decline rather than a regime; `rvRankRolling`/`atrPctAnnRankRolling` rank against a trailing 2-year window and are the ones to use for cross-epoch regime comparisons. History reaches back to 2009 via a stitched pre-Binance close series; ATR is null before the Binance era because no daily high/low exists that far back (see meta.coverage). Use `from`/`to` for a specific window instead of pulling everything and discarding it, and `granularity`/`fields` to keep long ranges affordable. Agents fetching long ranges should pass `schema_version: "2026-08"` today — it rounds floats and cuts the payload by 30–36 % depending on window length (measured 2026-07-31 on the live series: 36.1 % over 30 days, 35.8 % over 365, 29.8 % over the full 5,508 rows — the saving falls on long ranges because the pre-Binance years carry null ATR, and nulls do not round). It is opt-in until the default flips 2026-11-01. Descriptive — no forecast, no signal. Free tier: last 365 days. Related: arena_get_volatility_phases (current phase per pair), arena_get_iv_snapshot (implied vs. this realized), arena_get_cycle (regime context). [Free tier] Required: context.
arena_get_volatility_insights(context, asset_type, min_trades)
Breaks realized strategy performance down by VOLATILITY PHASE (low / normal / high) per asset and timeframe, so you can see whether an edge only exists in one volatility regime. Answers "when does this work", not "does this work" — for the overall verdict use arena_get_strategy_insights, for the macro-regime cut arena_get_strategy_performance_by_regime, and for the raw volatility time series arena_get_volatility_history. Cells below min_trades are suppressed rather than shown as noise. [API Pro tier] Required: context.
arena_get_volatility_phases(pair, context, asset_type)
Current ATR-based volatility phase (low/normal/high/expansion) per tracked pair, updated daily at 08:00 UTC. This is a single current state — for the time series behind it use arena_get_volatility_history, and for what the phase implies for strategy choice use arena_get_volatility_recommendations. Filter with `pair` when you only care about one asset instead of pulling all of them. [Free tier] Required: context.
arena_get_volatility_recommendations(pair, context, asset_type)
Top-3 strategies ranked by historical win-rate for the current volatility phase of a given pair. Phase comes from the latest snapshot (arena_get_volatility_phases); minimum 20 trades per phase required for inclusion. Answers "which strategies did well in a phase like the current one?" — a historical ranking, not advice. Related: arena_get_volatility_phases (the phase itself), arena_get_edge_reports (filter effects with verdicts), validate_strategy (evidence check on a concrete configuration). [API Pro tier] Required: pair, context.
arena_get_winners(limit, context, strategy, asset_class)
Public leaderboard: the highest-CAGR backtest results across all users, with anonymized usernames, pair, strategy, interval and period. Answers "what has scored best on this platform so far". Read it as a selected extreme, not as a recommendation — a top-of-leaderboard entry is the winner of a large search and its edge is upward-biased; arena_get_robustness_field or validate_strategy tell you whether a given result holds up. For the user's own runs use arena_list_backtests. [Free tier] Required: context.
arena_is_distinguishable(a, b, axes, context, label_a, label_b, interval)
Ask whether two CAGR figures actually differ, before ranking them. Pass the two values as `a` and `b` (gross CAGR in percent, 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 (how a multi-day candle grid is aligned to the Unix epoch; exists only on 2d/3d), parameter_choice (neighbouring parameter settings — by far the largest at ~17.9 pp), window_edges (shifting the start date), pair_selection (which pairs made it into the universe). Pass ALL axes that genuinely varied; the floor is their maximum, not their sum. Optionally set `interval` to the candle interval so the floor can be sharpened where an axis was measured per interval — passing grid_phase together with a non-multi-day `interval` is a hard error, because that axis does not exist there. `label_a` and `label_b` are optional display names for the two values and are echoed back inside the explanation, so a multi-way comparison stays readable. Worked example: 2d vs 3d intervals differ by 4.40 pp, but grid alignment alone spans 6.66 pp — so that comparison carries no finding at all. Read-only, no market data touched. [Free tier] Required: a, b, axes, context.
arena_list_backtests(pair, limit, offset, context, interval, strategy, asset_type)
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] Required: context.
arena_list_knowledge(context)
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] Required: context.
arena_list_onchain_series(context)
Lists all available Bitcoin Research Kit (BRK) on-chain series (21 metrics like 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] Required: context.
arena_list_strategies(lang, plan, context, asset_class)
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. [Free tier] Required: context.
arena_list_subscriptions(context)
Returns every ACTIVE subscription belonging to the current API key: id, type, trigger configuration, delivery method and expiry. Use it to see what is already running before creating a duplicate, and to get the subscription_id that arena_cancel_subscription needs. Does not return fired updates — that is arena_check_subscription_updates. [API Pro tier] Required: context.
arena_list_universes(context)
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] Required: context.
arena_quote_report(context, interval, strategy, asset_type, custom_pairs, period_label, discount_code, universe_tier, strategy_params)
Get a pricing quote for a custom report (universe-backtest PDF + Excel) without committing to a purchase. Returns price, universe size + preview, excluded pairs, and filter config. Crypto universes use top-N tiers (top-10 … top-250) or a custom pair list. [API Pro tier] Required: strategy, universe_tier, interval, period_label, context.
arena_run_backtest(pair, params, capital, context, date_to, filters, interval, strategy, date_from, asset_type)
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 result is trustworthy rather than produce a new one, use validate_strategy or arena_get_robustness_field. Filters are optional and only remove entries; run once without them for the baseline. A backtest is evidence about the past, never a forecast or a recommendation. Per-day quota: Pro=50, Power=500. [API Pro tier] Required: strategy, pair, asset_type, interval, date_from, context.
arena_run_grid_backtest(pair, context, end_date, fee_rate, grid_type, low_price, grid_count, high_price, start_date, entry_price, stop_loss_price, total_investment, take_profit_price)
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. This is a different machine from the strategy backtester: grid bots earn from oscillation inside a range, not from trend — for signal-based strategies use arena_run_backtest instead. The result depends heavily on the range you choose (low_price / high_price); a range the price left early makes the bot idle, so treat range choice as part of the hypothesis, not a detail. Free tier limited to BTCUSDT/ETHUSDT. Per-day quota: Free=5, Pro=50, Power=500. [Free / Pro / Power tier] Required: pair, start_date, end_date, total_investment, low_price, high_price, grid_count, grid_type, fee_rate, context.
arena_run_universe_backtest(pairs, params, capital, context, date_to, filters, interval, strategy, date_from, universe_id)
Backtests one strategy across a whole pair universe. Pair cap depends on your API tier: Pro 50, Power 250 — Power therefore covers crypto-top-250 in ONE job instead of five, which matters because five jobs mean five separate result sets you have to merge by hand, and merging across different pair sets is exactly how a ranking ends up measuring pair selection instead of 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'. Budget the wait — background runtime is roughly 1.5 s per pair, so 50 pairs ≈ 1–2 min and a 250-pair job ≈ 6 min; estimated_seconds in the create-response gives the current estimate. Provide either universe_id (call arena_list_universes) OR explicit pairs[]. Benchmarks bnh_fixed and dca_reference are accepted here — run one of them over the SAME universe and interval before reading any result, because an excess over buy-and-hold is not a statement without the buy-and-hold value itself: measured on 41 common pairs, bnh_fixed sits at +0.2 % while the naive figure suggested −22 %, and a strategy 'beating' a −54 % benchmark means 'do not own this asset', not 'this strategy is good'. NOTE ON PERSISTENCE: universe results live ONLY in the job response (api_jobs.result). They are deliberately not written to backtest_runs, so they carry no filter_binding and no coin-denominated history, and you will not find them later via arena_list_backtests — copy what you need out of the job result. Per-day quota: Pro=5, Power=50. [API Pro tier] Required: strategy, interval, date_from, context.
arena_subscribe_bullmarket_stage(stages, context, direction, expires_at, webhook_url, delivery_method)
Fires when the Bullmarket-Ampel active stage count (0–5) changes. Optional direction filter (up/down/any) plus specific stages of interest. For the current stage count without subscribing, call arena_get_bullmarket_ampel. Creates a standing subscription; it does not return a value now — collect fired updates with arena_check_subscription_updates (polling) or receive them by webhook, and end it with arena_cancel_subscription. For the CURRENT value instead of a change notification, call the matching read tool. [API Pro tier and up — max 3 active subscriptions for Pro, 20 for Power] Required: context.
arena_subscribe_cycle_changes(bands, context, expires_at, webhook_url, delivery_method)
Fires when the BTC-Cycle band changes (capitulation → risk-off → neutral → constructive → euphoric). Optional bands filter restricts to specific target bands. For the current band without subscribing, call arena_get_cycle. Creates a standing subscription; it does not return a value now — collect fired updates with arena_check_subscription_updates (polling) or receive them by webhook, and end it with arena_cancel_subscription. For the CURRENT value instead of a change notification, call the matching read tool. [API Pro tier and up — max 3 active subscriptions for Pro, 20 for Power] Required: context.
arena_subscribe_pulse_changes(context, expires_at, webhook_url, delivery_method, threshold_above, threshold_below)
Fires when the daily 0–100 Arena-Pulse score crosses threshold_above (upward) or threshold_below (downward). At least one threshold is required. For the current score without subscribing, call arena_get_pulse. Creates a standing subscription; it does not return a value now — collect fired updates with arena_check_subscription_updates (polling) or receive them by webhook, and end it with arena_cancel_subscription. For the CURRENT value instead of a change notification, call the matching read tool. [API Pro tier and up — max 3 active subscriptions for Pro, 20 for Power] Required: context.
arena_subscribe_signal_alerts(context, expires_at, webhook_url, signal_types, ampel_config_id, delivery_method)
Fires when an existing Ampel-Config's signal flips (BUY ↔ SELL). Prerequisite: the user must have created that ampel-config in the web UI (`/dashboard/ampel`) — pass its UUID here; this tool cannot create one. Optional signal_types filter narrows to BUY-only or SELL-only. For the current signal state without subscribing, call arena_get_signal_status. Creates a standing subscription; it does not return a value now — collect fired updates with arena_check_subscription_updates (polling) or receive them by webhook, and end it with arena_cancel_subscription. For the CURRENT value instead of a change notification, call the matching read tool. [API Pro tier and up — max 3 active subscriptions for Pro, 20 for Power] Required: ampel_config_id, context.
get_more_tools(context)
Check for additional tools whenever your task might benefit from specialized capabilities - even if existing tools could work as a fallback. Required: context.
validate_strategy(oos, costs, market, window, context, strategy)
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), or a timestamped trade list (trade_list). Checks: realistic next-bar fills (look-ahead/optimism), net of cost, out-of-sample split, and a hard 30-round-trip sample gate (under 30 is always "anecdote"). Not reproducible via generic backtest tools that ignore overfitting. [API Pro tier] Required: strategy, market, window, context.

Last successful function declaration observed on . Source: https://tradingstrategies.work/api/mcp. We list what the server declared; we do not call any of these functions.

Endpoint status observed on . Source: https://tradingstrategies.work/api/mcp.

Signals

These are separate measurements of different things. They are deliberately not combined into one score, because a popularity number that mixes website traffic with saves and stars cannot be checked or acted on.

Signal Value What it measures Window Observed Source
Latest published version 1.3.0 Latest version string the maintainer published to the registry. as of fetch Model Context Protocol
Registry record last updated 2026-08-05 When the registry record was last updated by its maintainer. point in time Model Context Protocol
First listed in the MCP Registry 2026-08-05 Date this server was first published to the official MCP Registry. Not a usage or quality measure. point in time Model Context Protocol
mcp tools declared 77 tools Number of functions the server itself declared when asked to list them. This is what the server offers an agent, not a measure of how well any of them work. as of probe tradingstrategies.work
mcp endpoint status ok The server listed 77 functions when asked. as of probe tradingstrategies.work

Where to get it

This record as data

Every field on this page, with its source and observation date, is in the catalog JSON. Fetch the whole kind at once instead of parsing this HTML.

GET /api/v1/entries/mcp_server.json

Sources

  1. Official MCP Registry — Model Context Protocol, observed , trust tier 1.
  2. Tools declared by the MCP server at https://tradingstrategies.work/api/mcp — tradingstrategies.work, observed , trust tier 4.