news 2026/9/19 5:39:42

20 行代码回测一个交易策略:backtesting.py 快速上手指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
20 行代码回测一个交易策略:backtesting.py 快速上手指南

20 行代码回测一个交易策略:backtesting.py 快速上手指南

【免费下载链接】backtesting.py🔎 📈 🐍 💰 Backtest trading strategies in Python.项目地址: https://gitcode.com/GitHub_Trending/ba/backtesting.py

backtesting.py 是一个用 Python 做交易策略回测的轻量框架:你给它一段 OHLC 历史行情和一个买卖规则,它按 K 线逐根重放,算出收益率、最大回撤、胜率等指标,还能画出可交互的 K 线复盘图。适合想验证自己交易想法、又不想手写回测引擎的你。读完这篇文章,你就能用自带的测试数据跑通第一次回测,并知道怎么调参、怎么避开常见坑。

先看看没有回测框架的滋味

你想验证一个"双均线金叉买入、死叉卖出"的策略,没有工具的话得自己干这些事:写循环逐天计算均线、判断交叉、扣佣金、记录净值、统计回撤……几十行代码写完还要怀疑自己算错。更难受的是换个参数组合(比如 10/20 换成 15/30)就得重跑一遍,画个净值曲线又得另写绘图代码。

backtesting.py 把这些重复劳动收进了一个Backtest引擎:数据喂进去、策略用两个方法声明,结果指标和交互图直接吐出来。指标库它不绑死,你自带的SMA函数、TA-Lib 或者任何返回序列的函数都能用。

3 分钟装好并跑出第一个回测结果

一行命令装上:

pip install backtesting

如果想拿开发版:

git clone https://gitcode.com/GitHub_Trending/ba/backtesting.py

下面这段代码用框架自带的谷歌(GOOG)测试数据跑一个双均线交叉策略。注意SMA不是框架内置的,是 快速上手指南 里自己定义的一个滑窗均值函数,框架对指标库持中立态度。

import pandas as pd from backtesting import Backtest, Strategy from backtesting.lib import crossover SMA = lambda v, n: pd.Series(v).rolling(n).mean() class SmaCross(Strategy): def init(self): self.ma1 = self.I(SMA, self.data.Close, 10) self.ma2 = self.I(SMA, self.data.Close, 20) def next(self): if crossover(self.ma1, self.ma2): self.buy() elif crossover(self.ma2, self.ma1): self.sell() bt = Backtest(GOOG, SmaCross, commission=0.002) stats = bt.run()

bt.run()返回的stats就是一张完整的统计报表:总收益、年化、最大回撤、交易次数、胜率、利润因子等。README 里同参数示例的输出显示,这个策略九年赚了约 589%,但最大回撤 -33%、最长回撤持续 688 天——收益和险被放在同一张表里,这正是回测的意义。再调一句bt.plot(),就能在浏览器里打开可缩放的 K 线图:买卖点、净值曲线、回撤区间全标出来了。

两个方法讲透:init 和 next 在干什么

理解框架的核心机制只需要想清楚一件事:它把历史行情当成录像带,一根 K 线一根 K 线地播给你看。

类比一下值班看盘。init()是开市前的一次性准备:所有指标(均线、你写的任何函数)在这里用向量化方式一次算完,快且只需算一次。next()则是盘中的每一根 K 线收盘时,框架回调你一次,此时数据被"截断"到当前时刻,self.data.Close[-1]是当前收盘价,[-2]是前一根——就像你只能看到已经走完的 K 线,看不到未来。框架还替你处理了执行细节:self.buy()下单后默认下一根 K 线开盘成交,佣金按你给的commission比例扣。

典型用法:参数怎么扫、明细怎么查

写策略时别把参数写死。把n1n2声明成类变量,就能直接交给optimize扫描:

stats = bt.optimize(n1=range(5, 30, 5), n2=range(10, 70, 5), maximize='Equity Final [$]', constraint=lambda p: p.n1 < p.n2)

每个参数传一组候选值,maximize指定以哪个统计量最优,constraint过滤掉n1 >= n2这种非法组合。stats返回的仍是统计 Series,其中_trades列是逐笔交易明细(入场/出场时间、价格、持仓收益),_equity_curve是净值与回撤曲线,都是普通 pandas 对象,方便你接着分析。想多看几类玩法,参数优化示例 演示了热力图对比,策略库示例 给了一批可组合的基础策略。

新手最常卡住的两个点

数据格式有硬性要求。列名必须是OpenHighLowClose(可选Volume),索引用pd.to_datetime()转成 DatetimeIndex,喂给Backtest时才不会报错。多出来的自定义列也能在策略里当指标用,这点不少人不知道。

K 线内没法下单。框架按"收盘出信号、次根开盘成交"的模型跑,trade_on_close=True可改成当根收盘成交。想模拟日内高频,别在日线里硬挤,直接用小时级数据回测。另外optimize扫的是历史数据,样本内表现会被过度拟合放大,参数定稿前记得留出验证区间。

下一步:打开 Quick Start User Guide,从数据格式到参数优化跟着完整走一遍,你的第一个策略报告十分钟内就能生成。

【免费下载链接】backtesting.py🔎 📈 🐍 💰 Backtest trading strategies in Python.项目地址: https://gitcode.com/GitHub_Trending/ba/backtesting.py

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/19 5:39:37

uni-app一键登录完整实现:原理、云函数与真机调试指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 5:38:27

minikube 从 Pod 访问宿主机资源:host.minikube.internal 完整实战指南

minikube 从 Pod 访问宿主机资源&#xff1a;host.minikube.internal 完整实战指南 【免费下载链接】minikube Run Kubernetes locally 项目地址: https://gitcode.com/gh_mirrors/mi/minikube 导读 在本地开发 Kubernetes 应用时&#xff0c;Pod 常常需要访问运行在宿…

作者头像 李华
网站建设 2026/9/19 5:37:55

用命令行和Python把计算机审计练习题PDF变成可检索错题本

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 5:37:12

5G+AI智慧急救区域协同平台建设方案与关键技术

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/19 5:35:44

乐清靠谱的婚纱照拍摄公司有哪些?2026年客户口碑力荐

对于不少备婚新人来说&#xff0c;找一家靠谱的婚纱照拍摄公司&#xff0c;直接决定了婚拍体验和成片质量&#xff0c;不少乐清备婚的新人都在问&#xff0c;2026年温州范围内客户口碑认可度较高的婚纱照拍摄公司有哪些?我们不妨结合行业观察和真实客户反馈&#xff0c;从四个…

作者头像 李华