作 者:老余捞鱼
原创不易,转载请标明出处及原作者。

技术讨论不构成任何操作建议。
模型评测不等于投资建议。
不荐股、不卖课、不承诺收益。
市场有风险,请合法合规投资。
本文约 3100 字 | 预计阅读 10 分钟,后有代码和项目地址,建议先收藏
Qbot 是 UFund-Me 开源的量化平台,在 GitHub 上有 18718 star、2613 fork、MIT 协议,2022 年 11 月建的仓。
经典策略那一支是真能跑的,AI 策略那一支是坏的,需要改造。
我花了些时间把它拉下来、装起来、把自带脚本跑了一遍,又扒了一遍源码。挖出来的东西比预期多,也有几个地方让我盯着屏幕愣了一会儿。
它的野心,一条链路跑完
Qbot 想做的事很直白。数据获取、策略开发、策略回测、模拟交易、实盘交易,放同一套流程里。
README 里画了一张结构图,从上到下四层。底层是 qlib 和深度学习策略。中间是 backtrader 和 easyquant 两个回测引擎,上层是 vnpy、pytrader、pyfunds 三个交易框架。最外层套 quantstats 做绩效看板。
作者自己写了一句定位,AI 智能量化投研平台。要覆盖股票、基金、期货、加密货币四类标的。
仓库里的经典策略目录挺全。均线、布林、海龟、小市值、多因子、Alpha 对冲、指数增强、RSRS 择时,配对交易和选股都有单独的文档。
目录看着是齐的。
实测,官方脚本跑通了,结果是亏的
我挑了仓库里最干净的一个策略,qbot/strategies/boll_strategy_bt.py。13 日布林带,跌破下轨买,突破上轨卖。
数据用招商银行 600036,2021 年 1 月 4 日到 2022 年 12 月 6 日,467 根 K 线,前复权。初始资金 100 万,手续费 0.1%。
策略类我是直接从仓库 import 进来的,一行都没改。唯一动的是取数。脚本里写的 akshare 东财接口 stock_zh_a_hist 在我这台机器上连不上,我换成新浪的 stock_zh_a_daily。
跑通了。期末 999586.53 元,两年亏了 413 块。

同期一直拿着是 966275.20 元,亏 33725 元。股价从 32.79 跌到 29.14,跌了 11.13%。
这么看布林策略是跑赢基准的。官方默认参数下成交 6 笔,3 胜 3 负,最大回撤 0.13%。
但这个表格有个地方不对劲,我第一眼就注意到了,说不好是哪儿不对,翻回去才看明白。
官方脚本默认只用了 0.36% 的本金
boll_strategy_bt.py 里写着 cerebro.addsizer(bt.sizers.FixedSize, stake=100)。初始资金 100 万。
stake=100 的意思是每次固定买 100 股。600036 这段时间均价 35.67 元,100 股就是 3567 元。
100 万本金,3567 元在场上。占 0.36%。

剩下 99.64% 的钱躺在账上,一分钱没参与交易。
所以官方脚本跑出来那个几乎不亏的结果,不是策略有多稳,是仓位小到收益被稀释成了看不见。同一个策略我把 stake 改成 30000 满仓,净亏立刻变成 -1.03%。
同一次回测,那个数字看起来稳得不行。可这是真的吗?我第一次看到这行输出的时候,心里是有点信的。
放大 25 倍仓位,亏损也放大 25 倍。这个数我盯了一会儿才敢写下来。
这一点值得单独拎出来说。新手看回测输出最容易掉这个坑,看到一个几乎不亏的结果,第一反应是策略稳,而不是”仓位是不是太小了”。
0.1% 手续费,两年吃掉 5154 元
既然说到成本,我把手续费参数调成 0 再跑一遍,其他一律不动。
零成本那版期末 994900.00,净亏 5100 元。0.1% 手续费那版期末 989745.70,净亏 10254.30 元。

