5 分钟跑通第一个策略回测:backtesting.py 新手完整指南
【免费下载链接】backtesting.py🔎 📈 🐍 💰 Backtest trading strategies in Python.项目地址: https://gitcode.com/GitHub_Trending/ba/backtesting.py
你写了一套交易规则,可它历史上到底赚不赚钱?这篇文章带你用 5 分钟跑通一次完整的 Python 量化回测:装好 backtesting.py、写出策略、调完参数、读懂报告,全程不需要金融背景。
图:backtesting.py 的 K 线可视化样式,验证策略历史表现时你最终要盯住的就是这种图
🎯 它到底解决什么问题
在你把真钱投进市场之前,通常要先回答三个问题,backtesting.py 这个量化回测框架就是替你回答它们的工具:
- 策略历史上赚过钱吗?把一段历史行情喂给框架,让策略逐根 K 线重放一遍,最后的资金曲线和交易记录就是答案,不用凭感觉。
- 哪组参数更合适?均线策略用 10 日还是 30 日?
optimize()一次调用就能把参数组合全部跑完,以热力图呈现,方便你横向对比。 - 风险能不能承受?回测跑完自动生成绩效报告:夏普比率、最大回撤、胜率,一栏栏列出来供你核查。
行情数据支持股票、外汇、加密货币三类,你只要准备一张包含 Open、High、Low、Close(可选 Volume)列的 pandas 表即可。
📦 安装与项目速览
安装 backtesting.py
终端里执行一行命令即可:
pip install backtesting想体验最新开发版本,也可以先克隆源码再本地安装:git clone https://gitcode.com/GitHub_Trending/ba/backtesting.py。
项目非常紧凑,四个文件就覆盖了核心能力,遇到问题可以直接跳到对应位置:
- Strategy 引擎:
Strategy基类和Backtest回测引擎都定义在这里,你 90% 的交互发生在这个文件描述的类上。 - 统计分析模块:夏普比率、最大回撤、胜率等指标全部在这里算出来。
- 可视化模块:生成资金曲线、回撤图和买卖点标注的交互式回测图。
- 官方示例:多时间框架、参数热力图与优化、机器学习集成等场景的可运行策略回测教程。
⚙️ 写出第一个可回测的策略
任何策略都继承Strategy基类,只需实现两个方法。它们的分工可以这样记:
init()是"一次性搭好货架":回测开始前只调用一次,负责把策略依赖的指标一次性算完。向量化计算,速度快,后面不用逐 K 线重算。next()是"每根 K 线响一次的节拍器":每出现一根新 K 线就响一次,你根据最新指标值做一次买卖决策。
新建一个文件,粘贴下面这份 14 行的均线交叉骨架(SMA是一个两行的滚动均值辅助函数,写法参考 Quick Start 示例):
from backtesting import Strategy class SmaCross(Strategy): n_fast, n_slow = 10, 30 # 两个可优化参数 def init(self): f = SMA(self.data.Close, self.n_fast) s = SMA(self.data.Close, self.n_slow) self._in = (f > s) & (f.shift(1) <= s.shift(1)) self._out = (f < s) & (f.shift(1) >= s.shift(1)) def next(self): if self._in[-1]: self.buy() elif self._out[-1]: self.sell()注意n_fast、n_slow写成类变量,这是在告诉框架"这两个数字是可优化参数"。接着把数据和策略类交给Backtest并调用run()就能出结果——框架自带测试数据(如 backtesting/test/GOOG.csv,Google 日线行情),你连数据都不用准备。跑完后还能用plot()画出 K 线、资金曲线和买卖点标记。
📊 调参,并读懂回测报告
用 optimize() 把参数暴力试完
把 10 和 30 硬编码进去只是猜测。让框架自己遍历组合,只需几行:
stats = bt.optimize(n_fast=range(5, 30, 5), n_slow=range(10, 70, 5), maximize='Equity Final [$]', constraint=lambda p: p.n_fast < p.n_slow)一次扫描整张参数网格,配合热力图可以直观看到哪个角落表现最好,最优组合的指标也会直接返回。
读懂回测报告里的 3 个数字
报告里的指标很多,新手先盯住这三个就够,每个回答一个问题:
- 夏普比率(Sharpe Ratio)——"收益配不配得上波动?"衡量每承受一份风险换来多少超额收益。涨 30% 但中途剧烈震荡的策略,未必比平稳涨 15% 的更好。
- 最大回撤(Max Drawdown)——"最惨的时候账户掉多深?"从高点到低点的最大跌幅。回撤 60% 意味着你的账户一度腰斩,先问自己扛不扛得住。
- 胜率(Win rate)——"规则有多大比例的交易赚钱?"盈利平仓占总平仓的比例。胜率低不致命——有些趋势策略靠少数大盈利赚钱——但一定要结合平均盈亏来解读。
回测验证的是"过去"。参数调得越狠,越可能过拟合历史数据,留出样本外区间再验一次会更稳。
别停在阅读上——新建一个文件,把上面的策略跑起来:从官方示例目录挑一个场景,或跟着 Quick Start User Guide 一步步走完第一次策略回测。
【免费下载链接】backtesting.py🔎 📈 🐍 💰 Backtest trading strategies in Python.项目地址: https://gitcode.com/GitHub_Trending/ba/backtesting.py
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考