一张图理清四个核心功能的分工协作,以及如何一步步走向实盘交易
一句话概括
回测是「考试」——拿历史题本模拟作答;看版是「成绩单」——把得分拆成各科细项;交易明细是「错题本」——每一笔买卖的记录;纸上交易是「模拟考」——只做不交卷,习惯真实答题节奏。四者串起来,最终是为了实盘——真正上考场。
一条线串起四个功能
假设你下载了 A 股过去五年的数据,选了一个模型(比如 LSTM),在面板上点了「运行策略」。
第一步:回测
「运行策略」页面启动的是一次完整的训练 + 回测流水线:
数据 → 特征工程 → 训练模型 → 生成预测信号 → 模拟组合 → 计算绩效
这个过程会生成两样东西:
- 一个训练好的模型(保存在 MLflow 里,可以反复使用)
- 一份回测报告(记录了如果按这个策略交易五年,结果会怎样)
第二步:看版(仪表盘)
回测跑完,Dashboard 自动加载最新结果,把密密麻麻的数字变成图表:
- 🟢 净值曲线 — 资产像过山车一样波动,最终是赚是亏?
- 🔴 回撤曲线 — 最惨的时候亏了多少?持续了多久?
- 📊 IC 序列 — 模型的预测到底准不准?还是纯粹瞎蒙?
- 📋 关键指标 — 夏普、卡玛、胜率……
看版不是实时数据,它是回测报告的一次「可视化总结」。你每跑一次回测,Dashboard 就刷新一次——如果你在 History 选中了某个历史模型,Dashboard 会展示那个模型的指标。
第三步:交易明细
「交易明细」Tab 回答的是回测中最细节的问题:
- 哪一天、买了哪只股票、多少钱?
- 每一笔交易是买入还是卖出?
- 买卖点踩得怎么样?
回测报告中只有「净值曲线」这种汇总数据,看不到具体买卖细节。交易明细把每一次组合调仓的流水拆开给你看,方便你判断:"这个策略去年 3 月大跌时砍仓了没有?"
第四步:纸上交易
纸上交易是四者中最接近实盘的一步。它是这个流程:
加载之前训练好的模型
↓
用最新行情数据预测未来
↓
每天自动选股、调仓
↓
模拟买卖,计算盈亏
和回测的关键区别:
| 回测 | 纸上交易 | |
|---|---|---|
| 数据 | 历史数据(2019-2024) | 最新数据(含今天) |
| 目的 | 验证策略是否有效 | 验证策略现在是否还能赚钱 |
| 速度 | 几秒跑完五年 | 一天只跑一天 |
| 是否实盘 | 不 | 不,但最接近实盘 |
纸上交易是「影子账户」,它和实盘做一样的事情,只是不拿真钱交易。当你每天打开面板,看到纸上交易在赚钱,心里就有底了。
关键一环:因子
看不懂"因子"这两个字,就看不懂回测在干什么。
因子是什么?
因子就是模型的"输入特征"——一组能从原始行情数据中计算出来的、对预测股价可能有帮助的指标。比如:
| 因子名 | 通俗含义 | 有点像 |
|---|---|---|
KLEN | 过去 N 天的 K 线实体长度 | 分析走势的"体型" |
WVMA5 | 成交量加权移动平均 | "量价配合"的量化 |
ROC60 | 过去 60 天的变化率 | 动量的衡量 |
RSQR5 | 最近 N 天的拟合优度 | 趋势的"稳定程度" |
CORR5 | 价格-成交量相关系数 | 量价是否同步 |
模型(LSTM、LightGBM 等)就是拿这些因子当输入,学习它们和未来收益之间的关系。
当前系统的因子体系:Alpha158
面板默认用的是 Qlib 内置的 Alpha158——158 个 A 股技术因子,覆盖五大类别:
- K线形态(26 个)— 实体、影线、涨跌比例等
- 动量(30 个)— 不同时间窗口的价格变化率
- 波动率(28 个)— 标准差、真实波幅等
- 相关性(34 个)— 量价相关系数、不同周期相关系数
- 拟合优度(40 个)— 线性回归斜率、R² 等
这些因子全部由 Qlib 的 Alpha158 处理器从开盘价、收盘价、最高价、最低价、成交量、成交额、换手率这七个原始字段自动计算出来——你不需要手动计算或输入任何因子。
在「因子」Tab 可以浏览全部 158 个因子及其 IC 值,黄色标记的 20 个是当前实际被模型使用的。
为什么因子看起来是"固定的"?
目前面板不提供因子选择界面,原因有两条:
- 简化操作:Alpha158 已经是学术界和业界验证过的有效因子集,对新手来说,直接用它比手动挑选更容易起步。
- FilterCol 前置选择:真正喂给模型的不是全部 158 个因子,而是经过两轮筛选:
Alpha158(158 个原始因子)
↓ 第一关:FilterCol 硬编码选择
选出 20 个(如 KLEN、WVMA5、CORR5……)
↓ 第二关:RobustZScoreNorm 去极值 + 标准化
↓ 第三关:模型自动学习哪些因子更重要
这 20 个因子定义在 shared_config.py 的 FILTER_COL_FEATURES 中,是 CPU 环境和低配服务器上折衷考虑过计算效率和预测能力后选出的子集。
LightGBM 和因子的关系
LightGBM 是树模型,和神经网络在处理因子时有本质区别:
| 神经网络(LSTM/GRU) | 树模型(LightGBM) | |
|---|---|---|
| 特征数量 | 需要精挑细选,太多会稀释信号 | 天生能处理 大量特征 |
| 特征交互 | 自动学习时序依赖 | 自动做特征交叉选择 |
| 训练速度 | 慢,需要 GPU | 快,CPU 即可 |
| 因子重要性 | 难以解释 | 直接输出哪个因子贡献最大 |
关键点:LightGBM 理论上可以用全部 158 个因子,效果可能更好。当前系统出于统一配置的考虑,让所有模型共用同一组 20 个 FilterCol 特征。如果你对因子选择有更多了解,未来可以修改 FILTER_COL_FEATURES(shared_config.py)来增加或更换因子,或者针对 LightGBM 去掉 FilterCol 限制使用全量特征。
在「因子」Tab 中可以看到模型回测后各因子的 IC 值(信息系数),它告诉你每个因子对预测的正确方向贡献有多大。IC 为正且绝对值越大,说明这个因子越"靠谱"。
因子在整个流程中的位置
原始行情 → Alpha158 计算出 158 个因子
→ FilterCol 选出 20 个核心因子
→ 模型用这些因子学习预测
→ 产生预测分数 → 选股 → 回测
→ Dashboard 显示 IC 指标
→ 因子 Tab 浏览每个因子的 IC
因子质量直接决定模型上限——模型只是工具,好因子 + 普通模型 > 差因子 + 顶尖模型。这也是为什么建议先理解因子(看「因子」Tab 的 IC 排序),再调整策略。
从研究到实盘的完整路径
研究阶段
┌─────────────────┐
│ 跑回测 → 看版检查 │ ← 反复迭代:调参数、换模型、看结果
│ → 交易明细查细节 │
└─────────────────┘
↓
模型看起来不错?
↓
验证阶段
┌─────────────────┐
│ 启动纸上交易 │ ← 用真行情跑一段时间
│ 每天看纸上盈亏 │ ← 观察是否和回测预期一致
└─────────────────┘
↓
纸上交易持续稳定?
↓
实战阶段
┌─────────────────┐
│ 用真钱实盘交易 │ ← 这就是最终目标
│ 持续监控和调整 │
└─────────────────┘
几个常见误区
误区 1:回测好 = 实盘一定好
回测好只说明过去表现不错,未来可能完全不一样。市场风格会变——去年有效的因子,今年可能亏钱。纸上交易是弥补这个差距的最重要一步。
误区 2:跑了一次回测就够了
机器学习模型的「好」不是绝对的。同一个模型跑多次,由于随机初始化和训练过程的波动,结果可能差很多。好的做法是:
- 跑多次回测,挑出表现稳定、不是靠运气的模型
- 在 History 页面勾选对比指标,挑出综合表现最好的
- 选中那个模型,然后再做纸上交易
误区 3:纸上交易赚钱了就可以直接上实盘
纸上交易没有考虑冲击成本和成交限制。当你用真钱买入时,你的买单本身会推高股价;卖单会压低股价。资金量越大,这种影响越显著。纸上交易跑得不错的基础上,实盘建议先用小资金验证,逐步加码。
交易明细到底指哪里的?
这个面板里有两处「交易明细」:
| 位置 | 数据来源 | 看什么 |
|---|---|---|
| 看版下方 / Trades Tab | 最近一次回测的模拟交易 | 历史上模型在什么时间点买卖哪些股票 |
| 纸上交易页面 | 当前纸上交易的模拟交易 | 最近几天模型正在买卖哪些股票 |
前者看历史,后者看今天。
在「实战」场景下,交易明细的真正价值是:
- 回测的交易明细帮你理解策略行为
- 纸上交易的交易明细帮你验证策略是否按预期执行
总结一张表
| 功能 | 反问自己 | 下一步 |
|---|---|---|
| 回测 | 这个策略在历史上表现如何? | 去 Dashboard 看详细指标 |
| 看版 | 各项指标能不能接受? | 不满意 → 调整参数重跑;满意了 → 去 History 选中模型 |
| 交易明细 | 具体买卖点合理吗? | 检查有没有异常交易;确认策略逻辑一致 |
| 纸上交易 | 现在跑起来还赚钱吗? | 观察一段时间 → 准备小资金实盘 |
| 实盘 | 真金白银在操作了 | 持续监控、定期回顾、不断迭代 |
最终目标不是找到一个完美的万能策略,而是建立一套「研究 → 验证 → 执行 → 优化」的可持续流程。 这个面板的四个功能,每一步都对应这个流程中的一个环节。