Grok Crypto Quant API
Pay-per-call crypto backtests, signals, token risk checks and universes (x402, USDC on Base).
我该使用它吗
质量与安全性
发现(2)
- LOW在 health 中
- LOW在 get_schema 中
基于对工具定义和协议合规性的自动分析。
上下文开销
这是每次将服务器的工具加载到模型上下文窗口时所消耗的大致 token 数。数值越高,可用于其他任务的注意力就越少。
安装
一键安装
将以下内容添加到你的 `claude_desktop_config.json` 文件中:
{
"mcpServers": {
"crypto-quant": {
"url": "https://grok-backtest-api.fly.dev/mcp"
}
}
}远程端点
https://grok-backtest-api.fly.dev/mcpstreamable-http它能做什么
工具清单
工具(13)
🟢backtest(strategy, universe, start, end, initial_capital, ...)
Backtest crypto strategies on 399 Coinbase coins without survivorship bias. DIY backtests usually use today's coin list, so dead coins vanish and returns are overstated; this rebuilds the universe from each past day's top coins. Breakout, momentum, dip-buy or MA-trend rules on daily data with fees, slippage, H1/H2 split and a luck flag. No data fetching or backtest code on your side. Price: $0.05 USDC per call (x402, Base mainnet). Free pre-check: validate_backtest. Free sample: backtest_sample.
输入模式
{
"type": "object",
"properties": {
"strategy": {
"discriminator": {
"mapping": {
"breakout": "#/$defs/Breakout",
"dip": "#/$defs/Dip",
"ma_trend": "#/$defs/MATrend",
"momentum": "#/$defs/Momentum"
},
"propertyName": "type"
},
"oneOf": [
{
"$ref": "#/$defs/Breakout"
},
{
"$ref": "#/$defs/Momentum"
},
{
"$ref": "#/$defs/Dip"
},
{
"$ref": "#/$defs/MATrend"
}
],
"title": "Strategy"
},
"universe": {
"anyOf": [
{
"$ref": "#/$defs/Universe"
},
{
"type": "null"
}
],
"default": null
},
"start": {
"anyOf": [
{
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "YYYY-MM-DD",
"title": "Start"
},
"end": {
"anyOf": [
{
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "YYYY-MM-DD",
"title": "End"
},
"initial_capital": {
"default": 150,
"description": "Starting capital in USD",
"exclusiveMinimum": 0,
"maximum": 1000000000,
"title": "Initial Capital",
"type": "number"
},
"fee": {
"default": 0.009,
"description": "Fee per side (0.009 = 0.9%)",
"maximum": 0.05,
"minimum": 0,
"title": "Fee",
"type": "number"
},
"slippage": {
"default": 0.002,
"description": "Slippage per side",
"maximum": 0.05,
"minimum": 0,
"title": "Slippage",
"type": "number"
},
"include_trades": {
"default": true,
"title": "Include Trades",
"type": "boolean"
}
},
"required": [
"strategy"
],
"$defs": {
"Breakout": {
"additionalProperties": false,
"properties": {
"type": {
"const": "breakout",
"title": "Type",
"type": "string"
},
"params": {
"$ref": "#/$defs/BreakoutParams",
"default": {
"lookback": 20,
"atr_mult": 2,
"risk_per_trade": 0.05,
"max_position_pct": 0.5,
"max_positions": 3,
"gate": "btc_ma50",
"min_stop_pct": 0.06,
"max_stop_pct": 0.4
}
}
},
"required": [
"type"
],
"title": "Breakout",
"type": "object"
},
"BreakoutParams": {
"additionalProperties": false,
"properties": {
"lookback": {
"default": 20,
"description": "Buy when close > highest high of prior N days",
"maximum": 60,
"minimum": 5,
"title": "Lookback",
"type": "integer"
},
"atr_mult": {
"default": 2,
"description": "Trailing stop = highest close - k*ATR14",
"maximum": 6,
"minimum": 0.5,
"title": "Atr Mult",
"type": "number"
},
"risk_per_trade": {
"default": 0.05,
"description": "Fraction of equity risked to the initial stop",
"exclusiveMinimum": 0,
"maximum": 0.25,
"title": "Risk Per Trade",
"type": "number"
},
"max_position_pct": {
"default": 0.5,
"exclusiveMinimum": 0,
"maximum": 1,
"title": "Max Position Pct",
"type": "number"
},
"max_positions": {
"default": 3,
"maximum": 10,
"minimum": 1,
"title": "Max Positions",
"type": "integer"
},
"gate": {
"default": "btc_ma50",
"description": "Only open trades when BTC > 50-day SMA (btc_ma50) or >=50% of universe above 20d SMA (breadth50)",
"enum": [
"none",
"btc_ma50",
"breadth50"
],
"title": "Gate",
"type": "string"
},
"min_stop_pct": {
"default": 0.06,
"exclusiveMinimum": 0,
"maximum": 0.5,
"title": "Min Stop Pct",
"type": "number"
},
"max_stop_pct": {
"default": 0.4,
"exclusiveMinimum": 0,
"maximum": 0.9,
"title": "Max Stop Pct",
"type": "number"
}
},
"title": "BreakoutParams",
"type": "object"
},
"Dip": {
"additionalProperties": false,
"properties": {
"type": {
"const": "dip",
"title": "Type",
"type": "string"
},
"params": {
"$ref": "#/$defs/DipParams",
"default": {
"drop_pct": 0.15,
"days": 1,
"trend_filter": "ma50",
"max_hold_days": 5,
"hard_stop_pct": 0.15,
"max_positions": 3
}
}
},
"required": [
"type"
],
"title": "Dip",
"type": "object"
},
"DipParams": {
"additionalProperties": false,
"properties": {
"drop_pct": {
"default": 0.15,
"description": "Buy after a fall of at least this fraction over `days`",
"exclusiveMaximum": 0.9,
"exclusiveMinimum": 0.01,
"title": "Drop Pct",
"type": "number"
},
"days": {
"default": 1,
"maximum": 10,
"minimum": 1,
"title": "Days",
"type": "integer"
},
"trend_filter": {
"default": "ma50",
"enum": [
"ma50",
"none"
],
"title": "Trend Filter",
"type": "string"
},
"max_hold_days": {
"default": 5,
"maximum": 60,
"minimum": 1,
"title": "Max Hold Days",
"type": "integer"
},
"hard_stop_pct": {
"default": 0.15,
"exclusiveMaximum": 0.9,
"exclusiveMinimum": 0.01,
"title": "Hard Stop Pct",
"type": "number"
},
"max_positions": {
"default": 3,
"maximum": 10,
"minimum": 1,
"title": "Max Positions",
"type": "integer"
}
},
"title": "DipParams",
"type": "object"
},
"MATrend": {
"additionalProperties": false,
"properties": {
"type": {
"const": "ma_trend",
"title": "Type",
"type": "string"
},
"params": {
"$ref": "#/$defs/MATrendParams",
"default": {
"coins": [
"ETH-USD"
],
"ma_days": 50
}
}
},
"required": [
"type"
],
"title": "MATrend",
"type": "object"
},
"MATrendParams": {
"additionalProperties": false,
"properties": {
"coins": {
"default": [
"ETH-USD"
],
"description": "Coinbase product ids, e.g. ETH-USD",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"title": "Coins",
"type": "array"
},
"ma_days": {
"default": 50,
"maximum": 60,
"minimum": 5,
"title": "Ma Days",
"type": "integer"
}
},
"title": "MATrendParams",
"type": "object"
},
"Momentum": {
"additionalProperties": false,
"properties": {
"type": {
"const": "momentum",
"title": "Type",
"type": "string"
},
"params": {
"$ref": "#/$defs/MomentumParams",
"default": {
"lookback": 14,
"top_n": 2,
"rebalance_days": 7,
"gate": "btc_ma50",
"trail_pct": null
}
}
},
"required": [
"type"
],
"title": "Momentum",
"type": "object"
},
"MomentumParams": {
"additionalProperties": false,
"properties": {
"lookback": {
"default": 14,
"description": "Rank by N-day return",
"maximum": 60,
"minimum": 3,
"title": "Lookback",
"type": "integer"
},
"top_n": {
"default": 2,
"maximum": 10,
"minimum": 1,
"title": "Top N",
"type": "integer"
},
"rebalance_days": {
"default": 7,
"maximum": 30,
"minimum": 1,
"title": "Rebalance Days",
"type": "integer"
},
"gate": {
"default": "btc_ma50",
"enum": [
"none",
"btc_ma50",
"breadth50"
],
"title": "Gate",
"type": "string"
},
"trail_pct": {
"anyOf": [
{
"exclusiveMaximum": 0.9,
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional % trailing stop from highest close",
"title": "Trail Pct"
}
},
"title": "MomentumParams",
"type": "object"
},
"Universe": {
"additionalProperties": false,
"properties": {
"mode": {
"default": "point_in_time",
"description": "point_in_time = top-N by trailing 20d $ volume AS OF each day (no survivorship bias); current_top = top-N as of the end date (biased, for comparison); fixed = your coin list",
"enum": [
"point_in_time",
"current_top",
"fixed"
],
"title": "Mode",
"type": "string"
},
"top_n": {
"default": 30,
"maximum": 200,
"minimum": 5,
"title": "Top N",
"type": "integer"
},
"min_age_days": {
"default": 35,
"description": "Days a coin must have traded before it is eligible",
"maximum": 120,
"minimum": 0,
"title": "Min Age Days",
"type": "integer"
},
"min_avg_dollar_volume": {
"default": 1000000,
"description": "Min 20-day avg Coinbase $ volume",
"minimum": 0,
"title": "Min Avg Dollar Volume",
"type": "number"
},
"coins": {
"anyOf": [
{
"items": {
"type": "string"
},
"maxItems": 200,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Coins"
}
},
"title": "Universe",
"type": "object"
}
},
"title": "backtestArguments"
}🟢market_signals(top_n)
Daily crypto market regime in one call: BTC/ETH vs 20/50-day MAs, breadth of the point-in-time top-N (no survivorship bias), coins nearest a 20-day breakout, and the R1 breakout strategy's gate and entry signals. No candle fetching or indicator code. Completed UTC daily closes only. Price: $0.01 USDC per call (x402, Base mainnet). Free sample: signals_sample.
输入模式
{
"type": "object",
"properties": {
"top_n": {
"default": 30,
"description": "Universe size for breadth / breakout scan",
"maximum": 200,
"minimum": 5,
"title": "Top N",
"type": "integer"
}
},
"title": "market_signalsArguments"
}🟢token_check(chain, address)
Token scam check in one call instead of wiring up five data sources: honeypot sell simulation, unverified code, mint/pause/blacklist powers, taxes, upgradeable proxy, age, liquidity, fake major-token (e.g. fake USDC) lookalikes and spam-airdrop patterns. Base, Ethereum or Solana. Never visits metadata URLs. Price: $0.02 USDC per call (x402, Base mainnet). Free pre-check: validate_token_check.
输入模式
{
"type": "object",
"properties": {
"chain": {
"description": "base, ethereum or solana",
"enum": [
"base",
"ethereum",
"solana"
],
"title": "Chain",
"type": "string"
},
"address": {
"description": "Token contract / mint address",
"maxLength": 44,
"minLength": 32,
"title": "Address",
"type": "string"
}
},
"required": [
"chain",
"address"
],
"title": "token_checkArguments"
}🟢optimize_strategy(strategy, grid, universe, start, end, ...)
Find robust strategy params, not lucky ones: tests up to 50 combos on the same survivorship-bias-free backtester, ranks by worst-half (H1/H2) return with neighbourhood smoothing, flags overfitting, and recommends the most stable parameters rather than the best-fit ones. Price: $0.50 USDC per call (x402, Base mainnet). Free pre-check: validate_optimize.
输入模式
{
"type": "object",
"properties": {
"strategy": {
"$ref": "#/$defs/OptimizeStrategy"
},
"grid": {
"additionalProperties": {
"items": {
"anyOf": [
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "string"
},
{
"type": "null"
}
]
},
"type": "array"
},
"description": "param -> values to try; <= 50 combos total, <= 10 values per param",
"title": "Grid",
"type": "object"
},
"universe": {
"anyOf": [
{
"$ref": "#/$defs/Universe"
},
{
"type": "null"
}
],
"default": null
},
"start": {
"anyOf": [
{
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "YYYY-MM-DD",
"title": "Start"
},
"end": {
"anyOf": [
{
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "YYYY-MM-DD",
"title": "End"
},
"initial_capital": {
"default": 150,
"description": "Starting capital in USD",
"exclusiveMinimum": 0,
"maximum": 1000000000,
"title": "Initial Capital",
"type": "number"
},
"fee": {
"default": 0.009,
"description": "Fee per side (0.009 = 0.9%)",
"maximum": 0.05,
"minimum": 0,
"title": "Fee",
"type": "number"
},
"slippage": {
"default": 0.002,
"description": "Slippage per side",
"maximum": 0.05,
"minimum": 0,
"title": "Slippage",
"type": "number"
},
"rank_by": {
"default": "robust",
"enum": [
"robust",
"return"
],
"title": "Rank By",
"type": "string"
}
},
"required": [
"strategy",
"grid"
],
"$defs": {
"OptimizeStrategy": {
"additionalProperties": false,
"properties": {
"type": {
"enum": [
"breakout",
"momentum",
"dip",
"ma_trend"
],
"title": "Type",
"type": "string"
},
"params": {
"additionalProperties": true,
"default": {},
"description": "Fixed (non-grid) params; same fields as /backtest strategy params",
"title": "Params",
"type": "object"
}
},
"required": [
"type"
],
"title": "OptimizeStrategy",
"type": "object"
},
"Universe": {
"additionalProperties": false,
"properties": {
"mode": {
"default": "point_in_time",
"description": "point_in_time = top-N by trailing 20d $ volume AS OF each day (no survivorship bias); current_top = top-N as of the end date (biased, for comparison); fixed = your coin list",
"enum": [
"point_in_time",
"current_top",
"fixed"
],
"title": "Mode",
"type": "string"
},
"top_n": {
"default": 30,
"maximum": 200,
"minimum": 5,
"title": "Top N",
"type": "integer"
},
"min_age_days": {
"default": 35,
"description": "Days a coin must have traded before it is eligible",
"maximum": 120,
"minimum": 0,
"title": "Min Age Days",
"type": "integer"
},
"min_avg_dollar_volume": {
"default": 1000000,
"description": "Min 20-day avg Coinbase $ volume",
"minimum": 0,
"title": "Min Avg Dollar Volume",
"type": "number"
},
"coins": {
"anyOf": [
{
"items": {
"type": "string"
},
"maxItems": 200,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Coins"
}
},
"title": "Universe",
"type": "object"
}
},
"title": "optimize_strategyArguments"
}🟢universe_snapshot(date, top_n, min_age_days, min_avg_dollar_volume)
Survivorship-free top-N coin list for any past date: Coinbase USD pairs ranked by trailing 20-day dollar volume using only data available that day. Fixes your own backtests: picking today's top coins hides the ones that died and overstates returns. Price: $0.05 USDC per call (x402, Base mainnet). Free pre-check: validate_universe.
输入模式
{
"type": "object",
"properties": {
"date": {
"anyOf": [
{
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "YYYY-MM-DD",
"title": "Date"
},
"top_n": {
"default": 30,
"maximum": 200,
"minimum": 1,
"title": "Top N",
"type": "integer"
},
"min_age_days": {
"default": 35,
"maximum": 120,
"minimum": 0,
"title": "Min Age Days",
"type": "integer"
},
"min_avg_dollar_volume": {
"default": 1000000,
"minimum": 0,
"title": "Min Avg Dollar Volume",
"type": "number"
}
},
"title": "universe_snapshotArguments"
}🟢signals_sample
Free, one day delayed: yesterday's full /signals result (BTC/ETH trend, breadth, breakout watchlist, R1 gate) so you can judge quality before paying. Today's result: paid market_signals ($0.01). Limit 60/hour per client.
输入模式
{
"type": "object",
"properties": {},
"title": "signals_sampleArguments"
}输出模式
{
"type": "object",
"additionalProperties": true,
"title": "signals_sampleDictOutput"
}🟢backtest_sample(strategy, days)
Free sample of the paid `backtest` tool on the same survivorship-bias-free engine: any strategy, point-in-time top-10 universe, window = last `days` (14..90) completed days, summary only. Full version: backtest ($0.05). Limit 30/hour per client.
输入模式
{
"type": "object",
"properties": {
"strategy": {
"discriminator": {
"mapping": {
"breakout": "#/$defs/Breakout",
"dip": "#/$defs/Dip",
"ma_trend": "#/$defs/MATrend",
"momentum": "#/$defs/Momentum"
},
"propertyName": "type"
},
"oneOf": [
{
"$ref": "#/$defs/Breakout"
},
{
"$ref": "#/$defs/Momentum"
},
{
"$ref": "#/$defs/Dip"
},
{
"$ref": "#/$defs/MATrend"
}
],
"title": "Strategy"
},
"days": {
"default": 90,
"description": "Window length in days, ending on the last completed UTC day",
"maximum": 90,
"minimum": 14,
"title": "Days",
"type": "integer"
}
},
"required": [
"strategy"
],
"$defs": {
"Breakout": {
"additionalProperties": false,
"properties": {
"type": {
"const": "breakout",
"title": "Type",
"type": "string"
},
"params": {
"$ref": "#/$defs/BreakoutParams",
"default": {
"lookback": 20,
"atr_mult": 2,
"risk_per_trade": 0.05,
"max_position_pct": 0.5,
"max_positions": 3,
"gate": "btc_ma50",
"min_stop_pct": 0.06,
"max_stop_pct": 0.4
}
}
},
"required": [
"type"
],
"title": "Breakout",
"type": "object"
},
"BreakoutParams": {
"additionalProperties": false,
"properties": {
"lookback": {
"default": 20,
"description": "Buy when close > highest high of prior N days",
"maximum": 60,
"minimum": 5,
"title": "Lookback",
"type": "integer"
},
"atr_mult": {
"default": 2,
"description": "Trailing stop = highest close - k*ATR14",
"maximum": 6,
"minimum": 0.5,
"title": "Atr Mult",
"type": "number"
},
"risk_per_trade": {
"default": 0.05,
"description": "Fraction of equity risked to the initial stop",
"exclusiveMinimum": 0,
"maximum": 0.25,
"title": "Risk Per Trade",
"type": "number"
},
"max_position_pct": {
"default": 0.5,
"exclusiveMinimum": 0,
"maximum": 1,
"title": "Max Position Pct",
"type": "number"
},
"max_positions": {
"default": 3,
"maximum": 10,
"minimum": 1,
"title": "Max Positions",
"type": "integer"
},
"gate": {
"default": "btc_ma50",
"description": "Only open trades when BTC > 50-day SMA (btc_ma50) or >=50% of universe above 20d SMA (breadth50)",
"enum": [
"none",
"btc_ma50",
"breadth50"
],
"title": "Gate",
"type": "string"
},
"min_stop_pct": {
"default": 0.06,
"exclusiveMinimum": 0,
"maximum": 0.5,
"title": "Min Stop Pct",
"type": "number"
},
"max_stop_pct": {
"default": 0.4,
"exclusiveMinimum": 0,
"maximum": 0.9,
"title": "Max Stop Pct",
"type": "number"
}
},
"title": "BreakoutParams",
"type": "object"
},
"Dip": {
"additionalProperties": false,
"properties": {
"type": {
"const": "dip",
"title": "Type",
"type": "string"
},
"params": {
"$ref": "#/$defs/DipParams",
"default": {
"drop_pct": 0.15,
"days": 1,
"trend_filter": "ma50",
"max_hold_days": 5,
"hard_stop_pct": 0.15,
"max_positions": 3
}
}
},
"required": [
"type"
],
"title": "Dip",
"type": "object"
},
"DipParams": {
"additionalProperties": false,
"properties": {
"drop_pct": {
"default": 0.15,
"description": "Buy after a fall of at least this fraction over `days`",
"exclusiveMaximum": 0.9,
"exclusiveMinimum": 0.01,
"title": "Drop Pct",
"type": "number"
},
"days": {
"default": 1,
"maximum": 10,
"minimum": 1,
"title": "Days",
"type": "integer"
},
"trend_filter": {
"default": "ma50",
"enum": [
"ma50",
"none"
],
"title": "Trend Filter",
"type": "string"
},
"max_hold_days": {
"default": 5,
"maximum": 60,
"minimum": 1,
"title": "Max Hold Days",
"type": "integer"
},
"hard_stop_pct": {
"default": 0.15,
"exclusiveMaximum": 0.9,
"exclusiveMinimum": 0.01,
"title": "Hard Stop Pct",
"type": "number"
},
"max_positions": {
"default": 3,
"maximum": 10,
"minimum": 1,
"title": "Max Positions",
"type": "integer"
}
},
"title": "DipParams",
"type": "object"
},
"MATrend": {
"additionalProperties": false,
"properties": {
"type": {
"const": "ma_trend",
"title": "Type",
"type": "string"
},
"params": {
"$ref": "#/$defs/MATrendParams",
"default": {
"coins": [
"ETH-USD"
],
"ma_days": 50
}
}
},
"required": [
"type"
],
"title": "MATrend",
"type": "object"
},
"MATrendParams": {
"additionalProperties": false,
"properties": {
"coins": {
"default": [
"ETH-USD"
],
"description": "Coinbase product ids, e.g. ETH-USD",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"title": "Coins",
"type": "array"
},
"ma_days": {
"default": 50,
"maximum": 60,
"minimum": 5,
"title": "Ma Days",
"type": "integer"
}
},
"title": "MATrendParams",
"type": "object"
},
"Momentum": {
"additionalProperties": false,
"properties": {
"type": {
"const": "momentum",
"title": "Type",
"type": "string"
},
"params": {
"$ref": "#/$defs/MomentumParams",
"default": {
"lookback": 14,
"top_n": 2,
"rebalance_days": 7,
"gate": "btc_ma50",
"trail_pct": null
}
}
},
"required": [
"type"
],
"title": "Momentum",
"type": "object"
},
"MomentumParams": {
"additionalProperties": false,
"properties": {
"lookback": {
"default": 14,
"description": "Rank by N-day return",
"maximum": 60,
"minimum": 3,
"title": "Lookback",
"type": "integer"
},
"top_n": {
"default": 2,
"maximum": 10,
"minimum": 1,
"title": "Top N",
"type": "integer"
},
"rebalance_days": {
"default": 7,
"maximum": 30,
"minimum": 1,
"title": "Rebalance Days",
"type": "integer"
},
"gate": {
"default": "btc_ma50",
"enum": [
"none",
"btc_ma50",
"breadth50"
],
"title": "Gate",
"type": "string"
},
"trail_pct": {
"anyOf": [
{
"exclusiveMaximum": 0.9,
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional % trailing stop from highest close",
"title": "Trail Pct"
}
},
"title": "MomentumParams",
"type": "object"
}
},
"title": "backtest_sampleArguments"
}输出模式
{
"type": "object",
"additionalProperties": true,
"title": "backtest_sampleDictOutput"
}🟢health
Free: service status, prices, network and data range.
输入模式
{
"type": "object",
"properties": {},
"title": "healthArguments"
}输出模式
{
"type": "object",
"additionalProperties": true,
"title": "healthDictOutput"
}🟢get_schema
Free: request schemas, examples, prices and limits for every paid tool/endpoint.
输入模式
{
"type": "object",
"properties": {},
"title": "get_schemaArguments"
}输出模式
{
"type": "object",
"additionalProperties": true,
"title": "get_schemaDictOutput"
}🟢validate_backtest(strategy, universe, start, end, initial_capital, ...)
Free: check backtest arguments (same as the paid `backtest` tool) before paying.
输入模式
{
"type": "object",
"properties": {
"strategy": {
"discriminator": {
"mapping": {
"breakout": "#/$defs/Breakout",
"dip": "#/$defs/Dip",
"ma_trend": "#/$defs/MATrend",
"momentum": "#/$defs/Momentum"
},
"propertyName": "type"
},
"oneOf": [
{
"$ref": "#/$defs/Breakout"
},
{
"$ref": "#/$defs/Momentum"
},
{
"$ref": "#/$defs/Dip"
},
{
"$ref": "#/$defs/MATrend"
}
],
"title": "Strategy"
},
"universe": {
"anyOf": [
{
"$ref": "#/$defs/Universe"
},
{
"type": "null"
}
],
"default": null
},
"start": {
"anyOf": [
{
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "YYYY-MM-DD",
"title": "Start"
},
"end": {
"anyOf": [
{
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "YYYY-MM-DD",
"title": "End"
},
"initial_capital": {
"default": 150,
"description": "Starting capital in USD",
"exclusiveMinimum": 0,
"maximum": 1000000000,
"title": "Initial Capital",
"type": "number"
},
"fee": {
"default": 0.009,
"description": "Fee per side (0.009 = 0.9%)",
"maximum": 0.05,
"minimum": 0,
"title": "Fee",
"type": "number"
},
"slippage": {
"default": 0.002,
"description": "Slippage per side",
"maximum": 0.05,
"minimum": 0,
"title": "Slippage",
"type": "number"
},
"include_trades": {
"default": true,
"title": "Include Trades",
"type": "boolean"
}
},
"required": [
"strategy"
],
"$defs": {
"Breakout": {
"additionalProperties": false,
"properties": {
"type": {
"const": "breakout",
"title": "Type",
"type": "string"
},
"params": {
"$ref": "#/$defs/BreakoutParams",
"default": {
"lookback": 20,
"atr_mult": 2,
"risk_per_trade": 0.05,
"max_position_pct": 0.5,
"max_positions": 3,
"gate": "btc_ma50",
"min_stop_pct": 0.06,
"max_stop_pct": 0.4
}
}
},
"required": [
"type"
],
"title": "Breakout",
"type": "object"
},
"BreakoutParams": {
"additionalProperties": false,
"properties": {
"lookback": {
"default": 20,
"description": "Buy when close > highest high of prior N days",
"maximum": 60,
"minimum": 5,
"title": "Lookback",
"type": "integer"
},
"atr_mult": {
"default": 2,
"description": "Trailing stop = highest close - k*ATR14",
"maximum": 6,
"minimum": 0.5,
"title": "Atr Mult",
"type": "number"
},
"risk_per_trade": {
"default": 0.05,
"description": "Fraction of equity risked to the initial stop",
"exclusiveMinimum": 0,
"maximum": 0.25,
"title": "Risk Per Trade",
"type": "number"
},
"max_position_pct": {
"default": 0.5,
"exclusiveMinimum": 0,
"maximum": 1,
"title": "Max Position Pct",
"type": "number"
},
"max_positions": {
"default": 3,
"maximum": 10,
"minimum": 1,
"title": "Max Positions",
"type": "integer"
},
"gate": {
"default": "btc_ma50",
"description": "Only open trades when BTC > 50-day SMA (btc_ma50) or >=50% of universe above 20d SMA (breadth50)",
"enum": [
"none",
"btc_ma50",
"breadth50"
],
"title": "Gate",
"type": "string"
},
"min_stop_pct": {
"default": 0.06,
"exclusiveMinimum": 0,
"maximum": 0.5,
"title": "Min Stop Pct",
"type": "number"
},
"max_stop_pct": {
"default": 0.4,
"exclusiveMinimum": 0,
"maximum": 0.9,
"title": "Max Stop Pct",
"type": "number"
}
},
"title": "BreakoutParams",
"type": "object"
},
"Dip": {
"additionalProperties": false,
"properties": {
"type": {
"const": "dip",
"title": "Type",
"type": "string"
},
"params": {
"$ref": "#/$defs/DipParams",
"default": {
"drop_pct": 0.15,
"days": 1,
"trend_filter": "ma50",
"max_hold_days": 5,
"hard_stop_pct": 0.15,
"max_positions": 3
}
}
},
"required": [
"type"
],
"title": "Dip",
"type": "object"
},
"DipParams": {
"additionalProperties": false,
"properties": {
"drop_pct": {
"default": 0.15,
"description": "Buy after a fall of at least this fraction over `days`",
"exclusiveMaximum": 0.9,
"exclusiveMinimum": 0.01,
"title": "Drop Pct",
"type": "number"
},
"days": {
"default": 1,
"maximum": 10,
"minimum": 1,
"title": "Days",
"type": "integer"
},
"trend_filter": {
"default": "ma50",
"enum": [
"ma50",
"none"
],
"title": "Trend Filter",
"type": "string"
},
"max_hold_days": {
"default": 5,
"maximum": 60,
"minimum": 1,
"title": "Max Hold Days",
"type": "integer"
},
"hard_stop_pct": {
"default": 0.15,
"exclusiveMaximum": 0.9,
"exclusiveMinimum": 0.01,
"title": "Hard Stop Pct",
"type": "number"
},
"max_positions": {
"default": 3,
"maximum": 10,
"minimum": 1,
"title": "Max Positions",
"type": "integer"
}
},
"title": "DipParams",
"type": "object"
},
"MATrend": {
"additionalProperties": false,
"properties": {
"type": {
"const": "ma_trend",
"title": "Type",
"type": "string"
},
"params": {
"$ref": "#/$defs/MATrendParams",
"default": {
"coins": [
"ETH-USD"
],
"ma_days": 50
}
}
},
"required": [
"type"
],
"title": "MATrend",
"type": "object"
},
"MATrendParams": {
"additionalProperties": false,
"properties": {
"coins": {
"default": [
"ETH-USD"
],
"description": "Coinbase product ids, e.g. ETH-USD",
"items": {
"type": "string"
},
"maxItems": 10,
"minItems": 1,
"title": "Coins",
"type": "array"
},
"ma_days": {
"default": 50,
"maximum": 60,
"minimum": 5,
"title": "Ma Days",
"type": "integer"
}
},
"title": "MATrendParams",
"type": "object"
},
"Momentum": {
"additionalProperties": false,
"properties": {
"type": {
"const": "momentum",
"title": "Type",
"type": "string"
},
"params": {
"$ref": "#/$defs/MomentumParams",
"default": {
"lookback": 14,
"top_n": 2,
"rebalance_days": 7,
"gate": "btc_ma50",
"trail_pct": null
}
}
},
"required": [
"type"
],
"title": "Momentum",
"type": "object"
},
"MomentumParams": {
"additionalProperties": false,
"properties": {
"lookback": {
"default": 14,
"description": "Rank by N-day return",
"maximum": 60,
"minimum": 3,
"title": "Lookback",
"type": "integer"
},
"top_n": {
"default": 2,
"maximum": 10,
"minimum": 1,
"title": "Top N",
"type": "integer"
},
"rebalance_days": {
"default": 7,
"maximum": 30,
"minimum": 1,
"title": "Rebalance Days",
"type": "integer"
},
"gate": {
"default": "btc_ma50",
"enum": [
"none",
"btc_ma50",
"breadth50"
],
"title": "Gate",
"type": "string"
},
"trail_pct": {
"anyOf": [
{
"exclusiveMaximum": 0.9,
"exclusiveMinimum": 0,
"type": "number"
},
{
"type": "null"
}
],
"default": null,
"description": "Optional % trailing stop from highest close",
"title": "Trail Pct"
}
},
"title": "MomentumParams",
"type": "object"
},
"Universe": {
"additionalProperties": false,
"properties": {
"mode": {
"default": "point_in_time",
"description": "point_in_time = top-N by trailing 20d $ volume AS OF each day (no survivorship bias); current_top = top-N as of the end date (biased, for comparison); fixed = your coin list",
"enum": [
"point_in_time",
"current_top",
"fixed"
],
"title": "Mode",
"type": "string"
},
"top_n": {
"default": 30,
"maximum": 200,
"minimum": 5,
"title": "Top N",
"type": "integer"
},
"min_age_days": {
"default": 35,
"description": "Days a coin must have traded before it is eligible",
"maximum": 120,
"minimum": 0,
"title": "Min Age Days",
"type": "integer"
},
"min_avg_dollar_volume": {
"default": 1000000,
"description": "Min 20-day avg Coinbase $ volume",
"minimum": 0,
"title": "Min Avg Dollar Volume",
"type": "number"
},
"coins": {
"anyOf": [
{
"items": {
"type": "string"
},
"maxItems": 200,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Coins"
}
},
"title": "Universe",
"type": "object"
}
},
"title": "validate_backtestArguments"
}输出模式
{
"type": "object",
"additionalProperties": true,
"title": "validate_backtestDictOutput"
}🟢validate_optimize(strategy, grid, universe, start, end, ...)
Free: check optimize_strategy arguments and count grid combos before paying.
输入模式
{
"type": "object",
"properties": {
"strategy": {
"$ref": "#/$defs/OptimizeStrategy"
},
"grid": {
"additionalProperties": {
"items": {
"anyOf": [
{
"type": "integer"
},
{
"type": "number"
},
{
"type": "string"
},
{
"type": "null"
}
]
},
"type": "array"
},
"description": "param -> values to try",
"title": "Grid",
"type": "object"
},
"universe": {
"anyOf": [
{
"$ref": "#/$defs/Universe"
},
{
"type": "null"
}
],
"default": null
},
"start": {
"anyOf": [
{
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "YYYY-MM-DD",
"title": "Start"
},
"end": {
"anyOf": [
{
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "YYYY-MM-DD",
"title": "End"
},
"initial_capital": {
"default": 150,
"description": "Starting capital in USD",
"exclusiveMinimum": 0,
"maximum": 1000000000,
"title": "Initial Capital",
"type": "number"
},
"fee": {
"default": 0.009,
"description": "Fee per side (0.009 = 0.9%)",
"maximum": 0.05,
"minimum": 0,
"title": "Fee",
"type": "number"
},
"slippage": {
"default": 0.002,
"description": "Slippage per side",
"maximum": 0.05,
"minimum": 0,
"title": "Slippage",
"type": "number"
},
"rank_by": {
"default": "robust",
"enum": [
"robust",
"return"
],
"title": "Rank By",
"type": "string"
}
},
"required": [
"strategy",
"grid"
],
"$defs": {
"OptimizeStrategy": {
"additionalProperties": false,
"properties": {
"type": {
"enum": [
"breakout",
"momentum",
"dip",
"ma_trend"
],
"title": "Type",
"type": "string"
},
"params": {
"additionalProperties": true,
"default": {},
"description": "Fixed (non-grid) params; same fields as /backtest strategy params",
"title": "Params",
"type": "object"
}
},
"required": [
"type"
],
"title": "OptimizeStrategy",
"type": "object"
},
"Universe": {
"additionalProperties": false,
"properties": {
"mode": {
"default": "point_in_time",
"description": "point_in_time = top-N by trailing 20d $ volume AS OF each day (no survivorship bias); current_top = top-N as of the end date (biased, for comparison); fixed = your coin list",
"enum": [
"point_in_time",
"current_top",
"fixed"
],
"title": "Mode",
"type": "string"
},
"top_n": {
"default": 30,
"maximum": 200,
"minimum": 5,
"title": "Top N",
"type": "integer"
},
"min_age_days": {
"default": 35,
"description": "Days a coin must have traded before it is eligible",
"maximum": 120,
"minimum": 0,
"title": "Min Age Days",
"type": "integer"
},
"min_avg_dollar_volume": {
"default": 1000000,
"description": "Min 20-day avg Coinbase $ volume",
"minimum": 0,
"title": "Min Avg Dollar Volume",
"type": "number"
},
"coins": {
"anyOf": [
{
"items": {
"type": "string"
},
"maxItems": 200,
"type": "array"
},
{
"type": "null"
}
],
"default": null,
"title": "Coins"
}
},
"title": "Universe",
"type": "object"
}
},
"title": "validate_optimizeArguments"
}输出模式
{
"type": "object",
"additionalProperties": true,
"title": "validate_optimizeDictOutput"
}🟢validate_token_check(chain, address)
Free: format-check a token_check request (no on-chain lookups).
输入模式
{
"type": "object",
"properties": {
"chain": {
"enum": [
"base",
"ethereum",
"solana"
],
"title": "Chain",
"type": "string"
},
"address": {
"title": "Address",
"type": "string"
}
},
"required": [
"chain",
"address"
],
"title": "validate_token_checkArguments"
}输出模式
{
"type": "object",
"additionalProperties": true,
"title": "validate_token_checkDictOutput"
}🟢validate_universe(date, top_n, min_age_days, min_avg_dollar_volume)
Free: check universe_snapshot arguments (date in range, enough history) before paying.
输入模式
{
"type": "object",
"properties": {
"date": {
"anyOf": [
{
"pattern": "^\\d{4}-\\d{2}-\\d{2}$",
"type": "string"
},
{
"type": "null"
}
],
"default": null,
"description": "YYYY-MM-DD",
"title": "Date"
},
"top_n": {
"default": 30,
"maximum": 200,
"minimum": 1,
"title": "Top N",
"type": "integer"
},
"min_age_days": {
"default": 35,
"maximum": 120,
"minimum": 0,
"title": "Min Age Days",
"type": "integer"
},
"min_avg_dollar_volume": {
"default": 1000000,
"minimum": 0,
"title": "Min Avg Dollar Volume",
"type": "number"
}
},
"title": "validate_universeArguments"
}输出模式
{
"type": "object",
"additionalProperties": true,
"title": "validate_universeDictOutput"
}社区
证据