Skip to content

feat(portfolio): 机会展示评分联动实盘市场集中度 - #116

Open
andyaa423 wants to merge 1 commit into
TNT-Likely:mainfrom
andyaa423:codex/portfolio-risk-opportunities
Open

andyaa423 wants to merge 1 commit into
TNT-Likely:mainfrom
andyaa423:codex/portfolio-risk-opportunities

Conversation

@andyaa423

Copy link
Copy Markdown
Contributor

背景

组合诊断已提醒某市场持仓集中,但机会展示仍使用纯信号分,可能继续突出同市场建仓机会。当前机会页主要读取策略信号,候选列表是备用路径,需要同时覆盖。

变更内容

  • 将实盘持仓汇总、行情及汇率工具抽到 portfolio/holdings.py,账户 API 保留导入名称,策略不反向依赖账户 API。
  • 新增只读集中度后处理,市场占已投资金额达到 70% 时展示分乘 0.7,保留 raw_score/raw_rank_score 与可见说明;卖出、减仓不降权。
  • 候选读取、策略信号 API 与首页机会精选应用同一处理,首页持仓风险列表维持原逻辑。机会页 1–10 分同步并单列集中度扣分说明。
  • 30 秒单槽缓存,持仓数量、成本、市场、账户启用状态变化即失效。读取失败保留原分并提示集中度暂不可用。
  • 首页和机会页显示橙色提示、原始分及悬浮原因;数据库原分和 strategy_engine 评分算法不变。

验证

  • python -m pytest tests/test_opportunity_concentration.py tests/test_portfolio_accounts.py tests/test_portfolio_diagnostics.py tests/test_portfolio_result_cache.py --noconftest -q:22 passed。
  • 覆盖阈值边界、CN 100% 与其他市场、无持仓、减仓/卖出、幂等、多账户与汇率、缓存失效、失败降级、两个实际页面接口、候选排序及不写回数据库。
  • node node_modules/typescript/bin/tsc -b:通过。
  • node node_modules/vitest/vitest.mjs run tests/concentration-notice.test.tsx:3 passed。
  • node node_modules/vite/bin/vite.js build:通过。
  • git diff HEAD^ --check:通过。对齐上游 f8c2b5e,三项组合后端测试 28 passed。

边界与风险

  • 集中度按持仓内部市值计算,不是总资产敞口;不隐藏候选、不更改信号动作、不涉及下单或模型选择。
  • 保留原有原始分筛选及数据库取数上限,在取出的集合内按展示分排序;不是全库集中度重排。
  • 行情缺失仍使用成本估值,外汇仍有既有缓存回退。缓存未命中需要行情读取,最多约 30 秒保留旧估值。
  • 未接入真实账户进行浏览器人工验收;测试使用合成持仓且不访问真实模型。
  • 存在既有 Pydantic 弃用、Browserslist 过期和大包提示。

后续计划

  • 真实账户验收 CN 集中组合在首页与机会页的提示,以及首次请求延迟。

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