C-择时类 · 29 CASES · SOURCE-LEVEL READING
QuantsPlaybook 择时案例册:29 个案例怎么读、先读哪个
择时类是仓库里案例最多的一类,也是最容易被当成「指标大全」草草翻过的一类。本页按信号族而不是按券商重新组织,并标注每个案例的数据门槛与已验证程度。
- QuantsPlaybook C 类实测:29 个案例目录 / 36 个 Notebook / 46 份研报 PDF。
- 已有 3 个案例做成低门槛形态:RRG 纯离线快照、SAE 自带完整文档、技术分析框架自带子模块。
- 核心信号代码可独立复用:
SignalMaker提供 四族信号的 import 入口。 - 多数案例只需指数日线,门槛低于因子类——适合作为第一个跑通的案例。
四族择时信号分别是什么?
SignalMaker 源码与 C 类案例 README 整理的策略族示意图;非官方分类。FOUR FAMILIES
QuantsPlaybook 的 29 个择时案例怎么分类?四族信号
仓库没有给出统一的分类法。本站按「信号是怎么算出来的」重新分组,这样读代码时更容易找到同类实现。
| 信号族 | 核心思路 | 代表案例 | 输入数据 | 可复用代码 | 读的时候注意什么 |
|---|---|---|---|---|---|
| 阻力支撑族(RSRS / QRS) | 把「高点-低点」做回归,用斜率刻画支撑与阻力的相对强度 | RSRS择时指标(原始版 + 修正版两套 Notebook)、QRS择时信号、ICU均线 | 指数日线的高/低/收盘 | SignalMaker/qrs.py 的 QRSCreator | RSRS 有「原始版 / 修正版 / 本土改造版」三条线,参数不同结论差别明显——公开 issue #2 就是这类参数敏感性问题 |
| 信号分解族(HHT / 小波 / EMD) | 把价格序列分解成若干模态,再对模态做分类或阈值判断 | 结合改进HHT模型和分类算法的交易策略、小波分析、扩散指标 | 指数日线 | SignalMaker/hht_signal.py 支持 EMD / VMD 两种分解 | 分解类方法的参数(模态数、阈值)对结果极敏感,且计算耗时明显高于普通指标 |
| 通道与动量族(鳄鱼线 / AO / MACD) | 用平滑后的多均线通道 + 动量震荡指标判定趋势与转折 | 基于鳄鱼线的指数择时及轮动策略、均线交叉结合通道突破择时研究、低延迟趋势线与交易择时、成交量的奥秘… | 指数日线 + 成交量 | SignalMaker/alligator_indicator_timing.py(三个函数) | 这一族最容易直接搬到自己的数据上;但也最容易过拟合参数 |
| 制度与行为族 | 用市场结构或行为变量(情绪、资金、波动状态)构造择时信号 | 投资者情绪指数择时模型、北向资金交易能力一定强吗、基于CCK模型的股票市场羊群效应研究、时变夏普 | 指数 + 资金/情绪数据 | 无统一封装 | 数据可得性差异大:情绪指数、北向资金等数据源需要单独确认 |
| 机器学习与优化族 | 把择时当作预测/分类问题,或用优化算法搜索规则 | 基于稀疏自编码器的指数择时、Trader-Company集成算法交易策略、相对旋转图RRG行业轮动、特征分布建模择时 系列 | 指数 + 特征工程 | 各自独立 | 这一族最需要样本外与成本披露;SAE 案例的文档在这两点上写得最清楚 |
分组依据:SignalMaker/README.md 中给出的四类信号入口 + C 类各案例 README 的算法说明。官方 README 的使用作「择时 25+」,实测为 29 个案例目录。
START ORDER
先跑哪个案例?按数据门槛排序的入门顺序
29 个案例的数据门槛差别很大。下表按「能不能立刻拿到数据」排序,建议按顺序推进。
| 顺序 | 推荐案例 | 为什么先跑它 | 数据要求 | 预期产出 |
|---|---|---|---|---|
| 1 | 相对旋转图RRG行业轮动 | 纯离线快照(DuckDB 单文件),不联网、不需要账号,且自带完整中文文档与偏离评估 | 网盘下载快照约 1.1 GB+ 放到 data/ | RRG 图、行业轮动组合净值、分年绩效表 |
| 2 | 基于稀疏自编码器的指数择时 | 自带 使用指南 / 常用操作 / 参数参考 / 偏离评估四份中文文档,且明确写了样本外设置 | TuShare Pro Token(.env 的 TS_TOKEN) | 训练损失曲线、seed 相关性、多空/只做多/只做空净值、分年绩效 |
| 3 | 技术分析算法框架与实战(含圆弧底) | 自带 Technical Pattern Recognition 子模块与 README;形态识别逻辑可独立复用 | 指数/个股日线 | 形态识别标记 + 择时信号 |
| 4 | 基于鳄鱼线的指数择时及轮动策略 | 信号层已抽到 SignalMaker,可直接在自己数据上调用三行代码 | 指数日线(收盘/高/低) | 鳄鱼线 / AO / MACD 三路信号 DataFrame |
| 5 | RSRS择时指标(原始版 + 修正版) | 最经典的择时指标,两套实现可直接对照,是最适合用来理解「参数怎么影响结论」的案例 | 指数日线(高/低/收盘) | RSRS 值序列 + 择时信号 + 净值 |
| 6 | 其余案例(QRS / 小波 / 扩散指标 / 情绪指数 / 机器学习族…) | 按你手上的研报与数据条件挑;建议一次只跑一个,并记录口径 | 各异,部分需要额外数据源 | 视案例而定 |
顺序依据:本站对 QuantsPlaybook 每个案例的数据入口与自带文档做了逐条核对(见案例清单页)。前 4 个案例的共同点是不依赖付费账号或自带完整说明,适合作为第一个跑通的样本。
READ THE CODE
QuantsPlaybook 源码该看哪里?三处关键位置
择时案例的代码量都不大,但有三处位置决定了它的结论是否可靠。下表给出具体位置与判据。
| 要检查的位置 | 在哪看 | 正确写法 | 常见问题 |
|---|---|---|---|
| 信号产生时点 | 搜索 shift(1)、rolling( 后的对齐方式 | 信号必须只用截至 T 日的信息;T 日信号用于 T+1 决策 | 把 T 日收盘价直接用于 T 日决策(未来函数),在通道突破类案例里最易出现 |
| 均线/通道参数的来源 | 看参数是否直接写在函数默认值里(如 get_alligator_signal(close_df)) | 参数应有出处(研报给定时写明),否则视为待核验 | 参数在 Notebook 里被反复调优,但最终只报告表现突出的那一组 |
| 阈值与死区处理 | 搜索阈值常量(如 0.2、>0) | 阈值来源与「死区内如何保持仓位」都应有说明 | SAE 案例写明「默认阈值 0.2%,死区内维持之前信号」——这是较规范的一例 |
| 组合与调仓 | 看多空方向、调仓频率、是否含成本 | 明确「次日开盘成交」「年化按 252 交易日」这类口径 | 多数老案例未写成本;RRG 写明了成交时点与年化口径 |
# SignalMaker 的三类择时信号入口(来自 SignalMaker/README.md)
from SignalMaker.alligator_indicator_timing import (
get_alligator_signal, # 鳄鱼线:输入 close 的 DataFrame(index=日期, columns=代码)
get_ao_indicator_signal, # 动量震荡指标 AO:输入 high / low
get_macd_signal, # MACD 信号:输入 close
)
from SignalMaker.qrs import QRSCreator
qrs = QRSCreator(low_df, high_df) # 需要 low/high 两个宽表
signal_df = qrs.fit(18, 600) # 结果与参数强相关
from SignalMaker.hht_signal import get_ht_signal, get_hht_signal
get_ht_signal(hs300_df, 60, 30) # HT 信号
get_hht_signal(hs300_df, 60, 2, 9, "EMD") # HHT:EMD 分解
get_hht_signal(hs300_df, 60, 2, 9, "VMD") # HHT:VMD 分解 代码块来自 SignalMaker/README.md 原文(本站未运行)。这些函数的输入契约在 README 里写得很清楚,是仓库里少见的「可直接抄」的部分——详见工具包页。
DATA REQUIREMENTS
择时案例要什么数据?多数只需要指数日线
这是择时类相对友好的地方:大部分案例的输入就是指数或个股的日线,不需要因子数据或高频数据。
| 信号族 | 最小数据 | 建议股票池 | 复权方式 | 需要多少历史 | 额外注意 |
|---|---|---|---|---|---|
| RSRS / QRS | 指数日线(开高低收) | 沪深300、中证500 等宽基指数 | 指数本身不复权 | 至少覆盖一轮牛熊(≥5 年) | 参数回看窗口直接影响信号频率 |
| 鳄鱼线 / AO / MACD | 指数或个股日线(收盘/高/低) | 宽基指数或行业指数 | 行业指数同指数口径 | ≥3 年 | 个股用法涉及复权,需与研报口径一致 |
| HHT / 小波 | 指数日线(收盘) | 宽基指数 | 同指数口径 | ≥5 年(分解需要足够样本) | 计算耗时高,建议先在短区间验证流程 |
| 情绪 / 资金 / 行为 | 指数日线 + 情绪或资金数据 | 视研报而定 | 视数据源 | 视数据可得性 | 数据源需单独确认(公开数据往往已停止更新) |
| 机器学习 / 优化族 | 指数日线 + 特征工程 | SAE 案例用中证500 | 视案例 | SAE 案例用 2020–2025 作样本外 | 需要 GPU 或较长训练时间(torch 依赖) |
本站未运行任何案例,「建议股票池 / 复权方式」是基于案例文档与 A 股通行做法的整理,不构成对某个案例的官方口径复述。具体以各案例 README 为准。
TROUBLESHOOTING
QuantsPlaybook 的择时案例常遇到哪些问题?六类卡点
把本站核验到的真实问题按现象归类,便于你遇到时快速定位。
| 现象 | 真实原因 | 处理办法 | 证据来源 |
|---|---|---|---|
| 代码跑完但净值是平的 | 信号全程为 0,通常是阈值设置或数据窗口不足导致死区一直生效 | 打印信号序列的取值分布;检查回看窗口是否大于可用数据长度 | SAE 案例文档提到的死区机制 |
| 结果与研报差很多(择时效果更差) | 参数与研报不同,或股票池/区间不同 | 先固定参数只改区间,再固定区间只改参数,分离变量 | 公开 issue #2(ICU 均线 5 日回看) |
| 计算非常慢 | HHT / 小波分解、或机器学习训练耗时高 | 先用短区间(如 1 年)验证流程,再扩到全区间 | 案例依赖含 PyEMD / vmdpy / torch |
| 绘图报错或图是空白 | 绘图 API 版本变化(老案例钉在 matplotlib 3.3–3.7) | 把环境按案例 requirements.txt 装齐再画图 | 本机依赖矩阵实测 |
| 取数报错 / 一直重试 | 案例的 TuShare 封装默认无限重试(max_retry=0) | 把 max_retry 改成 10–100,并检查 Token 与积分权限 | 特征分布建模择时/scr/tushare_api.py |
| 拿不到案例文档里提到的数据 | 该数据只通过作者的网盘分发,且文件不进 git | 到对应案例 README 里查看下载说明;RRG 的快照 schema 写在 data/说明.md | 4 个案例的网盘说明 |
先确认「跑通」的含义
对这个项目而言,「跑通」至少包含三层:代码不报错、取到真实数据、产出的信号非空。只满足第一层时,很容易把模拟数据的结果误当结论。
一次只改一个变量
参数、区间、股票池、成本四项里一次只动一项,否则无法归因。RRG 案例的偏离分析就是按这个方法写出来的。
优先选自带文档的案例
2025–2026 年新增的案例会带使用指南与参数参考,读起来省一半时间。判断方法:目录里有没有 docs/ 或多份中文 .md。
FAQ
QuantsPlaybook 择时案例常见问题
QuantsPlaybook 的择时案例一共有多少个?
实测 C-择时类 下有 29 个案例目录、36 个 Notebook、46 份研报 PDF,是四类中案例最多的一类。另有 1 个 Notebook 直接放在类别目录下、不属于任何案例目录(择时视角下的波动率因子.ipynb)。官方 README 写作「择时策略 25+」,与实测略有差异。
QuantsPlaybook RSRS 有原始版和修正版,有什么区别?
目录 RSRS择时指标 下有 RSRS.ipynb 与 RSRS改进.ipynb 两套,对应两篇不同时期的券商研报;README 另外链接了一个「本土改造版」(指向聚宽社区而不是仓库)。三者的差别在回归窗口、标准化方式与阈值处理上,本站未运行,因此不对效果差异下结论——建议自己按同一区间对照三套实现。
QuantsPlaybook 我只想用指标本身,不想跑完整案例,可以吗?
可以,而且这是最省事的一条路:SignalMaker 把四族信号抽成了独立模块,get_alligator_signal、get_ao_indicator_signal、get_macd_signal、QRSCreator、get_ht_signal / get_hht_signal 都有 README 里的 import 示例。但注意它仍需装 SignalMaker/requirements.txt(含无 wheel 的 TA-Lib)。
QuantsPlaybook 这些择时案例需要付费数据吗?
大部分不需要。择时类的最小输入通常就是指数日线,公开数据源即可满足。例外是机器学习族(如 SAE 案例需要 TuShare Pro Token 取 index_daily 与 index_dailybasic)和部分行为金融类(情绪、资金数据)。详细门槛见案例清单页的逐条表格。
QuantsPlaybook 为什么看到「结果与研报差很多」是正常的?
因为影响择时结论的变量很多:回测区间、指数标的、参数回看窗口、阈值与死区、是否计入成本、成交时点。项目自己的 issue #2 就在问「为什么 ICU 均线采用 5 日回看日期比原研报效果要差」。正确做法是按变量逐个分离,而不是直接判定实现有错。
QuantsPlaybook 读这些案例的正确产出是什么?
不是「得到一个能赚钱的信号」,而是三样东西:①能说清信号的计算过程与参数含义;②能报出自己口径下的绩效与成本敏感性;③能写出与研报的偏离清单。本站不提供任何投资建议,也不对策略效果作断言。