backester mcp
本地第一回测引擎,内置过拟合检测。资产类别无关。MCP原生。
为什么存在
我是一名在校生,即将成为量化交易实习生,在过去的项目中,我一直在遇到现有回溯测试系统的极限。特别是,现有的工具可以运行回溯测试,但很难判断结果是真实的还是由于过拟合等原因。
作为一个有直觉的人,我通常能够解决这个问题并自己验证结果,但对于负责交易的人工智能代理来说,情况并非如此。因此,我决定构建一个任何代理都可以使用的工具,在切换到真钱之前快速可靠地验证策略。
问题
如果你是一个独立的量化分析师或一个迭代策略的人工智能代理,现有的工具假设你想要一个完整的平台。安装引擎本身就是一个项目(Docker镜像、编译的运行时、资产模型脚手架),在迭代时你最需要的具体东西,一个快速的答案是“这个策略实际上是过度拟合还是我只是运气好”,这不是他们开箱即用的东西。
backester mcp是相反的权衡: pip install,任何numpy价格数组都可以使用,统计健壮性工具包(PBO、deflate Sharpe、bootstrap CI、向前走)是核心功能,而不是附加功能。原生MCP服务器意味着AI代理可以直接调用验证管道。
快速开始
pip install backtester-mcp基于开箱即用的合成数据运行,无需下载数据集:
import numpy as np
from backtester_mcp import backtest
# synthetic price series, reproducible
rng = np.random.default_rng(0)
prices = np.cumprod(1 + rng.normal(0, 0.01, 2000))
# moving average crossover signal
fast = np.convolve(prices, np.ones(10) / 10, mode="full")[:len(prices)]
slow = np.convolve(prices, np.ones(50) / 50, mode="full")[:len(prices)]
signals = np.where(fast > slow, 1.0, -1.0)
signals[:50] = 0
result = backtest(prices, signals)
print(result.metrics)要针对真实数据集运行,请克隆仓库(git clone https://github.com/bcosm/backtester-mcp)和点 load() 在任何地方 datasets/ 或您自己的CSV/Parquet文件。
主要特点
| 功能 | 全平台(Zipline、精益等) | backester mcp |
|---|---|---|
| 安装程序 | 通常是Docker、conda或特定于平台的安装 | pip install |
| 数据模型 | 结构化数据包或特定资产类别 | 任何numpy价格系列 |
| 过拟合检测 | 最多向前走 | PBO+Bootstrap Sharpe+DSR+向前走 |
| 执行现实主义 | 按资产配置 | 根据数据自动估计,3种场景模式 |
| AI代理接口 | REST API或无 | 本机MCP服务器(13个工具) |
| 运行持久性 | 平台特定 | 本地DuckDB注册表 |
验证流程
backtester-mcp运行一个完整的验证管道,告诉您是否信任策略:
- 回测 具有现实的估计填充量
- Bootstrap Sharpe CI:夏普与零有区别吗?
- 贬值的夏普:它能经受多次测试的校正吗?
- PBO(扰动):确切的参数是否可靠,还是你运气好?
- 向前走验证:该策略在样本之外是否成立?
- 执行场景:乐观、基础和保守的成本假设
backtester-mcp backtest -s strategies/momentum.py -d datasets/spy_daily.parquet \
--robustness --execution-scenarios --walk-forwardCLI使用情况
# Basic backtest
backtester-mcp backtest -s strategies/momentum.py -d datasets/spy_daily.parquet
# Full validation: robustness + execution scenarios
backtester-mcp backtest -s strategies/momentum.py -d datasets/spy_daily.parquet \
--robustness --execution-scenarios
# Override strategy parameters
backtester-mcp backtest -s strategies/momentum.py -d datasets/spy_daily.parquet \
--set fast_period=20 --set slow_period=100
# Estimated fills from market data
backtester-mcp backtest -s strategies/momentum.py -d datasets/spy_daily.parquet \
--realistic-fills
# Optimize with Bayesian search + PBO check
backtester-mcp optimize -s strategies/momentum.py -d datasets/spy_daily.parquet \
-p fast_period:5:50 -p slow_period:20:200
# Generate HTML validation report
backtester-mcp report -s strategies/momentum.py -d datasets/spy_daily.parquet \
--robustness --execution-scenarios -o report.html
# Persist and compare runs
backtester-mcp backtest -s strategies/momentum.py -d datasets/spy_daily.parquet --save-run
backtester-mcp list-runs
backtester-mcp show-run
backtester-mcp compare-runs MCP服务器
backtester mcp通过AI代理的模型上下文协议公开了13个工具:
{
"mcpServers": {
"backtester-mcp": {
"command": "backtester-mcp",
"args": ["serve", "--transport", "stdio"]
}
}
}如果您的MCP客户端(例如Claude Desktop)找不到 backtester-mcp 二进制,因为venv不在其PATH中,请改用Python模块形式:
{
"mcpServers": {
"backtester-mcp": {
"command": "/absolute/path/to/.venv/bin/python",
"args": ["-m", "backtester_mcp", "serve", "--transport", "stdio"]
}
}
}可用工具:
| 工具 | 目的 |
|---|---|
backtest_strategy | 运行回溯测试(平坦、估计或保守填充) |
validate_strategy | 完整的验证流程,包括通过/警告判定 |
validate_robustness | Bootstrap Sharpe CI+DSR+PBO |
optimize_parameters | 基于PBO检验的贝叶斯参数搜索 |
compare_strategies | 并排比较多种策略 |
register_dataset | 从文件路径、CSV或base64注册数据 |
profile_dataset | 详细的数据集统计和质量检查 |
save_run | 将结果保存到本地DuckDB存储 |
list_runs | 列出最近的运行,可按数据集/策略进行筛选 |
load_run | 检索跑步的完整结果 |
compare_runs | 比较已保存运行的指标 |
generate_report | 创建HTML验证报告 |
strategy_template | 获取参数化策略代码模板 |
这 validate_strategy 该工具在一次调用中运行整个管道,并返回一个结构化的判断:
{
"verdict": "caution",
"reasons": ["bootstrap CI includes zero", "conservative scenario negative return"],
"metrics": {"sharpe": 0.28, ...},
"pbo": {"pbo": 0.36, ...},
"scenarios": {"optimistic": {...}, "base": {...}, "conservative": {...}}
}演出
2024年轻薄笔记本电脑CPU的基准测试(英特尔酷睿超7 256V,月球湖一代;性能与苹果M3 MacBook Air或单线程NumPy/Numba工作负载的Ryzen 7 7840U相当)。Python 3.13,numba 0.65,JIT预热后至少运行5次:
| 酒吧 | 时间 |
|---|---|
| 1000 | ~0.1毫秒 |
| 10000 | ~0.6毫秒 |
| 100000 | ~8.5毫秒 |
| 500000 | ~56毫秒 |
进程中的第一个调用支付numba JIT编译的费用(大约1到3秒,具体取决于函数)。随后的调用会命中磁盘缓存上的numba,并以上述数字运行。
PBO的工作原理
回溯测试过拟合概率(PBO)回答:“如果我从样本内优化中选择最佳策略,它在样本外表现不佳的概率是多少?”
它的工作原理是将回溯测试数据拆分为S个子周期,然后形成S/2子周期的所有组合作为样本,其余的作为样本外(组合对称交叉验证)。对于每种组合,它都会检查在样本中排名最高的策略是否仍然在样本外的中位数以上。PBO分数是组合中没有的分数。分数高于0.5意味着你的策略更有可能过度拟合。
对于单一策略,backester mcp使用 扰动PBO:它通过在+/-20%范围内抖动参数来生成变量,运行每个变量,然后在得到的返回矩阵上计算PBO。这回答了“附近的参数是否也能正常工作,或者你是否幸运地得到了这些确切的数字?”
来自Lopez de Prado(2018),“回溯测试过拟合的可能性” *计算金融杂志*.
建筑
Data (CSV/Parquet/DuckDB) -> Engine (NumPy + Numba) -> Metrics
-> Robustness (PBO, Bootstrap, DSR, Walk-Forward)
-> Sensitivity (Execution Scenarios, Stress Test)
-> Report (HTML)
-> Manifest (JSON audit trail)
-> Store (DuckDB persistence)策略是简单的功能: f(prices, **params) -> signals.没有类层次结构,没有继承,没有插件系统。
随机订单簿
大多数回溯测试引擎要么忽略填充模拟,要么要求为每个资产类别手动调整模型。backester mcp根据您的价格数据自动估计填充特征:
- 点差估计:Corwin Schultz(2012)来自OHLC数据,Roll(1984)来自收盘价
- 市场影响:根据观察到的波动率校准平方根模型
- 三种执行模式:乐观(零成本)、基数(估计)、保守(2倍价差)
这适用于任何价格系列,无需配置。
贡献
参见\[贡献
