Portfolio

vectorbt Portfolio 三入口:from_holding / from_signals / from_orders 怎么选

Portfolio 是 vectorbt 回测的核心对象,提供三种工厂方法:from_holding(买入并持有)、from_signals(按信号进出场)、from_orders(按订单精细控制)。选对入口,回测逻辑才能对齐你的策略意图;信号回测还要注意 shift(1) 避免前视偏差。

三入口:holding / signals / orders关键:信号 shift(1)
from_holding
from_signals
from_orders
vectorbt Portfolio 三种工厂方法对比示意(schematic),语义差异见正文表格。
Compare

三入口对照表

入口输入语义典型场景
from_holding持仓数量按给定仓位持有,不主动交易买入并持有、基准收益
from_signals买卖信号(True/False)信号触发才进出场,可加 accumulate双均线、MACD 金叉死叉等信号策略
from_orders订单(数量+价格)逐笔订单精细控制成交组合再平衡、复杂仓位管理
How to choose

按策略意图选入口

看基准收益

只想算"一直持有"的基准,用 from_holding,输入持仓数量即可。

信号进出场

策略靠买卖信号驱动,用 from_signals;连续加仓时注意 accumulate=True

精细控制成交

需要指定成交价、数量或组合再平衡,用 from_orders 逐笔控制。

Pitfall

信号回测的前视偏差:shift(1)

问题原因处理
信号当天成交用当天收盘价算出的信号,当天就下单,等于偷看了当天收盘信号整体 shift(1),让信号在下一根 bar 生效
停牌/缺失值数据不连续导致对齐错位fillna 补齐,多标的用 missing_index="drop" 对齐
未设手续费默认可能忽略交易成本,收益虚高回测时显式加入手续费与滑点假设
风险提示:回测结果基于历史与假设(含手续费、滑点、数据口径),不代表未来收益,也不构成投资建议。
Parameters

from_signals 常用参数

参数作用说明
entries / exits买卖信号布尔序列,True 触发交易
accumulate是否累计加仓连续信号累加仓位时设 True
freq数据频率影响年化指标计算,需正确设置
fees / slippage成本假设显式加入,避免收益虚高
Stats

stats() 绩效指标解读

指标含义关注点
Total Return总收益绝对收益水平
Max Drawdown最大回撤风险承受能力
Sharpe Ratio夏普比率风险调整后收益
Calmar Ratio卡玛比率收益/最大回撤
FAQ

常见问题

from_signals 的 accumulate 参数是什么?

accumulate 控制连续信号是否累计加仓。连续买入信号出现时,accumulate=True 会累加仓位,否则可能只在首次买入;加仓策略需显式确认该参数。

三种入口能混用吗?

三个工厂方法各自独立建 Portfolio,一般一次只用一个;复杂逻辑可先用信号/订单构造好输入再统一回测,避免混用导致语义混乱。

为什么回测收益比实盘高?

常见原因是未计入手续费/滑点、用了前视数据(未 shift)、或数据对齐有偏差。回测前先补成本假设,并把信号 shift(1)。

from_orders 什么时候用?

需要指定成交价格、数量或做组合再平衡、分批建仓等精细控制时用 from_orders;简单信号策略用 from_signals 更简洁。

懂了 Portfolio,学指标信号

下一步用 MA 指标与交叉信号生成买卖点,跑一个双均线策略。