Commit Graph

68 Commits

Author SHA1 Message Date
3f8ca2cebf feat(training): 添加数据质量检查工具并重构实验脚本
- 新增 check_data_quality 函数用于检测全空/全零/全NaN数据质量问题
- 重构 register_factors 函数,消除 FEATURE_COLS 和 PROCESSORS 冗余定义
- 修复实验脚本中特征列表不一致的问题,确保处理器覆盖所有特征
- 优化 LambdaRank 模型参数配置
2026-03-13 22:24:12 +08:00
5b4db7a2c2 docs: 全面更新 AGENTS.md 文档 2026-03-12 23:01:29 +08:00
4fe29b805f feat(scripts): 添加因子批量注册脚本
- 新增 register_factors.py,支持通过 name/desc/dsl 自动注册因子
- 自动生成 F_XXX 格式 factor_id
- 默认保存到 src/experiment/data/factors.jsonl
2026-03-12 22:39:01 +08:00
ced7a929c3 refactor(factors): 简化 add_factor API 并默认启用 metadata
- 合并 add_factor_by_name 到 add_factor,支持三种调用方式
- FactorManager 构造函数改为可选参数,使用默认路径
- FactorEngine 默认启用 metadata,无需手动配置路径
2026-03-12 22:34:25 +08:00
2bb7718dd1 feat(factors): 集成 metadata 模块,支持按名称注册因子
- 新增 add_factor_by_name() 方法,从 metadata 查询 DSL 表达式并注册
- FactorEngine 支持可选的 metadata_path 参数初始化
- 将 regression.ipynb 和 learn_to_rank.ipynb 转换为 Python 脚本
- 新增 test_factor_engine_metadata.py 测试文件
2026-03-11 22:54:52 +08:00
038f5f1722 feat(factors): 实现因子元数据管理模块
- 新增 FactorManager 类,支持 JSONL 文件读写和 DuckDB SQL 查询
- 实现零拷贝输出 Polars DataFrame,与现有因子引擎无缝集成
- 添加字段校验器(FactorValidator)和完整的异常处理机制
- 包含 49 个示例因子数据(趋势、波动率、量价、基本面等类别)
- 更新 src/factors/__init__.py 导出元数据管理组件
2026-03-11 22:03:16 +08:00
e8ac9d8662 feat(data): 添加 DuckDB 只读模式支持
- Storage 类默认使用 read_only=True 模式,允许多进程并发读取
- ThreadSafeStorage 自动使用 read_only=False 模式,用于数据同步写入
- catalog.query_duckdb_to_polars 函数使用只读连接
2026-03-11 21:33:08 +08:00
f3b3560d26 fix(factors/engine): 修复列选择时基础列重复的问题 2026-03-11 00:12:05 +08:00
e6c3a918c7 feat(training): 添加 LightGBM LambdaRank 排序学习功能
新增基于 LambdaRank 的排序学习模型,用于股票排序预测任务:
- 实现 LightGBMLambdaRankModel 模型类,支持分位数标签转换
- 提供完整的训练流程和 NDCG 评估指标
- 添加实验 Notebook 演示排序学习全流程
2026-03-10 22:23:44 +08:00
f1811815e7 fix(factors): 修复 ts_corr/ts_cov 实现并添加 abs 函数支持
- 修复 ts_corr 和 ts_cov 使用 pl.rolling_corr/pl.rolling_cov 模块级函数
- 添加 abs 函数处理器到 translator
- 扩展 notebook 中的因子定义(24 -> 49 个)
- 更新 AGENTS.md 文档结构和 Training 模块说明
2026-03-09 23:37:20 +08:00
88fa848b96 refactor(training): 重构股票池管理 API 并更新训练流程
- 移除 StockFilterConfig/MarketCapSelectorConfig,改用 StockPoolManager + filter_func
- Trainer 支持 train/val/test 三分法划分
- 更新 regression.ipynb 适配新 API
- 删除已弃用的 test_selectors.py,后续补充 StockPoolManager 测试
2026-03-09 22:33:41 +08:00
a464ef70c0 feat(data): 新增财务指标和涨跌停数据接口
- 财务指标: fina_indicator_vip 封装,166 字段,季度同步
- 涨跌停价格: stk_limit 封装,日频数据同步
- 配套单元测试和调度中心集成
2026-03-08 23:14:18 +08:00
505279c08b fix(data): 修复财务因子计算非确定性问题
重构 financial_loader 的去重逻辑,确保截面排名计算的股票集合一致:
- 引入"高水位线"算法剔除陈旧历史财报(解决2026年发布2021年财报的问题)
- 改变去重策略:按报告期(end_date)而非更新标识(update_flag)保留最新数据
- 扩展回看期从1年到2年,防止ST/停牌公司财报缺失
- 确保相同交易日在不同查询范围下返回一致的财务数据
2026-03-08 20:58:35 +08:00
3c7795f630 feat: 新增多项技术指标和成交量因子定义 2026-03-08 14:12:03 +08:00
36e0e4b234 feat(training): 新增财务数据因子并修复多表 join 冲突
- 添加 9 个财务数据因子(利润表/资产负债表/现金流量表)
- 修复多表 asof join 时 f_ann_date_right 列名重复错误
- 将 Top5 改为可配置的 TopN 参数
- 删除已弃用的 regression.py 脚本
2026-03-08 11:46:30 +08:00
eb76cbbd52 feat(financial): 实现资产负债表和现金流量表同步接口
- 新增 BalanceQuarterSync 类,封装 balancesheet_vip 接口(157个字段)
- 新增 CashflowQuarterSync 类,封装 cashflow_vip 接口(95个字段)
- 在财务数据调度中心注册资产负债表和现金流量表
- 更新规范文档,标记接口为已实现
2026-03-08 10:57:39 +08:00
0aec87281e docs: 完善财务数据 API 规范文档
- 更新 FINANCIAL_API_SPEC.md,添加首次同步优化策略
- 添加日期格式转换规范(YYYYMMDD → YYYY-MM-DD)
- 补充存储层 UPSERT 禁用说明和删除计数处理
- 扩充常见问题(Q7-Q9)
- 完善 financial_api.md,补充资产负债表接口完整文档和报表类型说明

