feat(sector-radar): add weighted scores and rank-change views

This commit is contained in:
yuxuanhui
2026-09-21 23:57:55 +08:00
parent 669e89d3c3
commit b9981aa48d
45 changed files with 2468 additions and 320 deletions
+33
View File
@@ -123,3 +123,36 @@ docker compose -f docker-compose.prod.yml --profile jobs run --rm sector-radar-b
`moneyflow_dc` 先按交易日拉取全市场快照;即使首批达到 6000 行,也会根据上述候选股票检查实际覆盖,并用固定两路 worker 逐只补拉缺失代码。全市场请求、补拉和 retry 在同一 adapter 内共享 `ZHIXING_SECTOR_RADAR_REQUEST_INTERVAL_SECONDS`(默认 0.2 秒)的请求启动间隔;空分片或普通请求重试耗尽会保留为覆盖缺口并形成 `partial`,来源返回错误日期、错误代码、重复键或分片再次触顶则整次构建失败。该限流只在单进程 adapter 内生效,生产调度仍不得让 `market-data-sync` 与 `sector-radar-build` 重叠运行。
重复输入通过内容 hash 复用已有成功发布,不产生无意义修订;同一目标日由 PostgreSQL advisory lock 阻止并发构建。`success` 或 `unchanged` 返回 0,覆盖率不足的 `partial` 返回 2,输入、上游、锁或基础设施失败返回 1。`partial`/`failed` 会保留审计,但读取端只选择 `success` 作为 last-good。当前版本只提供手工和外部调度入口,不新增生产 Cron;待真实账号 capability、到达时点和首轮回填验证完成后再单独启用调度。
### 升级加权评分并重算历史
`--recompute` 只使用数据库中已有的板块聚合事实、交易日历和源快照,生成新的评分与排名发布;不调用 Tushare,不需要 token,不修改旧发布或历史成员。它与重新拉取上游的普通构建不同,不能和 `--retry-publication-id` 同用。
在生产项目目录中,将代码更新到包含加权评分的提交,沿用生产 `.env`,依次执行以下命令;每步成功后再执行下一步。Compose 为不同服务使用不同镜像名,因此除服务端和前端外,也要构建迁移与重算 Job 的新镜像。
```bash
# 构建新代码,暂不替换运行中的服务
docker compose -f docker-compose.prod.yml --profile jobs build \
server web migrate sector-radar-build
# 先增加 nullable weighted_score 列(0010),再启动新服务
docker compose -f docker-compose.prod.yml --profile jobs run --rm --no-deps migrate
docker compose -f docker-compose.prod.yml up -d server web
# 使用新 Job 镜像,按交易日顺序重算已有历史
docker compose -f docker-compose.prod.yml --profile jobs run --rm --no-deps sector-radar-build \
--recompute --start-date 2026-08-28 --end-date 2026-09-21
```
这里的日期是示例,应覆盖需要展示的已有历史,区间包含起止日。单日评分需要连续 5 个交易日成交额,波段评分需要连续 10 个交易日流入率;近 5 日波段排名变化还要求更早的对比日也有足够历史并已采用同一算法版本。首次升级建议从最早已有成功发布开始重算整个展示区间。缺少交易日、板块或可比版本时显示“—”,重算不会补造缺失数据。
输出的 `outcomes` 列出逐日结果;整个命令 `status` 为 `success` 或 `unchanged` 且退出码为 0 表示完成。相同输入重复运行返回 `unchanged`;失败会保留原 last-good,可修复原因后重跑同一区间。重算期间避免同时启动覆盖相同日期的普通构建或另一个重算任务。
以后只重算某一天,可复用已构建的新 Job 镜像:
```bash
docker compose -f docker-compose.prod.yml --profile jobs run --rm --no-deps sector-radar-build \
--recompute --trade-date 2026-09-21
```
`--no-deps` 用于上述已手动完成迁移的流程,避免再次启动依赖服务。`sector-radar-build` 服务配置了同名 entrypoint,后面直接传 `--recompute` 等参数即可。