Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, email [email protected] and we’ll put it right.

io.github.Schoasch/backtesting-arena

REMOTE · TRADINGSTRATEGIES.WORK · SCANNED AUG 3

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

+10 this week 78 Trust /100
Trust breakdown (6 categories)

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →

Endpoint Security94
Transport & Reachability100
Schema Quality & AI Usability58
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 23363 tokens (~315/item across 74 items; 74 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
  • Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Capabilities100
  • Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.Pass
Install

Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.

remote · tradingstrategies.work

# add to Claude Code
claude mcp add --transport http schoasch-backtesting-arena https://tradingstrategies.work/api/mcp
# ~/.codex/config.toml
[mcp_servers.schoasch-backtesting-arena]
url = "https://tradingstrategies.work/api/mcp"
// opencode.json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "schoasch-backtesting-arena": {
      "type": "remote",
      "url": "https://tradingstrategies.work/api/mcp",
      "enabled": true
    }
  }
}
# add to OpenClaw
openclaw mcp add schoasch-backtesting-arena --url https://tradingstrategies.work/api/mcp --transport streamable-http
# ~/.hermes/config.yaml
mcp_servers:
  schoasch-backtesting-arena:
    url: "https://tradingstrategies.work/api/mcp"
// mcp.json
{
  "mcpServers": {
    "schoasch-backtesting-arena": {
      "type": "http",
      "url": "https://tradingstrategies.work/api/mcp"
    }
  }
}

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 2 Aug 26 +1

    No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.

  • 1 Aug 26 −1
    • Tool “arena_get_volatility_history” rewrote its description, which is the text the model reads security
    • Tool “arena_run_universe_backtest” rewrote its description, which is the text the model reads security
    • Tool “arena_get_max_pain” rewrote its description, which is the text the model reads security
    • “arena_get_strategy_insights” reworded the description of “interval” cosmetic
    • “arena_get_strategy_performance_by_regime” reworded the description of “interval” cosmetic
    • “arena_get_volatility_history” reworded the description of “fields” cosmetic
    • “arena_list_backtests” reworded the description of “interval” cosmetic
    • “arena_run_universe_backtest” reworded the description of “pairs” cosmetic
    • “arena_run_universe_backtest” reworded the description of “universe_id” cosmetic
    • “arena_get_signal_status” reworded the description of “interval” cosmetic
    • “arena_get_strategy_filter_effect” reworded the description of “interval” cosmetic
    • “arena_get_strategy_performance” reworded the description of “interval” cosmetic
  • 31 Jul 26 +6
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 30 Jul 26 +3
    • Schema quality: good → excellent functional
  • 28 Jul 26 +1
    • Schema quality: 229 → 272 functional
    • Tool coverage: 78% → 100% functional
  • 27 Jul 26 +1
    • We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
  • 26 Jul 26 67

    First indexed and scored.

Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 3 Aug 2026 · Probed https://tradingstrategies.work/api/mcp

TLS valid

Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .

Subject Issuer Valid from Valid until Key Signature Serial
CN=tradingstrategies.work CN=YR2,O=Let's Encrypt,C=US 13 Jun 2026 11 Sept 2026 RSA 2048 SHA256-RSA 6718fdd6394294f48de62e3f449285fb0ba
SANs: tradingstrategies.work
CN=YR2,O=Let's Encrypt,C=US (CA) CN=Root YR,O=ISRG,C=US 3 Sept 2025 2 Sept 2028 RSA 2048 SHA256-RSA 4ebd24947e24d394802d84a52fd5b319
CN=Root YR,O=ISRG,C=US (CA) CN=ISRG Root X1,O=Internet Security Research Group,C=US 13 May 2026 2 Sept 2032 RSA 4096 SHA256-RSA f24b6d17f9d9ad7cb1c9fea78782699f
DNSSEC insecure

Validation of tradingstrategies.work. Not signed

Zone DS Keys Algorithms Outcome
. trust_anchor 20326, 38696 8, 8 Verified
work. present 16252 8 Verified
tradingstrategies.work. absent Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation
Authentication Enforced and verified

The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.

Result Enforced and verified
Enforced On tool calls
HTTP status 200

WWW-Authenticate challenge Bearer error="invalid_token", error_description="No authorization provided", resource_metadata="https://tradingstrategies.work/.well-known/oauth-protected-resource/api/mcp"

