Skip to content

feat: 新增区间分析功能#669

Open
Suailen wants to merge 1 commit into
hsliuping:mainfrom
Suailen:feat/range-analysis
Open

feat: 新增区间分析功能#669
Suailen wants to merge 1 commit into
hsliuping:mainfrom
Suailen:feat/range-analysis

Conversation

@Suailen

@Suailen Suailen commented Mar 29, 2026

Copy link
Copy Markdown

Pull Request 模板

📋 PR 类型

请标记此 PR 的类型:

  • 🌟 新功能 (feature)
  • 🐛 Bug 修复 (bugfix)
  • 🧹 代码重构 (refactor)
  • 📝 文档更新 (documentation)
  • 🎨 样式优化 (style)
  • ⚡ 性能优化 (performance)
  • 🔧 配置/构建 (config/build)
  • 🧪 测试相关 (test)
  • 🤖 LLM 适配器集成 (llm-adapter)

📖 PR 描述

变更摘要

新增区间分析功能:用户可以选择一个日期范围,系统自动识别其中的交易日并对同一股票并行执行多日分析,完成后汇总展示结果。同时在报告列表页新增批量删除功能。

为什么做这个改动:
目前系统仅支持对单只股票的单个交易日进行分析。但在实际使用中,用户经常需要观察同一只股票在一段时间内的分析结果变化趋势——例如查看某只股票在过去一周或一个月内,AI 每天给出的买入/卖出/持有建议是否一致,从而判断信号的稳定性和可信度。
现有流程下,用户只能手动逐日修改日期、反复提交分析,操作繁琐且耗时。区间分析功能让用户一次性选择日期范围,系统自动并行处理,大幅提升了多日分析的效率和体验。

变更详情

1. 区间分析功能(后端)

  • 新增 app/utils/trading_calendar.py:交易日历工具模块。A股优先通过 akshare (tool_trade_date_hist_sina) 获取真实交易日历(含缓存),失败时回退到工作日过滤;美股/港股使用工作日过滤。自动截断未来日期。
  • 新增 DateRangeAnalysisRequest 模型app/models/analysis.py):包含 symbolstart_dateend_dateparameters,兼容已有的 stock_code 字段。
  • 新增 2 个 API 端点app/routers/analysis.py):
    • GET /api/analysis/trading-days:预览指定日期范围内的交易日列表、数量及是否超限
    • POST /api/analysis/date-range:提交区间分析。将每个交易日拆分为独立的 SingleAnalysisRequest 并行执行,通过 asyncio.Semaphore + 交错启动延迟控制并发,避免 LLM API 限流
  • 新增 3 个配置项app/core/config.py):
    • DATERANGE_MAX_CONCURRENT(默认 5):最大同时执行任务数
    • DATERANGE_STAGGER_DELAY(默认 3.0s):任务间交错启动延迟
    • DATERANGE_MAX_TRADING_DAYS(默认 30):单次区间分析最大交易日数

2. 区间分析功能(前端)

  • 分析模式切换SingleAnalysis.vue):新增「单日分析 / 区间分析」Radio 切换按钮,默认为单日分析
  • 日期区间选择器:选择起止日期后自动调用 GET /api/analysis/trading-days 预览交易日数量和预估耗时,超限时禁用提交按钮并提示
  • 区间分析进度面板:以 el-table 实时展示每个交易日的任务状态(等待中/分析中/已完成/失败)和进度条,顶部显示总体进度百分比。轮询间隔 3 秒
  • 区间分析结果汇总:完成后展示买入/卖出/持有统计卡片,支持点击查看单日详细分析报告
  • API 类型定义analysis.ts):新增 DateRangeAnalysisRequestDateRangeAnalysisResponseDateRangeTaskMappingTradingDaysPreview 接口及 startDateRangeAnalysisgetTradingDays 调用函数

3. 报告批量删除

  • 在报告列表页(Reports/index.vue)工具栏新增「删除」按钮,支持勾选多份报告后批量删除
  • 包含 ElMessageBox.confirm 二次确认弹窗,逐条调用 DELETE /api/reports/{id} 并统计成功/失败数,删除后自动刷新列表

相关 Issue

🤖 LLM 适配器集成检查清单