Closes: 文档更新 v1.1
2026-03-08 01:16:25 +08:00
592126c376 feat(training): 实现 train/val/test 三分法并添加训练指标可视化
- DateSplitter 支持三分法划分,修复 test 数据泄露问题
- 添加训练指标曲线绘制和100轮早停
2026-03-08 01:09:47 +08:00
85044a74c6 refactor(financial-sync): 重构财务数据同步架构
- 新增 base_financial_sync.py 基础同步抽象类
- 重构 api_financial_sync.py 简化调度逻辑
- 重命名 IncomeSync 为 IncomeQuarterSync 继承新基础类
- 增强 storage.py 支持 use_upsert 参数
- 更新 __init__.py 导出符号
2026-03-08 00:30:04 +08:00
c01bf76a3d docs: 添加财务数据同步模块重构相关文档
- 添加财务数据 API 封装规范文档 (FINANCIAL_API_SPEC.md)
  包含架构设计原则、类设计规范、同步策略、数据差异检测等

- 添加 n_income 因子生命周期分析文档
  详细追踪因子从定义到训练的全流程

- 添加财务数据同步模块重构计划文档
  明确 QuarterBasedSync 基类设计、重构任务清单

这些文档为后续财务数据同步模块重构提供完整的设计依据和实施方案
2026-03-07 22:14:04 +08:00
1520c2a51e feat(factors): 新增 Phase 1-2 数学和统计因子函数
- 新增 atan, log1p 数学函数
- 新增 ts_var, ts_skew, ts_kurt, ts_pct_change, ts_ema 统计函数
- 新增 ts_atr, ts_rsi, ts_obv TA-Lib 技术指标函数
- 新增完整集成测试覆盖所有新函数
2026-03-07 01:03:49 +08:00
62a4635a71 feat: 新增因子装饰器系统和完整因子文档
- 添加因子表达式文档,收录180+个因子及数学表达式
- 添加因子实现分析报告,明确ts_*与cs_*算子分类
- 实现装饰器系统:@time_series/@cross_section/@element_wise
- 优化API和翻译器以支持新架构
2026-03-06 23:59:39 +08:00
8b85a02003 feat: 添加 LightGBM 回归训练示例 Notebook 2026-03-06 20:57:27 +08:00
555cb00276 fix: 修正回归训练中的未来收益率计算公式
- 修复 Label 公式从过去收益率改为未来收益率
2026-03-06 20:56:24 +08:00
7b935b0fa3 feat(training): 添加缺失值填充处理器 NullFiller
新增 NullFiller 处理器,支持 zero/mean/median/value 填充策略,
支持全局统计量或按日期截面填充。在回归训练流程中添加 NullFiller。
2026-03-05 21:57:34 +08:00
aefe6d06cf refactor(sync): 引入 SyncRegistry 注册表模式管理同步任务
- 新增 sync_registry.py 模块,提供统一的同步任务注册和管理机制
- 在 api_wrappers/__init__.py 中实现自动注册逻辑,新增接口无需修改 sync.py
- 重构 sync_all_data() 函数,使用注册表模式替代手动罗列,代码从 400+ 行精简至 293 行
- 新增 selected 参数,支持选择性执行特定同步任务
- 新增 list_sync_tasks() 函数,方便查看所有已注册任务
2026-03-05 21:11:18 +08:00
5a1f278df8 refactor: 优化回归实验配置和模型参数
- 将因子定义、模型参数、日期配置提取为模块级常量
- 优化 LightGBM 参数(降低过拟合风险)
- LightGBMModel 支持 params 字典参数传入
- 修复 StockFilter 创业板排除逻辑(支持 301xxx)
- 添加 experiment/output 到 .gitignore
2026-03-05 00:38:20 +08:00
3b42093100 feat(data): 财务数据加载与清洗模块
新增 FinancialLoader 类,提供:
- 财务数据加载与清洗(保留合并报表,按 update_flag 去重)
- 支持 as-of join 拼接行情数据(无未来函数)
- 自动识别财务表并配置 asof_backward 拼接模式
2026-03-04 23:35:20 +08:00
620696c842 refactor: rename src/data/data_router.py to catalog.py 2026-03-04 22:09:53 +08:00
af5c96cd53 feat(training): 添加数据过滤器支持及 ST 股票过滤
- 新增 filters.py 模块,实现 BaseFilter 抽象类和 STFilter 过滤器
- 在 Trainer 中支持 filters 参数,可在股票池筛选之前执行数据过滤
- 更新 training/__init__.py 导出 BaseFilter 和 STFilter
- 在 regression.py 中集成 STFilter,用于过滤 ST 股票
2026-03-04 21:14:39 +08:00
f1687dadf3 feat: 因子引擎字段验证改进、股票池过滤修复及实验模块增强
1. 因子引擎字段验证改进
   - 新增 SchemaCache.get_all_fields() 方法,返回所有可用字段集合
   - 修改 match_fields_to_tables(),对不存在的字段抛出明确错误
   - 错误信息包含可用字段列表提示,帮助用户检查拼写
