看基准收益
只想算"一直持有"的基准,用 from_holding,输入持仓数量即可。
Portfolio
Portfolio 是 vectorbt 回测的核心对象,提供三种工厂方法:from_holding(买入并持有)、from_signals(按信号进出场)、from_orders(按订单精细控制)。选对入口,回测逻辑才能对齐你的策略意图;信号回测还要注意 shift(1) 避免前视偏差。
| 入口 | 输入 | 语义 | 典型场景 |
|---|---|---|---|
from_holding | 持仓数量 | 按给定仓位持有,不主动交易 | 买入并持有、基准收益 |
from_signals | 买卖信号(True/False) | 信号触发才进出场,可加 accumulate | 双均线、MACD 金叉死叉等信号策略 |
from_orders | 订单(数量+价格) | 逐笔订单精细控制成交 | 组合再平衡、复杂仓位管理 |
只想算"一直持有"的基准,用 from_holding,输入持仓数量即可。
策略靠买卖信号驱动,用 from_signals;连续加仓时注意 accumulate=True。
需要指定成交价、数量或组合再平衡,用 from_orders 逐笔控制。
| 问题 | 原因 | 处理 |
|---|---|---|
| 信号当天成交 | 用当天收盘价算出的信号,当天就下单,等于偷看了当天收盘 | 信号整体 shift(1),让信号在下一根 bar 生效 |
| 停牌/缺失值 | 数据不连续导致对齐错位 | fillna 补齐,多标的用 missing_index="drop" 对齐 |
| 未设手续费 | 默认可能忽略交易成本,收益虚高 | 回测时显式加入手续费与滑点假设 |
| 参数 | 作用 | 说明 |
|---|---|---|
| entries / exits | 买卖信号 | 布尔序列,True 触发交易 |
| accumulate | 是否累计加仓 | 连续信号累加仓位时设 True |
| freq | 数据频率 | 影响年化指标计算,需正确设置 |
| fees / slippage | 成本假设 | 显式加入,避免收益虚高 |
| 指标 | 含义 | 关注点 |
|---|---|---|
| Total Return | 总收益 | 绝对收益水平 |
| Max Drawdown | 最大回撤 | 风险承受能力 |
| Sharpe Ratio | 夏普比率 | 风险调整后收益 |
| Calmar Ratio | 卡玛比率 | 收益/最大回撤 |
accumulate 控制连续信号是否累计加仓。连续买入信号出现时,accumulate=True 会累加仓位,否则可能只在首次买入;加仓策略需显式确认该参数。
三个工厂方法各自独立建 Portfolio,一般一次只用一个;复杂逻辑可先用信号/订单构造好输入再统一回测,避免混用导致语义混乱。
常见原因是未计入手续费/滑点、用了前视数据(未 shift)、或数据对齐有偏差。回测前先补成本假设,并把信号 shift(1)。
需要指定成交价格、数量或做组合再平衡、分批建仓等精细控制时用 from_orders;简单信号策略用 from_signals 更简洁。