3 步完成量化回测可视化:backtrader-pyqt-ui 实战
【免费下载链接】backtrader-pyqt-ui项目地址: https://gitcode.com/gh_mirrors/bac/backtrader-pyqt-ui
打开界面,改一个参数,点 Run,几秒后图表刷新出新标记——backtrader-pyqt-ui 是基于 Backtrader 回测引擎和 PyQt 的量化回测可视化工具,把策略参数、K 线信号、资金曲线放进同一个窗口。有了这个 Backtrader GUI,回测不再只属于命令行。
30 秒看懂它
- 策略参数可视化:左侧表单直接暴露策略参数,改完点 Run 即验证,不用改代码。
- 多图联动:K 线、成交量、资金曲线在同一窗口同步刷新。
- 逐笔交易记录:买卖点在图上打标,明细在下方表格逐条列出。
- 可扩展:自定义策略、指标、实时数据都能按约定插入。
从零到第一次回测
- 克隆仓库:
git clone https://gitcode.com/gh_mirrors/bac/backtrader-pyqt-ui,自带 data/ 下两组示例数据和两个示例策略。 - 进入目录:
cd backtrader-pyqt-ui,之后所有操作都在这里。 - 装依赖:
pip install backtrader matplotlib requests websocket-client qdarkstyle finplot,backtrader 是引擎,finplot 负责画图。 - 启动:
python main.py✅ 界面打开后,从 Backtest Data 导入 CSV,选策略,点 Run。
数据是标准 CSV,第一列放时间戳:
| 列名 | 含义 | 是否必填 |
|---|---|---|
| datetime | 时间戳 | 是 |
| open | 开盘价 | 是 |
| high | 最高价 | 是 |
| low | 最低价 | 是 |
| close | 收盘价 | 是 |
| volume | 成交量 | 是 |
导入对话框里可选分隔符(逗号或 tab)和时间格式,仓库示例正好各对应一种。
图中左侧是参数与 Run 区,中间是K 线与交易标记区,左下是绩效统计区,右下是交易明细与资金曲线区。
界面导览:每个区域在做什么
这个回测可视化窗口布局固定,自上而下分四块,各对应一个决策。
- 顶部菜单:Backtest Data 导入 CSV,Options 管全局设置,决定拿哪份数据测试。
- 左侧 Back testing 面板:设初始资金、选策略,参数自动生成为表单。它回答"测什么、拿多少钱测"。
- 中间 K 线主图:蜡烛图加成交量,买卖标记直接打在图上;右上角可开关 Ichimoku、暗色模式和成交量。用它判断信号出没出得太早或太晚。
- 左下 Strategy summary:现金、总利润、交易总数、胜负数、多空分布,第一眼看整体质量。
- 右下两个标签页:Trades 标签逐条列出方向、开平时间、价格、佣金、净盈亏;Wallet 标签看 Value/Equity 曲线,判断回撤是否平滑。
内置策略与指标:先跑起来再改
strategies/ 目录有两个模板,可直接开测:
- sma_crossover:双均线交叉,快线上穿慢线买入,下穿卖出,只做多。
- ichimokuStrat1:基于一目均衡表(趋势类指标),用转换线、基准线与云层位置产生信号。
最短的策略结构长这样:
class sma_crossover(mt.MetaStrategy): params = (('fast', 15), ('slow', 30), ('tradeSize', 2000)) def __init__(self): self.buysig = btind.CrossOver( btind.MovAv.SMA(period=self.p.fast), btind.MovAv.SMA(period=self.p.slow)) def next(self): if self.buysig > 0: self.buy(size=self.p.tradeSize) elif self.buysig < 0: self.sell(size=self.p.tradeSize)自定义策略照此放进 strategies/,文件名必须和类名完全一致。日常测试改参数即可,不用重写逻辑:
| 指标 | 一句话说明 | 文件路径 |
|---|---|---|
| EMA | 指数移动平均,比 SMA 反应快 | indicators/ema.py |
| SMA | 简单移动平均 | indicators/sma.py |
| RSI | 相对强弱指数,动量 0-100 | indicators/rsi.py |
| MACD | 趋势与动量背离指标 | indicators/fin_macd.py |
| Stochastic | 随机指标,判断超买超卖 | indicators/stochastic.py |
| StochRSI | 对 RSI 再取随机指标 | indicators/stochasticRsi.py |
| Ichimoku | 一目均衡表,趋势与支撑阻力 | indicators/ichimoku.py |
进阶:优化 / 实时数据 / 绩效归因
参数优化
依托 CerebroEnhanced.py 可做三种事:网格搜索遍历参数组合,例如 fast 从 5 到 50 步长 5;蒙特卡洛随机扰动入场离场时点,检验稳健性;样本外测试则留出最近一段数据,验证泛化能力。
实时数据
websockets/binance.py 已实现币安 WebSocket 对接,可实时接收行情,把回测逻辑接到实盘数据源上,为上线做准备。
绩效归因
胜率看 summary 里的 Won 占比;盈亏比对比 Trades 表中 Profit Net 的正负均值;最大回撤从 Equity 曲线的峰谷距离读出;夏普比率(风险调整后的收益评分)需启用内置分析器后查看。
避坑与效率技巧
- CSV 加载失败或时间错乱⚠️ → 先确认第一列是时间戳,再在导入对话框选对分隔符:Source 1 示例用逗号,Source 2 用 tab 且带表头行,时间格式也要对应选。
- 策略没出现在下拉框→ 检查文件是否在 strategies/ 目录,且文件名与类名逐字一致,如 sma_crossover.py 对应 class sma_crossover。
- 多周期数据顺序乱了→ 导入列表里按小周期在上、大周期在下的顺序排,别反过来。
- 调参太慢、结果跳动大→ 先按 5 步长粗筛(如 fast 取 5/10/15/20/25),挑 2-3 组有希望的再按 1 步长细化;大数据集先切到轻量样本(data/Source 2)验证流程。
backtrader-pyqt-ui 把自己定位成个人开发者的回测可视化工作台:写策略、手动调参、眼看结果。它适合会一点 Python、又嫌命令行回测只打印数字的人。克隆仓库,用自带数据和示例策略点一次 Run,五分钟就能感受完整的回测可视化流程。
【免费下载链接】backtrader-pyqt-ui项目地址: https://gitcode.com/gh_mirrors/bac/backtrader-pyqt-ui
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考