io.github.Schoasch/backtesting-arena
REMOTE · TRADINGSTRATEGIES.WORK · SCANNED AUG 3
Crypto backtesting & Bitcoin cycle analytics. Point-in-time, DSR-corrected, look-ahead-aware.
Available components
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
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
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
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
claude mcp add --transport http schoasch-backtesting-arena https://tradingstrategies.work/api/mcp
[mcp_servers.schoasch-backtesting-arena] url = "https://tradingstrategies.work/api/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"schoasch-backtesting-arena": {
"type": "remote",
"url": "https://tradingstrategies.work/api/mcp",
"enabled": true
}
}
} openclaw mcp add schoasch-backtesting-arena --url https://tradingstrategies.work/api/mcp --transport streamable-http
mcp_servers:
schoasch-backtesting-arena:
url: "https://tradingstrategies.work/api/mcp" {
"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.
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.
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 |
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.
arena_get_strategy_performance Get Strategy Performance Snapshot (per Asset) ~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]
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | yes | Crypto pair / symbol (e.g. BTCUSDT, ETHUSDT). Case-insensitive. |
| asset_type | string | — | Optional asset class filter to disambiguate (e.g. when same pair-name exists in two classes). |
| context | string | yes | Explain 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… |
| interval | string | — | Default '1w'. Candle interval: '1d' daily, '2d'/'3d' multi-day, '1w' weekly, '1M' monthly. Multi-day candles (2d/3d) are anchored to the Unix epoch, so one of n possible alignments is used. Measured… |
| ref_strategy | string | — | Benchmark reference. Default 'bh' (Buy & Hold). |
| strategy | string | yes | Strategy 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 Get Regime-Aware Strategy Performance ~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]
| Name | Type | Req | Description |
|---|---|---|---|
| asset | string | yes | Crypto pair / symbol (e.g. BTCUSDT, ETHUSDT). Case-insensitive. |
| asset_type | string | — | Optional asset class filter to disambiguate identical pair-names. |
| context | string | yes | Explain 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… |
| interval | string | — | Default '1w'. Candle interval: '1d' daily, '2d'/'3d' multi-day, '1w' weekly, '1M' monthly. Multi-day candles (2d/3d) are anchored to the Unix epoch, so one of n possible alignments is used. Measured… |
| strategy | string | yes | Strategy key (e.g. rsi_sma, golden_cross). See arena_get_strategies. |
No output schema declared.
No examples provided.
arena_get_universe Get Universe Detail ~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]
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | yes | Explain 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_id | string | yes | Universe id, e.g. 'top-10-crypto'. |
No output schema declared.
No examples provided.
arena_get_volatility_history Get BTC Volatility History (RV + ATR%) ~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]
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | yes | Explain 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… |
| days | integer | — | Number of most recent days to return. Free tier capped at 365; API Pro unlimited. Ignored when from/to are given. |
| fields | string | — | Default 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… |
| from | string | — | ISO date (YYYY-MM-DD), inclusive. Start of the window. Free tier still only sees the last 365 days. |
| granularity | string | — | Default daily. weekly/monthly keep the LAST observation of each period (a state, not an average). |
| meta | string | — | Default full. 'minimal' drops params/params_hash/warmup, which are only useful on the first call. |
| schema_version | string | — | Default '2026-07' (unchanged output). '2026-08' rounds floats to 2 decimals (ranks 1) and reports the saving. Default flips 2026-11-01. |
| to | string | — | ISO 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 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]
| Name | Type | Req | Description |
|---|---|---|---|
| asset_type | string | — | Filter by asset class, e.g. 'crypto'. Omit for all. |
| context | string | yes | Explain 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_trades | integer | — | Minimum 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 Get Live Volatility Phase Snapshots ~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]
| Name | Type | Req | Description |
|---|---|---|---|
| asset_type | string | — | Filter by asset class. Omit for all. |
| context | string | yes | Explain 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… |
| pair | string | — | Filter to a single pair, e.g. "BTCUSDT". Omit for all tracked pairs. |
No output schema declared.
No examples provided.
arena_get_volatility_recommendations Get Strategy Recommendations for Current Volatility Phase ~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]
| Name | Type | Req | Description |
|---|---|---|---|
| asset_type | string | — | Asset class of the pair |
| context | string | yes | Explain 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… |
| pair | string | yes | Crypto asset pair, e.g. "BTCUSDT", "ETHUSDT" |
No output schema declared.
No examples provided.
arena_get_winners Get Winners List (Top 100 CAGR) ~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]
| Name | Type | Req | Description |
|---|---|---|---|
| asset_class | string | — | Asset class filter. Default 'crypto' (D14-separated leaderboard). |
| context | string | yes | Explain 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… |
| limit | integer | — | How many entries to return, max 100 (default 100). |
| strategy | string | — | Restrict the leaderboard to one strategy key, e.g. 'rsi_sma'. Omit for all strategies. |
No output schema declared.
No examples provided.
arena_list_backtests List Your 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]
| Name | Type | Req | Description |
|---|---|---|---|
| asset_type | string | — | Filter by asset class, e.g. 'crypto'. Omit for all. |
| context | string | yes | Explain 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… |
| interval | string | — | Filter by candle interval; omit for all. Candle interval: '1d' daily, '2d'/'3d' multi-day, '1w' weekly, '1M' monthly. Multi-day candles (2d/3d) are anchored to the Unix epoch, so one of n possible al… |
| limit | integer | — | Page size, max 100, default 50. |
| offset | integer | — | Rows to skip for paging; default 0. |
| pair | string | — | Filter by pair symbol, e.g. BTCUSDT. Omit for all. |
| strategy | string | — | Filter by strategy key, e.g. 'rsi_sma'. Omit for all. |
No output schema declared.
No examples provided.
arena_list_knowledge List Knowledge Objects (catalog) ~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]
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | yes | Explain 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 List Available BRK On-Chain 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]
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | yes | Explain 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 List Available Trading 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]
| Name | Type | Req | Description |
|---|---|---|---|
| asset_class | string | — | Filter to strategies supporting this asset class (crypto or tokenized_rwa). |
| context | string | yes | Explain 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… |
| lang | string | — | Localized names/taglines. Default 'en'. |
| plan | string | — | Filter to strategies of this plan tier. |
No output schema declared.
No examples provided.
arena_list_subscriptions List Active Live-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]
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | yes | Explain 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 List Asset 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]
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | yes | Explain 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 Quote a Custom 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]
| Name | Type | Req | Description |
|---|---|---|---|
| asset_type | string | — | Asset class; currently 'crypto' only (default). |
| context | string | yes | Explain 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_pairs | array | — | Explicit pair list — required when universe_tier='custom', ignored otherwise. |
| discount_code | string | — | Optional retention-discount code. |
| interval | string | yes | Candle interval the report is computed on: '1d', '1w' or '1M'. |
| period_label | string | yes | History covered by the report. Longer periods cross more market regimes and cost more compute. |
| strategy | string | yes | Strategy key (use arena_list_strategies for valid values). |
| strategy_params | object | — | Strategy parameters applied across the whole universe; omit for audited defaults. |
| universe_tier | — | yes | 'top-10' / 'top-50' / 'top-100' / 'top-250' (crypto) or 'custom' with customPairs[]. |
No output schema declared.
No examples provided.
arena_run_backtest Run a New 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]
| Name | Type | Req | Description |
|---|---|---|---|
| asset_type | string | yes | Asset class. Use 'crypto' unless you are explicitly backtesting a tokenized real-world asset. |
| capital | number | — | Starting capital in quote currency. Default 10000. Affects absolute figures only, not CAGR or win-rate. |
| context | string | yes | Explain 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_from | string | yes | Start date, YYYY-MM-DD. Earlier than the pair listing is clamped to the first available candle. |
| date_to | string | — | End date, YYYY-MM-DD. Default: today. |
| filters | object | — | Optional entry filters (Pro+). Each one only ever REMOVES entries — filters never create trades. Omit for the unfiltered baseline. |
| interval | string | yes | Candle interval: '1d' daily, '2d'/'3d' multi-day, '1w' weekly, '1M' monthly. Multi-day candles (2d/3d) are anchored to the Unix epoch, so one of n possible alignments is used. Measured on our own cor… |
| pair | string | yes | Crypto pair symbol, e.g. BTCUSDT, ETHUSDT, SOLUSDT. |
| params | object | — | Strategy-specific parameters, e.g. { rsi_period: 14 }. Omit to use the audited defaults — changing them without a reason is how overfitting starts. |
| strategy | string | yes | Strategy key — use arena_list_strategies to find valid keys. |
No output schema declared.
No examples provided.
arena_run_grid_backtest Run a Grid-Trading 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]
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | yes | Explain 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_date | string | yes | Simulation end, YYYY-MM-DD. |
| entry_price | number | — | Optional price at which the bot starts; default is the first close in the range. |
| fee_rate | number | yes | Per-trade fee fraction, e.g. 0.001 for 0.1% (Binance spot taker). |
| grid_count | integer | yes | Number of grid levels between low_price and high_price (2–200). More levels = more, smaller trades = more fees. |
| grid_type | string | yes | Level spacing: 'arithmetic' = equal price steps, 'geometric' = equal percentage steps (usually the better fit for crypto). |
| high_price | number | yes | Upper bound of the grid range, in quote currency. Above it the bot is fully in cash and stops selling. Must exceed low_price. |
| low_price | number | yes | Lower bound of the grid range, in quote currency. Below it the bot is fully invested and stops buying. |
| pair | string | yes | Crypto pair symbol, e.g. BTCUSDT. Free tier: BTCUSDT or ETHUSDT only. |
| start_date | string | yes | Simulation start, YYYY-MM-DD. |
| stop_loss_price | number | — | Optional: liquidate the whole grid and stop once price falls to this level. |
| take_profit_price | number | — | Optional: liquidate the whole grid and stop once price rises to this level. |
| total_investment | number | yes | Capital in USDT spread across the grid; min 100. |
No output schema declared.
No examples provided.
arena_run_universe_backtest Run Backtest on a Pair Universe (async) ~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]
| Name | Type | Req | Description |
|---|---|---|---|
| capital | number | — | Starting capital in quote currency. Default 10000. Affects absolute figures only, not CAGR or win-rate. |
| context | string | yes | Explain 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_from | string | yes | Start date, YYYY-MM-DD. Earlier than the pair listing is clamped to the first available candle. |
| date_to | string | — | End date, YYYY-MM-DD. Default: today. |
| filters | object | — | Optional entry filters (Pro+). Each one only ever REMOVES entries — filters never create trades. Omit for the unfiltered baseline. |
| interval | string | yes | Candle interval: '1d' daily, '2d'/'3d' multi-day, '1w' weekly, '1M' monthly. Multi-day candles (2d/3d) are anchored to the Unix epoch, so one of n possible alignments is used. Measured on our own cor… |
| pairs | array | — | Explicit pair list. Hard schema limit 250; the effective cap is your tier (Pro 50, Power 250). Use instead of universe_id. |
| params | object | — | Strategy-specific parameters applied to EVERY pair in the universe. Omit for audited defaults. |
| strategy | string | yes | Strategy key — call arena_list_strategies. |
| universe_id | string | — | Pre-curated universe — call arena_list_universes for valid IDs. Capped by tier (Pro 50, Power 250); a larger universe is rejected rather than silently truncated. |
No output schema declared.
No examples provided.
arena_subscribe_bullmarket_stage Subscribe to Bullmarket-Ampel Stage Changes ~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]
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | yes | Explain 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_method | string | — | How updates reach you: 'polling' (default — collect via arena_check_subscription_updates) or 'webhook' (we POST to your URL). |
| direction | string | — | Filter to direction. Default 'any'. |
| expires_at | string | — | ISO-8601 timestamp after which the subscription auto-deactivates. Omit to keep it active until cancelled. |
| stages | array | — | Specific stages of interest. Default: any change. |
| webhook_url | string | — | HTTPS endpoint we POST to. Required when delivery_method=webhook, ignored otherwise. |
No output schema declared.
No examples provided.
arena_subscribe_cycle_changes Subscribe to BTC Cycle Band 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]
| Name | Type | Req | Description |
|---|---|---|---|
| bands | array | — | Filter to bands of interest. Default: any change triggers. |
| context | string | yes | Explain 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_method | string | — | How updates reach you: 'polling' (default — collect via arena_check_subscription_updates) or 'webhook' (we POST to your URL). |
| expires_at | string | — | ISO-8601 timestamp after which the subscription auto-deactivates. Omit to keep it active until cancelled. |
| webhook_url | string | — | HTTPS endpoint we POST to. Required when delivery_method=webhook, ignored otherwise. |
No output schema declared.
No examples provided.
arena_subscribe_pulse_changes Subscribe to Arena-Pulse Score Threshold Crossings ~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]
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | yes | Explain 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_method | string | — | How updates reach you: 'polling' (default — collect via arena_check_subscription_updates) or 'webhook' (we POST to your URL). |
| expires_at | string | — | ISO-8601 timestamp after which the subscription auto-deactivates. Omit to keep it active until cancelled. |
| threshold_above | number | — | Fire when score rises across this value. |
| threshold_below | number | — | Fire when score falls across this value. |
| webhook_url | string | — | HTTPS endpoint we POST to. Required when delivery_method=webhook, ignored otherwise. |
No output schema declared.
No examples provided.
arena_subscribe_signal_alerts Subscribe to Strategy 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]
| Name | Type | Req | Description |
|---|---|---|---|
| ampel_config_id | string | yes | UUID einer existierenden ampel_configs-Row im gleichen User-Account. |
| context | string | yes | Explain 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_method | string | — | How updates reach you: 'polling' (default — collect via arena_check_subscription_updates) or 'webhook' (we POST to your URL). |
| expires_at | string | — | ISO-8601 timestamp after which the subscription auto-deactivates. Omit to keep it active until cancelled. |
| signal_types | array | — | Optional filter. Default: both BUY and SELL fire. |
| webhook_url | string | — | HTTPS 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.
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | yes | A description of your goal and what kind of tool would help accomplish it. |
No output schema declared.
No examples provided.
validate_strategy Validate a strategy/signal (honest backtest) ~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]
| Name | Type | Req | Description |
|---|---|---|---|
| context | string | yes | Explain 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… |
| costs | object | — | Trading costs. Default 10 bps (crypto) / 5 bps (else) — a gross-only claim usually shrinks once these apply. |
| market | object | yes | Which market the claim is about — prices are re-fetched from here, not taken from you. |
| oos | object | — | How the claim is tested out-of-sample. Omit for the default split — the out-of-sample part is what separates a finding from a fit. |
| strategy | object | yes | The claim being validated — supply exactly one of: a catalog strategy (type=rules), your signals (type=signal_list) or your finished trades (type=trade_list). |
| window | object | yes | Period over which the claim is checked. |
No output schema declared.
No examples provided.