← 返回 SkillHub

bighf-builder-skills-v1

作者 yangduoduo05 global

BigQuant 高频因子仓库开发指南。在用户需要创建、迁移、审查高频因子 Builder、Schema、Mixin、测试用例,或查询高频数据时使用此 skill。当用户提到高频因子、高频数据、tick 数据、分钟数据、L1/L2 行情、快照数据、委托队列、成交明细、逐笔数据、因子计算、因子构建、因子审查、因子验证、IC 检验、ICIR、Builder 迁移、HF Builder、HF 数据源等关键词时,即使没有明确要求,也应主动使用此 skill 来确保代码符合 bighfwarehouse 项目规范。

来源:SKILL.md
# BigHFWarehouse 高频因子开发指南

BigQuant 高频因子仓库,基于高频原始数据(tick/分钟级)**构建日频因子**并存储。因子输出通常是日频的,原始输入数据才是高频的。基于 `hfwarehouse/builder/` 架构。

## 频率约定(强制)

**所有因子必须按日度交易日严格计算,每个交易日输出一条记录。**

研报或论文中为减少计算量,有时仅计算每月最后一个交易日的数据。本项目不采用此裁剪策略:

- 必须对每个交易日独立完整地计算因子值,不得跳过任何交易日
- 计算逻辑可以使用回溯窗口(如过去 20/60 个交易日),但输出粒度必须是**逐日**的
- 禁止使用月末值向前填充(forward fill)替代日度计算

> 原因:仓库下游消费方统一按日频对齐,缺失交易日会导致数据对齐异常。

## 项目约定

- Python >= 3.11
- 核心依赖: polars, numpy, pyarrow, pydantic, dai
- DataFrame **必须**使用 polars (`dai.query(sql).pl()`),禁止使用 pandas
- 依赖管理: `uv sync`
- Lint/格式化: `prek run -d <目标目录>`
- 审核阶段:新建因子一律落 `hfwarehouse/builder/staging/`,**审核通过后**才搬到 `output/` 并注册每日增量任务。agent 不得自行判定审核通过。两个阶段都可以写入 DAI(调试期也需要落库做因子分析检验),详见 `references/builder.md`「阶段目录:staging 与 output」

## dai 数据查询

高频数据量极大,查询有三条铁律:

1. **禁止全表扫描** — 永远不使用 `full_db_scan=True`
2. **必须用日期时间过滤** — 高频表过滤值必须包含时间部分(如 `'2024-01-02 00:00:00.000'`),仅用日期(`'2024-01-02'`)无法覆盖当天全部高频数据;日频表也可统一使用带时间部分的字符串,与高频表保持一致
3. **按需查询** — 只查需要的表、需要的列、需要的时间范围,不多查,不扩大范围

```python
import dai

# 正确: 过滤值包含时间部分,只选需要的列
date = "2024-01-02"
sql = f"""
    SELECT date, instrument, open, close, volume
    FROM my_hf_datasource
    WHERE date >= '{date} 00:00:00.000'
      AND date <= '{date} 23:59:59.999'
"""
df = dai.query(sql).pl()

# 错误: 过滤值仅写日期,无法覆盖当天全部高频数据
# df = dai.query("SELECT date, instrument FROM my_hf_datasource WHERE date = '2024-01-02'").pl()

# 禁止: 全表扫描 (高频数据量太大)
# df = dai.query(sql, full_db_scan=True).pl()
```

## 参考文档与触发规则

