Backtesting.py / Data

Backtesting.py 数据:OHLCV 数据格式与接入教程

Backtesting.py 支持任意 OHLC(V) 蜡烛数据:一个以时间为索引、含 Open/High/Low/Close(可选 Volume)列的 pandas DataFrame 即可驱动回测。

格式:OHLCV DataFrame索引:时间来源:pandas/tushare/yfinance
Open开盘价
High最高价
Low最低价
Close收盘价
Volume成交量(可选)
Backtesting.py OHLCV 数据要求示意图(基于官方 README)。
Format

OHLCV 数据格式要求

数据须为 pandas DataFrame,列名大小写需符合要求。

是否必需说明
Open必需开盘价
High必需最高价
Low必需最低价
Close必需收盘价
Volume可选成交量(如无则省略)
import pandas as pd
# df 需为:index=DatetimeIndex,列为 Open/High/Low/Close[/Volume]
df = pd.DataFrame(..., columns=['Open','High','Low','Close','Volume'])
df.index = pd.to_datetime(df.index)
Sources

数据来源接入

内置示例数据之外,可接入常见数据源。

来源说明接入方式
内置示例backtesting.test.GOOG 等from backtesting.test import GOOG
pandas/CSV本地 CSV 读入pd.read_csv(...) 后整理列名
tushareA 股历史行情(需 Token)调用后重命名列为 OHLCV
yfinance美股历史行情(无需 Key)下载后整理为 OHLCV DataFrame
注意:接入前需统一复权口径与时间索引;数据实时性/完整性由数据源决定,本站不承诺任何数据可用性。
Prepare

数据预处理步骤

接入任意数据源后的统一处理流程。

  1. 获取原始数据

    从 CSV/tushare/yfinance 等获取历史行情。

  2. 统一列名

    重命名为 Open/High/Low/Close/Volume,并设置 DatetimeIndex。

  3. 处理复权与缺漏

    确认复权口径一致,处理 NaN 与停牌缺口。

  4. 传入 Backtest

    把 DataFrame 作为第一个参数传入 Backtest(df, Strategy, ...)

Timeframe

时间框架与日内回测

Backtesting.py 以逐 bar 迭代运行,bar 的粒度由数据频率决定。

日线

最常见用法,日线 OHLCV 回测中长线策略。

日内/分钟线

用分钟级 OHLCV 数据即可做日内回测,注意数据量与撮合假设。

多时间框架

可在策略内用不同频率指标组合,但需自行对齐数据。

边界:数据频率决定回测粒度;日内回测对数据质量与成交时点假设更敏感,需谨慎验证。
Pitfalls

数据常见问题排查

数据问题往往是回测结果失真的主因。

现象可能原因处理
报错 KeyError列名大小写或缺失确认 Open/High/Low/Close 列名与大小写
结果异常未复权 / 含 NaN统一复权口径,dropna 处理
成交价不合理撮合时点假设确认 trade_on_close 与下一 bar 成交差异
样本过少数据区间太短拉长历史区间,覆盖不同市场环境
FAQ

数据常见问题

数据列名必须大写吗?

是,需使用 Open/High/Low/Close(Volume 可选)这样的大小写;否则会报 KeyError。

Volume 可以省略吗?

可以,Volume 是可选的,无成交量数据时省略即可。

能直接接 tushare 数据吗?

可以,把 tushare 返回的数据重命名为 OHLCV 列并设置时间索引后即可传入。

指数或期货数据能回测吗?

能,只要整理成 OHLCV DataFrame 即可;但需自行确认数据复权与合约规则。

下一步

数据准备好后,了解完整功能特性(优化器、热力图、可视化),或对比 EasyClaw 免部署路线。