Dolphindb report factor replication
Skill dolphindb/DolphinX_Skill/dolphindb-report-factor-replication
Use when handling DolphinDB report factor analysis and replication tasks, including extracting candidate factors from research reports, extracting a single factor's logic and formula, auditing data-source fields, generating extraction JSON/scripts, choosing MR versus Execute mode, generating DolphinDB factor code, reusing built-in indicator modules, applying common factor replication patterns, and checking for look-ahead leakage or output-contract violations.From its SKILL.md
npx -y skills add dolphindb/DolphinX_Skill --skill dolphindb-report-factor-replicationAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 7 stars7 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
SKILL.md
11.5 KB, ~3.8k tokens by cl100k_base, as published. Nobody here has run it
DolphinDB 研报因子复现
使用目标
将研报因子复现任务统一处理为一条可审计流水线:因子发现、单因子逻辑抽取、字段审计与取数、MR/Execute 判定、DolphinDB 代码生成、内置指标复用和复现原则检查。
不要一次性加载所有参考文档。先判断用户请求处于哪个阶段,再读取对应 references/ 文件。只有用户要求完整端到端复现时,才按流程逐步读取多个阶段文档。
阶段路由
| 用户意图 | 读取文件 | 产物 |
|---|---|---|
| 从整篇研报提取所有候选因子 | references/01-all-factors-json-extraction.md | summary + factors 纯 JSON |
| 抽取单个因子的定义、经济含义、变量解释和公式 | references/02-report-factor-logic-extraction.md | function=pre-result JSON |
| 把因子公式映射到真实数据源字段,判断字段是否足够,生成取数 SQL 或取数脚本 | references/03-factor-data-extraction.md and references/data-extraction/ | fieldCheck JSON;extractData(args, "string") 生成的 dataSql;完整通道额外产出取数脚本 |
| 字段已给出或看似已确认,需要直接写单因子代码 | references/03-factor-data-extraction.md | 快速 fieldCheck JSON + dataSql;通过后进入 05 或 06 |
| 判断因子走 MR 还是 Execute | references/04-mr-execute-mode-selection.md | MREligible 参数与最终模式 |
| 生成普通 Execute 因子脚本 | references/05-execute-code-generation.md | 四列 result 表脚本 |
| 生成 MR 因子脚本 | references/06-mr-code-generation.md | mapFuncString, dbName, tbName, dataSql 与完整脚本 |
| 复用内置技术指标、Alpha、盘口或逐笔函数 | references/indicator-cookbook.md | 模块加载与 module::function 调用 |
| 需要常见 DolphinDB 因子计算写法 | references/replication-patterns.md | 稳定代码片段与计算模式 |
| 检查未来数据泄露、字段幻觉、样本口径和输出结构 | references/replication-principles.md | 风险检查与修正建议 |
端到端流程
当用户要求“复现研报因子”“从研报生成 DolphinDB 因子代码”或类似端到端任务时,按以下顺序执行:
- 读取
01-all-factors-json-extraction.md,从整篇研报提取候选因子,除非用户已经指定单个因子。 - 读取
02-report-factor-logic-extraction.md,整理目标因子的经济含义、变量、窗口、公式和输出频率。 - 读取
03-factor-data-extraction.md,只基于coldefs、testsql和样例数据做字段审计并生成 fieldCheck JSON。字段审计和 fieldCheck JSON 不可跳过;所有进入代码生成的场景都必须调用extractData(args, "string")生成dataSql,快速通道只省略额外取数脚本。 - 读取
replication-principles.md,检查字段、时间边界、样本口径和未来数据泄露风险。 - 读取
04-mr-execute-mode-selection.md,准备并调用starfish::facplfRun::MREligible。最终模式以该函数返回为准。 - 根据模式读取
05-execute-code-generation.md或06-mr-code-generation.md生成代码。 - 生成代码时按需读取
indicator-cookbook.md和replication-patterns.md,优先复用内置函数和稳定向量化模式。
如果任一阶段缺少必要输入,先说明缺口;不要编造字段、数据源、函数签名或研报未给出的公式。
全局硬约束
- 只使用研报原文、用户输入、
coldefs、testsql、样例数据或已确认文档中出现的信息。 - 不得凭常见字段名创造数据源字段。
- 因子在
tradeTime = t的值只能依赖t或之前可获得的数据。 - 未来收益、评价标签、IC、IR、t-stat、分组收益等只能用于评价,不能进入因子值计算。
- 时间序列计算前必须按证券和时间排序。
- 横截面标准化、排名、中性化必须在同一时点内完成。
- 生成 DolphinDB 因子结果时,最终输出列必须严格为
tradeTime,securityId,factorname,value。 - 多返回值内置指标函数必须显式拆包。
- MR 模式必须经过
starfish::facplfRun::MREligible判定;经验规则只能用于准备参数,不能替代返回结果。 - 字段不足时,明确输出缺失字段和原因,不生成虚假的可执行因子代码。
- 即使字段看起来足够或用户已经给出字段映射,也必须读取
03-factor-data-extraction.md,并基于coldefs、testsql或样例数据生成 fieldCheck JSON 后再进入代码生成。 - 最终因子计算逻辑必须封装为单一核心函数;字段入参和表入参模式使用
def calcFactor(...) {},Panel 模式使用可被panel_call调用的 panel 因子函数。函数入参必须来自 fieldCheck JSON 的字段映射。 - 05/06 不得重新手写取数 SQL;必须先在 03 中用
extractData(args, "string")["result"]得到dataSql,后续代码基于该字符串取数或构造sqlDS。快速通道也要产出dataSql,只是不用额外生成取数脚本。 - 公式窗口、lag、rank 窗口、平滑周期、阈值等非字段参数必须从 fieldCheck 字段入参中分离,作为核心函数的普通参数,并提供默认值;默认值优先来自研报公式,若研报未给出则在注释中标明为待确认默认值。
代码生成策略
生成 DolphinDB 代码时:
- 优先选择向量化写法,例如
select、update、context by、group by、滚动窗口函数。 - 遇到 RSI、MACD、ATR、BOLL、Alpha101、Alpha191、盘口快照或逐笔成交类公式,先查
indicator-cookbook.md。 - 遇到收益率、滚动窗口、横截面排名、中性化、缺失值处理、字段对齐或四列输出,先查
replication-patterns.md。 - 代码必须定义并调用单一核心因子函数:字段入参和表入参使用
calcFactor,Panel 模式使用可被panel_call调用的 panel 因子函数。 - 核心函数入参形态必须由因子计算依赖关系判断,不能由用户提示或测试用例名称直接决定。
- 历史因子计算是主交付目标;流计算兼容性只作为函数边界设计参考,不替代 Execute/MR 历史脚本。
- 单个计算层面使用 SQL 字段入参
def calcFactor(field1, field2, ..., param=default):可对应普通逐行select、保持原频的context by,或降频聚合的group by。 - 同一层面同时包含时序计算与截面计算时使用 Panel 模式:因子函数形态为
def FactorName(field1, field2, ..., window=20),字段参数语义是时间 x 证券矩阵,窗口等普通参数必须带默认值,由panel_call(rawdata, ...)负责长表转 panel、调用函数、再转回四列表。 - 多个计算层面或多阶段中间结果使用
def calcFactor(tb, param=default),例如先分钟聚合到日频、再做 20 日滚动,或需要多个不同粒度/分组阶段。 - 非规则分组、行业中性化、复杂聚合、非规则对齐等如果无法表达为单层 SQL 字段入参,也使用
def calcFactor(tb, param=default)。 - WorldQuant/Alpha 风格函数如果本身以 panel 矩阵为字段入参并返回 panel 矩阵,优先使用
panel_call历史计算模板,不要直接改写成calcFactor(tb);panel_call的rawdata必须来自 03 阶段dataSql = extractData(args, "string")["result"]执行后的rawData。 - 脚本需要中文注释,说明金融逻辑、窗口、排序、分组、空值处理和输出整理目的。
- 禁止
try-catch掩盖错误。
calcFactor 入参判定规则
判断依据是计算层级,不是表数量、频率数量或用户提示名称。
- 使用 SQL 字段入参
def calcFactor(field1, field2, ..., param=default):只涉及单个计算层面。包括逐行公式、单次context by保持原频的时序滑动/聚合、单次group by降频聚合。 - 使用 Panel 模式
def FactorName(field1, field2, ..., param=default) + panel_call(rawdata, ...):同一层面内同时存在时序计算和截面计算,或直接复用 WorldQuant/Alpha 风格矩阵函数;输入和输出保持时间 x 证券矩阵。 - 使用表入参
def calcFactor(tb, param=default):涉及两个及以上计算层面、多个不同粒度/分组阶段、必须复用中间表,或无法表达为单层 SQL 字段入参。 - 多数据源或跨频率 join 本身不构成表入参条件;如果 join 后仍是单层逐行、单层
context by或单层group by,仍使用 SQL 字段入参。 - 只涉及时序滑动/滚动/滞后,不构成 Panel 条件;优先使用 SQL 字段入参,并在最终 SQL 中使用
context by securityId。 - 只涉及一次降频聚合,不构成 TB 条件;优先使用 SQL 字段入参,并在最终 SQL 中使用
group by生成降频结果。 - 时序计算结果再做同一时点截面 rank/标准化时,使用 Panel 模式。
- 先做一个粒度的聚合,再在另一个粒度做窗口/聚合时,使用 TB 入参。
- panel 模式的
rawdata应为runSQL(dataSql)的结果。 - 公式中的窗口、lag、阈值、平滑周期等是函数普通参数,不是 fieldCheck 字段;必须写成带默认值的参数,例如
def RollingFactor(close, window=20)或def calcFactor(close, preClose, threshold=0.02)。 - 如果无法确认是否存在跨行依赖,先在交付中说明不确定项;不要为了简化而强行使用字段入参。
输出选择
根据当前阶段输出对应格式:
- 因子发现阶段:只返回可解析 JSON,不加代码块。
- 单因子逻辑阶段:返回
function=pre-resultJSON。 - 字段审计阶段:所有可继续的场景都必须输出 fieldCheck JSON 和
dataSql = extractData(args, "string")["result"]生成的取数 SQL;复杂取数场景可按需额外输出单文件取数脚本;字段不足时输出缺失原因。 - 模式判定阶段:输出
MREligible参数、调用结果和选择理由。 - 代码生成阶段:输出完整 DolphinDB 脚本,并保证最终结果表结构符合四列契约。
- 审查阶段:优先列出违反未来数据、字段真实性、模式选择或输出结构的具体问题。
参考文件
references/01-all-factors-json-extraction.md:全量候选因子 JSON 提取。references/02-report-factor-logic-extraction.md:单因子研报逻辑与公式抽取。references/03-factor-data-extraction.md:快速 fieldCheck JSON、字段审计和可选取数脚本生成。references/data-extraction/:数据抽取脚本资源,包括extractData.dos、example.dos和example.json。references/04-mr-execute-mode-selection.md:Starfish MR/Execute 判定。references/05-execute-code-generation.md:Execute 因子脚本规范。references/06-mr-code-generation.md:MR 因子脚本规范。references/indicator-cookbook.md:内置指标、Alpha、高频、盘口和逐笔模块调用。references/replication-patterns.md:常见 DolphinDB 因子复现代码模式。references/replication-principles.md:防未来数据泄露与复现边界原则。
What ships with it: 12 files
90.0 KB alongside SKILL.md
references/
- 01-all-factors-json-extraction.md2.8 KB
- 02-report-factor-logic-extraction.md1.3 KB
- 03-factor-data-extraction.md9.0 KB
- 04-mr-execute-mode-selection.md5.5 KB
- 05-execute-code-generation.md13.7 KB
- 06-mr-code-generation.md10.0 KB
- data-extraction/example.dos10.5 KB
- data-extraction/example.json4.6 KB
- data-extraction/extractData.dos6.8 KB
- indicator-cookbook.md12.2 KB
- replication-patterns.md9.9 KB
- replication-principles.md3.6 KB
Gives 0 of the 12 instructions most docs writing skills give in ~3.8k tokens
Counted across 1,637 of the 3,044 authors here whose files we hold, read 2026-08-07
- Announce the skill at startin 54 of 1637, across 26 files
- Convert legacy doc files before editingin 45 of 1637, across 7 files
- Predict questions readers might askin 42 of 1637, across 4 files
- Generate clarifying questions for initial contextin 42 of 1637, across 3 files
- Create document scaffold with placeholder textin 42 of 1637, across 3 files
- Brainstorm content options for each sectionin 42 of 1637, across 3 files
- Test the document with a fresh context-less instancein 42 of 1637, across 3 files
- Include exact file paths in every taskin 42 of 1637, across 15 files
- Ask interview questions one at a timein 42 of 1637, across 27 files
- Apply surgical edits during refinementin 41 of 1637, across 2 files
- Offer structured workflow or freeformin 40 of 1637, across 1 file
- Ask for document meta-contextin 40 of 1637, across 2 files
Said here and by no other author read
- skip field audit only when writing a single factor
- generate fieldCheck JSON before writing code
- use MREligible to determine final mode
- generate dataSql before writing factor code
- encapsulate final logic in a single core function
- separate non-field parameters into function defaults
Grouped from the skills themselves: near-identical wordings counted once, and counted by distinct author, so one author publishing three of these counts once. Length counted with cl100k_base; the agent that loads this file may tokenize it differently.