22,839 Star · GPL-3.0 · 123 个内置指标 · 17 个分析器
Daniel Rodriguez 2015 开源 · 纯 Python 无 C 扩展
纯 Python 的事件驱动回测框架
Backtrader 是 Daniel Rodriguez(@mementum)开发的纯 Python
事件驱动回测框架,2015 年 1 月开源。最初只是一个单文件 bt.py,
后来成长为功能最全的 Python 回测框架之一,官方描述为「Python Backtesting library for trading strategies」。
一个有趣的彩蛋:版本号末段数字即内置指标数量——1.0.0.21 = 21 个指标起步,
到 1.9.76.123 时达到 123 个指标。原项目 2023 年起实质停维,社区 fork backtrader2 续命。
| 属性 | 详情 |
|---|---|
| 开发者 | Daniel Rodriguez(GitHub @mementum) |
| GitHub | mementum/backtrader · 22,839 Star · 5,236 Fork |
| 许可证 | GPL-3.0 |
| 最新版本 | 1.9.78.123(2023-04-19) |
| 架构 | 事件驱动 + 向量化(runonce / runnext 双模式) |
| Python 兼容 | 官方声明 3.2–3.7;实践 3.8–3.11 最稳 |
| 维护状态 | 原项目 2023 停维,backtrader2 fork 续命 |
指标 / 分析器 / 数据源 / 实盘一应俱全
内置 Market、Limit、Stop、StopLimit、StopTrail、OCO、Bracket、MarketOnClose 等订单类型,
支持做多/做空、自定义佣金、滑点、成交量填充、资金模式(fund mode)。
cerebro.plot() 一键绘图,支持 HTML/PDF/JSON 报告生成。
策略 / 指标 / 分析器 / 数据源自由组合
pip install backtrader
pip install backtrader[plotting] # 含 matplotlib 绘图
import backtrader as bt class MyStrategy(bt.Strategy): def __init__(self): self.sma = bt.indicators.SimpleMovingAverage(self.data.close, period=20) def next(self): if self.data.close[0] > self.sma[0]: self.buy() # 金叉买入 cerebro = bt.Cerebro() cerebro.addstrategy(MyStrategy) cerebro.adddata(bt.feeds.PandasData(dataname=df)) cerebro.broker.setcash(100000) cerebro.run() cerebro.plot()
Cerebro(引擎)· Strategy(策略)· DataFeed(数据)·
Broker(券商)· Analyzer(分析器)· Indicator(指标)·
Observer(观察者)· Sizer(仓位管理)。
索引约定:0 = 当前,负数 = 过去,正数 = 未来。
免费行情 + 回测 + 交易的完整闭环
xtquant(迅投 QMT)提供 xtdata 行情 + xttrader 实盘,
但本身不支持回测——这正是它与 Backtrader 互补的关键。
组合闭环:免费行情(xtdata)+ 回测(backtrader)+ 实盘(xttrader),
实现「免费 + 回测 + 交易」完整链路,被社区称为「平民量化黄金搭档」。
学习价值高,速度是短板
| 类别 | 事项 | 说明 |
|---|---|---|
| 优点 | 架构清晰 | 组件化设计,策略/指标/分析器可自由定制 |
| 优点 | 功能最全 | 指标/分析器/订单/多数据多周期/实盘一应俱全 |
| 优点 | 文档完善 | 中英文文档齐全,社区庞大 |
| 局限 | 回测速度慢 | 纯 Python 逐 bar 执行,大规模回测耗时明显 |
| 局限 | 原项目停维 | 2023 起实质停维,依赖社区 fork 续命 |
| 局限 | 依赖兼容 | 新版 matplotlib 需特殊处理 |