Bearer error="invalid_token", error_description="No authorization provided", resource_metadata="https://tradingstrategies.work/.well-known/oauth-protected-resource/api/mcp"
Header Value
strict-transport-security max-age=31536000; includeSubDomains
content-security-policy frame-ancestors 'self'
x-content-type-options nosniff
x-frame-options SAMEORIGIN
referrer-policy strict-origin-when-cross-origin
permissions-policy camera=(), microphone=(), geolocation=()

Protected resource metadata

Document https://tradingstrategies.work/.well-known/oauth-protected-resource/api/mcp
Retrieved Yes
Resource https://tradingstrategies.work/api/mcp
Authorisation server https://vfplckrqtskcrdclmzdn.supabase.co/auth/v1
Transports 2 probes
Transport URL Outcome Status Location
streamable-http https://tradingstrategies.work/api/mcp Verified 200
http (plaintext) http://tradingstrategies.work/api/mcp HTTPS enforced 308 https://tradingstrategies.work/api/mcp
MCP tools — 74 exposed · ~23,129 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.

Tool Tokens
arena_get_strategy_performance ~432

Aggregated backtest performance for ONE specific (strategy, asset, interval) combination. Returns run_count, avg_cagr, avg_win_rate, avg_drawdown, effective_years, and vs_buy_hold comparison (beats_buy_hold, cagr_delta). For multi-strategy overview use arena_get_strategy_insights. Use this to answer 'How does strategy X perform on asset Y?'. [Free tier]

NameTypeReqDescription
assetstringyesCrypto pair / symbol (e.g. BTCUSDT, ETHUSDT). Case-insensitive.
asset_typestringOptional asset class filter to disambiguate (e.g. when same pair-name exists in two classes).
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…
intervalstringDefault '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…
ref_strategystringBenchmark reference. Default 'bh' (Buy & Hold).
strategystringyesStrategy key (e.g. rsi_sma, golden_cross). See arena_get_strategies for valid keys.

No output schema declared.

No examples provided.

arena_get_strategy_performance_by_regime ~430

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, win_rate, avg_pnl_pct, reward_risk_ratio (per-trade mean/stddev, NOT annualized Sharpe), share_of_time_pct and a rating. [Free tier]

NameTypeReqDescription
assetstringyesCrypto pair / symbol (e.g. BTCUSDT, ETHUSDT). Case-insensitive.
asset_typestringOptional asset class filter to disambiguate identical pair-names.
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…
intervalstringDefault '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…
strategystringyesStrategy key (e.g. rsi_sma, golden_cross). See arena_get_strategies.

No output schema declared.

No examples provided.

arena_get_universe ~240

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]

NameTypeReqDescription
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…
universe_idstringyesUniverse id, e.g. 'top-10-crypto'.

No output schema declared.

No examples provided.

arena_get_volatility_history ~810

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]

NameTypeReqDescription
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…
daysintegerNumber of most recent days to return. Free tier capped at 365; API Pro unlimited. Ignored when from/to are given.
fieldsstringDefault full. 'minimal' returns date, close, rv, rvRank, rvRankRolling, atrPctAnnRank, atrPctAnnRankRolling only — measured saving 18–20 % of characters (5,508-row series, 2026-07-31), not a fifth of…
fromstringISO date (YYYY-MM-DD), inclusive. Start of the window. Free tier still only sees the last 365 days.
granularitystringDefault daily. weekly/monthly keep the LAST observation of each period (a state, not an average).
metastringDefault full. 'minimal' drops params/params_hash/warmup, which are only useful on the first call.
schema_versionstringDefault '2026-07' (unchanged output). '2026-08' rounds floats to 2 decimals (ranks 1) and reports the saving. Default flips 2026-11-01.
tostringISO date (YYYY-MM-DD), inclusive. End of the window. Defaults to the latest bar.

No output schema declared.

No examples provided.

arena_get_volatility_insights ~279

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]

NameTypeReqDescription
asset_typestringFilter by asset class, e.g. 'crypto'. Omit for all.
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…
min_tradesintegerMinimum trades a cell needs to be reported. Default 20 — lowering it buys coverage with noise.

No output schema declared.

No examples provided.

arena_get_volatility_phases ~251

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]

NameTypeReqDescription
asset_typestringFilter by asset class. Omit for all.
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…
pairstringFilter to a single pair, e.g. "BTCUSDT". Omit for all tracked pairs.

No output schema declared.

No examples provided.

arena_get_volatility_recommendations ~261

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]

NameTypeReqDescription
asset_typestringAsset class of the pair
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…
pairstringyesCrypto asset pair, e.g. "BTCUSDT", "ETHUSDT"

No output schema declared.

No examples provided.

arena_get_winners ~295

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]

