docs/market-support.md
当前阶段支持手动输入日本、韩国股票的 Yahoo Finance 后缀代码,进入既有个股分析、历史保存和基础报告展示链路。Web 自动补全内置一批常用日股/韩股种子索引,支持按 suffix 代码、中英文名称或常用别名搜索。
支持格式:
7203.T、6758.T005930.KS035720.KQ约束与边界:
005930、000660 等裸码命中 005930.KS、000660.KS 等日韩条目,则按命中的市场提交分析;若股票池未命中,仍按既有 6 位数字代码规则默认落到 A 股语义,并保留为可追踪的跨市场歧义边界。YfinanceFetcher,不尝试 AkShare、Tushare、Efinance、Pytdx、Baostock 等 A 股专属数据源;yfinance 报价会尽量带上 market、currency、data_quality、missing_fields 等质量元数据。not_supported 降级,offshore 基本面上下文也会标记 provider、as_of、data_quality 和缺失块。jp: XTKS / Asia/Tokyo 与 kr: XKRX / Asia/Seoul。若本地 exchange-calendars 版本缺少对应日历,既有 fail-open/fail-closed 语义保持不变。兼容性与回退说明(针对结构化检测命中项):
#1815 本次仅新增 yfinance 报价/基本面上下文中的可选字段元数据(如 market、currency、data_quality、missing_fields、provider),未改动 LLM provider/model/base URL、配置 Schema、运行时环境变量、数据库字段、存量缓存序列化或消息协议版本。yfinance fetch 路径(含 Ticker/history/fast_info)与既有兜底逻辑;没有新增或迁移 API 网关/host,YFINANCE_PRIORITY 是唯一受影响的可见参数。JP/KR 主指数与 Yahoo symbol 对应如下(可核验):
^N225(https://finance.yahoo.com/quote/%5EN225/)^TOPX(https://finance.yahoo.com/quote/%5ETOPX/)^KS11(https://finance.yahoo.com/quote/%5EKS11/)^KQ11(https://finance.yahoo.com/quote/%5EKQ11/)requirements.txt 中 yfinance>=0.2.0,回归覆盖路径见 tests/test_yfinance_jp_kr_indices.py 与 tests/test_yfinance_hk_indices.py。MARKET_REVIEW_REGION 会保留合法逗号子集(如 cn,us)并保持 both 全量行为,非法值或空值回退到 cn,不会清空或迁移已保存配置。None/空,主流程继续可按其余市场输出或直接降级。data_provider/base.py 与 realtime_types.py 中按现有 getattr/可选字段约定向下游透传,不强制读写新增字段;无配置迁移脚本,未观察到 provider/model/base URL fallback 路径变更。jp/kr MarketSymbol 及路由扩展恢复旧行为。不承诺项:
回滚方式:移除 jp/kr 市场识别、交易日历注册、YFinance 路由扩展、Web/API 类型放行、scripts/stock_index_seeds/ 日韩种子索引,并删除本文档中的能力声明。
大盘复盘 MARKET_REVIEW_REGION 新增 jp 与 kr,并纳入 both 的多市场顺序:cn,hk,us,jp,kr。
支持范围:
jp:通过 Yahoo Finance 获取日经225 ^N225 与东证指数 ^TOPX,输出日股大盘复盘。可复核页面:
kr:通过 Yahoo Finance 获取 KOSPI ^KS11 与 KOSDAQ ^KQ11,输出韩股大盘复盘。可复核页面:
MARKET_REVIEW_REGION 文本框输入逗号分隔子集(如 cn,jp、cn,us,jp,kr);交易日检查会按 XTKS / Asia/Tokyo 与 XKRX / Asia/Seoul 过滤 both 中当日开市市场。说明(兼容性与验收口径):
线上数据可用性来自 Yahoo Finance 指数页面与接口契约,当前实现仅覆盖 data_provider/yfinance_fetcher.py 的指数路由与降级行为;不对实时行情连通性作稳定性承诺。
与该条目标相关的本地自动化验证默认使用离线回归:tests/test_yfinance_jp_kr_indices.py、tests/test_yfinance_hk_indices.py(共性映射/回退)与 tests/test_trading_calendar.py(交易日过滤)。如果要补充实时可用性复核,可在联网环境直接访问上述 Yahoo Finance 页面进行一次性抽检。
外部兼容性边界(当前实现默认假设):
yfinance(版本下限 requirements.txt 中的 yfinance>=0.2.0)^N225、^TOPX、^KS11、^KQ11 必须在 Yahoo Finance 端有可检索 quote 页面;无法检索视为索引级不可用,由 market_review fail-open 机制退化到已有市场输出,不中断主流程。兼容验证(可复核):
python - <<'PY'
from yfinance import Ticker
for symbol in ("^N225", "^TOPX", "^KS11", "^KQ11"):
data = Ticker(symbol).history(period="5d")
print(symbol, "rows", len(data))
PY
边界:
breadth 仍只在有市场宽度数据时出现。exchange-calendars 缺少对应交易所日历,继续沿用既有交易日 fail-open/fail-closed 语义。回滚方式:从 MARKET_REVIEW_REGION 合法值、Web 设置枚举、MarketProfile/MarketStrategy、_MARKET_REVIEW_MARKETS 和本文档中移除 jp / kr。
当前阶段支持手动输入台湾股票的 Yahoo Finance 后缀代码,进入既有个股分析、历史保存和基础报告展示链路。TWSE 上市股票使用 .TW 后缀,TPEx 上柜(柜买)股票使用 .TWO 后缀,二者折叠为同一 tw 市场标签。本次覆盖市场识别(detection)、数据路由层、DecisionSignal/Portfolio/Intelligence 服务层与 API 市场枚举,以及 DecisionSignal/Portfolio 前端市场类型与筛选;台股股票索引/种子、Web 自动补全与告警(大盘红绿灯)市场放行仍作为后续 PR。对齐 #1718 日韩 MVP 模式。
支持格式:
2330.TW、0050.TW6488.TWO、5483.TWO00878.TW、006208.TW),较日股 .T 的 4-5 位更宽。约束与边界:
2330、00878 等不带后缀的代码不会进入台股语义(detect_market / get_market_for_stock 仅在显式 .TW/.TWO 后缀时返回 tw)。本次不引入任何台股股票索引/种子解析,故裸码不可能经本地/远程股票池被改写为台股 suffix;该索引解析(与 jp/kr 同款的裸码命中行为)属后续 PR。YfinanceFetcher,不尝试 AkShare、Tushare、Efinance、Pytdx、Baostock 等 A 股专属数据源。not_supported 降级。tw: XTAI / Asia/Taipei。TWSE 为 09:00–13:30 连续交易、无午休;收盘集合竞价暂不建模,与 jp/kr 一致。若本地 exchange-calendars 版本缺少对应日历,既有 fail-open/fail-closed 语义保持不变。^TWII 与柜买指数 ^TWOII。TwInstitutionalFetcher(data_provider/tw_institutional_fetcher.py)提供上市(TWSE T86,legacy rwd 端点)/ 上柜(TPEx OpenAPI)每日外资·投信·自营商·三大法人买卖超(单位:股数;按日期+市场做单日全市场缓存再过滤个股,TPEx 民国年转西元有单测覆盖)。接口失败/限流/空响应/字段缺失一律 fail-open 返回无数据,不中断分析;仅对 .TW/.TWO 生效,不改动现有市场流程。资料来源为政府开放资料,采「政府资料开放授权条款第 1 版」(OGDL v1,允许商用与再散布,需标示来源)。本次仅资料层 fetcher/parser/cache/tests,尚未接入报告展示、Web 展示、评分权重或 capital_flow_signal 派生。不承诺项:
回滚方式:移除 tw 市场识别、交易日历注册、YFinance 路由扩展与服务层/API 市场枚举及前端市场类型放行,并删除本文档中的能力声明。
Portfolio 允许 JP/KR 账户、交易和持仓快照进入现有链路,但会将账户/持仓快照标记为 data_quality=partial,并通过 limitations 明确 realtime_quote_best_effort、fx_and_cost_basis_partial、sector_and_risk_metrics_limited;不承诺 JPY/KRW 汇率、成本、市值、行业集中度或组合风险指标完整口径。
cn / hk / us。jp / kr;后端 normalize_market_region() 对 jp / kr 返回显式 unsupported 错误。MARKET_REVIEW_REGION 从固定枚举下拉收敛为自由文本输入,用于保存 cn,us,jp、cn,hk,us 等逗号分隔子集;该 UI 变化只影响大盘复盘配置,不影响 Market Light 告警市场枚举。MARKET_REVIEW_REGION 既有 cn、hk、us 可原样保留;若用户希望维持 JP/KR 扩展前 both 对应的三市场复盘边界,应改为 cn,hk,us;只有希望纳入五市场复盘时才继续使用 both 或显式配置 cn,hk,us,jp,kr。ConfigManager.apply_updates),保存/导入只写入提交的键,未提交的 LITELLM_MODEL、LITELLM_FALLBACK_MODELS、AGENT_LITELLM_MODEL、VISION_MODEL、OPENAI_BASE_URL 等旧值保留不清空。requirements.txt 的 litellm>=1.80.10,!=1.82.7,!=1.82.8,<2.0.0 为准;旧配置没有迁移脚本或清理分支,保存/导入仍只通过 ConfigManager.apply_updates 写入本次提交键。回退路径是恢复变更前 .env/配置备份中的 MARKET_REVIEW_REGION,或直接 revert 本 PR;未提交的 LITELLM_CONFIG、LLM_CHANNELS、LLM_OPENAI_*、LITELLM_MODEL、AGENT_LITELLM_MODEL、LITELLM_FALLBACK_MODELS、VISION_MODEL、OPENAI_* 等既有运行时配置不需要迁移。回归证据为 tests/test_system_config_service.py::SystemConfigServiceTestCase::test_update_market_review_region_does_not_trigger_runtime_model_cleanup 与 tests/test_config_env_compat.py::test_market_review_region_updates_do_not_change_llm_provider_model_contract。MARKET_REVIEW_REGION 渲染为可输入逗号分隔值的文本框。当前仓库不保存一次性截图证据,可替代证据为 apps/dsa-web/src/components/alerts/__tests__/AlertRuleForm.test.tsx、apps/dsa-web/src/components/settings/__tests__/SettingsField.test.tsx 和 apps/dsa-web/tests/system_config_i18n.test.ts 的断言。回滚方式:移除 Portfolio snapshot 的 data_quality / limitations 扩展,恢复告警前端/后端对市场枚举的旧边界说明;如需整体回滚,移除 jp/kr 市场识别、交易日历注册、YFinance 路由扩展、Web/API 类型放行、scripts/stock_index_seeds/ 日韩种子索引,并删除本文档中的能力声明。