Optimization

vectorbt 参数优化:run_combs 网格搜索与 Numba 加速原理

参数优化是 vectorbt 的招牌能力。借助 NumPy 广播,vbt.MA.run_combs 可一次计算多组参数的指标,配合 Portfolio.from_signals 一次回测上万组参数组合,再用 heatmap 热力图看参数稳定区间。本页讲清网格搜索用法与高性能背后的原理。

核心:run_combs 网格搜索可视化:heatmap原理:NumPy 广播 + Numba
参数网格
run_combs
广播
heatmap
vectorbt 参数网格搜索流程示意(schematic),Numba 加速原理见正文。
Grid search

run_combs 网格搜索

步骤代码作用
1. 定义参数fast = vbt.MA.run_combs(price, window=[5,10,20])一次算 3 组快线
2. 多参数组合对快慢线分别 run_combs 后广播组合生成快慢线参数矩阵
3. 批量回测pf = vbt.Portfolio.from_signals(price, entries, exits)一次回测所有参数组合
4. 看热力图pf.total_return().vbt.heatmap()收益随参数变化
提示:网格搜索易过拟合。应关注 heatmap 上的"参数稳定区"(相邻参数收益接近的成片区域),而非单点最高收益,并做样本外验证。
Why fast

为什么这么快:性能原理

NumPy 广播

策略实例存成二维 NumPy 数组,多标的、多参数通过广播一次运算,避免 Python 逐事件循环的对象开销。

Numba JIT

关键计算用 Numba 即时编译成机器码,接近 C 速度,首次运行有编译预热,之后复用。

Rust 引擎(可选)

vectorbt[rust] 提供预编译速度,免 JIT 首次编译开销,适合反复大规模回测。

Scenes

参数优化适合什么场景

因子参数敏感性

看某个因子参数变化对收益的影响,判断策略是否稳健。

多标的批量验证

同一策略在几十上百标的上批量回测,找普适规律。

机器学习特征扫描

批量生成标签、验证特征组合,为 ML 工作流提供输入。

Overfitting

过拟合规避清单

做法为什么
看参数稳定区而非单点最高单点最高易拟合历史噪声
样本外/前向测试验证策略泛化能力
控制参数数量参数越多越易过拟合
计入成本与滑点避免收益虚高
Performance

性能优化技巧

技巧作用
分批计算大数据量分块处理,避免内存溢出
释放中间变量del 中间结果,控制内存占用
装 Rust 引擎vectorbt[rust] 预编译,免 JIT 预热
控制数据类型用 float32 减少内存与计算量
FAQ

常见问题

网格搜索会不会过拟合?

会。参数越多、搜索越密,越容易拟合历史噪声。应对策略:看参数稳定区而非单点最高、做样本外/前向测试、控制参数数量。

run_combs 和 run 区别?

run 对单一参数组计算,run_combs 对多组参数一次计算(返回带参数维度的结果),适合网格搜索。

回测为什么还是慢?

可能是数据量大、参数组合过多、内存不足或未装 Rust 引擎。可分批计算、释放中间变量、或用 vectorbt[rust] 预编译加速。

heatmap 怎么看?

heatmap 以参数为坐标展示绩效指标(如总收益、夏普)。关注颜色连成片的"稳定区"——相邻参数表现接近,说明策略对该参数不敏感、更稳健。

优化完,把数据接稳

下一步处理数据接入:YFData、akshare/tushare 与缺失值对齐。