差 5154 元。
满仓条件下策略一共成交 3 次,1 胜 2 负。也就是说这 10254 元的净亏里,手续费占了 5154 元,一半。
3 次成交吃 5154 元手续费,是因为满仓一笔就是 30 万本金。0.1% 一次进出 600 元,3 次来回 3600,剩下的是开仓那一次。
所以 Qbot 这个策略在满仓时净亏,成本和策略亏损差不多各占一半。这不算致命。问题是官方脚本的默认输出根本看不出成本的存在,仓位太小,手续费被稀释到看不见。
三处硬伤,都在 AI 策略那一支
装依赖的时候我就觉得不对。官方 README 让你跑 pip install -r dev/requirements.txt。
我先在 Python 3.13 上试,秒崩。
AttributeError: module 'configparser' has no attribute 'SafeConfigParser'这是 pyfolio 那个包的问题。quantopian 早关停了,仓库还挂着,它的 setup.py 里用了 Python 3.12 删掉的 API。
换成 Python 3.9,README 声明支持的版本,pyfolio 这个错过了。但下一个坑接上来。matplotlib==3.2.2 这个钉死的版本,在 Apple Silicon 上没有预编译包。得下 40MB 源码自己编。
我最后是把这几个坏包剔掉,用剩下的依赖把环境跑起来的。
然后我核对了一遍 requirements 和代码里实际 import 的东西。
tushare、keras、tensorflow、rlkit、easyquant、qlib、vnpy、lightgbm、gym、ta-lib、wxpython。十一个包,一个都不在 requirements.txt 里。
这十一个包,全是仓库自带策略代码 import 的。
这解释了一个现象。为什么这个仓库 star 涨到 1.8 万,我一开始想不明白,但 issue 里”装不上””报 xxx 错”能排到前十。76 个 issue 里有 10 个是安装相关。评论最多的 #10,标题是「mac python3.9 pip install -r requirements.txt error」,底下有 11 条讨论。
装得上的人是把缺的东西自己补齐了。装不上的人就一直卡在那。
强化学习策略引用了一个不存在的东西
qbot/strategies/rl_strategy_bt.py 这个文件,我用 AST 静态扫了一遍所有 self 属性引用。
第 48 行写的是 action = self.model.predict(self.obs.reshape(1, -1))[0]
self.model 从哪来?我把整个类扫了一遍,没有。这个类从来没创建过模型。
第 57 行写的是 self.log('(MA Period %2d) Ending Value %.2f' % ...)
self.log 也没定义。这个文件里没有 log 方法。
第 58 行引用了 self.params.maperiod。而这个类的 params 只有三个,lookback、neurons、period。
三处硬伤,都在一个文件里。
同一批扫描里,另外四个策略文件都通过了。
这个文件跑不起来还有第二层原因。它 import 了 rlkit。这个包在 PyPI 上只有 0.1 和 0.2.0 两个版本,全都依赖 tensorflow==1.11.0。这个版本的 tensorflow 只提供到 Python 3.6 的 wheel。
Qbot 要求 3.8 或 3.9。依赖链是死锁的,不是配置问题,改不出来。
LSTM 策略的信号是用未来算出来的
这个比前面的硬伤更值得说,因为它不报错,能跑完,还能出一张漂亮的收益曲线。
lstm_strategy_bt.py 的 next() 方法长这样。
X = self.test_data['X']
y_pred = self.model.predict(X)
y_pred = self.scaler.inverse_transform(y_pred)
if self.dataclose[0] < y_pred[-1]:
self.buy(size=100)每次决策,它都把整个测试集丢进模型算一遍,然后取最后一个算出来的值 y_pred[-1],跟当前收盘价比。
问题是这个 y_pred[-1] 对应的样本窗口,是测试集的最后 20 天。
我按这段代码复了一遍时间轴。
- 训练段 373 根 K 线,截至 2022 年 7 月 19 日
- 决策发生区间 94 个交易日,2022 年 7 月 20 日到 12 月 6 日
- 信号实际来自 2022 年 11 月 9 日到 12 月 6 日这一段
也就是说,7 月 20 日那天的买卖决策,用的信号来自 12 月 6 日收盘的数据。往前平均算,每个决策点提前用了约 47 个交易日的未来信息。

