From 996a2f358b9bfff7ddd8155b0499e146d35e185f Mon Sep 17 00:00:00 2001 From: zlt Date: Thu, 6 Aug 2026 13:05:40 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E8=87=AA=E5=8A=A8=E5=BB=BA?= =?UTF-8?q?=E4=BB=93=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DEVLOG.md | 50 +++++ NEW_POSITION_ACTION_PLAN.md | 419 +++++++++++++++++++----------------- 2 files changed, 275 insertions(+), 194 deletions(-) diff --git a/DEVLOG.md b/DEVLOG.md index de36460..eb96f66 100644 --- a/DEVLOG.md +++ b/DEVLOG.md @@ -58,6 +58,56 @@ --- +## 2026-08-06 · 新建仓动作:四条取舍已拍板,决策系统侧评估完毕,方案定稿 + +**做了什么** +四条取舍拍板:新建仓单独一个档位参数且默认开启;不设每日开仓上限,由既有上限、资金、 +候选池与择时自己收敛;研判闸这一轮双侧一并加上;参考位漂移做首答锁定加偏离即停。 +按第三条读了决策系统的相关代码,方案更新为定稿版 V2。代码仍然一行未改。 + +**读决策系统代码得到的三条事实(以代码为准)** + +1. **择时那一侧一个字都不用改。** `app/services/pms_advisor.py` 的 `_advise` + (163 到 226 行)从头到尾没有读过 `action` 字段,只用 `ts_code`、`side`、`day.price`。 + 买入区间由昨夜支撑压力推出,与这笔买单是建新仓还是加老仓无关。 +2. **研判那一侧没有任何 action 白名单。** `app/api/main.py:323` 的路由是裸 dict, + 只校验总开关与 `ts_code` 非空;worker 侧 `tasks_intraday.py:512` 是 + `_task_by_action.get(_act, 兜底文案)`。所以今天发 `action="OPEN"` 就能跑通, + 但拿到的是给加仓写的兜底文案,后面还跟着一句「仓位纪律不归你管」。 + 要改的是三处,都在 `workers/tasks_intraday.py`:加一条 OPEN 判据、 + OPEN 且现价缺失时显式回 UNAVAILABLE、边界声明按动作分岔。 +3. **新票的现价链路最脆弱。** `tasks_intraday.py` 449 到 456 行,新票没有持仓快照, + `fetch_realtime_close` 读不到分钟线时返回 `0.0` 被 `or None` 变成 None, + 提示词渲染成「当前现价 未知 元」。加仓类还有摊薄成本可依,建仓判断没有现价锚不成立。 + +**新撞出来的一条硬约束(工程事实,不是取舍)** +`app/scheduler.py:45` 给所有调度任务设了 `task_soft_time_limit=240, task_time_limit=300`, +而 `judge.request` 是同步阻塞、单次超时上限 90 秒。**三只票送研判就是 270 秒,已经超过 +软超时。** 今天没出事是因为送研判的只有三只持仓票且多数轮次被去重挡掉。新建仓不节流、 +候选池默认取前 30 只,第一跳就会捅穿。 +处理办法是给单轮扫描一个研判时间预算 `PMS_JUDGE_TICK_BUDGET_SEC`(默认 150 秒), +用尽就把剩下的候选留到下一分钟的心跳,并写进 skipped 留痕。 +**这不是节流:一条候选都没丢,也没有按天计的上限**,只是让一次心跳做得完。 + +**动了哪些文件** +无代码改动。`NEW_POSITION_ACTION_PLAN.md` 更新为定稿版 V2,已放进项目目录。 + +**部署方式** +不涉及。定稿版里写明:决策系统这次只改 worker 代码、不动 `.env`, +所以 `git pull` 后 `docker compose restart backend-api worker-brain` 即可; +哪天真要往 `.env` 写值(比如切研判独立队列)才必须 `up -d --force-recreate`。 +PMS 侧因为新建仓档位默认就是自动执行,**建议收盘后 `make deploy`**, +让第一次真实建仓发生在次日开盘、人在场的时候。 + +**真机判收** +未判收(尚未动码)。 + +**还欠着什么** +等点头后开工。开工顺序:决策系统侧先上并用 `pms_smoke.py` 手工发一条 +`action=OPEN` 的研判请求验证,再回来做 PMS 侧。 + +--- +