2. 股票池过滤修复
   - 修复北交所股票排除逻辑:将识别方式从代码前缀(8/4开头)改为.BJ后缀
   - 更新文档注释,明确北交所股票识别规则
3. 实验模块增强
   - 新增 regression.py 实现回归实验逻辑
   - 新增 output/ 目录存放实验输出结果
2026-03-03 23:51:08 +08:00
192718095f feat(training): 实现训练模块核心组件(commits 6-9)
- StockPoolManager:每日独立筛选股票池,支持代码过滤和市值选择
- Trainer:整合训练完整流程,支持 processor 分阶段行为和模型持久化
- TrainingConfig:pydantic 配置管理,含必填字段和日期验证
- experiment 模块:预留结构
- 从计划中移除 metrics 组件
- 调整 commit 序号(7-10 → 6-9)
- 更新 training/__init__.py 导出所有公开 API
2026-03-03 22:57:01 +08:00
f35a6a76a6 feat(training): 实现 LightGBM 模型
- 新增 LightGBMModel:LightGBM 回归模型实现
- 支持自定义参数(objective, num_leaves, learning_rate, n_estimators 等)
- 使用 LightGBM 原生格式保存/加载模型(不依赖 pickle)
- 支持特征重要性提取
- 已注册到 ModelRegistry(@register_model("lightgbm"))
2026-03-03 22:30:37 +08:00
9ca1deae56 feat(training): 实现数据处理器
- 新增 StandardScaler:全局标准化,训练集学习参数,测试集复用
- 新增 CrossSectionalStandardScaler:截面标准化,每天独立计算
- 新增 Winsorizer:支持全局/截面两种缩尾模式
- 处理器统一遵循 fit/transform 接口,Trainer 可无差别调用
- 添加 17 个单元测试覆盖各种场景
2026-03-03 22:23:43 +08:00
6b63c428d9 feat(training): 实现股票池选择器配置
- 新增 StockFilterConfig:支持按代码前缀过滤创业板/科创板/北交所
- 新增 MarketCapSelectorConfig:配置市值选择参数(数量、排序、列名)
- 添加参数验证(n>0, 列名非空)
- 在 components 模块导出配置类
- 添加 15 个单元测试覆盖各种场景
2026-03-03 22:10:36 +08:00
f48b307ad2 feat(training): 实现 DateSplitter 数据划分器
- 新增 DateSplitter 类,支持基于日期范围的一次性训练/测试划分
- 实现日期格式验证和日期范围逻辑检查
- 支持自定义日期列名参数
- 添加完整的单元测试(12个测试用例)
- 在 components 模块导出 DateSplitter
2026-03-03 22:07:45 +08:00
317ecd87e7 feat(data): 封装ST股票列表接口(stock_st)
- 新增 api_stock_st.py,实现ST股票数据获取和日期遍历同步
- 更新 sync.py,将ST股票同步加入第7步流程
- 移除 base_sync.py 中未使用的 get_last_n_trading_days 导入
2026-03-03 22:04:22 +08:00
472b2b665a feat(training): 添加训练模块基础架构
实现 Commit 1:训练模块基础架构

