使用手册
功能在哪 · 是什么 · 怎么调出来一、安装与版本分支(经典版 vs 社区分叉)
1、经典版(绝大多数中文教程指的就是它)
pip install backtrader # 经典版 mementum/backtrader
pip install matplotlib pandas # 绘图与数据处理依赖
经典版自带、无重依赖(除绘图需要 matplotlib)。原作者官方社区论坛因被滥用已关闭。
2、两个版本概念别搞混(2026 年现状)
| 分支 | 来源 | 特点 |
|---|---|---|
经典版 backtrader | GitHub mementum/backtrader | 绝大多数中文资料教程对应的版本,纯回测,海外实盘接 IB/Oanda |
| readthedocs 新版(1.0+/1.1.0) | 社区活跃分叉(readthedocs.io 文档站) | 官方称性能优化(约快 45%)、完整 CCXT 加密实盘、CTP 集成、Plotly 绘图、917+ 测试;有国内镜像 |
backtrader-next | PyPI 另一个分叉 | 独立维护的更新分支 |
白话:网上教程写的 import backtrader 基本都能跑——因为分叉对外 API 高度兼容。但"新版支持 CCXT/CTP 实盘"是社区分叉的口径,不是经典 mementum 原版的承诺。新手学经典版语法即可;真要用分叉的实盘能力,先去对应文档站确认。
二、与 vn.py / 米筐的错位对比
| 维度 | Backtrader | vn.py | 米筐 |
|---|---|---|---|
| 定位 | 纯离线回测库 | 本地事件驱动交易框架(实盘强) | 云端一体化投研 |
| 回测 | 核心强项,灵活优雅 | 有 CTA/组合回测 | 云端回测 |
| 实盘 | 经典版不接国内;分叉接 CCXT/CTP | CTP/XTP/加密直连,最强 | 期货经终端,股票待开放 |
| 数据 | 自己喂 CSV/Pandas | 自己录/接数据商 | 内置清洗数据 |
| 适合 | 学术、纯策略研究、学回测原理 | 程序员做期货实盘系统 | 浏览器里做股票多因子研究 |
操作教程
一步一步 · 跟着做完一件事三、核心架构:Cerebro 导演制
| 角色 | 类 | 白话 |
|---|---|---|
| 大脑/导演 | bt.Cerebro | 把数据、策略、券商、分析器全组织起来,喊"开拍"逐根跑 |
| 策略 | 继承 bt.Strategy | 你的买卖规则,next() 每根 K 线被调用一次 |
| 数据喂料 | Data Feed(bt.feeds.*) | CSV/Pandas/Yahoo 等历史行情 |
| 模拟券商 | cerebro.broker | 管钱、管订单、模拟成交 |
| 指标 | bt.indicators.* | SMA/RSI/MACD 等 50+ 技术指标 |
| 分析器 | Analyzer | 跑完算夏普、回撤、胜率等 |
| 观察者 | Observer | 图上画资金曲线、买卖点(stdstats 默认开) |
| 仓位器 | Sizer | 决定每笔买多少 |
白话:Cerebro 就像导演。它把数据(胶片)、策略(剧本)、模拟券商(场务管钱)都招呼好,然后一根 K 线一根 K 线地"过片"。你只需要写剧本(Strategy),别的交给它。
四、加载数据(Data Feeds)
Backtrader 不自带行情,要自己喂。最常用 CSV:
data = bt.feeds.GenericCSVData(
dataname='rb2401.csv',
dtformat='%Y-%m-%d', # 日期格式
datetime=0, open=1, high=2, low=3, close=4, volume=5,
)
cerebro.adddata(data)
| Feed | 用途 |
|---|---|
| GenericCSVData | 任意格式 CSV,自己指定列号 |
| BacktraderCSVData | Backtrader 自带格式的 CSV |
| PandasData | 直接喂 pandas DataFrame |
| YahooFinanceCSVData / YahooFinance | 雅虎财经数据 |
白话:CSV 就是 Excel 导出的表格(日期、开高低收、成交量)。你要先准备好历史数据文件,或用 tushare/akshare 等工具下载好。Backtrader 只负责"读进来回放",不负责"帮你找数据"。
五、订单类型与下单逻辑
默认 self.buy() / self.sell() / self.close() 发市价单。要更精细,用 exectype:
| 订单类型 | 常量 | 白话 |
|---|---|---|
| 市价单 | bt.Order.Market(默认) | 下一根 K 线开盘价成交 |
| 收盘价单 | bt.Order.Close | 当根收盘价成交 |
| 限价单 | bt.Order.Limit | 到指定价或更好才成交 |
| 止损单 | bt.Order.Stop | 价格触及止损价转市价 |
| 止损限价单 | bt.Order.StopLimit | 触及止损价后挂限价单(plimit 指定限价) |
| 追踪止损 | bt.Order.StopTrail | 价格反向移动时止损线跟着挪 |
## 限价买、止损卖
self.buy(exectype=bt.Order.Limit, price=100.0, size=10)
self.sell(exectype=bt.Order.Stop, price=95.0)
白话:默认市价单是"下一根开盘成交"——这是回测防未来函数的关键:你在第 N 根收盘看到信号,不能按第 N 根的收盘价成交(那是偷看未来),要按第 N+1 根开盘价。Backtrader 默认就是这么干的。
六、模拟券商:资金/手续费/滑点
cerebro.broker.setcash(100000) # 初始10万
cerebro.broker.setcommission(commission=0.0001) # 万1手续费
cerebro.broker.set_slippage_fixed(0.05) # 每笔固定滑点0.0
## cerebro.broker.setmargin(...)
Broker 模拟:现金、持仓、订单、手续费、滑点、保证金。想"信号当根收盘价就成交"可开 cheat_on_open / cheat_on_close(作弊模式,谨慎用,会让回测偏乐观)。
白话:手续费和滑点一定要设!很多新手回测曲线漂亮得离谱,一设手续费和滑点就原形毕露——这俩是回测真实性的底线。
七、Sizer 仓位管理
不想每次写死买几股,用 Sizer 自动定仓位:
cerebro.addsizer(bt.sizers.FixedSize, stake=10) # 每次固定10
股
## 或 PercentSizer 按资金百分比;也可继承 bt.Sizer 自写(如凯利公式)
内置 FixedSize(固定股数)、PercentSizer(按资金百分比)、AllIn(全仓)等;复杂仓位管理可继承 bt.Sizer 自写。
八、Analyzer 绩效分析器
跑完加 Analyzer 自动出指标:
cerebro.addanalyzer(bt.analyzers.SharpeRatio, _name='sharpe')
cerebro.addanalyzer(bt.analyzers.DrawDown, _name='dd')
cerebro.addanalyzer(bt.analyzers.TradeAnalyzer, _name='ta')
results = cerebro.run()
strat = results[0]
print('夏普:', strat.analyzers.sharpe.get_analysis())
print('最大回撤:', strat.analyzers.dd.get_analysis())
print('交易统计:', strat.analyzers.ta.get_analysis())
| Analyzer | 算什么 |
|---|---|
| SharpeRatio | 夏普比率 |
| DrawDown | 最大回撤、回撤长度 |
| TradeAnalyzer | 胜率、盈亏比、连胜连亏等逐笔统计 |
| Returns / AnnualReturn | 区间收益 / 分年度收益 |
| TimeReturn | 逐期收益率序列 |
| VWR / Calmar / Sortino | 其他风险调整指标 |
| PyFolio | 对接 pyfolio 出机构级报告 |
白话:只看资金曲线是自欺欺人。加上 SharpeRatio + DrawDown + TradeAnalyzer 三件套,才知道策略"赚得稳不稳、回撤痛不痛、胜率高不高"。
九、Observer 与绘图
stdstats=True(默认)自动加上交易者最常用的 Observer:资金曲线(Value)、回撤(DrawDown)、买卖点标记(BuySell)、持仓(Trades)。cerebro.plot() 用 matplotlib 画出 K 线 + 指标 + 买卖箭头 + 资金曲线。
白话:图上红箭头买、绿箭头卖,资金曲线在最下面。跑 cerebro.plot() 一眼就能看出"金叉买入"到底在图上发生在哪、赚没赚钱。
十、参数优化(optstrategy)
Backtrader 自带参数寻优,可多进程并行:
cerebro.optstrategy(MaCross, fast_window=range(5, 21), slow_window=range(20, 61, 5)
)
## 配合 cerebro.run(maxcpus=4) 多核并行
白话警告:参数寻优很容易"过度拟合"——把历史曲线调到完美,实盘一塌糊涂。别把回测最漂亮那组参数直接当真钱策略。
十一、实盘能力(IB / Oanda / CCXT)
Backtrader 经典版本身不连国内 A 股/期货柜台。它的实盘 store 主要面向海外:
- Interactive Brokers(盈透):经 TWS/IB Gateway 接海外股票期货;
- Oanda:外汇实盘数据与交易;
- 社区分叉(readthedocs 新版)宣传完整 CCXT 加密货币实盘(带 WebSocket)和 CTP 集成,可"从回测无缝切实盘"。
白话:经典 Backtrader 在国内就是个纯研究工具。想 A 股/期货实盘,国内主流是 vn.py / QMT;想加密货币实盘,可用社区分叉的 CCXT 集成。别指望经典版 pip 装完就能直连 CTP。
十二、隐藏功能与冷门技巧拾遗
- 默认市价单=下根开盘成交:这是 Backtrader 防未来函数的默认行为,别轻易改。
- 指标在 __init__ 建一次:在 next() 里重复建指标会极慢,指标必须在 __init__ 里实例化。
- [-1] 是上一根:Backtrader 里 [0] 是当前根、[-1] 是上一根(和 pandas 正好相反),写交叉信号时别搞反。
- TradeAnalyzer 比肉眼强:胜率、盈亏比、连胜连亏都在它的 get_analysis() 字典里。
- pyfolio 报告:bt.analyzers.PyFolio 直接对接 pyfolio 出机构级 tear sheet。
- 多数据同时喂:cerebro.adddata() 多次调用可同时回测多品种/多周期。
- resample/replay:可用 cerebro.resampledata 把分钟线重采样成日线回测。
- stdstats 可关:默认加资金曲线/回撤/买卖点 Observer,图太乱可 cerebro = Cerebro(stdstats=False)。
- 社区分叉有实盘:readthedocs 新版宣传 CCXT/CTP 实盘与 45% 提速,但经典 mementum 版没有——别混为一谈。
- Jupyter 里更顺:配合 %matplotlib inline,回测+画图+调参在 notebook 里闭环。
- addanalyzer 用 _name:多个同类分析器时用 _name 区分,之后 strat.analyzers.名字 取用。
- 自定义 Sizer:继承 bt.Sizer 写 size() 方法,可实现凯利公式、波动率仓位等高级仓位管理。
十三、2026 增量更新(深挖第2轮)
1、社区分叉 1.2.0(2026-03-15):CTP 实盘与 WebSocket 推送
- 新增 CTP 期货交易支持(P0):readthedocs 分叉把国内 CTP 网关提到最高优先级。
- 新增 WebSocket 订单推送(P1)与自适应速率限制器(P2);CCXT Broker 错误处理优化;回测性能再提约 15%。
- 修复数据长度不一致导致回测提前终止等问题。
【提示】白话:本文上一轮只写到 1.1.0(CCXT WebSocket、Plotly、45% 提速);1.2.0 把 CTP 实盘从"宣传"推进到 P0 级,但仍是社区分叉口径,不是经典 mementum 版的承诺。
2、注意区分:backtrader.io 是另一款商业 SaaS(与 Python 库无关)
- 2026-03-01 上线的 backtrader.io 是一个全新的订阅制交易工作台:连接券商账户、跟单交易(Copy Trading / Trading Floor)、跟单风控规则、绩效分析、交易日记(Journal Quick Entry / Pages)。
- 它不是开源
pip install backtrader那个回测库,而是网页 SaaS;本文讲的 Cerebro/双均线语法与它完全无关。
【提示】白话:搜"backtrader 2026"会搜到 backtrader.io 的跟单产品,别把它当成回测框架新版本;两者只是同名,一个是 Python 库,一个是网页交易 SaaS。
来源:分叉发布说明(中文)、backtrader.io Changelog、PyPI backtrader-next。
十四、2026 增量更新(深挖第5轮)
1、第三方精简分叉 slim-backtrader 2.2.0(2026-08-24)
- 除前面写的 cloudQuant 主分叉(1.2.0,2026-03-15)与 backtrader-next(2.3.7,2026-03-26)外,PyPI 上还有一个精简重写分叉 slim-backtrader,最新 2.2.0 发布于 2026-08-24。
- 它去掉了原版大量冗余模块、只保留核心回测/实盘链路,主打轻量依赖;API 用法与原版 backtrader 基本兼容(pip 包名 slim-backtrader)。
【提示】白话:原版 backtrader 已经停更,现在社区主要有三个分支——cloudQuant 主分叉(功能最全,带 CTP/WebSocket)、backtrader-next(smalinin 维护)、slim-backtrader(轻量精简版,8 月刚更到 2.2.0)。装的时候别装错包名。
来源:slim-backtrader 2.2.0(PyPI,2026-08-24)。
本站固定免责声明:本教程仅讲解 Backtrader 软件操作,不构成投资建议。回测业绩不代表未来,请谨慎决策。经典版与社区分叉的实盘/性能能力差异以各自官方文档为准;本文涉及分叉功能为社区口径,请勿直接当作生产承诺。
💬 用户评价 (0)
立即登录