backtesting.py量化回测:从想法到图表
【免费下载链接】backtesting.py🔎 📈 🐍 💰 Backtest trading strategies in Python.项目地址: https://gitcode.com/GitHub_Trending/ba/backtesting.py
花了3天写出一套均线交叉策略,第一个问题却答不上来:它到底赚不赚钱?这是大多数量化新手的真实处境。backtesting.py 量化回测把这个问题变成一次run()调用:给它 OHLC 数据和买卖规则,它逐根K线重放历史行情,最后交出一张统计表和一张可交互图表。
backtesting.py 安装与最小回测 📊:30秒拉出第一张图
先装:
pip install backtesting仓库自带示例数据(GOOG 日线 OHLC),10行代码就能跑通:
from backtesting import Backtest, Strategy from backtesting.lib import crossover from backtesting.test import SMA, GOOG class SmaCross(Strategy): def init(self): self.ma1, self.ma2 = self.I(SMA, self.data.Close, 10), self.I(SMA, self.data.Close, 20) def next(self): if crossover(self.ma1, self.ma2): self.buy() bt = Backtest(GOOG, SmaCross) bt.run(); bt.plot()bt.run()返回 pandas Series:收益率、最大回撤、夏普比率、胜率,一行一个;bt.plot()弹出 Bokeh 交互图:K线、权益曲线、每笔交易的进出场点都能缩放查看;- 真实数据自己带:
Open/High/Low/Close四列加 datetime 索引的 DataFrame,测试用 BTCUSD、EURUSD 也随仓库附带。
Strategy 生命周期拆解:一次回测到底跑了什么
别把引擎当黑盒,数据从进到出是一条清晰的流水线:
- init() 只跑一次:用
self.I()包住指标函数(如 SMA),对全序列向量化预计算,包起来的指标会自动上图; - next() 每根K线跑一次:此时
self.data和所有指标都被截断到"今天",array[-1]是最新值——只能看见历史,天然没有未来函数; - 订单成交:买点不在当根K线收盘成交,而在下一根开盘成交(
trade_on_close=True改为当根收盘);exclusive_orders=True时新单自动平掉旧仓; - 结果输出:重放完所有K线后,统计模块(backtesting/_stats.py)算出统计 Series;
stats['_trades']是逐笔交易明细,stats['_equity_curve']是权益与回撤曲线。
Strategy 与 Backtest 两个类都在 backtesting/backtesting.py 里,想搞懂成交逻辑就从这个文件读起。
踩坑三连 ⚡:过拟合、滑点与多时间框架对齐
坑一:优化后收益暴涨,样本外就垮
现象:bt.optimize()扫完 n1、n2 所有组合后,最优那组收益比买入持有还高,实盘几个月后回吐大半。
原因:在全样本上优化、且 maximize 的又是波动最大的"期末权益";网格越细,那个"最优点"越可能是噪声。
解法:先用constraint过滤无效组合(比如快线不能比慢线长);把数据切开,前半段优化、后半段验证;再看邻域参数的表现——只有一个点冒尖,这个点不可信。完整写法见 doc/examples/Parameter Heatmap & Optimization.py。
坑二:滑点——回测里的成交价总是"刚刚好"
现象:回测胜率50%+,真实下单第一天就亏。
原因:默认下一根开盘成交,而你不设 commission 就是零成本,等于把无摩擦市场当成了现实。
解法:把 commission 设成真实值(如.002)——非零佣金会自动抬高买入价、压低卖出价,相当于内置的滑点成本;如果你的券商确实按收盘价成交,再传trade_on_close=True。
坑三:周线指标对不上日线
现象:手工 resample 算周线 RSI,数值和日线错位好几天,信号全乱。
原因:自己重采样没处理好"周K线归属于哪一天"和向前填充。
解法:用resample_apply('W-FRI', RSI, self.data.Close, 30)——按最低时间框架(日线)重采样到周线、算完指标再对齐回填,一行搞定。完整策略见 doc/examples/Multiple Time Frames.py。
资源地图:按任务找示例与源码
- 跑通第一次回测 → doc/examples/Quick Start User Guide.py
- 参数热力图与 SAMBO 优化器 → doc/examples/Parameter Heatmap & Optimization.py
- 多时间框架策略 → doc/examples/Multiple Time Frames.py
- 可复用策略骨架(均线交叉、布林带、RSI 等)→ doc/examples/Strategies Library.py
- 机器学习信号接入 → doc/examples/Trading with Machine Learning.py
- crossover、resample_apply 等工具函数 → backtesting/lib.py
下一步:把示例数据换成你自己的数据,加上 commission,跑一次 optimize。记住 backtesting.py 量化回测的第一原则:没被回撤和胜率验证过的收益率,先当它是噪声。
【免费下载链接】backtesting.py🔎 📈 🐍 💰 Backtest trading strategies in Python.项目地址: https://gitcode.com/GitHub_Trending/ba/backtesting.py
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考