新增文件:

- src/training/__init__.py - 主模块导出

- src/training/components/__init__.py - components 子模块导出

- src/training/components/base.py - BaseModel/BaseProcessor 抽象基类

- src/training/registry.py - 模型和处理器注册中心

- tests/training/test_base.py - 基础架构单元测试

功能特性:

- BaseModel: 提供 fit, predict, feature_importance, save/load 接口

- BaseProcessor: 提供 fit, transform, fit_transform 接口

- ModelRegistry/ProcessorRegistry: 支持装饰器风格组件注册

- 支持即插即用的组件扩展机制

Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-opencode)

Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
2026-03-03 21:55:39 +08:00
12ddb19b2e feat(factors): 添加 SchemaCache 实现数据库表结构自动扫描 2026-03-03 17:32:58 +08:00
53225b9443 feat(data): 添加每日指标接口并优化因子引擎
- 新增 api_daily_basic.py 封装 Tushare 每日指标接口
- 因子引擎移除 lookback_days,支持 daily_basic 表字段路由
- 将每日指标纳入自动同步流程
- 删除废弃的 training/main.py
2026-03-03 17:09:39 +08:00
780284af7f feat(test): 添加两支股票因子字符串计算测试
测试基于 Formula Parser + DSL 的字符串因子表达式计算,
包含 return_5、ma5、ma10 等因子及截面排名验证
2026-03-03 00:15:16 +08:00
05d0c90312 feat(factors): 新增公式解析基础组件
新增公式解析相关模块,支持将字符串表达式解析为 DSL 节点树:
- exceptions.py: 定义公式解析异常体系
  - FormulaParseError 基类,提供位置指示的错误信息
  - UnknownFunctionError 支持模糊匹配建议
  - InvalidSyntaxError、EmptyExpressionError 等具体异常
