6.9 KiB
盘中改判与信号聚合(2026-09-09 落地记录)
方案已实施完毕,本文改成落地记录:做了什么、实测读数是多少、怎么验证、怎么回退。 台账见两个仓库各自的
docs/复盘决定台账.md(持仓管理系统 001 到 005,择时决策系统 001 到 004)。
一、两件事各解决什么
第一件。 信号栏一行等于上游流里的一条原始消息,一只活跃票一天十来条散在好几个分组里。 现在点一下票名,抽屉里按时间倒序摊开它今天的全部信号。
第二件。 新建仓被研判驳回后,那只票当天就不再被评估。现在盘中输入确实变了就解除一次, 重新问一遍;同时择时决策系统新增一条主动通道,遍历候选池找今天转强的票。
二、实测读数(09-09 收盘,全部只读、未落任何表)
按代码回扫。 四方股份 16 条、0.36 秒,五路全部读到、没有触到回扫上限。第二次点同一只票走缓存,0.001 秒。
量比口径。 三只票交叉验证:
| 股票 | 较昨收 | 时段折算量比 | 与当天研判说法对不对得上 |
|---|---|---|---|
| 四方股份 | +7.58% | 1.128 | 对得上。10:12 驳回理由正是"今日突破量能未确认" |
| 长源电力 | +2.22% | 1.553 | 量比够但涨幅不够 |
| 洛阳钼业 | -0.82% | 0.806 | 都不够 |
解锁试算。 11 只被驳回的票按 11:30 那一刻算,一只都不解锁:
- 9 只较驳回价没走够 2%,其中 5 只在跌
- 四方股份的转多留痕在 10:05,早于 10:12 的驳回,按第一条解锁条件不算新信息
- 唯一接近的是 600875.SH,涨 4.73%、量比 2.408,只因为当天的驳回行是旧格式、没有基线快照,判不了"是不是相对驳回那一刻变强"
这说明阈值不松。部署之后新的驳回行都带基线快照,这类票会被正常解锁。
跨系统闭环。 持仓管理系统写候选池键,择时决策系统立刻读到,两侧算出的读数完全一致 (四方股份量比都是 1.128,长源电力都是 1.554)。这是"三处同源"那条纪律的运行时证据。
三、必须知道的三件事
一、改完之后不会立刻追高买入。 两只票的现价都高于择时买入区间上沿:
| 股票 | 买入区间 | 现价 |
|---|---|---|
| 四方股份 | 39.60 到 40.60 | 42.60 |
| 长源电力 | 24.25 到 25.38 | 26.18 |
即使解锁重问、研判放行、你在页面上点了头,落成指令之后择时仍会说"高于上沿,不追", 指令挂在窗口期里等价格回落。解锁重问买到的不是"立刻追高",而是"让这只票进入待办、等回调时自动买入"。 追高那条线一个字没改。
二、不追高那道闸量的是相对今日开盘,不是相对昨收。 四方股份今天较昨收涨 7.6%,较开盘是 -0.2%, 所以它其实从没被那道闸拦过。这次只登记口径,不改闸。
三、资金流开全量比原方案想的危险。 实施时查出两处:股票池门控总开关默认关着时覆盖面等于 全市场(日均一千三到一千六条,没底牌的票逐条走冷启动重算,可能一天几百次打满大模型队列); 流出侧会触发风控仲裁,大模型不可用时硬规则会直接判卖出。所以加了方向闸、覆盖面闸与冷启动配额, 第一阶段只放流入侧。详见择时决策系统台账 003。
四、验证命令
甲、持仓管理系统(在它所在的服务器上,仓库根目录)
单测。预期最后一行是 ALL SUITES PASS:
docker compose run --rm --no-deps -v "$PWD:/app" pms-web python scripts/run_tests.py
解锁判定试算。只读,一行都不写。预期打印当日被驳回的票与逐只的解锁判定:
docker compose run --rm --no-deps -v "$PWD:/app" pms-web python -c "from datetime import datetime; from app.services import proposal_service as ps, reask_service as rs; jk = ps._judge_rejected_open_keys(); print('当日被研判驳回:', len(jk), '只'); print('解锁:', rs.evaluate_all(jk, datetime.now()) or '(无)')"
全链试算,不落任何表。预期打印候选数与分流结果:
docker compose run --rm --no-deps -v "$PWD:/app" pms-web python -c "from app.services import proposal_service as p; import json; print(json.dumps(p.scan_and_route(dry_run=True), ensure_ascii=False)[:600])"
单票信号回扫。预期打印条数与耗时,五路都标 ok:
docker compose run --rm --no-deps -v "$PWD:/app" pms-web python -c "import json,time; from app.services import upstream_signals as u; t=time.time(); d=u.by_code('601126.SH', force=True); print('%d 条 %.2f 秒' % (len(d['timeline']), time.time()-t)); print(json.dumps(d['sources'], ensure_ascii=False))"
乙、择时决策系统(在它所在的服务器上,仓库根目录)
三个自检。每个预期最后一行都是 ALL OK:
docker exec trader_worker_brain python3 scripts/selftest_strength_scan.py
docker exec trader_worker_brain python3 scripts/selftest_pms_judge_force.py
docker exec trader_worker_brain python3 scripts/selftest_metrics_scope.py
候选池键通不通。预期打印"候选池 N 只"与代码列表:
docker exec trader_worker_brain python3 -c "from workers.strength_scan import load_universe; print(load_universe())"
单轮扫描试跑。总开关关着时预期是 SKIP 总开关关着:
docker exec trader_worker_brain python3 -c "from workers.strength_scan import run_scan; print(run_scan())"
五、上线顺序与开关
| 段 | 做什么 | 前提 | 观察多久 |
|---|---|---|---|
| 第零段 | 两侧代码全部到位、全部测试绿、容器重启 | — | 半天,只看日志没有新报错 |
| 第一段 | 打开解锁重问(页面改参数,即时生效,不用重启) | 第零段完成 | 三个交易日 |
| 第二段 | 打开强势扫描的观察档(只记不派,一次大模型都不打) | 第一段观察满三天 | 两个交易日 |
| 第三段 | 关掉观察档,真派单 | 第二段读数正常 | 三个交易日 |
| 第四段 | 资金流分发半开(全量 + 只放流入 + 覆盖面收着) | 必须单独一段 | 两个交易日 |
| 第五段 | 资金流分发全开(放两侧) | 第四段全绿,且当日兜底卖出恒为 0 | 两个交易日 |
第一段与第二段为什么不能同时开:它们会互相喂 —— 强势扫描产的转多广播正好是解锁重问的第一条解锁条件。 同时开就分不清"今天解锁了五次"是解锁阈值定得准,还是扫描在制造信号。
六、回退
三条互相独立,可以单独拉:
- 资金流分发:改服务器环境文件回只留痕,重建那一个容器
- 强势扫描:改环境文件把总开关关掉,重启大脑工作进程
- 解锁重问:页面上把总开关改成关,即时生效,不用重启