Qbot:LSTM+Transformer选股流水线,三步跑通本地智能选股回测
【免费下载链接】Qbot[🔥updating ...] AI 自动量化交易机器人(完全本地部署) AI-powered Quantitative Investment Research Platform. 📃 online docs: https://ufund-me.github.io/Qbot ✨ :news: qbot-mini: https://github.com/Charmve/iQuant项目地址: https://gitcode.com/GitHub_Trending/qbot/Qbot
去年三月,我在Qbot里跑完一次回测,看到一笔追高单挂在20日最高点,五天后才触发止损离场。问题不在手速,在于"买在哪个位置"完全靠人盯。Qbot的LSTM+Transformer智能选股流水线,就是把收盘价序列转成买卖信号的一套本地方案。
- 看懂"行情→信号"的完整流水线
- 三步跑通一个LSTM回测
- 上手前避开四个高频坑
Qbot智能选股能力速览
| 功能 | 解决什么问题 | 对应模块 |
|---|---|---|
| LSTM趋势回测 | 用前20天收盘价序列预测次日方向,替代人工看K线 | lstm_strategy_bt.py |
| Transformer因子建模 | 给24天价格窗口里每个位置算出注意力权重 | stock_Transformer.py |
| 多因子股票池筛选 | 用PE/PB/ROE三个因子打分,选出得分前10只 | multi_factor_strategy.py |
| Tushare行情接入 | 拉取前复权日线,喂给模型训练 | get_data.py |
一条数据链:从行情到交易信号
行情数据进厂。lstm_strategy_bt.py 通过 Tushare(国内主流行情API)拉取 600018 的前复权日线,跨度约两年半(2020-01-01 至 2023-01-31)。前复权,就是把历史价格按分红送股折算,避免除权日出现假跳空。
特征提取。拿到收盘价后先做 MinMaxScaler 归一化,把价格压到 0~1 区间。归一化的意义很直接:LSTM对数值尺度敏感,10元的票和1000元的票放在同一窗口里没法比较。
LSTM趋势建模。归一化后的序列切成滑动窗口:取前 20 个交易日(源码参数 lookback=20)预测第 21 天的收盘价。模型只有三层,结构见源码:
# 20日收盘价窗口,1维输入 model.add(LSTM(units=self.p.neurons, input_shape=(self.p.lookback, 1))) model.add(Dropout(0.2)) model.add(Dense(units=1)) # 输出:次日预测价训练用前 80% 数据(train_size=0.8),跑 50 轮。信号规则写得很死:预测价高于现价就买 100 股;持仓后收盘价超过成本价 5%(源码里是* 1.05)就清仓。回测初始资金 1 万,手续费万分之一。
Transformer跨因子注意力。第二道工序在 docs/tutorials_code/13_Transformer/。把序列窗口设为 24 天(seq_len=24),24 天每天的价格在模型里是一个"token",8 个注意力头(num_heads=8)、2 层编码器(num_layers=2)、512 维隐层,学习"窗口里哪些天更该被重视"。类比一下:LSTM 像顺着一段录音从头听到尾,Transformer 像先扫一遍全篇再回头重点听几处——哪些天的价格变动对下一天更有参考意义,权重由训练自己给,而不是写死"最近三天最重要"。
信号融合。趋势判断和股票池筛选在仓库里分属两个模块:多因子策略用线性回归对 pe_ttm、pb、roe_ttm 三个因子做动态加权,得分最高的前 10 只进入持仓(num_stocks=10)。组合方式是:因子得分先筛股票池,LSTM 再决定池内个股的买卖时点。两个模块在仓库中独立运行,融合逻辑需要自己拼接,参考 docs/03-智能策略/model_zoo.md。
三步跑通LSTM回测
- 装依赖:建 Python 3.8 环境(安装指南 声明仅在 3.8/3.9 下测试过),再装仓库自带的 TA-Lib wheel:
python3.8 -m pip install dev/TA_Lib-0.4.28-cp38-cp38-linux_x86_64.whl - 配数据源:编辑 utils/configure/config.json,填入 Tushare 的 token:
"ts_token": "你的Tushare令牌"- 跑回测:
python qbot/strategies/lstm_strategy_bt.py。脚本会自动经 Tushare 拉前复权数据并打印 Sharpe 比率。
⚠️ 四个高频坑
- Python 版本要卡死:官方只在 3.8/3.9 下测试过(依据:docs/Install_guide.md 首段加粗说明)。3.10+ 的 pip 装不上仓库里 cp38/cp39 的 wheel。
- 窗口长度决定数据下限:lookback=20 意味着至少 20 个交易日才能产出第一个预测,数据太短模型直接没料可学(依据:lstm_strategy_bt.py 的
_prepare_X)。 - 止盈阈值写死在源码:5% 的卖出条件直接是
position.price * 1.05,想改参数要动代码而不是改配置(依据:同文件next方法)。 - 别拿单票策略当全市场选股用:LSTM 示例只回测单只 600018;股票池层面的筛选在 multi_factor_strategy.py,两模块能力边界不同(依据:两文件
__main__入口)。
一句话总结:Qbot 把"行情进、信号出"拆成 LSTM 与 Transformer 两道可回测的工序,数值、路径全部可查。
- 策略源码库:qbot/strategies/
- 智能策略文档:docs/03-智能策略/
- 常见问题:docs/FQA.md
【免费下载链接】Qbot[🔥updating ...] AI 自动量化交易机器人(完全本地部署) AI-powered Quantitative Investment Research Platform. 📃 online docs: https://ufund-me.github.io/Qbot ✨ :news: qbot-mini: https://github.com/Charmve/iQuant项目地址: https://gitcode.com/GitHub_Trending/qbot/Qbot
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考