| 场景                                        | 操作                                                                                                                                                                                                                                                   |
| ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 构建新 Builder                               | 查 `references/sources/{datasource_id}.md` 了解原始表字段;读 `references/builder.md` 按步骤实现;若有**明确的**因子出处(用户提供或 PDF 中可直接读到),将其附加到 schema 对应因子字段的 `description` 末尾(格式:`。来源:{作者}. {发表日期}. {标题}. {机构}`,**发表日期尽可能精确到日**以锁定系列研报中的具体一篇),不得猜测或推断                      |
| 用户提供 PDF 研报                               | 阅读 `references/research-report.md`;读 PDF 时**顺手把发布日期抓下来**(首页署名行 / 页眉页脚 / 文件名,精确到日),它是 `## 文献来源` 与 schema 来源信息的必填项,漏了要重新翻 PDF;**动手前先做「第 0 步:查重」**——扫 `staging/` 与 `output/` 目录初筛,再逐个打开命中表的 `{datasource_id}.md` 比对 `## 文献来源` 小节,确认这篇研报的因子是否已建过,只构建未建部分 |
| 编写或修改 `{datasource_id}.md` 因子构建文档         | 阅读 `references/research-report.md`「markdown 文件格式」;文档必须含 `## 文献来源`(来源明确时)、`## 表结构`(表名 + 主键 + 逐字段类型与含义)、`## 依赖数据`(逐张上游表 + 频率 + 用到的字段 + 用途)三个顶部小节,研报复现还须含 `## 复现核对`,末尾须有 `## 示例数据` 小节(含 `{{sample_data}}` 占位符)                                          |
| 需要说明本表依赖哪些前置数据表                           | 阅读 `references/research-report.md`「`## 依赖数据` 小节」;依据 `builder.py` 中 `_build()` 的 SQL,把 `FROM` / `JOIN` 到的每张表逐行写进 `## 依赖数据` 小节,一张不漏,字段逐个列全,不得凭因子含义猜表                                                                                                   |
| 研报复现完成 / 跑完 IC 检验                         | 按 `references/research-report.md`「`## 复现核对` 小节」把本项目结果与研报原文数值逐因子对照写进 `{datasource_id}.md`,供人工判断复现质量;对不上如实写差异,不得调参数去凑研报                                                                                                                                |
| 生成或修改 Builder 代码后                         | 阅读 `references/code-review.md` 逐项自检 → 阅读 `references/build-validation.md` 按三步完成构建验证                                                                                                                                                                  |
| 用户要求审查代码                                  | 阅读 `references/code-review.md` 逐项检查                                                                                                                                                                                                                  |
| 迁移 Builder                                | 读源文件 → 按项目约定适配后写入目标目录 → 阅读 `references/code-review.md` 自检;阅读 `references/build-validation.md` 按三步完成构建验证                                                                                                                                              |
| 需要编写测试                                    | 阅读 `references/testing.md`                                                                                                                                                                                                                           |
| 编写 DAI SQL 因子计算逻辑                         | **必须先查** `references/dai_functions.md`,从中选取 c_/m_/m_ta_ 函数;**严禁凭记忆写函数名**,所有函数名必须在文档中能找到;能用 SQL 表达的因子逻辑优先在 SQL 中实现,仅当 SQL 难以表达时才用 Python 补充                                                                                                           |
| 查询数据源字段                                   | 查 `references/sources/{datasource_id}.md`                                                                                                                                                                                                            |
| 用户要求提交增量 / 因子审核通过                         | 阅读 `references/builder.md`「阶段目录:staging 与 output」,按流转动作把目录从 `staging/` 搬到 `output/` 并改 notebook 导入路径                                                                                                                                                 |
| 用户要求入库 / 写入因子数据做分析                        | 直接运行 `{datasource_id}.ipynb`,`staging/` 与 `output/` 都允许入库;无需搬目录                                                                                                                                                                                      |
| 回填历史数据 / 写 notebook 历史 cell               | 历史区间**必须按自然年分批**:每年 `_build` 后立即 `dai_write`,禁止单次 `_build(start, end)` 跨多年;见 `references/builder.md`「Notebook 入口」                                                                                                                                    |
| 用户要求更新文档 / 改完 `{datasource_id}.md` 要同步到平台 | 运行 `{datasource_id}.ipynb` 第三段的 `update_docs()`,详见 `references/builder.md`「数据源文档更新」;不必重跑因子                                                                                                                                                           |
| 创建 / 修改 notebook                          | notebook 第四段是 `AlphaMiner` 因子分析与单因子回测模板,新建因子时**必须照抄写入且整段保持 `# ` 注释**、默认不运行;模板与占位改法见 `references/builder.md`「Notebook 入口」Cell 7/8                                                                                                                     |
| 用户要求做因子分析 / 单因子回测 / 更深入的因子检验              | 取消 notebook 第四段的注释,按当前因子改 `alpha_name`、`alpha_sql`、`factor_direction` 与日期区间后运行;前提是因子已入库                                                                                                                                                              |

`cn_stock_prefactors` 是聚合日频 view,包含股票名称、股本、OHLC 等绝大多数日频字段,能用时优先使用,避免查多张原始表。