此 PR 不涉及 LLM 适配器集成,跳过此部分。

🧪 测试说明

如何测试此 PR

区间分析功能:

  1. 启动后端和前端,进入「单股分析」页面
  2. 输入股票代码(如 000001),将分析模式从「单日分析」切换到「区间分析」
  3. 选择一个日期范围(如最近 5 个交易日),确认交易日预览正确显示数量和预估耗时
  4. 选择超过 30 个交易日的范围,确认提示超限且提交按钮被禁用
  5. 提交区间分析,观察进度面板中每个交易日的状态实时更新
  6. 全部完成后,确认汇总统计(买入/卖出/持有计数)正确展示
  7. 点击某一天的「查看详情」,确认可正常跳转到该日详细报告
  8. 切换回「单日分析」模式,确认原有单日分析功能正常不受影响

报告批量删除功能:

  1. 进入「分析报告」列表页
  2. 勾选多份报告,点击「删除」按钮
  3. 确认弹窗弹出,点击「确定删除」
  4. 确认报告被删除、列表自动刷新、成功提示正确显示

测试环境

  • 本地开发环境
  • Docker 环境
  • 生产环境

破坏性变更

  • 此 PR 包含破坏性变更
  • 此 PR 不包含破坏性变更

新增的 API 端点和前端 UI 均为增量添加,未修改任何已有接口的签名或行为。原有的单日分析流程完全不受影响。

📊 影响范围

请标记此 PR 影响的组件:

  • 核心交易逻辑
  • LLM 适配器
  • Web 界面
  • 数据获取
  • 配置系统
  • 测试框架
  • 文档
  • 部署配置

🔗 相关链接

📷 截图/演示

区间分析 超过限制 区间分析结果 删除按钮

✅ 检查清单

请确认以下项目:

代码质量

  • 代码遵循项目的编码规范
  • 没有不必要的调试代码或注释
  • 变量和函数命名清晰明确
  • 代码复用性良好,避免重复代码

测试覆盖

  • 新功能有相应的测试用例
  • 所有测试通过
  • 手动测试已完成
  • 边界情况已考虑

文档更新

  • README 已更新(如果需要)
  • API 文档已更新(如果需要)
  • 变更日志已更新(如果需要)
  • 配置文档已更新(如果需要)

安全考虑

  • 没有硬编码的密钥或敏感信息
  • 输入验证充分
  • 错误处理不泄露敏感信息
  • 第三方依赖安全可靠

性能考虑

  • 新功能不会显著影响性能
  • 内存使用合理
  • 网络请求优化
  • 数据库查询优化(如果适用)

🏷️ 标签建议

请为此 PR 建议适当的标签:

  • enhancement - 新功能或改进
  • bug - Bug 修复
  • documentation - 文档相关
  • refactor - 代码重构
  • performance - 性能优化
  • security - 安全相关
  • llm-adapter - LLM 适配器
  • ui/ux - 用户界面/体验
  • config - 配置相关
  • testing - 测试相关

👥 审查者

建议的审查者:
@hsliuping

📝 额外说明

  • 区间分析功能复用了现有的 SingleAnalysisRequestsimple_analysis_service.execute_analysis_background 基础设施,每个交易日本质上是一个独立的单日分析任务,区间分析只是在上层做了编排和并发控制。
  • 交易日历模块对 akshare 数据做了内存缓存(_a_share_trade_dates_cache),避免每次请求重复拉取。
  • 并发控制通过 asyncio.Semaphore(限制同时运行数)+ 交错启动延迟(避免同一时刻大量请求涌入 LLM API)两层机制实现,三个相关参数均可通过配置文件/环境变量调整。
  • 本 PR 未新增自动化测试用例,新功能已通过手动测试验证。

感谢您的贡献! 🎉

请确保您已经阅读并遵循了我们的 贡献指南。如果您有任何问题,请随时在 PR 中提问或联系维护者。

echopoison0712 pushed a commit to echopoison0712/TradingAgents-CN that referenced this pull request Jun 8, 2026
* feat: show related boards in stock reports (hsliuping#669)

* fix: preserve unavailable related board states

---------

Co-authored-by: mumu <42829555+ZhuLinsen@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant