RQData · FRED
本机文件 · 人工维护
数据模块 / 使用文档
统一登记、读取与更新研究数据。用配置描述数据的位置和形态,用稳定接口屏蔽 Parquet、JSON 与目录分区之间的差异。
架构介绍
数据模块位于所有研究流程的上游,以 DataConfig.ini 作为唯一注册表。业务代码只依赖统一的 Data Client,不直接感知文件位置、格式或供应商连接方式。
DataConfig.ini
路径 · 字段 · 更新器
Local / HTTP Client
Schema · Query · Update
因子 · 策略
回测 · 分析
配置描述“数据是什么、在哪里、怎样更新”;Reader 负责“怎样读取”;上层模块只使用稳定的数据集 ID。修改配置后需要重启数据服务,使注册表快照重新加载。
使用说明
在控制台打开「数据」模块。服务状态为运行中后,目录会从 DataConfig 注册表载入;先通过预览确认字段和日期覆盖。
auto 数据集可手动触发增量更新,也可加入每日计划;manual 数据集由人工维护,界面会显示原因。
在程序中使用数据集 ID 和日期范围,不拼接真实磁盘路径。大结果优先走 Python Client 或 Arrow HTTP 响应。
from quant_platform_sdk import ResearchClient
# 本机模式直接读取 DataConfig 和物理文件,不经过 HTTP。
research = ResearchClient.local("PlatformConfig.ini")
data = research.data.context(as_of="2026-09-18")
latest = data.latest(
"market_daily",
fields=["open", "close"],
order_book_ids=["000001.XSHE"],
)
history = data.history(
"market_daily",
lookback=20,
fields=["close"],
)
print(latest.head(), history.shape)业务代码只在组合根选择 local 或 remote;进入 context 后的查询方法、日期语义与返回 DataFrame 保持一致。
平台本机直接读文件
ResearchClient.local(PlatformConfig.ini)- Data 解析 DataConfig 与 Reader Adapter
- Factor 合并 FactorConfig、旧分组与 FactorLibrary
- 上传因子在本机计算时网络请求数为 0
其他电脑通过服务读取
ResearchClient.remote(…)- Data 请求 Data Service,Factor 请求 Factor Service
- Arrow 分页会自动协商服务端行数上限
- FRP 前必须配置鉴权网关,不直接暴露服务端口
import os
from quant_platform_sdk import ResearchClient
# 已安装平台 SDK 时,使用统一只读网关。
research = ResearchClient.remote(
base_url="http://82.156.35.38:18010",
token=os.environ["QUANT_RESEARCH_TOKEN"],
)
data = research.data.context(as_of="2026-09-18")
factors = research.factors.context(as_of="2026-09-18")
bars = data.history("market_daily", lookback=20, fields=["close"])
alpha = factors.latest("alpha_v3", fields=["KDJ_K"])
# 如果网关统一提供 /data 与 /factors,也可以写:
# 未安装平台 SDK 时,下载下方最小包,使用 client.py。available_dates(id)列出在 as_of 截止前可用的日期
latest_date(id)取得最近可用日期
previous_date(id, before=…)向前定位一个或多个可用日期
common_date(ids)取得多个数据集共同的最近日期
latest(id)读取 as_of 截止的最新截面
on_date(id, date)读取指定日期;可显式允许 previous fallback
history(id, lookback=…)读取受 as_of 约束的历史窗口
table(id)读取非日分区表或完整表
宏观长表可使用 macro_latest(dataset_id, series_ids=…, fields=…) 按 as_of 选择每个序列当时已发布的最新观测。所有查询均支持 fields、order_book_ids 或 series 筛选;不要在业务代码中拼接磁盘路径。
Client 可以发送 Bearer Token,但 8001 / 8002 / 8003 当前不自行校验令牌。通过 FRP 提供外网访问时,必须由前置 Gateway 完成 TLS、身份认证、授权、限流和审计;裸服务只监听本机地址。
自动更新未显式传入 end 时,北京时间 20:00 前默认更新到上一完成交易日,避免日终数据尚未产出造成误报。
上传规范说明
数据模块以配置登记为主。新增本机数据时,先按约定落盘,再在 DataConfig.ini 声明存储、日期和逻辑字段;敏感凭据只允许放在本机 secret.ini 或环境变量中。
数据集 ID 稳定、可读且全局唯一;路径相对数据根目录解析。禁止在研究代码中硬编码机器绝对路径。
[dataset.market_daily]推荐 Parquet。日频截面使用 YYYY-MM-DD.parquet;月分区使用 YYYY-MM.parquet 并在文件内保留 date。
layout = date_partitions明确 date、id、series、value 字段。股票日频数据通常以 (date, order_book_id) 保证唯一。
id_field = order_book_idauto 条目必须绑定已注册 updater;manual 条目说明维护原因。启动服务时会一次性校验完整配置。
update_method = auto日期格式使用 YYYY-MM-DD;同一主键不得重复;字段类型在不同分区间保持一致;目录中不要混入不符合 file_pattern 的临时文件。
接口说明
前端统一访问同源 BFF 路径 /api/data/…,由 Next.js 转发到本机服务。业务错误使用 JSON detail.code 与 detail.message 描述。
http://127.0.0.1:3000/api/data/catalog读取已启用的数据目录、分组和更新能力
↗/api/data/{datasetId}/schema查看字段名、类型与逻辑主键
↗/api/data/{datasetId}/preview预览受限行数的数据样本
↗/api/data/{datasetId}/query按日期、字段与证券范围查询数据
↗/api/data/updates触发一个或多个数据集的增量更新
↗/api/data/updates/tasks/{taskId}轮询后台更新任务进度与逐项结果
↗/api/data/updates/schedule读取或保存每日自动更新计划
↗请求成功同步结果或任务快照
参数不合法范围、字段或限制错误
资源不存在目录项、文件或任务缺失
契约校验失败类型或必填字段错误
执行失败上游或本机运行时错误
HTTP 接口与客户端下载
其他电脑通过只读网关获取数据和因子。公网入口为 http://82.156.35.38:18010,局域网入口为 http://10.7.12.69:8010;地址变动时修改客户端 config.json。网页 3000 端口用于文档与控制台。
- 安装 Python 3.11+,解压最小包。
- 把管理员提供的只读 Token 填入
token.txt。 - 执行
python test_connection.py验证 HTTP 与鉴权(仅需标准库)。 - 执行
python -m pip install -r requirements.txt,再运行python test_connection.py --full和python fetch_data.py demo。
包含 test_connection.py、client.py、fetch_data.py、config.json、requirements.txt、README.txt 和空 token.txt;不包含真实凭据、平台源码、数据文件或 Python。网关仅开放读取接口,SDK 的 table、common_date 等完整本机方法不在公网最小范围内。
股票逐笔与十档盘口
market_tick_trades 为逐笔成交,market_tick_orders 为逐笔委托,market_tick_quotes 为十档盘口快照。目前是 2025 年 9 月历史 CSV 的手工导入;请限定单日、单只证券并分页读取。
from client import Client, save
client = Client() # 从 config.json 和 token.txt 读取地址与凭据
trades = client.data(
"market_tick_trades",
start="2025-09-01", end="2025-09-01",
ids=["000001.SZ"], # 逐笔使用万得代码,日线使用 000001.XSHE
fields=["时间", "成交价格", "成交数量"],
limit=100,
)
save(trades, "output/trades.parquet")证券使用 000001.SZ / 600000.SH;原始字段(包括价格、数量和事件标志)按字符串保留,可能包含 NUL。价格缩放单位待核实,请勿自动除以 100 或 10000;推荐 Parquet 保留原值。逐笔记录不能以“日期 + 股票”作为唯一主键。完整字段与日期覆盖见接口文档。