Commit Graph

10 Commits

Author SHA1 Message Date
de988b919b feat(framework_v2): 实现 StrategyBase 抽象基类和简单轮动策略
StrategyBase ABC:
- 定义标准回测流程:get_data → compute_factors → generate_signals → manage_positions → execute
- 实现通用数据获取(使用 FlaskAPIFetcher.fetch_indices)
- 提供 run() 方法执行完整回测流程

SimpleRotationStrategy:
- 实现 4 个抽象方法:get_codes, compute_factors, generate_signals, manage_positions
- 支持动量因子计算(MomentumFactor)
- 实现全局选股和等权仓位管理
- 修复 int64 → float 转换问题

框架定位:
- 通用量化回测框架,支持轮动、CTA、趋势跟踪等多种策略
- 策略只需实现 4 个抽象方法即可接入框架
2026-05-24 14:25:47 +08:00
341611c32b feat(framework_v2): 实现通用配置系统,支持扁平化资产池和策略分组
- 使用 Pydantic Schema 验证配置类型安全
- 实现扁平化 AssetPool,移除预设分类(equity/commodity/fixed_income)
- 移除 MarketType 枚举,改用 group 字符串字段实现策略分组
- AssetConfig 引入 signal_source/trade_source 分离,支持跨市场场景
- ConfigLoader 支持通用 StrategyConfig,向后兼容 RotationStrategyConfig
- 新增 GroupConfig 替代 MarketGroupConfig,支持分散化选股

重构核心:
- market → group(策略分组语义,组内竞争强制分散)
- by_market → by_group
- MarketGroupConfig → GroupConfig
2026-05-24 14:25:25 +08:00
99d3584d05 docs(framework_v2): 更新 FlaskAPIFetcher 文档(API 日历集成)
## 使用指南更新(FLASK_API_FETCHER_GUIDE.md)
- get_trading_calendar() 方法签名更新
  - 新增 start, end 参数(支持动态日期范围)
  - 返回类型: pd.DatetimeIndex(准确日历)
- 使用示例更新(API 调用方式)
- 注意事项更新:交易日历准确性  已解决

## 架构设计更新(FLASK_API_FETCHER_ARCHITECTURE.md)
- get_trading_calendar() 实现更新
  - 从临时 pandas BDay → API 准确日历
  - API 端点: GET /api/v1/trading-calendar
- 未来优化: 移除交易日历 TODO(已完成)

## 文档一致性
- 所有示例代码使用 API 日历
- 架构描述与实际实现一致
- 版本历史更新(2024-04-16)
2026-05-24 12:38:55 +08:00
b462c0520c docs(framework_v2): 添加端到端测试报告 + API 集成记录
## 测试报告(END_TO_END_TEST_REPORT.md, 345 行)
- 5 个阶段详细测试结果
- 关键验证总结(跨市场对齐、数据完整性、策略表现)
- 性能指标(总耗时 ~7 秒)
- 数据流图(完整流程可视化)
- 发现的问题(因子值异常、日历精度)

## 集成记录(TRADING_CALENDAR_API_INTEGRATION.md, 247 行)
- 变更前后对比(pandas BDay → API)
- API 端点文档(请求/响应格式)
- 使用示例(基础使用 + 数据对齐)
- 测试验证结果(484 天准确日历)
- 影响分析(正面影响 + 无破坏性变更)

## 文档特色
- 大量代码示例
- 表格总结
- 测试结果截图
- 版本历史记录
2026-05-24 12:38:28 +08:00
e7ab8a2755 feat(framework_v2): 集成交易日历 API + 端到端测试
## 核心功能
- get_trading_calendar(): 通过 API 获取准确交易日历
  - 替换临时 pandas BDay 实现
  - 调用 /api/v1/trading-calendar 端点
  - 支持动态日期范围(start, end 参数)
  - 支持 A/US/HK 多市场

## 端到端测试
- test_end_to_end.py: 完整流程测试(5 个阶段)
  - 阶段 1: 数据获取(纳指 502 天,创业板 484 天)
  - 阶段 2: 因子计算(MomentumFactor n_days=20)
  - 阶段 3: 数据对齐(CrossMarketAligner 到 A 股 484 天)
  - 阶段 4: 信号生成(Top-1,469 个信号)
  - 阶段 5: 收益计算(年化 51.71%,超额 96.37%)

## 测试验证
- 5/5 阶段通过
- API 日历: 484 个交易日(准确)
- 纳指休市日: 18 天收益率 = 0%
- 收益率 NaN: 0
- 跨市场对齐成功

## 架构改进
- 从近似日历 → 准确 API 日历
- 无需手动维护节假日列表
- API 失败时抛出异常(不静默降级)
2026-05-24 12:38:06 +08:00
1bf91bdcd0 docs(framework_v2): 添加 FlaskAPIFetcher 文档体系
## 文档(2 个文档,互相关联)
- FLASK_API_FETCHER_GUIDE.md - 使用指南(365 行)
  - 快速开始示例
  - 完整 API 参考
  - 结合 CrossMarketAligner 示例
  - 错误处理 + 性能优化
  - 注意事项(交易日历、净值数据量)

