TWO TOOLKITS · REUSABLE CODE
QuantsPlaybook 自带工具包:两个目录,四类信号,一份回测模板
除了 58 个案例目录,仓库里还有两个不是「案例」而是「工具」的目录。它们的依赖面比案例小得多,README 里还给了可直接复制的 import 示例——这是仓库里上手成本最低的部分。
- QuantsPlaybook
hugos_toolkit:12 个.py,三个子模块(回测报告 / 回测模板 / 绘图样式)。 SignalMaker:7 个.py,四类择时信号 + 一个工具模块。- 两者合计约 1,500 行有效代码(不含
__pycache__缓存)。 - 依赖面小:
SignalMaker只需 10 个包,比 Qlib 系案例轻得多。
两个工具包各有哪些模块?
SignalMaker/README.md 绘制的模块结构示意图;非官方模块图。HUGOS_TOOLKIT
hugos_toolkit 有哪些模块?三个子模块各管什么
这个工具包不产出信号,它产出的是一份能给人看的回测结果。三个子模块职责分明。
| 子模块 | 文件 | 职责 | 你能怎么用 | 依赖 |
|---|---|---|---|---|
BackTestReport | performance.py、tear.py、timeseries.py、utils.py | 绩效指标计算 + 回测报告(tear sheet)绘制 | 把任意净值序列喂进去,得到标准绩效表与图表;tear.py 是报告层入口 | pandas + 绘图库 |
BackTestTemplate | backtest_engine.py、bt_strategy.py | 回测引擎骨架与策略基类 | 作为自己写回测的起点:策略只实现信号,引擎负责撮合与统计 | backtrader 生态(案例里常见) |
VectorbtStylePlotting | plotting.py(约 37 KB,仓库里体积居前的单文件脚本之一)、utils.py | vectorbt 风格的绘图样式与工具 | 让自己的图表风格与案例保持一致;也可单独借用其中的样式函数 | 绘图库 |
核对方式:QuantsPlaybook 固定 commit 文件树列出全部 12 个 .py 与行数;上表职责按文件名与公开命名约定整理。本站未运行这两个模块,因此不评价其输出质量。
SIGNALMAKER
QuantsPlaybook 的 SignalMaker 提供哪些信号?四类模块
这是仓库里最有「库感」的部分:信号被抽成独立函数,输入是 DataFrame,输出是信号 DataFrame。
| 信号模块 | 文件 | 对外函数 / 类 | 输入契约 | 对应案例 |
|---|---|---|---|---|
| HHT 信号 | hht_signal.py | get_ht_signal(df, …)、get_hht_signal(df, …, "EMD"|"VMD") | 必须有 close,且为 DataFrame 类型(宽表:index=日期, columns=代码) | 结合改进HHT模型和分类算法的交易策略 |
| NoiseArea 信号 | noise_area.py | NoiseArea(index_price).fit(14) | 需要 OHLCV(案例用分钟级指数数据) | 另类ETF交易策略:日内动量 |
| QRS 信号 | qrs.py | QRSCreator(low_df, high_df).fit(18, 600) | 需要 low / high 两个宽表(index=日期, columns=代码) | QRS择时信号 |
| 鳄鱼线 / AO / MACD | alligator_indicator_timing.py(约 21 KB) | get_alligator_signal(close_df)、get_ao_indicator_signal(high_df, low_df)、get_macd_signal(close_df) | close 或 high/low 宽表 | 基于鳄鱼线的指数择时及轮动策略 |
| 工具模块 | utils.py | 若干辅助函数 | — | 被上面四个模块共用 |
# 可直接复制的调用示例(来自 SignalMaker/README.md 原文,本站未运行)
from SignalMaker.hht_signal import get_ht_signal, get_hht_signal
from SignalMaker.noise_area import NoiseArea
from SignalMaker.qrs import QRSCreator
from SignalMaker.alligator_indicator_timing import (
get_alligator_signal, get_ao_indicator_signal, get_macd_signal,
)
# 1) HT 信号 / HHT 信号(EMD 与 VMD 两种分解)
get_ht_signal(hs300_df, 60, 30)
get_hht_signal(hs300_df, 60, 2, 9, "EMD")
get_hht_signal(hs300_df, 60, 2, 9, "VMD")
# 2) NoiseArea:需要分钟级 OHLCV
index_signal = NoiseArea(index_price).fit(14) # 返回 ubound / signal / lbound
# 3) QRS:需要 low / high 两个宽表
qrs = QRSCreator(low_df, high_df)
signal_df = qrs.fit(18, 600)
# 4) 鳄鱼线三件套
alligator_signal = get_alligator_signal(close_df)
ao_signal = get_ao_indicator_signal(high_df, low_df)
macd_signal = get_macd_signal(close_df) 上面代码块逐行来自 SignalMaker/README.md,本站未运行。参数(如 60, 30、18, 600、fit(14))的具体含义 README 未逐一说明,建议对照对应案例的 Notebook 确认。
DEPENDENCIES
SignalMaker 要装什么?只要 10 个包
这是本页最实用的一条:如果你只想用信号函数,不必碰 Qlib 那一整套。
| 对比项 | SignalMaker | 典型 Qlib 因子案例(如筹码因子) | 说明 |
|---|---|---|---|
| 声明的包数 | 10 个 | 13–17 个 | 两者都是 == 精确钉版本 |
| 核心重依赖 | PyEMD、vmdpy、EMD_signal、TA_Lib、statsmodels、scipy | qlib + pyqlib、numba、alphalens、empyrical、statsmodels | Qlib 系案例需要整套因子流水线 |
| 本机 Python 3.11.9 实测 | 通过(允许源码包时) | 失败(numba 版本上限) | 信号类工具包的可安装性明显更好 |
| 无 wheel 的依赖 | TA_Lib==0.4.32(需编译) | alphalens==0.4.0、empyrical==0.5.5、pyqlib==0.9.1 等 | 两者都需要编译环境,但量级不同 |
| 数据要求 | 只要日线或分钟线的宽表 | 需要 Qlib 数据格式 + 因子数据 | 工具包不负责取数,这反而是优点 |
仓库体积约 1.36 GB(文件树合计),其中大头是案例数据与 mlruns 产物。如果只想要工具包,可以只下载 SignalMaker/ 与 hugos_toolkit/ 两个目录。预期结果:几十 KB 级代码 + 一份 requirements.txt。
python -m pip install --dry-run -r requirements.txt。预期输出:若报 Could not find a version,多半是 TA_Lib 需要编译;先装好 TA-Lib 的 C 库再重试。
所有信号函数的输入都是 index=日期、columns=代码、values=价格 的宽表。预期输出:同样是宽表的信号 DataFrame(取值通常是 −1 / 0 / 1 或连续的信号强度)。
不要一上来就全市场十年。先用单标的、单年数据确认函数的输出形状与取值分布符合预期,再扩规模。
实测依据:本机对 SignalMaker/requirements.txt 执行 pip install --dry-run 在 Python 3.11.9 上通过;筹码因子那套在同一环境下失败。完整矩阵见环境与依赖页。
HOW THEY RELATE
QuantsPlaybook 的工具包与案例是什么关系?谁调用谁
理解这层关系,你就知道改动会影响什么。
| 关系 | 具体表现 | 对你的意义 |
|---|---|---|
| 案例调用工具包 | SignalMaker 的 README 直接标注了每个信号模块对应哪个案例 Notebook;hugos_toolkit 被多个案例用于出回测报告 | 改工具包的函数签名会同时影响多个案例;反过来说,读工具包能一次看懂多个案例的信号层 |
| 工具包依赖更少 | SignalMaker/requirements.txt 只有 10 个包,不涉及 Qlib | 想快速验证信号效果时,只装工具包是最短路径 |
| 工具包不负责取数 | 它们只接受已经准备好的宽表 | 你可以把任何来源的数据(含本机技能取到的数据)喂进去,这是它最实用的地方 |
| 工具包无独立版本号 | 仓库 0 tag、0 release,工具包也没有单独发布到 PyPI | 引用时必须记 commit;不要写「SignalMaker v1.x」这类不存在的版本 |
最短上手路径
取 SignalMaker/ 两个文件(alligator_indicator_timing.py + utils.py)→ 装 TA-Lib 与 numpy/pandas → 喂一份指数日线宽表 → 拿到鳄鱼线信号。这是全仓库依赖最少的一条可执行路径。
第二短的路径
hugos_toolkit/BackTestReport 接受任意净值序列并输出绩效报告,不依赖案例数据。适合用来给你自己已有的策略结果补一份标准化报告。
别忘了许可问题
仓库没有 LICENSE 文件,只有 3 个案例 README 写了「仅供学习和研究使用」。复制这些代码进自己的项目之前,请先看许可与再复用页。
FAQ
QuantsPlaybook 自带工具包常见问题
QuantsPlaybook hugos_toolkit 和 SignalMaker 是什么?
它们是 QuantsPlaybook 仓库根目录下的两个工具目录(不是案例)。hugos_toolkit 负责「回测跑完之后的事」:绩效指标、回测报告、vectorbt 风格绘图,共 12 个 .py;SignalMaker 负责「信号怎么算」:HHT、NoiseArea、QRS、鳄鱼线四类信号,共 7 个 .py,README 里有可直接复制的 import 示例。
QuantsPlaybook 我只想要信号函数,不想装 Qlib,可以吗?
可以。这正是这对工具包的价值:SignalMaker/requirements.txt 只有 10 个包(PyEMD、vmdpy、EMD_signal、TA_Lib、statsmodels 等),不含 Qlib;本站实测该清单在本机 Python 3.11.9 上可以解析(允许源码包时),而 Qlib 系案例的依赖会失败。
QuantsPlaybook 这些信号函数的输入是什么格式?
都是宽表 DataFrame:index 为日期、columns 为标的代码、values 为价格。具体到每个函数:get_alligator_signal / get_macd_signal 要 close;get_ao_indicator_signal 要 high 与 low;QRSCreator 要 low / high 两个宽表;NoiseArea 要分钟级 OHLCV。
QuantsPlaybook 工具包的代码可以直接用到我的项目里吗?
技术上可以(都是普通 Python 文件,无编译依赖),但许可状态不明确:仓库没有 LICENSE 文件,GitHub 的 license 字段为空,只有 3 个案例 README 写了「仅供学习和研究使用」。本站因此只做「读法与用途」介绍,不提供代码镜像;引用时请注明来源仓库与 commit,商用前请自行确认授权。
QuantsPlaybook SignalMaker 的参数(如 fit(18, 600))是什么意思?
README 只给了调用示例,没有逐一解释每个数字的含义。从可读信息看,QRSCreator(low_df, high_df).fit(18, 600) 的两个参数与回归/标准化窗口有关,NoiseArea(...).fit(14) 与噪声区间的平滑窗口有关。精确含义请对照 qrs.py / noise_area.py 源码或对应案例 Notebook——本站未运行,不做推测性断言。
QuantsPlaybook 这两个工具包有版本号吗?
没有。仓库 0 tag、0 release,工具包也没有单独发布到 PyPI,因此不存在「SignalMaker v1.0」这类版本号。引用时可靠的定位方式是 commit(本站固定在 1e4a2310)。
QuantsPlaybook 工具包和案例哪个先看?
建议先看工具包:代码量小、依赖少、README 有示例,能在几十分钟内跑出一个信号序列,建立对整个项目代码风格的直观感受。之后再按择时案例册或因子案例册挑一个完整案例,去理解「信号 → 组合 → 回测 → 报告」的全链路。