DATA ROUTES · 9 PATHS IN ONE REPO
QuantsPlaybook 的数据门槛:9 种取数方式,README 只写了 2 种
代码能不能跑,取决于你能不能拿到数据——这是这个项目真正的分水岭。本页把仓库里实际存在的取数路径、凭据写法、离线数据与降级方案逐条列清楚。
- QuantsPlaybook 官方 README 只写「数据依赖 jqdata 和 tushare」。
- 实测至少并存 9 种取数方式,含自建数据库、DolphinDB 与私有模块。
- 4 个案例的数据只通过百度网盘分发(含提取码)。
- 6 个公开 issue 围绕
jqfactor导入报错——这是最高频的真实问题。
取数路径有哪些?
jqdatasdk 账号NINE ROUTES
QuantsPlaybook 有哪九种取数方式?凭据与代价对照
下表每一行都在仓库里有对应文件。看清「要什么」这一列,基本就能判断某个案例你跑不跑得动。
| 取数方式 | 仓库里的证据 | 需要什么 | 典型案例 | 代价 / 注意点 |
|---|---|---|---|---|
| 聚宽 JQData | jqdatasdk==1.9.8 出现在多个 requirements.txt;公开 issue 中有 4 个「拆分子任务」在讨论替换 jqdata/jqfactor | 聚宽账号(付费或试用) | 老案例(因子类居多) | 官方在 issue 里明确在讨论「替换为本地可安装方案」,说明这一层确实脆弱 |
| TuShare Pro(.env) | C-择时类/基于稀疏自编码器的指数择时/.env.example:TS_TOKEN= | TuShare Pro Token | 2026 年新增案例 | 写法最干净,推荐;token 获取地址官方写在模板注释里 |
| TuShare Pro(config.json) | 特征分布建模择时/scr/load_config.py 读取同目录 config.json 的 ts_token | 同上 | 特征分布建模择时 系列 | .gitignore 已忽略 config.json,需要自己创建 |
| TuShare Pro(源码常量) | D-组合优化/MLT_TSMOM/ts_data_service/config.py:TS_TOKEN: str = "token" | 同上 | MLT_TSMOM | 仓库里是占位值,必须自己改;改完记得别提交 |
| TuShare(自动重试封装) | 特征分布建模择时/scr/tushare_api.py:带无限/限次重试的 TuShare 类 | 同上 | 该系列案例 | 源码里默认 max_retry=0 表示无限重试,接口异常时会一直等——建议改成 10–100 |
| 自建 MySQL | 球队硬币案例 README 给出 mysql+mysqlconnector://用户:密码@ip:端口 模板与三张表结构 | 自己的行情/财务库 | 个股动量效应 / 球队硬币因子 | 需要自己把数据灌进 daily / adj_factor / daily_basic 三张表 |
| DolphinDB + 私有 DataFeed | 隔夜日间网络因子 README:DOLPHINDB_URI="dolphindb://user:password@host:port";.env.example 注明 DataFeed 为作者私有模块 | DolphinDB 实例或替代实现 | 隔夜与日间网络关系因子、部分新案例 | DataFeed 不随项目提供;缺失时回退开源 tushare 或模拟数据 |
| 百度网盘离线快照 | 4 个案例 README 给出网盘链接与提取码(筹码因子 / 球队硬币 / 均线收敛发散 / RRG) | 网盘账号 | 上述 4 个案例 | RRG 的快照约 1.1 GB+;文件不进 git,需手动放到指定目录 |
| 仓库内自带数据 | 文件树里有 parquet / csv / pkl(含 95 MB 分钟线、68.9 MB 因子表) | 无 | 另类 ETF 日内动量、企业生命周期、筹码因子等 | 仓库体积因此达到 1.36 GB(文件树合计),克隆慢 |
| 模拟数据回退 | 隔夜日间网络因子 README:「qlib 不可用,使用模拟数据替代」 | 无 | 依赖 qlib 的部分案例 | ⚠️ 能跑通 ≠ 有研究意义:结果是合成数据算出来的 |
依据:各案例 README 原文、配置模板、requirements.txt 与固定 commit 文件树。本站不复制网盘链接与提取码——它们属于作者的分发渠道,请到对应案例的 README 里查看,并遵守作者的许可声明。
TOKEN PATTERNS
TS_TOKEN 该写在哪里?QuantsPlaybook 四种写法
同一个项目里同时存在四种凭据配置方式。这不是设计,是历史遗留——但它决定了你改文件的位置。
| 写法 | 文件位置 | 代码怎么读 | 是否被 git 忽略 | 推荐度 |
|---|---|---|---|---|
.env + python-dotenv | 案例目录下的 .env(模板是 .env.example) | 环境变量优先于文件;案例代码读 TS_TOKEN | 是(data/ 与 .env 在忽略清单里) | 推荐:不与源码混在一起 |
config.json | 案例目录下的 config.json | load_config.py 用 json.load 读 ts_token | 是(.gitignore 明确忽略 config.json) | 可用,需自己创建文件 |
config.py 常量 | ts_data_service/config.py | from .config import TS_TOKEN(仓库内是占位字符串 "token") | 忽略清单里有 config.py,但该文件本身被跟踪 | 可用;注意别把真 token 提交上去 |
数据库连接串(config.py) | 案例目录 src/dataservice/config.py(需自己新建) | Config.windows_conn_str / linux_conn_str | 同上 | 仅在自建库场景使用 |
共同点:四种写法都把凭据放在案例目录内,不是仓库根。所以换案例就要重新配一次;另外 .gitignore 的忽略规则是 2025-12-14 才加上的,历史提交里已经跟踪的构建产物与配置仍留在仓库中。
OFFLINE SNAPSHOTS
QuantsPlaybook 没有数据账号怎么办?三条不买数据的路
没有付费数据账号时,仍然有可选项,但要清楚它们的边界。
| 路径 | 覆盖案例 | 数据形态 | 能做什么 | 不能做什么 |
|---|---|---|---|---|
| 百度网盘离线快照 | 相对旋转图RRG行业轮动(DuckDB 单文件,约 1.1 GB+,2022-09 起) | 行业日线、ETF 日线、成分股行情、ETF 持仓、行业成分 | 完整跑信号 → 组合优化 → 回测 → 报表(纯离线,缺数据时 fail-loud 抛错,不静默补数) | 换基准、扩窗口、补退市 ETF ——需要联网或新快照 |
| 百度网盘数据包 | 筹码因子(csv + qlib 二进制)、球队硬币因子(2013-01-01~2023-05-31)、均线收敛发散 | CSV / qlib 数据目录 | 按案例说明把数据放到指定目录后跑 Notebook | 数据区间被快照固定,不能自由延长 |
| 仓库内自带数据 | 另类 ETF 日内动量(分钟级 parquet)、企业生命周期(因子表)、筹码因子(mlruns 产物) | parquet / csv / pkl | 直接读,无需外部权限 | 数据已过期(多为 2022–2023 年切片),且 pkl 属实验产物,字段含义需要自己确认 |
| 模拟数据回退 | 依赖 qlib 但未配数据库的案例 | 合成序列 | 验证代码流程能否走通 | 没有任何研究意义:指标与结论都是合成数据的产物 |
口径提醒:离线快照的价值在于「方法可复现」,不在于「结论可引用」。RRG 案例自己就写明该项目「回测数字不等同研报」,并列出 5 条已知偏离(窗口更短、扩散指标用流通市值、ETF 暴露只见前十大持仓、生存偏差、候选池口径不同)。
JQFACTOR ISSUES
jqfactor 导入报错是什么原因?6 个 issue 说明
如果把 22 个公开 issue 按主题归类,jqfactor 相关的一组最集中——它也是「数据层坏掉」的典型样本。
| Issue | 类型 | 内容 | 对使用者的含义 |
|---|---|---|---|
| #10 / #13 | open 报错 | 「导入 jqfactor 报错」 | 直接症状:拿到代码但连数据模块都导入不了 |
| #14 | open 子任务 | 「解决 jqfactor 本地运行问题」 | 作者承认这是待解决问题,不是配置错误 |
| #15 | open 子任务 | 「更新文档说明 jqfactor 使用环境要求」 | 文档没有说清前置条件 |
| #16 | open 子任务 | 「为 jqfactor 提供本地模拟实现」 | 正在做替代方案,说明原依赖不可控 |
| #17 | open 子任务 | 「替换 jqdata/jqfactor 依赖为本地可安装方案」 | 维护方向是「去 jqdata 化」——与老案例的现状冲突 |
| #5 | closed 提问 | 「关于数据问题」 | 数据问题不是个例 |
| #4 | closed 提问 | 「无法下载项目」 | 与仓库 617 MB / 1.36 GB 的体积直接相关 |
其余与「复现偏差」直接相关的两个 open issue 很值得一读:#1「为何凸显因子的 IC 报告和几份金工报告不同」、#2「为什么 ICU 均线采用 5 日回看日期比原研报效果要差」——作者自己也在问「为什么对不上」,这正是 QuantsPlaybook 最诚实、也最有价值的地方。
FALLBACK PLAN
QuantsPlaybook 没有付费账号怎么降级?三种方案对比
降级不是「凑合跑」,而是换一个能产出有效结论的目标。下表按你的目的给方案。
| 你的情况 | 可行方案 | 代价 | 仍然能得到的结论 |
|---|---|---|---|
| 想跑通流程、验证环境 | 跑离线快照案例(RRG)或自带数据的案例 | 研究区间被快照固定(RRG 为 2022-09 起) | 完整的信号 → 组合 → 回测链路是否可用 |
| 想学因子怎么写 | 只读源码与 Notebook:scr/ 下的算子与 Qlib 表达式部分不依赖数据权限 | 无法验证 IC / 分组收益 | 因子定义与实现细节(这部分是项目最扎实的资产) |
| 想做可用的轻量分析 | 把数据层换成开放的 A 股数据源,按案例逻辑重写取数 | 需要自己对齐字段与口径(复权、停牌、成分股) | 基于自己口径的因子/择时结果 |
| 想直接得到研报结论 | 没有可行方案 | 数据区间、股票池、复权方式、成本口径任一项不同,结论都可能反向 | 只能得到「方法可复现」级别的结论 |
先确认案例的「最小数据需求」
很多案例其实只需要指数日线或单只票的行情。先读它的取数与预处理单元格,再判断自己能不能凑齐,不要一看到 Qlib 就放弃。
把口径写下来再跑
复权方式、股票池、调仓频率、成本与滑点四项必须记录。RRG 案例的偏离分析里,一半以上的差异来自这几项而不是算法。
用授权更清晰的数据源替代
如果你只是要 A 股行情与财务,本机的 akshare-finance(无需 Key)与 tushare-finance(需 Token)就能覆盖大部分取数需求,再按案例逻辑自己做因子实现。
RECORD THESE
复现结论怎么才可检验?需要记录的四个口径
项目自带的偏离评估文档之所以有价值,是因为它把差异写清楚了。你复现时也应该做同一件事。
写清用的是 JQData / TuShare Pro / 自建库 / 网盘快照中的哪一种,以及该源对复权与停牌的处理口径。预期输出:一行来源说明 + 该源已知缺陷。
包括指数成分股是否按历史时点还原(否则就有生存偏差)、样本起止日期。预期输出:`池子 + 区间 + 还原方式` 三要素。
调仓频率、成交价(收盘/次日开盘)、手续费、滑点、涨跌停与 T+1 是否处理。预期输出:一张 5 行的假设表——SAE 案例的主回测就明确写着「零费用与滑点」。
把「对不上」的原因写成清单:窗口、口径、数据源、成本、样本外表现。预期输出:一段能独立阅读的偏差说明,而不是一句「结果有偏差」。
依据:RRG 案例 README 的绩效对照与 5 条偏离、SAE 案例使用指南的「如何理解结果」章节。本站把这套流程单独成节,是因为它比多跑十个案例更能提高你的复现质量。
FAQ
QuantsPlaybook 数据与凭据常见问题
QuantsPlaybook 需要哪些数据源?
官方 README 只写「数据依赖 jqdata 和 tushare」,但本站实测仓库里至少并存 9 种取数方式:聚宽 JQData、TuShare Pro(4 种凭据写法)、自建 MySQL、DolphinDB + 作者私有 DataFeed、百度网盘离线快照、仓库内自带数据,以及无权限时的模拟数据回退。同一个案例用哪一种,要看它自己的 README,不能看根 README。
QuantsPlaybook 我需要付费数据账号才能用吗?
取决于你选哪个案例。RRG 行业轮动已经做成纯离线快照(数据由作者通过网盘分发,约 1.1 GB+),不需要任何账号;另类 ETF 日内动量、企业生命周期等案例自带数据。但因子构建类里的多数案例依赖 JQData 或自建数据库,没有账号就跑不到有意义的输出。
QuantsPlaybook jqfactor 导入报错是什么原因?
这是仓库里最集中的一类问题:公开 issue 中 6 个围绕 jqfactor(#10、#13 两个报错,加上 #14–#17 四个「拆分子任务」),内容分别是解决本地运行、更新环境要求文档、提供本地模拟实现、把 jqdata/jqfactor 替换为本地可安装方案。换句话说,这是作者已知且尚未解决的依赖问题,不是你的配置错误。
QuantsPlaybook TS_TOKEN 到底写在哪里?
四种写法并存,位置都在案例目录里而不是仓库根:①.env 的 TS_TOKEN(新案例,推荐);②config.json 的 ts_token(特征分布建模择时系列);③config.py 里的常量(MLT_TSMOM,仓库里是占位值 "token");④自建数据库连接串(球队硬币因子)。改完记得确认没被提交上去。
QuantsPlaybook 为什么有的案例能跑但结果不能用?
两种情况:一是依赖 qlib 但未配数据库时,代码会回退到模拟数据(隔夜日间网络因子案例的 README 明确写了这一点),结果是合成序列算出来的;二是用了仓库自带的过期数据切片(多为 2022–2023 年)。判断方法:看输出里有没有日期明显滞后、或数据生成逻辑写着 synthetic / mock。
QuantsPlaybook 网盘数据链接在哪里?
本站不复制网盘链接与提取码,因为它们属于作者的分发渠道,也可能随时失效或调整。请到对应案例的 README 里查看:筹码因子、个股动量效应的识别及球队硬币因子、开源证券形态识别(均线的收敛与发散)、相对旋转图 RRG 行业轮动(其 data/说明.md 里有下载说明与快照 schema)。使用前请阅读作者的许可声明。
QuantsPlaybook 换用其它数据源可行吗?
字段契约层面可行,但需要自己做三件事:把字段名与单位对齐、把复权与停牌口径对齐、把成分股按历史时点还原(否则引入生存偏差)。案例自己的偏离评估文档显示,这几项差异往往比算法差异影响更大——所以换源之后必须重新写偏差说明,不能直接沿用研报结论。