Files
ProStock/docs/factor_design.md

89 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 🚀 量化因子计算框架抽象设计与实施蓝图
## 一、 系统架构设计(四层解耦模型)
本系统采用严格的分层架构,每一层只需关注自己的输入与输出,层与层之间通过标准化的数据结构(如抽象语法树、需求清单、物理执行图)进行通信。
### 1. 领域特定语言层DSL Layer / 用户层)
* **职责**:提供对量化研究员极度友好的因子表达式编写接口,屏蔽所有底层计算引擎和数据库的痕迹。
* **输入**:研究员编写的数学与逻辑表达式。
* **输出**:纯粹的、无状态的**抽象语法树AST**。
* **边界约束**:本层绝对不允许依赖任何外部数据处理库。它只负责描述“计算逻辑是什么”,不涉及“怎么算”和“数据在哪”。
### 2. 编译与分析层Compiler Layer / 解析层)
* **职责**:接收 DSL 层生成的 AST进行语法树分析与优化。
* **核心动作 1依赖提取**。遍历语法树,找出所有的“叶子节点”(即基础数据字段),生成全局数据需求清单。
* **核心动作 2图优化可选**。识别重复的子表达式结构,进行合并计算标记。
* **输出**结构化的数据依赖清单Set/List和经过校验的 AST。
### 3. 动态数据路由层Data Router Layer / IO 层)
* **职责**:充当量化系统与底层多表数据库之间的桥梁。
* **核心逻辑**:基于元数据字典(记录字段所属的数据库表及数据频度),将分析层传递的“数据需求清单”转化为对数据库的最优查询指令。
* **输出**在内存中组装好的、经过严格时间对齐与防未来函数处理的、极简的数据上下文Data Context
### 4. 物理执行引擎层Execution Engine / 计算层)
* **职责**:将抽象的计算逻辑映射到具体的硬件或高性能计算库(如 Polars/向量化引擎)上并执行。
* **核心逻辑**:遍历 AST将其翻译为物理引擎的执行算子。在这个翻译过程中**系统隐式地强制注入量化计算的安全规则**(如截面分组、时序分组)。
* **输出**:最终的因子计算结果(面板数据表)。
---
## 二、 核心机制的具体实现逻辑(非代码描述)
为了让 AI 准确理解你的意图,你需要向 AI 阐明以下四个核心逻辑的运作机制:
### 1. 表达式树的生成机制 (符号化运算)
* **逻辑说明**:定义基础的变量节点(代表底层字段)和操作节点(代表加减乘除或函数)。通过重载面向对象语言的原生运算符(如算术运算符、比较运算符),使得变量节点参与运算时,不会抛出错误或执行计算,而是生成一个新的、包含左右子节点和操作符的父节点。
* **结果**:一个复杂的数学公式最终在内存里会变成一棵树状的数据结构。
### 2. 动态 SQL 生成与按需加载机制
* **逻辑说明**:系统初始化时,加载一次数据库元数据(表名、列名、更新频率),形成路由字典。当收到需求清单时,系统不使用 `SELECT *`,而是通过路由字典找到字段对应的表,动态拼接 `SELECT [必要关联键], [需求字段] FROM [表名] WHERE[时间与股票池过滤]`
* **结果**:极大降低数据库的 I/O 压力和网络传输负载。
### 3. 数据对齐与防未来函数机制(极其重要)
数据在内存中合并时,必须根据表的“频度属性”采取不同的关联策略:
* **同行频表(如日频基础与日频行情)**:以基准时间轴为左表,严格按照 `[资产标识, 交易日]` 进行精确匹配连接。
* **低频事件表(如财务报表)**:绝不能按自然日期或报告期关联。必须以“财报实际披露日”作为右表时间键,采用**“就近向后寻找匹配Asof Join / Point-in-Time Join”**策略。即某一天的财务数据,只能使用该日期之前(含当天)最新发布的那份财报。
* **防错铁律**:拼表完成后,必须强制按照 `[资产标识, 交易日]` 的优先级进行升序排序,为后续的滑动窗口计算提供物理连续性保障。
### 4. 算子翻译与引擎方言注入机制
物理层在将 AST 翻译为引擎执行图时,必须自动附加以下安全约束,这是研究员无需关心但系统必须保证的:
* **时序算子(如移动平均、动量)**:翻译时,必须向引擎下达强制指令——“本计算窗口必须被严格限制在单一资产的边界内”。
* **截面算子(如截面排名、行业中性化)**:翻译时,必须向引擎下达强制指令——“本计算必须在同一个交易日切片内横向展开”。
---
## 三、 Vibe Coding 实施与 Prompt 投喂计划
在利用 AI 编写代码时,建议按照以下阶段逐步进行(可作为每个阶段发给 AI 的指令纲要):
### 里程碑 1构建抽象语法树引擎 (DSL & AST)
* **任务指派**:要求 AI 设计一套纯粹的表达式树数据结构。包含基础节点类、变量节点类、二元/一元操作节点类、以及函数调用节点类。
* **验收标准**:通过重载运算符,可以随意组合变量(如 A, B, C并且编写一个简单的打印函数能够以可视化的方式或 JSON 结构)输出这棵树的层次关系。绝不包含任何第三方数据处理库。
### 里程碑 2实现依赖解析器 (Compiler)
* **任务指派**:要求 AI 编写一个树遍历器(如使用 Visitor 模式)。该遍历器接收里程碑 1 产生的树根节点,递归访问所有分支,收集所有叶子节点(变量节点)的名称。
* **验收标准**:输入一个深层嵌套的复杂公式树,解析器能够准确、去重地返回该公式依赖的所有底层基础字段名称列表。
### 里程碑 3构建元数据路由与动态组装器 (Data Router)
* **任务指派**:要求 AI 设计一个数据上下文管理器。
1. 实现注册机制,能接收不同表的数据字典和频度属性(日频或 PIT 低频)。
2. 根据里程碑 2 提取的依赖列表,自动分配表归属,并生成最小化拉取数据的伪代码或抽象 SQL 查询计划。
3. 阐明并在代码结构中实现不同频度数据的合并对齐逻辑(精确连接与就近前向连接),以及最后的全局强制排序逻辑。
* **验收标准**:输入几个测试字段,管理器能正确输出不同表的查询指令清单,并展现合并逻辑的抽象流程。
### 里程碑 4构建物理引擎翻译器 (Translator)
* **任务指派**:指定一个高性能计算库(如 Polars。要求 AI 编写一个翻译层,接收里程碑 1 的树节点,递归转化为该计算库的原生表达式对象。
* **验收约束**:在这个环节,要求 AI 必须在翻译时序函数时自动附加资产分组属性,在翻译截面函数时自动附加日期分组属性。
* **验收标准**:输入的抽象树被成功转化为计算引擎可以识别的执行计划对象,且分组属性被正确挂载。
### 里程碑 5系统顶层编排与端到端测试 (Orchestrator)
* **任务指派**:要求 AI 编写一个对外的 `FactorEngine` 类,作为系统的统一入口。
* **执行流编排**:接收研究员的表达式 -> 调用编译器解析依赖 -> 调用路由器连接数据库拉取并组装核心宽表 -> 调用翻译器生成物理执行计划 -> 将计划提交给计算引擎执行并行运算。
* **验收标准**:模拟少量的内存数据作为假数据库,完整跑通一条“从表达式注册,到自动按需取数,最终输出包含因子结果数据表”的全流程链路。
---