Accessor(df.vbt)
vectorbt 通过 .vbt 访问器挂在 DataFrame 上,指标、信号、组合都以 accessor 形式调用,无需单独建对象。
Quickstart
装好 vectorbt 后,第一个回测用"买入并持有"最直观:用 vbt.YFData 下载行情,用 Portfolio.from_holding 建组合,用 stats() 输出绩效。整个过程不需要写事件循环,理解 accessor(df.vbt)与 DataFrame 的关系即可。
| 步骤 | 代码 | 作用 |
|---|---|---|
| 1. 导入 | import vectorbt as vbt | 引入 vectorbt 主库 |
| 2. 下载 | price = vbt.YFData.download("BTC-USD").get("Close") | Yahoo Finance 收盘价 |
| 3. 建组合 | pf = vbt.Portfolio.from_holding(price) | 买入并持有 |
| 4. 看绩效 | pf.stats() | 总收益/回撤/夏普等指标 |
vectorbt 通过 .vbt 访问器挂在 DataFrame 上,指标、信号、组合都以 accessor 形式调用,无需单独建对象。
回测输入输出大多是 pandas DataFrame,可用熟悉的 pandas 语法切片、聚合、导出。
pf.stats() 一次输出总收益、最大回撤、夏普、Calmar 等指标,便于快速比较。
用 MA 交叉信号替代买入持有,进入更真实的策略回测。
用 run_combs 网格搜索,一次回测上万组参数。
接 akshare/tushare 取 A 股数据,避开 YFData 访问限制。
| 参数 | 作用 | 示例 |
|---|---|---|
| symbol | 标的代码 | "BTC-USD"、"AAPL" |
| period | K线周期 | 1d / 1h / 15m |
| start / end | 时间范围 | "2020-01-01" |
| get("Close") | 取收盘价列 | 作为回测价格输入 |
| 坑 | 后果 | 建议 |
|---|---|---|
| 信号当天成交 | 前视偏差 | 信号 shift(1) 让下一根 bar 生效 |
| 未设手续费 | 收益虚高 | 显式加入手续费与滑点假设 |
| YFData 大陆不可达 | 数据获取失败 | 用本地 CSV 或 akshare/tushare |
| 数据未对齐 | 多标的错位 | 统一 DatetimeIndex + fillna |
from_holding 按持有仓位回测(买入并持有);from_signals 按买卖信号回测(信号触发才交易)。双均线等策略用 from_signals,详见 Portfolio 页。
Yahoo Finance 在中国大陆可能无法直连或限流。改用本地 CSV 或 akshare / tushare 获取数据后转成 DataFrame 喂给 vectorbt,见数据接入页。
stats() 输出基于历史数据的统计,是研究参考,不代表未来收益,也不构成投资建议;回测还需考虑手续费、滑点与过拟合。
vectorbt 用 NumPy 数组向量化运算 + Numba JIT 编译,把策略实例存成二维数组一次算,避免 Python 逐事件循环,详见参数优化页的性能原理。