- parser.py: 基于 Python ast 的公式解析器
  - 支持符号引用、数值常量、二元/一元运算
  - 支持函数调用和比较运算
  - 常量折叠优化
- registry.py: 函数注册表
  - 支持动态注册和查询公式函数
  - 提供可用函数列表和重复注册检查
2026-03-03 00:04:48 +08:00
77e4e94e05 refactor(factors): 拆分 engine.py 为模块化包
将单文件 engine.py (1064行) 拆分为 engine/ 包:
- 数据规格、路由器、计划器、计算引擎、因子引擎分离
- 保持向后兼容,API 无变化
2026-03-02 22:29:18 +08:00
1c0c4a0de1 fix(factors): 修复 cs_rank 等截面函数在依赖表达式时输出全 null 的问题 2026-03-02 22:21:43 +08:00
9b826c1845 feat(factors): 基础行情字段默认从 pro_bar 表获取
- 修改 Symbol 名称与数据库字段对齐:volume->vol, pct_change->pct_chg
- 修改 ExecutionPlanner._infer_data_specs,将基础行情字段路由到 pro_bar 表
- 支持的基础字段:open, high, low, close, vol, amount, pre_close, change, pct_chg 等
2026-03-02 20:59:36 +08:00
1a6fc2eeba feat(engine): 实现 DataRouter 数据库连接功能 2026-03-02 20:47:01 +08:00
e8158a8d59 fix(api_pro_bar): 使用 Tushare 原始字段名
删除 turnover_rate/volume_ratio 到 tor/vr 的不必要重命名,
直接使用 Tushare API 返回的原始字段名。
2026-03-02 01:05:15 +08:00
b461a4940d refactor(factor): 完成因子框架 DSL 化重构
- 重构 FactorEngine 实现完整的 DSL 表达式执行链路
- 新增 DataRouter 数据路由器,支持内存模式和核心宽表组装
- 新增 ExecutionPlanner 执行计划生成器,整合编译器和翻译器
- 新增 ComputeEngine 计算引擎,支持并行运算
- 完善 factors/__init__.py 公开 API 导出
- 新增 test_factor_engine.py 引擎单元测试
- 移除旧引擎实现和废弃的 DSL promotion 测试
- 更新 AGENTS.md 添加 v2.2 架构变更历史和 Factors 框架设计说明
2026-03-01 15:03:56 +08:00
84479ee9ff refactor: 将表结构定义从 storage 迁移到各 API 文件
- 移除 storage.py 集中式建表逻辑,改为各 API 文件自管理
- base_sync.py 新增 ensure_table_exists() 和表探测机制
- api_daily/api_pro_bar/api_bak_basic 添加 TABLE_SCHEMA 定义
- api_financial_sync 添加完整利润表字段定义
- sync.py 更新职责文档,明确仅同步每日更新数据
- AGENTS.md 添加 v2.1 架构变更历史和 AI 行为准则
2026-03-01 01:24:39 +08:00
484bcd0ab7 refactor: 提取数据同步逻辑为抽象基类
新增 base_sync.py 模块,提供三层抽象结构统一数据同步流程:
- BaseDataSync: 所有同步类型的基础抽象(客户端、股票代码获取、交易日历)
- StockBasedSync: 按股票同步抽象类(适用于 daily, pro_bar)
- DateBasedSync: 按日期同步抽象类(适用于 bak_basic)
2026-02-27 23:34:12 +08:00