日线
最常见用法,日线 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)
内置示例数据之外,可接入常见数据源。
| 来源 | 说明 | 接入方式 |
|---|---|---|
| 内置示例 | backtesting.test.GOOG 等 | from backtesting.test import GOOG |
| pandas/CSV | 本地 CSV 读入 | pd.read_csv(...) 后整理列名 |
| tushare | A 股历史行情(需 Token) | 调用后重命名列为 OHLCV |
| yfinance | 美股历史行情(无需 Key) | 下载后整理为 OHLCV DataFrame |
接入任意数据源后的统一处理流程。
从 CSV/tushare/yfinance 等获取历史行情。
重命名为 Open/High/Low/Close/Volume,并设置 DatetimeIndex。
确认复权口径一致,处理 NaN 与停牌缺口。
把 DataFrame 作为第一个参数传入 Backtest(df, Strategy, ...)。
Backtesting.py 以逐 bar 迭代运行,bar 的粒度由数据频率决定。
最常见用法,日线 OHLCV 回测中长线策略。
用分钟级 OHLCV 数据即可做日内回测,注意数据量与撮合假设。
可在策略内用不同频率指标组合,但需自行对齐数据。
数据问题往往是回测结果失真的主因。
| 现象 | 可能原因 | 处理 |
|---|---|---|
| 报错 KeyError | 列名大小写或缺失 | 确认 Open/High/Low/Close 列名与大小写 |
| 结果异常 | 未复权 / 含 NaN | 统一复权口径,dropna 处理 |
| 成交价不合理 | 撮合时点假设 | 确认 trade_on_close 与下一 bar 成交差异 |
| 样本过少 | 数据区间太短 | 拉长历史区间,覆盖不同市场环境 |
是,需使用 Open/High/Low/Close(Volume 可选)这样的大小写;否则会报 KeyError。
可以,Volume 是可选的,无成交量数据时省略即可。
可以,把 tushare 返回的数据重命名为 OHLCV 列并设置时间索引后即可传入。
能,只要整理成 OHLCV DataFrame 即可;但需自行确认数据复权与合约规则。