Quickstart

vectorbt 快速上手:5 行代码跑通第一个回测

装好 vectorbt 后,第一个回测用"买入并持有"最直观:用 vbt.YFData 下载行情,用 Portfolio.from_holding 建组合,用 stats() 输出绩效。整个过程不需要写事件循环,理解 accessor(df.vbt)与 DataFrame 的关系即可。

最小示例:买入并持有入口:Portfolio.from_holding输出:stats() 绩效指标
YFData 下载
价格 DataFrame
from_holding
stats()
vectorbt 第一个回测最小流程示意(schematic),基于官方 Quickstart,非真实运行结果。
Code

最小示例:买入并持有

步骤代码作用
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()总收益/回撤/夏普等指标
说明:YFData 依赖 Yahoo Finance,中国大陆访问可能受限或需要代理;生产研究建议用本地 CSV 或国内数据源(akshare / tushare),见数据接入页。
Concepts

三个要理解的概念

Accessor(df.vbt)

vectorbt 通过 .vbt 访问器挂在 DataFrame 上,指标、信号、组合都以 accessor 形式调用,无需单独建对象。

DataFrame 即结果

回测输入输出大多是 pandas DataFrame,可用熟悉的 pandas 语法切片、聚合、导出。

stats() 绩效面板

pf.stats() 一次输出总收益、最大回撤、夏普、Calmar 等指标,便于快速比较。

Scenes

接下来适合做什么

换成双均线信号

用 MA 交叉信号替代买入持有,进入更真实的策略回测。

一次扫多组参数

用 run_combs 网格搜索,一次回测上万组参数。

换国内数据源

接 akshare/tushare 取 A 股数据,避开 YFData 访问限制。

YFData

YFData 常用参数

参数作用示例
symbol标的代码"BTC-USD"、"AAPL"
periodK线周期1d / 1h / 15m
start / end时间范围"2020-01-01"
get("Close")取收盘价列作为回测价格输入
Pitfalls

常见坑与注意点

后果建议
信号当天成交前视偏差信号 shift(1) 让下一根 bar 生效
未设手续费收益虚高显式加入手续费与滑点假设
YFData 大陆不可达数据获取失败用本地 CSV 或 akshare/tushare
数据未对齐多标的错位统一 DatetimeIndex + fillna
FAQ

常见问题

from_holding 和 from_signals 区别?

from_holding 按持有仓位回测(买入并持有);from_signals 按买卖信号回测(信号触发才交易)。双均线等策略用 from_signals,详见 Portfolio 页。

YFData 下载失败怎么办?

Yahoo Finance 在中国大陆可能无法直连或限流。改用本地 CSV 或 akshare / tushare 获取数据后转成 DataFrame 喂给 vectorbt,见数据接入页。

stats() 里的指标可信吗?

stats() 输出基于历史数据的统计,是研究参考,不代表未来收益,也不构成投资建议;回测还需考虑手续费、滑点与过拟合。

为什么回测这么快?

vectorbt 用 NumPy 数组向量化运算 + Numba JIT 编译,把策略实例存成二维数组一次算,避免 Python 逐事件循环,详见参数优化页的性能原理。

跑通了,进 Portfolio 三入口

下一步理解 from_holding / from_signals / from_orders 三种组合入口怎么选。