7f93d6b0f5
- 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.
3.1 KiB
3.1 KiB
调研结论(可行性:具备)
现状
- 详情面板
zhixing-web/src/features/selection/components/signal-detail-panel.tsx只展示名称/代码/价格/指标,无行业板块;SelectionStockResult类型也无相关字段。 - 后端
market_stock表没同步 tusharestock_basic.industry;但项目已有 sector_radar 模块,通过 tusharedc_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 模块内新增"按股票反查",不跨模块读表)
modules/sector_radar/infrastructure/postgres.py:新增读查询——按stock_code查membership_status='available'且trade_date <= 目标日的最近可用快照(带出实际 membership 的 trade_date,point-in-time 语义,不用最新日期冒充历史)。modules/sector_radar/application/read.py:新增用例,输入ts_code + trade_date,返回按类型分组的板块列表(industry 全部、concept 排序后默认截断 20 个)。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)
- 新增 API 调用 + TanStack Query hook(
enabled: !!stock,按stock.target_trade_date查询,随详情面板选中切换)。 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