Files
daily_stock_analysis/docs/CHANGELOG.md
Alfred 88fdaf7933 feat: 大盘复盘可选除 A 股外的其它大盘(Issue #299) (#348)
* feat: 大盘复盘可选 A 股/美股区域 (Issue #299)

- 新增 MARKET_REVIEW_REGION 配置:cn/us/both
- 新增 market_profile 抽象,按 region 切换新闻搜索、Prompt、模板
- 数据层 get_main_indices(region):yfinance 支持 us 返回 SPX/IXIC/DJI/VIX
- MarketAnalyzer 支持 region 参数,美股时跳过涨跌统计与板块
- region=both 时顺序执行 A 股+美股复盘并合并报告
- 更新 .env.example、full-guide、README、CHANGELOG

* Issue #299: 审查建议修复与优化

- bot: 透传 market_review_region 到 MarketAnalyzer
- yfinance: 提取 _fetch_yf_ticker_data 公共方法,消除 cn/us 重复逻辑
- market_analyzer: 修正 mood_index 匹配逻辑,美股搜索 stock_name 为 US market
- market_analyzer: region=us 时 LLM 提示语改为英文模板
- market_review: both 模式增加 A股/美股生成进度日志
- tests: 新增 _get_us_main_indices 单元测试(mock yfinance)

* Issue #299: 落实审查建议

- config: _parse_market_review_region 解析到非法值时打印 warning 日志
- market_review: both 模式报告分隔符增加描述性说明
- market_analyzer: 指数表格中 amount=0.0 时显示 N/A,避免用户误解

* docs: 优化 MARKET_REVIEW_REGION 描述措辞,避免歧义

- 移除「仅炒美股用户可设为 us」表述
- 明确 both 模式可同时复盘 A 股与美股
- 更新 full-guide、README、CHANGELOG、config 注释、env.example

* style: 移除 bot market 命令中冗余的 or 'cn' 回退
2026-02-19 11:45:47 +08:00

22 KiB
Raw Blame History

Changelog

所有重要更改都会记录在此文件中。

格式基于 Keep a Changelog 版本号遵循 Semantic Versioning

Unreleased

修复

  • 修复美股(如 ADBE技术指标矛盾akshare 美股复权数据异常,统一美股历史数据源为 YFinanceIssue #311
  • 🐛 美股指数实时行情与日线数据 (Issue #273)
    • 修复 SPX、DJI、IXIC、NDX、VIX、RUT 等美股指数无法获取实时行情的问题
    • 新增 us_index_mapping 模块,将用户输入(如 SPX映射为 Yahoo Finance 符号(如 ^GSPC
    • 美股指数与美股股票日线数据直接路由至 YfinanceFetcher避免遍历不支持的数据源
    • 消除重复的美股识别逻辑,统一使用 is_us_stock_code() 函数

优化

  • 🔒 CI 门禁统一P0
    • 新增 scripts/ci_gate.sh 作为后端门禁单一入口
    • 主 CI 改为 backend-gatedocker-buildweb-gate 三段式
    • CI 触发改为所有 PR避免 Required Checks 因路径过滤缺失而卡住合并
    • web-gate 支持前端路径变更按需触发
    • 新增 network-smoke 工作流承载非阻断网络场景回归(pytest -m network + test.sh quick
  • 🔍 PR 审查门槛收紧P0
    • pr-review 中 flake8 严重错误改为阻断,不再仅告警
  • 📦 发布链路收敛P0
    • docker-publish 调整为 tag 主触发,并增加发布前门禁校验
    • 手动发布增加 release_tag 输入与 semver/changelog 强校验,避免绕过版本规范
    • 发布前新增 README.mddocs/CHANGELOG.md 校验
    • 发布前新增 Docker smoke关键模块导入
  • 📝 PR 模板升级P0
    • 增加背景、范围、验证命令与结果、回滚方案、Issue 关联等必填项
  • 🤖 AI 审查覆盖增强P0
    • pr-review.github/workflows/**.github/scripts/** 纳入可审查范围
    • 修复自动标签步骤在 pull_request_target 事件下不执行的问题
    • 新增 AI_REVIEW_STRICT 开关,可选将 AI 审查失败升级为阻断

新增

  • 大盘复盘可选区域 (Issue #299)
    • 支持 MARKET_REVIEW_REGION 环境变量cnA股、us美股、both两者
    • us 模式适合仅关注美股的用户,使用 SPX/纳斯达克/道指/VIX 等指数both 模式可同时复盘 A 股与美股
    • 默认 cn保持向后兼容
  • 📊 仅分析结果摘要 (Issue #262)
    • 支持 REPORT_SUMMARY_ONLY 环境变量,设为 true 时只推送汇总,不含个股详情
    • 默认 false,多股时适合快速浏览
  • 新闻时效性与乖离率优化 (Issue #296)
    • NEWS_MAX_AGE_DAYS:新闻最大时效(天),默认 3避免使用过时信息
    • BIAS_THRESHOLD:乖离率阈值(%),默认 5.0,可配置
    • 强势趋势股(多头排列且趋势强度 ≥70自动放宽乖离率到 1.5 倍,避免错杀 LITE/SNDK 等趋势股
    • AI System Prompt 增加 PE 估值关注和强势趋势放宽软性引导
  • 📷 Markdown 转图片 (Issue #289)
    • 支持 MARKDOWN_TO_IMAGE_CHANNELS 配置,对 Telegram、企业微信、自定义 WebhookDiscord、邮件以图片形式发送报告
    • 邮件为内联附件,增强对不支持 HTML 客户端的兼容性
    • 需安装 wkhtmltopdfimgkit
  • 🤖 Anthropic Claude API 支持 (Issue #257)
    • 支持 ANTHROPIC_API_KEYANTHROPIC_MODELANTHROPIC_TEMPERATUREANTHROPIC_MAX_TOKENS 环境变量
    • AI 分析优先级Gemini > Anthropic > OpenAI
  • 📷 从图片识别股票代码 (Issue #257)
    • 上传自选股截图,通过 Vision LLM 自动提取股票代码
    • 设置页「基础设置」中新增「从图片添加」区块
    • API: POST /api/v1/stocks/extract-from-image(表单字段 file
    • 支持 JPEG/PNG/WebP/GIF最大 5MB
    • 支持 OPENAI_VISION_MODEL 单独配置图片识别模型(部分第三方模型不支持图像)
  • ⚙️ 通达信数据源手动配置 (Issue #257)
    • 支持 PYTDX_HOSTPYTDX_PORTPYTDX_SERVERS 配置自建通达信服务器
  • 🔐 Webhook 证书校验开关 (Issue #265)
    • 支持 WEBHOOK_VERIFY_SSL 环境变量,可关闭 HTTPS 证书校验以支持自签名证书
    • 默认保持校验,关闭存在 MITM 风险,仅建议在可信内网使用
  • 📧 股票分组发往不同邮箱 (Issue #268)
    • 支持 STOCK_GROUP_N + EMAIL_GROUP_N 配置,不同股票组报告发送到对应邮箱
    • 大盘复盘发往所有配置的邮箱
  • 📧 个股与大盘复盘合并推送 (Issue #190)
    • 支持 MERGE_EMAIL_NOTIFICATION 环境变量,设为 true 时将个股分析和大盘复盘合并为一次推送
    • 默认 false,减少邮件数量、降低被识别为垃圾邮件的风险

优化

  • 图片识别 API 仅保留 file 表单字段,移除 image 字段以统一接口
  • 图片识别 Vision API 超时 60 秒,前端请求超时 60 秒
  • 配置冲突409时自动刷新并提示用户再次合并
  • 请求超时/超频时展示专属错误提示

[3.0.5] - 2026-02-08

修复

  • 🐛 修复信号 emoji 与建议不一致的问题(复合建议如"卖出/观望"未正确映射)
  • 🐛 修复 *ST 股票名在微信/Dashboard 中 markdown 转义问题
  • 🐛 修复 idx.amount 为 None 时大盘复盘 TypeError
  • 🐛 修复分析 API 返回 report=None 及 ReportStrategy 类型不一致问题
  • 🐛 修复 Tushare 返回类型错误dict → UnifiedRealtimeQuote及 API 端点指向

新增

  • 📊 大盘复盘报告注入结构化数据(涨跌统计、指数表格、板块排名)
  • 🔍 搜索结果 TTL 缓存500 条上限FIFO 淘汰)
  • 🔧 Tushare Token 存在时自动注入实时行情优先级
  • 📰 新闻摘要截断长度 50→200 字

优化

  • 补充行情字段请求限制为最多 1 次,减少无效请求

[3.0.4] - 2026-02-07

新增

  • 📈 回测引擎 (PR #269)
    • 新增基于历史分析记录的回测系统,支持收益率、胜率、最大回撤等指标评估
    • WebUI 集成回测结果展示

[3.0.3] - 2026-02-07

修复

  • 🐛 修复狙击点位数据解析错误问题 (PR #271)

[3.0.2] - 2026-02-06

新增

  • ✉️ 可配置邮件发送者名称 (PR #272)
  • 🌐 外国股票支持英文关键词搜索

[3.0.1] - 2026-02-06

修复

  • 🐛 修复 ETF 实时行情获取、市场数据回退、企业微信消息分块问题
  • 🔧 CI 流程简化

[3.0.0] - 2026-02-06

移除

  • 🗑️ 移除旧版 WebUI
    • 删除基于 http.server.ThreadingHTTPServer 的旧版 WebUIweb/ 包)
    • 旧版 WebUI 的功能已完全被 FastAPIapi/+ React 前端替代
    • --webui / --webui-only 命令行参数标记为弃用,自动重定向到 --serve / --serve-only
    • WEBUI_ENABLED / WEBUI_HOST / WEBUI_PORT 环境变量保持兼容,自动转发到 FastAPI 服务
    • webui.py 保留为兼容入口,启动时直接调用 FastAPI 后端
    • Docker Compose 中移除 webui 服务定义,统一使用 server 服务

变更

  • ♻️ 服务层重构
    • web/services.py 中的异步任务服务迁移至 src/services/task_service.py
    • Bot 分析命令(bot/commands/analyze.py)改为使用 src.services.task_service
    • Docker 环境变量 WEBUI_HOST/WEBUI_PORT 更名为 API_HOST/API_PORT(旧名仍兼容)

2.3.0 - 2026-02-01

新增

  • 🇺🇸 增强美股支持 (Issue #153)
    • 实现基于 Akshare 的美股历史数据获取 (ak.stock_us_daily())
    • 实现基于 Yfinance 的美股实时行情获取(优先策略)
    • 增加对不支持数据源Tushare/Baostock/Pytdx/Efinance的美股代码过滤和快速降级

修复

  • 🐛 修复 AMD 等美股代码被误识别为 A 股的问题 (Issue #153)

2.2.5 - 2026-02-01

新增

  • 🤖 AstrBot 消息推送 (PR #217)
    • 新增 AstrBot 通知渠道,支持推送到 QQ 和微信
    • 支持 HMAC SHA256 签名验证,确保通信安全
    • 通过 ASTRBOT_URLASTRBOT_TOKEN 配置

2.2.4 - 2026-02-01

新增

  • ⚙️ 可配置数据源优先级 (PR #215)
    • 支持通过环境变量(如 YFINANCE_PRIORITY=0)动态调整数据源优先级
    • 无需修改代码即可优先使用特定数据源(如 Yahoo Finance

2.2.3 - 2026-01-31

修复

  • 📦 更新 requirements.txt增加 lxml_html_clean 依赖以解决兼容性问题

2.2.2 - 2026-01-31

修复

  • 🐛 修复代理配置区分大小写问题 (fixes #211)

2.2.1 - 2026-01-31

修复

  • 🐛 YFinance 兼容性修复 (PR #210, fixes #209)
    • 修复新版 yfinance 返回 MultiIndex 列名导致的数据解析错误

2.2.0 - 2026-01-31

新增

  • 🔄 多源回退策略增强
    • 实现了更健壮的数据获取回退机制 (feat: multi-source fallback strategy)
    • 优化了数据源故障时的自动切换逻辑

修复

  • 🐛 修复 analyzer 运行后无法通过改 .env 文件的 stock_list 内容调整跟踪的股票

2.1.14 - 2026-01-31

文档

  • 📝 更新 README 和优化 auto-tag 规则

2.1.13 - 2026-01-31

修复

  • 🐛 Tushare 优先级与实时行情 (Fixed #185)
    • 修复 Tushare 数据源优先级设置问题
    • 修复 Tushare 实时行情获取功能

2.1.12 - 2026-01-30

修复

  • 🌐 修复代理配置在某些情况下的区分大小写问题
  • 🌐 修复本地环境禁用代理的逻辑

2.1.11 - 2026-01-30

优化

  • 🚀 飞书消息流优化 (PR #192)
    • 优化飞书 Stream 模式的消息类型处理
    • 修改 Stream 消息模式默认为关闭,防止配置错误运行时报错

2.1.10 - 2026-01-30

合并

  • 📦 合并 PR #154 贡献

2.1.9 - 2026-01-30

新增

  • 💬 微信文本消息支持 (PR #137)
    • 新增微信推送的纯文本消息类型支持
    • 添加 WECHAT_MSG_TYPE 配置项

2.1.8 - 2026-01-30

修复

  • 🐛 修正日志中 API 提供商显示错误 (PR #197)

2.1.7 - 2026-01-30

修复

  • 🌐 禁用本地环境的代理设置,避免网络连接问题

2.1.6 - 2026-01-29

新增

  • 📡 Pytdx 数据源 (Priority 2)
    • 新增通达信数据源,免费无需注册
    • 多服务器自动切换
    • 支持实时行情和历史数据
  • 🏷️ 多源股票名称解析
    • DataFetcherManager 新增 get_stock_name() 方法
    • 新增 batch_get_stock_names() 批量查询
    • 自动在多数据源间回退
    • Tushare 和 Baostock 新增股票名称/列表方法
  • 🔍 增强搜索回退
    • 新增 search_stock_price_fallback() 用于数据源全部失败时
    • 新增搜索维度:市场分析、行业分析
    • 最大搜索次数从 3 增加到 5
    • 改进搜索结果格式(每维度 4 条结果)

改进

  • 更新搜索查询模板以提高相关性
  • 增强 format_intel_report() 输出结构

2.1.5 - 2026-01-29

新增

  • 📡 新增 Pytdx 数据源和多源股票名称解析功能

2.1.4 - 2026-01-29

文档

  • 📝 更新赞助商信息

2.1.3 - 2026-01-28

文档

  • 📝 重构 README 布局
  • 🌐 新增繁体中文翻译 (README_CHT.md)

修复

  • 🐛 修复 WebUI 无法输入美股代码问题
    • 输入框逻辑改成所有字母都转换成大写
    • 支持 . 的输入(如 BRK.B

2.1.2 - 2026-01-27

修复

  • 🐛 修复个股分析推送失败和报告路径问题 (fixes #166)
  • 🐛 修改 CR 错误,确保微信消息最大字节配置生效

2.1.1 - 2026-01-26

新增

  • 🔧 添加 GitHub Actions auto-tag 工作流
  • 📡 添加 yfinance 兜底数据源及数据缺失警告

修复

  • 🐳 修复 docker-compose 路径和文档命令
  • 🐳 Dockerfile 补充 copy src 文件夹 (fixes #145)

2.1.0 - 2026-01-25

新增

  • 🇺🇸 美股分析支持
    • 支持美股代码直接输入(如 AAPL, TSLA
    • 使用 YFinance 作为美股数据源
  • 📈 MACD 和 RSI 技术指标
    • MACD趋势确认、金叉死叉信号零轴上金叉、金叉、死叉
    • RSI超买超卖判断超卖、强势、超买⚠️
    • 指标信号纳入综合评分系统
  • 🎮 Discord 推送支持 (PR #124, #125, #144)
    • 支持 Discord Webhook 和 Bot API 两种方式
    • 通过 DISCORD_WEBHOOK_URLDISCORD_BOT_TOKEN + DISCORD_CHANNEL_ID 配置
  • 🤖 机器人命令交互
    • 钉钉机器人支持 /分析 股票代码 命令触发分析
    • 支持 Stream 长连接模式
  • 🌡️ AI 温度参数可配置 (PR #142)
    • 支持自定义 AI 模型温度参数
  • 🐳 Zeabur 部署支持
    • 添加 Zeabur 镜像部署工作流
    • 支持 commit hash 和 latest 双标签

重构

  • 🏗️ 项目结构优化
    • 核心代码移至 src/ 目录,根目录更清爽
    • 文档移至 docs/ 目录
    • Docker 配置移至 docker/ 目录
    • 修复所有 import 路径,保持向后兼容
  • 🔄 数据源架构升级
    • 新增数据源熔断机制,单数据源连续失败自动切换
    • 实时行情缓存优化,批量预取减少 API 调用
    • 网络代理智能分流,国内接口自动直连
  • 🤖 Discord 机器人重构为平台适配器架构

修复

  • 🌐 网络稳定性增强
    • 自动检测代理配置,对国内行情接口强制直连
    • 修复 EfinanceFetcher 偶发的 ProtocolError
    • 增加对底层网络错误的捕获和重试机制
  • 📧 邮件渲染优化
    • 修复邮件中表格不渲染问题 (#134)
    • 优化邮件排版,更紧凑美观
  • 📢 企业微信推送修复
    • 修复大盘复盘推送不完整问题
    • 增强消息分割逻辑,支持更多标题格式
    • 增加分批发送间隔,避免限流丢失
  • 👷 CI/CD 修复
    • 修复 GitHub Actions 中路径引用的错误

2.0.0 - 2026-01-24

新增

  • 🇺🇸 美股分析支持
    • 支持美股代码直接输入(如 AAPL, TSLA
    • 使用 YFinance 作为美股数据源
  • 🤖 机器人命令交互 (PR #113)
    • 钉钉机器人支持 /分析 股票代码 命令触发分析
    • 支持 Stream 长连接模式
    • 支持选择精简报告或完整报告
  • 🎮 Discord 推送支持 (PR #124)
    • 支持 Discord Webhook 推送
    • 添加 Discord 环境变量到工作流

修复

  • 🐳 修复 WebUI 在 Docker 中绑定 0.0.0.0 (fixed #118)
  • 🔔 修复飞书长连接通知问题
  • 🐛 修复 analysis_delay 未定义错误
  • 🔧 启动时 config.py 检测通知渠道,修复已配置自定义渠道情况下仍然提示未配置问题

改进

  • 🔧 优化 Tushare 优先级判断逻辑,提升封装性
  • 🔧 修复 Tushare 优先级提升后仍排在 Efinance 之后的问题
  • ⚙️ 配置 TUSHARE_TOKEN 时自动提升 Tushare 数据源优先级
  • ⚙️ 实现 4 个用户反馈 issue (#112, #128, #38, #119)

1.6.0 - 2026-01-19

新增

  • 🖥️ WebUI 管理界面及 API 支持PR #72
    • 全新 Web 架构分层设计Server/Router/Handler/Service
    • 核心 API支持 /analysis (触发分析), /tasks (查询进度), /health (健康检查)
    • 交互界面:支持页面直接输入代码并触发分析,实时展示进度
    • 运行模式:新增 --webui-only 模式,仅启动 Web 服务
    • 解决了 #70 的核心需求(提供触发分析的接口)
  • ⚙️ GitHub Actions 配置灵活性增强(#79
    • 支持从 Repository Variables 读取非敏感配置(如 STOCK_LIST, GEMINI_MODEL
    • 保持对 Secrets 的向下兼容

修复

  • 🐛 修复企业微信/飞书报告截断问题(#73
    • 移除 notification.py 中不必要的长度硬截断逻辑
    • 依赖底层自动分片机制处理长消息
  • 🐛 修复 GitHub Workflow 环境变量缺失(#80
    • 修复 CUSTOM_WEBHOOK_BEARER_TOKEN 未正确传递到 Runner 的问题

1.5.0 - 2026-01-17

新增

  • 📲 单股推送模式(#55
    • 每分析完一只股票立即推送,不用等全部分析完
    • 命令行参数:--single-notify
    • 环境变量:SINGLE_STOCK_NOTIFY=true
  • 🔐 自定义 Webhook Bearer Token 认证(#51
    • 支持需要 Token 认证的 Webhook 端点
    • 环境变量:CUSTOM_WEBHOOK_BEARER_TOKEN

1.4.0 - 2026-01-17

新增

  • 📱 Pushover 推送支持PR #26
    • 支持 iOS/Android 跨平台推送
    • 通过 PUSHOVER_USER_KEYPUSHOVER_API_TOKEN 配置
  • 🔍 博查搜索 API 集成PR #27
    • 中文搜索优化,支持 AI 摘要
    • 通过 BOCHA_API_KEYS 配置
  • 📊 Efinance 数据源支持PR #59
    • 新增 efinance 作为数据源选项
  • 🇭🇰 港股支持PR #17
    • 支持 5 位代码或 HK 前缀(如 hk00700hk1810

修复

  • 🔧 飞书 Markdown 渲染优化PR #34
    • 使用交互卡片和格式化器修复渲染问题
  • ♻️ 股票列表热重载PR #42 修复)
    • 分析前自动重载 STOCK_LIST 配置
  • 🐛 钉钉 Webhook 20KB 限制处理
    • 长消息自动分块发送,避免被截断
  • 🔄 AkShare API 重试机制增强
    • 添加失败缓存,避免重复请求失败接口

改进

  • 📝 README 精简优化
    • 高级配置移至 docs/full-guide.md

1.3.0 - 2026-01-12

新增

  • 🔗 自定义 Webhook 支持
    • 支持任意 POST JSON 的 Webhook 端点
    • 自动识别钉钉、Discord、Slack、Bark 等常见服务格式
    • 支持配置多个 Webhook逗号分隔
    • 通过 CUSTOM_WEBHOOK_URLS 环境变量配置

修复

  • 📝 企业微信长消息分批发送
    • 解决自选股过多时内容超过 4096 字符限制导致推送失败的问题
    • 智能按股票分析块分割,每批添加分页标记(如 1/3, 2/3
    • 批次间隔 1 秒,避免触发频率限制

1.2.0 - 2026-01-11

新增

  • 📢 多渠道推送支持
    • 企业微信 Webhook
    • 飞书 Webhook新增
    • 邮件 SMTP新增
    • 自动识别渠道类型,配置更简单

改进

  • 统一使用 NOTIFICATION_URL 配置,兼容旧的 WECHAT_WEBHOOK_URL
  • 邮件支持 Markdown 转 HTML 渲染

1.1.0 - 2026-01-11

新增

  • 🤖 OpenAI 兼容 API 支持
    • 支持 DeepSeek、通义千问、Moonshot、智谱 GLM 等
    • Gemini 和 OpenAI 格式二选一
    • 自动降级重试机制

1.0.0 - 2026-01-10

新增

  • 🎯 AI 决策仪表盘分析
    • 一句话核心结论
    • 精确买入/止损/目标点位
    • 检查清单(⚠️
    • 分持仓建议(空仓者 vs 持仓者)
  • 📊 大盘复盘功能
    • 主要指数行情
    • 涨跌统计
    • 板块涨跌榜
    • AI 生成复盘报告
  • 🔍 多数据源支持
    • AkShare主数据源免费
    • Tushare Pro
    • Baostock
    • YFinance
  • 📰 新闻搜索服务
    • Tavily API
    • SerpAPI
  • 💬 企业微信机器人推送
  • 定时任务调度
  • 🐳 Docker 部署支持
  • 🚀 GitHub Actions 零成本部署

技术特性

  • Gemini AI 模型gemini-3-flash-preview
  • 429 限流自动重试 + 模型切换
  • 请求间延时防封禁
  • 多 API Key 负载均衡
  • SQLite 本地数据存储