NameTypeReqDescription
asset_classstringAsset class filter. Default 'crypto' (D14-separated leaderboard).
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…
limitintegerHow many entries to return, max 100 (default 100).
strategystringRestrict the leaderboard to one strategy key, e.g. 'rsi_sma'. Omit for all strategies.

No output schema declared.

No examples provided.

arena_list_backtests ~443

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]

NameTypeReqDescription
asset_typestringFilter by asset class, e.g. 'crypto'. Omit for all.
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…
intervalstringFilter 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 al…
limitintegerPage size, max 100, default 50.
offsetintegerRows to skip for paging; default 0.
pairstringFilter by pair symbol, e.g. BTCUSDT. Omit for all.
strategystringFilter by strategy key, e.g. 'rsi_sma'. Omit for all.

No output schema declared.

No examples provided.

arena_list_knowledge ~173

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]

NameTypeReqDescription
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…

No output schema declared.

No examples provided.

arena_list_onchain_series ~191

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]

NameTypeReqDescription
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…

No output schema declared.

No examples provided.

arena_list_strategies ~215

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]

NameTypeReqDescription
asset_classstringFilter to strategies supporting this asset class (crypto or tokenized_rwa).
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…
langstringLocalized names/taglines. Default 'en'.
planstringFilter to strategies of this plan tier.

No output schema declared.

No examples provided.

arena_list_subscriptions ~183

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]

NameTypeReqDescription
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…

No output schema declared.

No examples provided.

arena_list_universes ~159

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]

NameTypeReqDescription
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…

No output schema declared.

No examples provided.

arena_quote_report ~365

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]

NameTypeReqDescription
asset_typestringAsset class; currently 'crypto' only (default).
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…
custom_pairsarrayExplicit pair list — required when universe_tier='custom', ignored otherwise.
discount_codestringOptional retention-discount code.
intervalstringyesCandle interval the report is computed on: '1d', '1w' or '1M'.
period_labelstringyesHistory covered by the report. Longer periods cross more market regimes and cost more compute.
strategystringyesStrategy key (use arena_list_strategies for valid values).
strategy_paramsobjectStrategy parameters applied across the whole universe; omit for audited defaults.
universe_tieryes'top-10' / 'top-50' / 'top-100' / 'top-250' (crypto) or 'custom' with customPairs[].

No output schema declared.

No examples provided.

arena_run_backtest ~641

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]

NameTypeReqDescription
asset_typestringyesAsset class. Use 'crypto' unless you are explicitly backtesting a tokenized real-world asset.
capitalnumberStarting capital in quote currency. Default 10000. Affects absolute figures only, not CAGR or win-rate.
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…
date_fromstringyesStart date, YYYY-MM-DD. Earlier than the pair listing is clamped to the first available candle.
date_tostringEnd date, YYYY-MM-DD. Default: today.
filtersobjectOptional entry filters (Pro+). Each one only ever REMOVES entries — filters never create trades. Omit for the unfiltered baseline.
intervalstringyesCandle 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 cor…
pairstringyesCrypto pair symbol, e.g. BTCUSDT, ETHUSDT, SOLUSDT.
paramsobjectStrategy-specific parameters, e.g. { rsi_period: 14 }. Omit to use the audited defaults — changing them without a reason is how overfitting starts.
strategystringyesStrategy key — use arena_list_strategies to find valid keys.

No output schema declared.

No examples provided.

arena_run_grid_backtest ~589

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]

NameTypeReqDescription
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…
end_datestringyesSimulation end, YYYY-MM-DD.
entry_pricenumberOptional price at which the bot starts; default is the first close in the range.
fee_ratenumberyesPer-trade fee fraction, e.g. 0.001 for 0.1% (Binance spot taker).
grid_countintegeryesNumber of grid levels between low_price and high_price (2–200). More levels = more, smaller trades = more fees.
grid_typestringyesLevel spacing: 'arithmetic' = equal price steps, 'geometric' = equal percentage steps (usually the better fit for crypto).
high_pricenumberyesUpper bound of the grid range, in quote currency. Above it the bot is fully in cash and stops selling. Must exceed low_price.
low_pricenumberyesLower bound of the grid range, in quote currency. Below it the bot is fully invested and stops buying.
pairstringyesCrypto pair symbol, e.g. BTCUSDT. Free tier: BTCUSDT or ETHUSDT only.
start_datestringyesSimulation start, YYYY-MM-DD.
stop_loss_pricenumberOptional: liquidate the whole grid and stop once price falls to this level.
take_profit_pricenumberOptional: liquidate the whole grid and stop once price rises to this level.
total_investmentnumberyesCapital in USDT spread across the grid; min 100.