- FLASK_API_FETCHER_ARCHITECTURE.md - 架构设计(367 行)
  - 架构层次图
  - 设计原则(DIP, SRP, OCP)
  - 数据流图(指数、ETF)
  - 与 CrossMarketAligner 集成
  - 未来优化方向(缓存、异步)

## 更新
- README.md: 添加文档链接(5 个文档)
- 形成完整文档网络(6 个文档互链)
2026-05-24 10:39:02 +08:00
40116f436f feat(framework_v2): 添加 FlaskAPIFetcher 数据获取器
## 核心功能
- FlaskAPIFetcher: 继承 DataFetcher 抽象基类
- fetch_indices(): 获取指数 OHLCV 数据
- fetch_etf(): 获取 ETF 数据(自动附加净值+溢价率)
- get_trading_calendar(): 获取交易日历
- get_benchmark(): 获取基准数据

## 技术实现
- 委托调用 FlaskAPIDataSource(HTTP API)
- 自动重试 3 次,超时 120 秒
- Pydantic Schema 验证响应
- 进度显示(批量获取)
- 无需本地 SSH 隧道配置

## 测试验证
- 5/5 测试通过(健康检查、指数、ETF、日历、基准)
- 成功获取线上数据(000300.SH, 510300.SH)
- ETF 自动附加净值(3695 条)和溢价率

## 架构设计
- shared/data/flask_api_fetcher.py - 实现(262 行)
- tests/test_flask_api_fetcher.py - 测试(199 行)
- 依赖倒置原则(策略依赖抽象接口)
2026-05-24 10:38:34 +08:00
5f08e508ac docs(framework_v2): 完善文档体系 + 修复 .gitignore
## 文档体系(5 个文档,互相关联)
- README.md - 框架总览 + 文档索引
- DATA_ARCHITECTURE.md - 数据架构方案(Schema、验证、性能优化)
- ALIGNMENT_GUIDE.md - CrossMarketAligner 使用指南
- DATA_FLOW_DEMO.md - 从 OHLCV 到最终收益的 7 个阶段推演
- ALIGNMENT_SCHEMA_INTEGRATION.md - Aligner + Schema 整合方案

## 文档特色
- 大量代码示例( 正确 vs  错误对比)
- 数据流可视化(ASCII 图)
- 表格总结(问题、严重度、解决方案)
- 实际场景推演(2024-01-01 ~ 2024-01-31)
- 文档互链(形成知识网络)

## 修复
- .gitignore: 添加 !framework_v2/shared/data/ 例外
- 允许提交对齐器相关文件
2026-05-24 10:29:20 +08:00
a16681bda9 feat(framework_v2): 添加跨市场数据对齐器 + Pydantic Schema 验证
## 核心功能
- CrossMarketAligner: 跨市场数据对齐(解决 ffill 陷阱)
- Pydantic Schema: 数据结构验证(OHLCVInputSchema, AlignedFactorSchema 等)
- 验证装饰器: @validate_factor_after_align, @validate_returns_after_align

## 解决的问题
- 跨市场交易日历不同(美股/港股/A股)
- ffill 收益率陷阱(休市日复制非零收益率)
- NaN 传播问题
- 日期不一致问题

## 测试验证
- 5/5 测试通过(因子对齐、收益率对齐、多标的对齐、信号验证、ffill陷阱)
- 休市日收益率 = 0%(正确)
- 无 NaN 传播

## 架构设计
- shared/data/alignment.py - 对齐器实现
- shared/data/schemas.py - Pydantic Schema 定义
- tests/test_alignment.py - 完整测试套件
2026-05-24 10:28:35 +08:00
908b28473f feat(framework_v2): 创建框架V2骨架 - 三层架构+因子验证通过
## 架构设计
- 三层架构:core(抽象接口) → shared(通用实现) → tests(验证测试)
- 5个核心抽象基类:StrategyBase, FactorBase, SignalGenerator, Executor, DataFetcher
- 零侵入:与现有框架并行开发,不修改生产代码

## 已完成
✓ 核心接口层(5个ABC类)
✓ 通用因子层(MomentumFactor完全复制现有逻辑)
✓ 对比验证测试(新旧因子输出差异=0,测试通过)

## 验证结果
- 最大差异: 0.000000e+00
- 平均差异: 0.000000e+00
- 容差: < 1e-10

## 下一步
- 阶段3: 信号层迁移(TopNSelector, DynamicThreshold, RebalanceController)
- 阶段4: 执行层迁移(BacktestRunner)
- 阶段5: 数据层迁移(DataFetcher实现)
- 阶段6: 完整策略对比验证

## 设计原则
- 按需抽象,不预先设计
- 职责分离,避免框架膨胀
- 测试驱动,每个组件必须有对比测试
- 渐进式迁移,验证通过再替换
2026-05-24 09:12:29 +08:00