NumPy 广播
策略实例存成二维 NumPy 数组,多标的、多参数通过广播一次运算,避免 Python 逐事件循环的对象开销。
| 步骤 | 代码 | 作用 |
|---|---|---|
| 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() | 收益随参数变化 |
策略实例存成二维 NumPy 数组,多标的、多参数通过广播一次运算,避免 Python 逐事件循环的对象开销。
关键计算用 Numba 即时编译成机器码,接近 C 速度,首次运行有编译预热,之后复用。
vectorbt[rust] 提供预编译速度,免 JIT 首次编译开销,适合反复大规模回测。
看某个因子参数变化对收益的影响,判断策略是否稳健。
同一策略在几十上百标的上批量回测,找普适规律。
批量生成标签、验证特征组合,为 ML 工作流提供输入。
| 做法 | 为什么 |
|---|---|
| 看参数稳定区而非单点最高 | 单点最高易拟合历史噪声 |
| 样本外/前向测试 | 验证策略泛化能力 |
| 控制参数数量 | 参数越多越易过拟合 |
| 计入成本与滑点 | 避免收益虚高 |
| 技巧 | 作用 |
|---|---|
| 分批计算 | 大数据量分块处理,避免内存溢出 |
| 释放中间变量 | del 中间结果,控制内存占用 |
| 装 Rust 引擎 | vectorbt[rust] 预编译,免 JIT 预热 |
| 控制数据类型 | 用 float32 减少内存与计算量 |
会。参数越多、搜索越密,越容易拟合历史噪声。应对策略:看参数稳定区而非单点最高、做样本外/前向测试、控制参数数量。
run 对单一参数组计算,run_combs 对多组参数一次计算(返回带参数维度的结果),适合网格搜索。
可能是数据量大、参数组合过多、内存不足或未装 Rust 引擎。可分批计算、释放中间变量、或用 vectorbt[rust] 预编译加速。
heatmap 以参数为坐标展示绩效指标(如总收益、夏普)。关注颜色连成片的"稳定区"——相邻参数表现接近,说明策略对该参数不敏感、更稳健。