No output schema declared.

No examples provided.

arena_run_universe_backtest ~839

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]

NameTypeReqDescription
capitalnumberStarting capital in quote currency. Default 10000. Affects absolute figures only, not CAGR or win-rate.
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…
date_fromstringyesStart date, YYYY-MM-DD. Earlier than the pair listing is clamped to the first available candle.
date_tostringEnd date, YYYY-MM-DD. Default: today.
filtersobjectOptional entry filters (Pro+). Each one only ever REMOVES entries — filters never create trades. Omit for the unfiltered baseline.
intervalstringyesCandle 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 cor…
pairsarrayExplicit pair list. Hard schema limit 250; the effective cap is your tier (Pro 50, Power 250). Use instead of universe_id.
paramsobjectStrategy-specific parameters applied to EVERY pair in the universe. Omit for audited defaults.
strategystringyesStrategy key — call arena_list_strategies.
universe_idstringPre-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.

No output schema declared.

No examples provided.

arena_subscribe_bullmarket_stage ~367

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]

NameTypeReqDescription
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…
delivery_methodstringHow updates reach you: 'polling' (default — collect via arena_check_subscription_updates) or 'webhook' (we POST to your URL).
directionstringFilter to direction. Default 'any'.
expires_atstringISO-8601 timestamp after which the subscription auto-deactivates. Omit to keep it active until cancelled.
stagesarraySpecific stages of interest. Default: any change.
webhook_urlstringHTTPS endpoint we POST to. Required when delivery_method=webhook, ignored otherwise.

No output schema declared.

No examples provided.

arena_subscribe_cycle_changes ~349

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]

NameTypeReqDescription
bandsarrayFilter to bands of interest. Default: any change triggers.
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…
delivery_methodstringHow updates reach you: 'polling' (default — collect via arena_check_subscription_updates) or 'webhook' (we POST to your URL).
expires_atstringISO-8601 timestamp after which the subscription auto-deactivates. Omit to keep it active until cancelled.
webhook_urlstringHTTPS endpoint we POST to. Required when delivery_method=webhook, ignored otherwise.

No output schema declared.

No examples provided.

arena_subscribe_pulse_changes ~366

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]

NameTypeReqDescription
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…
delivery_methodstringHow updates reach you: 'polling' (default — collect via arena_check_subscription_updates) or 'webhook' (we POST to your URL).
expires_atstringISO-8601 timestamp after which the subscription auto-deactivates. Omit to keep it active until cancelled.
threshold_abovenumberFire when score rises across this value.
threshold_belownumberFire when score falls across this value.
webhook_urlstringHTTPS endpoint we POST to. Required when delivery_method=webhook, ignored otherwise.

No output schema declared.

No examples provided.

arena_subscribe_signal_alerts ~408

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]

NameTypeReqDescription
ampel_config_idstringyesUUID einer existierenden ampel_configs-Row im gleichen User-Account.
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…
delivery_methodstringHow updates reach you: 'polling' (default — collect via arena_check_subscription_updates) or 'webhook' (we POST to your URL).
expires_atstringISO-8601 timestamp after which the subscription auto-deactivates. Omit to keep it active until cancelled.
signal_typesarrayOptional filter. Default: both BUY and SELL fire.
webhook_urlstringHTTPS endpoint we POST to. Required when delivery_method=webhook, ignored otherwise.

No output schema declared.

No examples provided.

get_more_tools ~53

Check for additional tools whenever your task might benefit from specialized capabilities - even if existing tools could work as a fallback.

NameTypeReqDescription
contextstringyesA description of your goal and what kind of tool would help accomplish it.

No output schema declared.

No examples provided.

validate_strategy ~450

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]

NameTypeReqDescription
contextstringyesExplain why you are calling this tool and how it fits into the user's overall goal. This parameter is used for analytics and user intent tracking. YOU MUST provide 15-25 words (count carefully). NEVE…
costsobjectTrading costs. Default 10 bps (crypto) / 5 bps (else) — a gross-only claim usually shrinks once these apply.
marketobjectyesWhich market the claim is about — prices are re-fetched from here, not taken from you.
oosobjectHow 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.
strategyobjectyesThe claim being validated — supply exactly one of: a catalog strategy (type=rules), your signals (type=signal_list) or your finished trades (type=trade_list).
windowobjectyesPeriod over which the claim is checked.

No output schema declared.

No examples provided.