还有一处。self.scaler.fit_transform(data) 是在全量数据上拟合的,测试段的信息进了归一化参数。
这类代码跑出来的回测结果是没有意义的。它不是策略好,是它提前知道了答案。这条我看第一遍没反应过来,第二遍才有点火大。
我第一反应是想去 issue 里翻有没有人提过,翻了一圈没人提,挺意外的。68 条未关闭的 issue 里没有一条跟策略逻辑有关,全是环境问题。
把五个策略文件扫完,结果是这样。
| Qbot 自带的策略文件 | 静态扫描与依赖情况 |
|---|---|
rl_strategy_bt.py 强化学习 | self.model、self.log 未定义,params 里没有 maperiod。依赖 rlkit 锁死 tensorflow 1.11,装不上 |
lstm_strategy_bt.py LSTM | 代码能跑,但信号用了未来数据。要 keras 和 tensorflow |
sma_cross_strategy_bt.py 均线 | 通过。依赖 tushare,没列进 requirements |
boll_strategy_bt.py 布林 | 通过。akshare 在 requirements 里,能装 |
multi_strategy_bt.py 多策略 | 通过。依赖 tushare,没列进 requirements |
文档也有问题
docs/03-智能策略/model_zoo.md,标题写着 Model Zoo。内容是 SECOND、SECOND baselines、8 张 GPU 的显存占用,还贴了个 mmdetection 的 benchmark.py 链接。
这是从目标检测项目 mmdetection 复制过来的,跟量化一点关系没有。
经典策略目录里,Alpha对冲.md 和 指数增强.md 两个文件,全文各 116 字节。除了标题和一句”以下部分内容参考《因子投资:方法与实践》一书”,就只剩一个”1. 原理”和一行分隔线。
原理没了。
还有几个数字
最后 push 是 2026 年 3 月 11 日,一个 autofix 提交,修的是 wxMenuItem 的问题。到今天七个月。
贡献者列表拉下来只有 3 个人。作者 Charmve 提交 149 次,另两个各 1 次。
68 个 issue 挂着没关,29 个关过。关掉的那 29 个里有几个是环境修复。
fork/star 是 14%。1.87 万 star,2613 fork。
这个比例说明一件事。大多数人 star 完就走了,真把代码拉下来改过的是那 2613 个人。而这 2613 个人里,绝大多数装环境这一步就卡住了。
那它到底能用在哪
说句公道话,我更倾向把它当成一套骨架。
这套东西的价值不在于策略,在于它把数据到回测这一段的路铺好了,铺的还是国内能直接用的路。akshare、efinance、baostock、tushare 都是国内接口。模拟交易直接对接券商客户端,走的是 easytrader 那套。GUI 是 wxPython 写的桌面应用。
对一个想快速看一眼某个策略在 A 股上什么表现的人,这套骨架省下来的时间是真的。
安装这件事,我建议这么绕。
Python 版本锁 3.9,别用 3.10 以上(pyfolio 会崩)。requirements.txt 里 matplotlib==3.2.2 改成 3.7 以上。git+https://github.com/quantopian/pyfolio 这行直接删掉,quantopian 2020 年就关了,代码不会再更新。wxPython 从源码装,别用仓库里那堆预编译 wheel。里面只有 cp38 和 cp39 的 x86_64 版本,Apple Silicon 用不了。
数据源别用脚本里默认的东财接口,换新浪。
AI 策略那一支先别碰。LSTM 那个信号是坏的,强化学习那个依赖装不上。经典策略里有能用的,布林、均线、海龟、小市值、多因子这几套代码逻辑是通的,改改参数就能跑。
模拟交易需要装券商客户端,还要连 chromedriver。这条链路我没能测。
最后
我把这套东西拉下来装好跑通,花了大概一天。挖出来最有价值的不是它有多少功能,是它哪里坏了。依赖缺 11 个包。RL 策略引用了不存在的属性。LSTM 的信号来自未来。文档有两个空壳。model_zoo 是从目标检测项目抄的。
开源项目的 star 数只说明有多少人点了个收藏。装得上、跑得通、跑出来的数是对的,是三件完全不同的事。
建议大家可以先自己翻翻它的 issue 区,前 30 条按评论数排,装不上的人踩的坑基本都在那里面。仓库地址在文末。
参考资料
- Qbot 仓库与源码 https://github.com/UFund-Me/Qbot
- 在线文档 https://ufund-me.github.io/Qbot
- 依赖清单
dev/requirements.txt - 布林策略
qbot/strategies/boll_strategy_bt.py - 强化学习策略
qbot/strategies/rl_strategy_bt.py - LSTM 策略
qbot/strategies/lstm_strategy_bt.py - 本篇复现脚本
outputs/qbot-quant-platform/repro_qbot.py - 原始数据
outputs/qbot-quant-platform/repro_data/data_600036.csv
#Qbot #开源量化 #量化平台 #回测 #AI策略 #backtrader #akshare #A股量化 #量化平权 #GitHub开源
Be First to Comment