VectorBT实战:一次跑190组参数网格搜索,找到苹果最优SMA策略收益523%
一个能同时跑 190 种参数组合的回测库
大部分回测框架的工作方式是逐次回测——改一个参数、跑一次、看结果、再改、再跑。想试 190 组参数?那就跑 190 次。VectorBT 的思路完全不同:它用向量化计算一次性跑完所有参数组合,190 组参数、每组 2900 多个交易日的数据,几秒钟出结果。
我拿它对苹果做了三件事:买入持有、SMA 10/50 双均线交叉、以及一次 190 组参数的网格搜索。结果相当有意思——默认参数(10/50)几乎没赚钱(+1.5%),但网格搜索找到的最优参数(5/15)拿到了 +523% 的收益。当然,买入持有才是最大赢家:+1,217%。
本文用自然语言驱动的方式把 VectorBT 变成了一个可以直接对话使用的回测 Skill——不需要配环境、不需要写策略代码。最终产出是一个包含三条资金曲线叠加对比的交互式图表。
起步
从 EasyClaw 官网下载安装。不需要手动 pip install vectorbt、不需要配 Python 环境——这些后面 EasyClaw 自动处理。
打开之后,左侧找到「Skill」→「Skill Creator」。如果灰显,去「设置 → 通用」打开「开发者模式」重启。
| 问题 | 解决方法 |
|---|---|
| Skill Creator 灰显 | 启用开发者模式,重启 |
| 网络连接失败 | 检查代理设置 |
创建 Skill,一句话的事
打开 Skill Creator,告诉 EasyClaw:
帮我把 GitHub 上的 VectorBT(https://github.com/polakowo/vectorbt)做成一个回测 Skill。我希望输入股票代码和起止日期就能跑 SMA 交叉策略,并且自动做一次参数网格搜索——快线从 5 到 50、慢线从 10 到 100,同时跑完所有组合并找出最优参数。最后把买入持有、默认参数、最优参数三条资金曲线画在同一张图上对比。
就这一句话。EasyClaw 会自动拉代码、分析 VectorBT 的向量化回测逻辑和 grid search 接口,封装成 Skill。不需要手动处理数据格式、不需要写策略类、也不需要自己去理解 VectorBT 的 MultiIndex 数据结构。
Skill 创建好之后,在对话框里说:
用 VectorBT 回测 AAPL,从 2015 年到 2026 年,默认 SMA 参数 10/50,网格搜索快线 5-50、慢线 10-100

回测结果:默认参数几乎不赚钱,但网格搜索找到了十倍以上的参数
跑完你会得到三组策略的完整对比。先看最直观的:
| 指标 | 买入持有 | SMA(10,50) | SMA(5,15) 最优 |
|---|---|---|---|
| 总回报 | +1,216.93% | +1.51% | +523.28% |
| 夏普比率 | — | 0.613 | 0.868 |
| 索提诺比率 | — | 0.880 | 1.257 |
| 最大回撤 | -38.52% | -0.60% | -57.10% |
| 胜率 | — | 41.67% | 44.89% |
| 交易次数 | 1 | 37 | 177 |
| 利润因子 | — | 2.52 | 1.24 |

这几个数字说明了什么
默认参数 SMA(10,50) 在苹果上几乎完全失效。拿了 +1.5%,连通胀都跑不赢。但有意思的是,这个"失败"的策略有一个极亮眼的指标——最大回撤只有 -0.6%,利润因子 2.52。这说明它虽然没怎么赚钱,但风险控制做到了极致,赚的时候赚得比亏的时候多出一倍以上。如果你追求"不亏钱"胜过"多赚钱",这个参数反而是个不错的选择。
网格搜索找到了 SMA(5,15)。190 组参数里跑出了最优解——+523%,夏普 0.868,索提诺 1.257。代价是回撤拉到了 -57%,交易次数飙到 177 笔。收益翻倍和回撤翻倍是一起来的,不存在"高收益低风险"的参数组合——至少在这只股票上不存在。
买入持有依然是王者。+1,217%、回撤才 -38%、而且只有 1 笔交易——在苹果这种长期牛股上,择时策略至今没有跑赢简单持有。这个结论和上次 Backtesting.py 的回测完全一致。不同的工具、不同的参数、同样的结论——对于单边上涨的超级牛股,持有不动是最优策略。
VectorBT 真正强的地方:一次跑完 190 组参数
如果用的是传统逐次回测框架,190 组参数要手动循环跑 190 次、每次等几秒、结果手动汇总。VectorBT 的向量化计算让这一步变成了一次调用、几秒出结果。这才是它跟其他回测框架最本质的差异——不是"多了一种策略类型",而是"把参数探索的效率提升了两个数量级"。
对于量化研究来说,这个差异是决定性的。你可以在几分钟内试完几百组参数组合,而不是花了半天跑完几十组就放弃了。探索范围越大,找到意外好参数的概率越高。
常见报错
| 错误 | 原因 | 解决方法 |
|---|---|---|
| 网格搜索返回空结果 | 参数范围设得太窄,没有产生交易信号 | 扩大快线/慢线的搜索范围 |
| 图表中曲线无法正常显示 | Plotly 输出路径含特殊字符 | 确保输出目录为纯英文路径 |
| 回测结果和预期差很多 | VectorBT 的默认佣金和滑点设置可能不同 | 检查 Skill 自动使用的费率是否和你预期一致 |
什么时候该用 VectorBT,什么时候不该用
适合 VectorBT 的场景:你需要大量参数探索——比如"快线从 5 到 50、慢线从 10 到 100,最佳组合是什么"。这种场景下 VectorBT 的向量化优势是碾压级的。还有就是你想在一个标的上快速对比几十种策略变体,传统框架可能要跑半天,VectorBT 几分钟搞定。
不太适合的场景:你的策略逻辑非常复杂,不是简单的指标交叉(比如需要逐日判断多个条件、需要动态止盈止损)。向量化框架在这类逻辑上的表达力不如事件驱动框架。另外,如果你是新手,VectorBT 的 MultiIndex 数据结构和 pandas 深度绑定会让学习曲线比 Backtesting.py 陡一些——当然,Skill 封装后这些你都不用管。
下一步
- 换标的跑一次网格搜索——拿 NVDA 或 TSLA 跑同样的参数范围,看最优参数是不是同一个
- VectorBT 除了 SMA 交叉,还内置了几十种技术指标,可以从 SMA 扩展到 MACD、RSI、布林带等策略
资源链接:
- EasyClaw 下载:https://easyclaw.cn/?f=724
- VectorBT GitHub:https://github.com/polakowo/vectorbt
你有做过参数网格搜索吗?找到的最优参数在实际行情中能持续有效吗,还是只是过拟合了历史数据?欢迎聊聊你的经验。

浙公网安备 33010602011771号