Files
zhixing-system/.zcode/plans/plan-sess_24b98073-00f4-4b58-a624-fbfe486bcf2a.md
T
yuxuanhui 7f93d6b0f5 feat(sector_radar): enhance sector radar functionality with active moneyflow and detailed metrics
- Introduced ActiveMoneyflowSource to fetch optional active-order flow, enhancing the sector radar's data capabilities.
- Updated StockFactRecord and DailyAggregateRecord to include pct_change and active_buy_net_amount_yuan for improved financial insights.
- Modified the build process to incorporate active moneyflow data without invalidating main rankings on failure.
- Enhanced the HTTP API to return detailed sector history and metrics, including pct_change and active buy metrics for members.
- Updated tests to validate the new functionality and ensure data integrity across various scenarios.
2026-09-06 16:06:17 +08:00

3.1 KiB
Raw Blame History

调研结论(可行性:具备)

现状

  • 详情面板 zhixing-web/src/features/selection/components/signal-detail-panel.tsx 只展示名称/代码/价格/指标,无行业板块;SelectionStockResult 类型也无相关字段。
  • 后端 market_stock 表没同步 tushare stock_basic.industry;但项目已有 sector_radar 模块,通过 tushare dc_index/dc_member 每日同步"行业板块 + 概念板块"的成分股快照到 PostgreSQL 表 sector_radar_membership(trade_date + sector_type=industry/concept + sector_code/name + stock_code),只是目前只暴露了板块级 rankings 端点,没有"按股票反查所属板块"的接口——这就是缺口的全部。
  • 已确认决策:数据口径复用 sector_radar(DC 行业+概念);仅详情面板展示,列表行不动。

实施方案

第 0 步:数据验证(前置)

启动 docker compose 的 PostgreSQL,检查 sector_radar_membership 按交易日的覆盖情况。若选股目标日期无快照,运行现有 CLI sector-radar-build 回补。若 dc_member 接口因 tushare 积分不足失败,回退方案是给 market_stock 加 stock_basic.industry 列(Alembic 迁移),届时向你说明。

后端(sector_radar 模块内新增"按股票反查",不跨模块读表)

  1. modules/sector_radar/infrastructure/postgres.py:新增读查询——按 stock_code 查 membership_status='available' 且 trade_date <= 目标日 的最近可用快照(带出实际 membership 的 trade_date,point-in-time 语义,不用最新日期冒充历史)。
  2. modules/sector_radar/application/read.py:新增用例,输入 ts_code + trade_date,返回按类型分组的板块列表(industry 全部、concept 排序后默认截断 20 个)。
  3. modules/sector_radar/presentation/http.py:新增端点 GET /api/v1/sector-radar/stocks/{ts_code}/membership?trade_date=YYYY-MM-DD&limit=20 响应:{ ts_code, trade_date, membership_trade_date, industries: [{code,name}], concepts: [{code,name}], concept_total },遵循 http-api-contracts spec(Pydantic 边界模型)。

前端(selection feature)

  1. 新增 API 调用 + TanStack Query hook(enabled: !!stock,按 stock.target_trade_date 查询,随详情面板选中切换)。
  2. signal-detail-panel.tsx:股票名/代码/价格下方新增两行展示——
    • 行业:行业标签(通常 1 个)
    • 所属板块:概念板块 chips,最多显示 8 个 + "等 N 个" 加载中显示占位文案,无数据时静默隐藏(不打扰无板块数据的股票)。

测试与验证

  • 后端:读用例单测(命中/无快照/截断)+ http 端点测试,参照 sector_radar 现有测试。
  • 前端:vitest 组件测试 + typecheck/lint。
  • 端到端:起 server + web,在 /selection 选一只股票确认行业与板块正确显示、无数据股票正常降级。

涉及文件

  • zhixing-server/.../modules/sector_radar/{application/read.py, infrastructure/postgres.py, presentation/http.py}
  • zhixing-web/src/features/selection/api/*(新 query)
  • zhixing-web/src/features/selection/components/signal-detail-panel.tsx