tradingSystem/docs/系统自决与页面专业化开发规格说明书_2026-09-1...

39 KiB
Raw Blame History

系统自决、页面专业化与选股打分 · 开发规格说明书2026-09-14

供下一阶段开发使用,开发者可以是人,也可以是大模型。写法遵守 .claude/output-styles/readable-chinese.md。 第〇到第二节是总则,第三到第五节是三个包的规格,第六节是文档与台账,第七节是交付要求。附录甲是流程示例,附录乙是冲突核对表,附录丙是页面词表。 本文件落库后的位置:docs/系统自决与页面专业化开发规格说明书_2026-09-14.md。与上午的《下一阶段开发方案与规格书_2026-09-14》的关系上午那份里的观察读数包、加固包、盘中确认包、页面收尾包、文档包已全部上线 155分段启用包被本文件的系统自决包取代真实仓准备包的初始参数清单在本文件 3.7 节补三条。


〇、已拍板的决定

编号 决定 拍板时间
系统自决直接全开,不做试运行;四档开关保留作回退 09-14 下午
目标价到价清仓、深亏补仓、判决为「关注」的候选三项全部自动 09-14 下午
选股系统工作包四批准,改完即可重启桥容器,不必等 09-17 09-14 下午
仓位矩阵「技术面看空」那一格的「观察」字段从未被消费,本阶段在自决开着时落成试探仓 随本文件

三条铁律不变。研判不可用一律仍交人,这是铁律二,不可自动。

一、目标

把「该不该做」交回给已有的三源合议与研判闸。人只处理四类例外:研判不可用、上游标了硬风险、合议装不上、判决词认不出。系统自己决定时自己写理由、自己记账、当天不重复评估。同时把页面改成一套交易系统该有的样子,并让选股系统的排序带上质地,找回择时那一票。

二、总体交付

顺序 仓库 工作量 部署
1 选股打分包 akg-factor-bridge 半天 改完当天收盘后重启桥容器,先经审批,避开 07:00 到 07:30 与 08:30 到 09:05
2 系统自决包 tradingSystem 后端 一到两天 做完收盘后 15:40 之后部署 155部署后页面把 PMS_SELF_DECIDE 设 full、PMS_SELF_DECIDE_TRIAL 设开
3 页面专业化包 tradingSystem 页面与接口 一天 可与自决包同批,也可次批

验收总则:开发机全量单测 ALL SUITES PASS 只是进门票;每个包按各自的验证节在 155 真机判收;判收读数记进开发节点记录五段式节点,只写「真机见过」或「未判收」。

三、规格一:系统自决包

3.1 不变量

  1. 开关 PMS_SELF_DECIDE 为 off 时,所有改动处一行不执行,候选字典、路由结果、账本行与今天逐字相同。每处改动配一例单测,用 JSON 序列化逐字节比对。
  2. 先记账后动作:自动采纳先落指令表再进账本;自动放弃先进账本再进跳过集合。
  3. 自动决策不突破任何用户参数:名额、总仓、单股、行业、真实资金、不追高、刹车、黑名单、休假、暂停买入都在自决块之前生效。
  4. 研判不可用、上游硬风险、合议装不上、判决词认不出,四种一律交人。

3.2 术语

「候选」是动作引擎产出的一条待分流的动作,字典结构见 action_engine._cand。「分流」是 proposal_service._route_one决定一条候选是落指令、进待确认队列还是驳回。「待确认队列」是提议表里状态为 WAIT_USER 的行。「评审账本」是表 pms_action_ledger。「合议块」是候选上的 consensus 键,含方向、强弱、路由、原因。「决定种类」是本包新增的候选键 decide_kind替代今天的 needs_user_confirm 标记,只在自决非 off 时写。

3.3 决定种类取值

decide_kind 谁写 含义 最终决定表里的行
weak_consensus scan_open合议路由为交人且原因是只有一方表态 三票只有一票表态 交人·只有一方表态
fund_bear_tech_bull scan_open合议路由为交人且原因是基本面看空技术面看多 弱基本面试探仓 交人·基本面看空技术面看多
tech_bear scan_openadvise_v2 的 route 为观察 异议只在技术面 放行·中
verdict_watch scan_open判决为关注 上游无法判断 判决关注
advice_trial scan_open建议档位为试探仓赔率低等 建议试探仓 建议试探仓
logic_doubt scan_open逻辑状态为存疑 研究证据走弱 直接放弃
reask _route_one重问放行 解锁重问后放行 重问放行
dca_deep eval_dca浮亏触深档 深亏补仓 深亏补仓
target_price eval_target 目标价到价清仓 卖出直接自动
verdict_unknown scan_open判决词认不出 词表漂移 交人

择时有异议不产候选,改在合议路由层回观察,没有 decide_kind。

3.4 决策矩阵:十六个交人触发点的新归属

触发点 位置 新归属
1 深亏补仓,浮亏不高于 -15% action_engine.eval_dca 的 confirm=is_deep 自动。研判对补仓的必答题是「下跌是杀逻辑还是杀情绪」,接口契约规定杀逻辑或说不清一律驳回,所以 PASS 即杀情绪。PASS 且把握度不低于 60、逻辑状态非存疑、合议非看空自动补仓REJECT 放弃并记账,评审方 judge不可用交人
2 目标价到价清仓 action_engine.eval_target 的 confirm=True 与 FORCE_QUEUE_SOURCES 自动。自决非 off 时 eval_target 不置 confirm、写 decide_kindsource_confirm_why 对 target_price 回空;卖出方向直接自动执行;落指令前按当前可卖量夹紧;该票若挂着活动交易方案,先撤方案再落指令
3 逻辑存疑减持 PMS_LOGIC_DOUBT_TRIM 不动,默认关,开了仍交人
4 转空离场档位 PMS_TECH_EXIT_AUTONOMY 已是自动
5 建议档位为试探仓 scan_open 尾段 自动,只允许试探仓一档
6 判决关注 verdict_confirm_why 自动,只允许试探仓一档。判决认不出仍交人
7 新建仓逻辑存疑 logic_confirm_why 自动放弃并记账,评审方 system
8 合议路由交人 consensus._route 只有一方表态改自动试探仓;择时有异议改观察等择时转多;基本面看空技术面看多改自动试探仓并挂紧止盈
9 强制入队来源名单 FORCE_QUEUE_SOURCES research_weak 保留target_price 在自决非 off 时不强制
10 重问放行 _route_one 的 reask_why 自动,只允许试探仓一档
11 上游硬风险 _route_one 的 risk_why 仍交人
12 研判不可用 verdict.degraded 仍交人
13 档位非 full 且买入 _route_one 的 autonomy 新建仓由自决块决定PMS_OPEN_AUTONOMY 的 propose_only 不再等于交人;持仓四类仍按 PMS_AUTONOMY
14 卖出信号中档置信度 signal_rules 本阶段不动
15 策略 confirm 档 用户挂方案时自选 不动
16 宏观档位 PMS_MACRO_AUTONOMY 不动
异议只在技术面 advise_v2 技术面看空那一格 自决非 off 时落成试探仓off 时保持今天行为

3.5 最终决定表

只对新建仓与深亏补仓生效。前置四种交人:研判不可用、上游硬风险、合议装不上、判决认不出。逻辑存疑直接放弃。「真通过」指带应答体的 PASS。把握度线用 PMS_ADVICE_TRIAL_CONF_MIN默认 60。

合议去向 PASS 且把握度不低于 60 PASS 但把握度低于 60 REJECT任何把握度
放行·强 采纳,按仓位矩阵档位 采纳,试探仓 放弃
放行·中,异议只在技术面 采纳,试探仓 采纳,试探仓 放弃
交人·只有一方表态 采纳,试探仓 采纳,试探仓 放弃
交人·基本面看空技术面看多 采纳,试探仓并挂紧止盈 采纳,试探仓并挂紧止盈 放弃
交人·择时有异议 不到研判,改观察,等择时转多 同左 同左
判决关注、重问放行、建议试探仓 采纳,试探仓 采纳,试探仓 放弃
深亏补仓 自动补仓 放弃 放弃
观察、跳过 不产候选,不变

REJECT 一律放弃,不用合议推翻研判。把握度低的 REJECT 今天会改判不可用而交人,自决非 off 时改为放弃并记账,评审方写 judge解锁重问对它照常生效。

试探仓类采纳受 PMS_SELF_DECIDE_TRIAL 控制,关掉则这五类(只有一方表态、基本面看空技术面看多、异议只在技术面、判决关注、重问放行、建议试探仓)仍交人。

每日自动新建仓只数上限 PMS_SELF_DECIDE_DAILY_MAX默认 3超过转交人并在原因里写明。0 表示不限。

3.6 逐项改动规格

改动一,合议路由加择时异议观察。 文件 app/core/consensus.py。_route 与 decide 加关键字参数 timing_dissent取值 confirm 或 observe默认 confirm 逐字回旧。observe 时「方向看多但择时看空」那一行返回观察原因「等择时转多」。decide 的返回字典在观察时加 disp 键为 wait_timing。consensus_service._params 读 PMS_SELF_DECIDE非 off 时传 observe。

改动二,动作引擎改写标记。 文件 app/core/action_engine.py。加常量 DISP_WAIT_TIMING 为 wait_timing加标签 TAG_OPEN_WAIT_TIMING 为 open_wait_timing。scan_open 观察分支按合议块的 disp 选处置词与标签,没有 disp 时用 wait_tech。scan_open 尾段五处试探仓、判决关注、逻辑存疑、合议交人、adv.route 为观察)在 params["self_decide"] 非 off 时写 c["decide_kind"] 并保留 confirm_why 作原因文本,不置 needs_user_confirmoff 时代码路径与今天逐字相同。eval_dca 深档在 params["self_decide"] 非 off 时写 decide_kind 为 dca_deep 且 confirm 为假理由文案去掉「必须用户确认」。eval_target 在非 off 时不置 confirm、写 decide_kind 为 target_price理由文案去掉「卖不卖由你拍板系统不自动卖」。source_confirm_why 加参数 self_decide非 off 时对 target_price 回空。params 里的 self_decide 由 proposal_service._scan_params 传入。

改动三,自决块。 文件 app/services/proposal_service.py。新函数 _self_decide(c, verdict, params, today_auto_count) 返回字典 {decision, tier, why, rule}decision 取值 accept、decline、confirm、none。none 表示不归自决管,走旧路。判定次序:一,不是 OPEN 或 DCA 深档或 target_price或开关 off回 none研判 degraded、硬风险非空、合议块缺、decide_kind 为 verdict_unknown回 confirmdecide_kind 为 logic_doubt回 decline查 3.5 节的表;五,采纳且当日自动新建仓已达上限,改 confirm 并写明record 档把 accept 与 decline 都改成 none 但把本会怎么判追加到 out["self_decide_seen"]decline 档把 accept 改成 none。在 _route_one 里,位置是 force_queue 计算之后、四条件旁路之前:先算 force_queue再调 _self_decidedecision 为 accept 则 auto_exec 置真、force_queue 置假;为 decline 则落账、追加 out["rejected"] 一项 by 为 system 并返回;为 confirm 则按原路入队,原因用 why为 none 则一切照旧。

改动四,档位与数量一致。 文件 app/services/proposal_service.py。把 _make_proposal 里 apply_judge 与 resize_to_advice 那段抽成 _apply_advice_tier(c, hn, verdict),返回改过的 hn 与 c["qty"]。自动路在 _make_instruction 之前调它。若降成试探仓而 PMS_SELF_DECIDE_TRIAL 关着,转 confirm。

改动五,自动清仓的两道前置。 文件 app/services/proposal_service.py 与 app/services/strategy_service.py。自动路对 side 为 sell 的候选,落指令前用 pms_repo.get_position 取当前持仓,按 clamp_sell_qty 夹紧,为零则不落并记 skipped。若 pms_repo.active_strategy_codes 含该票先调策略层按代码撤销活动方案的函数08-20 清仓命令即时撤策略那条,若已有则复用,否则在 strategy_service 加 cancel_by_code(ts_code, reason)),撤销结果写进账本硬数字的 self_decide 块。

改动六,自动放弃记账与当日不重评。 文件 app/services/proposal_service.py 与 app/repo/pms_repo.py。放弃时调 pms_repo.insert_ledger评审方 system研判 REJECT 引起的写 judge结论 REJECT动作原样价格取候选现价硬数字带原硬数字、合议六键、研判把握度与 self_decide 块。pms_repo 新增 system_decided_today(since) 与 system_pass_count_today(since)各只碰账本一张表。scan_and_route 里新增 _system_declined_today_keys 并入跳过集合排在用户驳回之后、在途之前。disposition_snapshot 对这类写「今日系统已判放弃,明日重评」。

改动七,参数。 文件 app/services/param_store.py。登记三个参数见 3.7 节PMS_SELF_DECIDE 进 FAIL_CLOSED 取 offPMS_SELF_DECIDE_DAILY_MAX 进范围表 0 到 50PMS_SELF_DECIDE 加合法值校验。

改动八,人裁决接口。 文件 app/web/main.py 与新文件 app/core/decide_reasons.py。api_decide 收 reason_code 与 reason_note旧字段 reason 继续接受三者全空拒收。decide_reasons 放两张码表与一个拼句函数,输入决定、码、补充、自由文本,输出账本句与码,不合法抛中文错误。账本 reason 写拼好的句子,硬数字加 decide_reason_code。新增 GET /api/proposals/decide-reasons 返回两张码表。

改动九,观察读数与复核。 文件 app/services/consensus_stats.py、scripts/consensus_review.py、app/services/ledger_service.py。新类别 auto_accept、auto_decline、auto_confirm、auto_would_accept、auto_would_decline、judge_unavail、open_wait_timing。自决相关行随时写不受检查点限制从 out["self_decide_seen"] 与 out["executed"]、out["rejected"] 生成。复核脚本加第五张表「系统决定逐条」(日期、代码、决定、档位、规则、合议六键、研判把握度)与第六张表「研判不可用占比」。日报注意项加「系统今日自动采纳几只、放弃几只、交人几只」。

改动十,页面处置词。 文件 app/web/static/index.html。dispOf 加 wait_timing 显示「择时待转多」;已有 system 账本行的票显示「系统已采纳」或「系统已放弃」。这一条随页面专业化包一起做。

改动十一,文档。 见第六节。

3.7 参数

代码默认 155 上线值 真实仓初始值 说明
PMS_SELF_DECIDE off full off 四档off 逐字回旧record 只记不做decline 只放行自动放弃full 自动采纳加自动放弃。读不到按 off
PMS_SELF_DECIDE_TRIAL False True False 五类试探仓情形是否自动采纳;关掉仍交人
PMS_SELF_DECIDE_DAILY_MAX 3 3 1 每日自动新建仓只数上限0 不限

3.8 数据契约

账本硬数字的 self_decide 块:{"rule": 决定种类或 consensus_strong"mode": 档位,"tier": 标准仓或减半仓或试探仓,"consensus": {direction, strength, route}"judge": {verdict, confidence}"daily_count": 当日已自动只数,"daily_max": 上限,"strategy_cancelled": 撤掉的方案编号列表或空}。

理由模板。采纳:「系统采纳:合议{三票} → {方向}·{强弱};研判通过(把握度 {n}{研判原话}{档位} {目标比例},分批 {分批}」。试探仓采纳:「系统采纳试探仓:{决定种类中文};研判通过(把握度 {n});降为试探仓 1%,一批{;弱基本面紧止盈次日 09:40 自动挂载}」。放弃:「系统放弃:{决定种类中文}{合议路由原因};研判{结论}(把握度 {n}{研判原话};明日重新评估」。清仓:「目标价到价自动清仓:现价 {p} 已到目标价 {t},卖出 {qty} 股(按可卖量夹紧){;已撤销交易方案 X}」。

裁决码表。驳回DECLINE_CONSENSUS_MISMATCH 与研判结论不符、DECLINE_TECH_WEAK 技术面已转弱、DECLINE_POSITION_FULL 仓位已达上限、DECLINE_SECTOR_CONCENTRATED 行业集中度过高、DECLINE_WAIT_PULLBACK 等待回调再议、DECLINE_MARKET_RISK 大盘风险偏高、DECLINE_OTHER 其他补充必填。采纳ACCEPT_CONSENSUS 合议放行按系统建议执行、ACCEPT_MANUAL_JUDGE 人工判断机会成立、ACCEPT_PER_COMMAND 按既有命令执行、ACCEPT_RISK_CONTROL 风控需要、ACCEPT_OTHER 其他(补充必填)。

3.9 单测与哨兵

新批次按 run_tests 当前最大批次号顺延约十六例每类一例「开关关掉逐字回旧」off 时候选无 decide_kind 且路由与今天相同record 只写读数不改 executed 与 queueddecline 档只放弃不采纳;放行强加 PASS 落指令且账本 system 且 PASS 且股数按档位PASS 但把握度 40 时 TRIAL 关转交人、开则采纳且股数为试探仓那批;弱合议加 REJECT 放弃且下一轮跳过集合含它;不可用一律交人;硬风险交人;目标价到价自决开时自动卖且夹紧、关时入队;目标价到价的票挂着方案时先撤方案;深亏补仓 PASS 自动补、REJECT 放弃、不可用交人;上限 3 时第四只交人;择时异议 observe 回观察、confirm 回交人异议只在技术面落试探仓api_decide 收码拼句且旧字段兼容;三参数登记与范围。

要改的哨兵test_wiring「目标价到价必定入队档位 full 也绝不自动卖」改成「自决关时必定入队自决开时自动卖且按可卖量夹紧」test_batch4 第 152 行同理test_batch21 研究走弱必交人不变test_batch20 四条件旁路不变;页面枚举守卫处置词加 wait_timingtest_batch10 的 FakeRepo 加两个签名KNOWN_DEAD 不变run_tests 登记新批次与例数。

3.10 验证与判收

开发机,预期最后一行 ALL SUITES PASS新批次在清单里。

cd /Users/baobao/Documents/work/project/tradingSystem && /private/tmp/claude-501/-Users-baobao-Documents-work-project-tradingSystem/f7c4a696-e3d8-4465-961a-04f82eb3e424/scratchpad/venv/bin/python scripts/run_tests.py

模拟仓 155收盘后部署先经审批预期 ALL SUITES PASS、指纹一致、四容器健康。

cd /home/factor/project/tradingSystem && git pull --ff-only && make deploy && make test

模拟仓 155页面设好参数后预期三个键为 full、True、3。

cd /home/factor/project/tradingSystem && docker exec pms-web python -c "from app.services import param_store as ps; print({k: ps.get(k, None) for k in ('PMS_SELF_DECIDE','PMS_SELF_DECIDE_TRIAL','PMS_SELF_DECIDE_DAILY_MAX')})"

模拟仓 155下一个交易日盘中只读试算预期 executed 里出现 route 为 auto 且 why 含「系统采纳」的条目,或 rejected 里出现 by 为 system 的条目。

cd /home/factor/project/tradingSystem && docker exec pms-web python -c "from app.services import proposal_service as p; import json; d=p.scan_and_route(dry_run=True); print(json.dumps({'executed': d.get('executed'), 'queued': d.get('queued'), 'rejected': d.get('rejected')}, ensure_ascii=False)[:2000])"

模拟仓 155当天收盘后预期第五张表列出系统采纳与放弃逐条第二张表的「交人」只数明显少于自决前。

cd /home/factor/project/tradingSystem && make consensus-review DAYS=1

3.11 回退

PMS_SELF_DECIDE 改 decline、record 或 off即时生效不重启。要彻底撤回滚提交后 make deploy。

四、规格二:页面专业化包

4.1 原则

不用第一二人称;不用拟人与口语;处置词用交易术语,后端值不动只改显示;标题用名词短语;一个概念全页一个词,解释放在问号气泡。词表见附录丙。

4.2 改动规格

改动一,集中点。 文件 app/web/static/index.html。翻译表 T 里 autonomy、frozen、refSource、arbiter、execAct、stratAutonomy 六组按附录丙改;六个合成句函数 propVerdictLine、dispOf、attention、nextStep、propJudgeTag、AUTONOMY_DESC 按附录丙改。T 表组名不动autonomy 与 stratAutonomy 仍分两组。

改动二,模板硬编码。 按附录丙逐处改,约四十八处,位置在摸底报告表一到表四所列行号附近。

改动三,后端随行句。 只改字符串不改分支app/services/proposal_service.py 引用「等我拍板」「今日在办」「交你拍板」的句子app/core/action_engine.py 的 eval_target 与 eval_dca 理由文案、verdict_confirm_why 文案app/services/strategy_advisor.py 两处app/services/param_store.py 的中文说明五处。

改动四,抽屉重构。 文件 app/web/static/index.html。固定三段加顶部吸顶锚点条不用页签不用折叠。标题「{{name}} · 个股详情」。三条黄色警告条移到第二段标题之下。

一级标题 内容 空态 失败态
研究面 · 三源合议 · 技术面读数日 X 四枚芯片与合议路由;公司质地与失效条件;技术面三指标 该股票暂无研究面读数 研究面读取失败X带重试
今日信号 · N 条 上游信号时间线;当前快照 当日暂无上游信号 沿用黄条,带重试
系统动作 · N 条 当日评审账本;处置(持仓状态、计划状态、候选处置词与原因) 当日暂无评审记录 评审账本读取失败X带重试

新增样式 .cs-part、.cs-part>.h、.cs-anchors。新增计算属性 csSnapMetrics、csSnapMr、csSignalCount、csDisp连同 csLoadResearch、csLoadLedger 补进 setup 的 return 清单。所有标签写全闭合。

改动五,候选可点击。 建仓候选每行 div.sigrow2 加 @click="openCodeSignals(r.ts_code)"、cursor:pointer、title「查看个股详情」票名加点状下划线CSS 加悬停底色。提议卡票名与代码、未建仓候选表、交易方案卡的票名同样可点。

改动六,裁决弹窗。 改成 el-dialog照挂交易方案对话框的写法。状态 decideDlg预设列表 decideReasons 从 GET /api/proposals/decide-reasons 取一次并缓存取不到用页面内置副本。decide(row, decision) 只负责打开,新增 submitDecide() 校验与提交。选「其他」时补充必填。三个新名字进 return 清单。test_batch20 钉住旧弹窗那几行改成查 reason_code 与 submitDecide。

改动七,文案守卫。 新建 scripts/test_page_copy_guard.py。读 index.html先处理成对豁免标记模板里 copy-guard:off 与 copy-guard:on脚本里同名行注释缺原因或不成对判红再剥三种注释行注释要跳过引号内容与网址里的双斜线逐行找禁用词命中打行号、词、片段并退出码 1。内置自检样例只在注释里出现不算在字符串里出现要算。登记进 run_tests。

禁用词初版。人称:我的、等我、等你、要你、给你、替你、让你、问过你、你自己、你设、你改、你点、你来、你现在、你还没、你做过、你来定、交你定。拟人与口语:拍板、点头、盯着、在盯、盯的、拿不准、记一笔、挤掉、平安无事。动词与生造词:出手、休假、一跳、发生了什么。

4.3 改动顺序

集中点先改,再改模板硬编码与后端随行句,再做抽屉与可点击,再做弹窗前后端,最后加守卫并登记。

4.4 验证与判收

开发机,预期三道守卫各打 ALL OK。

cd /Users/baobao/Documents/work/project/tradingSystem && python3 scripts/test_page_enum_guard.py && python3 scripts/test_page_wiring_guard.py && python3 scripts/test_page_copy_guard.py

页面判收,模拟仓 155 部署后:整页搜不到「拍板」「等我」「我的」「出手」「休假」;点任一持仓票,抽屉标题为「某某 · 个股详情」,三段一级标题依次是研究面、今日信号、系统动作,锚点能跳;点建仓候选任一行能开抽屉;仍需人裁决的提议点采纳或驳回弹出单选框,选「其他」不填补充不能提交;评审账本理由列是一句人话,如「技术面已转弱;补充:……」。

4.5 回退

回滚提交后 make deploy。裁决接口向后兼容旧请求体照常接受。

五、规格三:选股打分包与来源字段

5.1 已核实的现状

项目 读数
桥仓库版本 bccc2e509-10 13:17
桥容器启动时刻 09-10 13:19 北京时间,晚于最后一次提交,重启已做
计划接口 plan_source 为 snapshotplan_version 为 bccc2e5
池深 POOL_TOP 50、POOL_MAX 100持仓管理系统 PMS_PLAN_TOP_N 50不变式成立
赛道硬门槛 gate_on 为真ENABLE_TRACK_GATE 已开;持仓管理系统没有读这个字段
计划行字段 没有 score_adj工作包四未做

5.2 工作包四规格

仓库 akg-factor-bridge文件 plan.py。

  1. 装配阶段已读到评析字典 cards[k]["company_review"]。对主榜与观察档每一行算质地调整分:好加 8差减 8其余 0。
  2. 重排必须在 collect 里 _pick 与 _full_rows 之前的两个 pd.Series 上做,接口、快照、入池、评析名单四个出口才同序。只改 _row 等于没做。
  3. 分数编码是主榜 200 加档位乘 20 加组内分,组内分夹正负 9.9。加 8 后最大 17.9 小于步长 20不跨档。原 score 保留供 _tier_label 解码,新字段 score_adj 进行与快照rank 按调整分重编且连续。card_rank 不动。
  4. 环境变量 PLAN_QUALITY_BONUS默认 8设 0 即关。加进 .env.example。
  5. 新测试 test_plan_quality_rank.py照 test_plan_snapshot.py 的离线写法,四条不变式:从不跨档;加分为 0 时输出逐字相同;重编后名次连续;快照带 score_adj。
  6. 台账记到选股系统第 058 条。
  7. 部署本地做完并提交155 拉代码后 docker compose restart -t 20先经审批避开 07:00 到 07:30 与 08:30 到 09:05。重启后预热一次计划接口。次日 07:10 起入池与评析名单都按新序。持仓管理系统榜单变化当天会有一波名次跳动,属预期。

持仓管理系统侧不改按质地分桶排序,两条规则单调一致。

5.3 持仓管理系统读来源字段

文件 app/services/plan_feed.py 与 app/web/static/index.html。parse_plan 收 plan_source、snapshot_generated_at、gate_on写进名册快照的 meta页面顶栏「上游计划」芯片加来源与赛道闸状态plan_source 为 live 时盘中给一条提示。第七批加两例。随自决包或页面包一起部署。

5.4 验证

开发机,预期 ALL OK。

cd /Users/baobao/Documents/work/project/akg-factor-bridge && python3 test_plan_quality_rank.py

模拟仓 155重启前先记基线重启后同一条命令质地好只数应上升且 rank 连续。

curl -s "http://192.168.16.155:8300/plan?top=50" | python3 -c "import sys,json; d=json.load(sys.stdin); rows=d.get('main') or []; print('来源', d.get('plan_source'), '赛道闸', d.get('gate_on'), '前50质地好', sum(1 for r in rows if (r.get('company_review') or {}).get('overall')=='好'), '/', len(rows), '有score_adj', all('score_adj' in r for r in rows), 'rank连续', [r.get('rank') for r in rows]==list(range(1,len(rows)+1)))"

5.5 回退

PLAN_QUALITY_BONUS 设 0 后重启桥,或回滚提交后重启。

5.6 方向评估摘要

对持仓管理系统价值最高的三件里快照与新鲜度、评析按请求实时补已生效工作包四做完即齐。可以缓的主观量化第四步与第五步、深度评析第二三批、因果论断日龄闸、三套市场环境归一、G4 回填。不建议现在做:切换入池来源、启用或关闭赛道硬门槛、把 POOL_TOP 提到 80 以上。后续待排changes 口径两边对齐、判决与质地进名册快照、环节集中度限仓、.env.example 补齐。

六、文档与台账

  1. 台账 015 系统自决:写明撤销台账 001「重问放行一律交人」与 008「只有一方表态或择时异议交人」两句记下仓位矩阵「技术面看空」那一格的既有口径冲突及落法记三个参数与每日上限。
  2. README 第 313 到 315 行按自决改写COMMAND_PRIORITY 第 25 行「深亏补仓永远要人点头」改为「自决开着时按研判必答题自动」,标注撤销于 2026-09-14。
  3. 真实仓初始参数清单加三条PMS_SELF_DECIDE off、PMS_SELF_DECIDE_TRIAL False、PMS_SELF_DECIDE_DAILY_MAX 1。
  4. 接口契约文档补 decide 请求体与 decide-reasons 接口。
  5. UI_COPY_AUDIT.md 追加词表第二版FRONTEND_TRADER_VIEW_PLAN.md 207 到 208 行改「人工」。
  6. 选股系统台账 058。
  7. 开发节点记录按五段式追加,每个包一条。

七、交付要求

  1. 每个包一个或几个提交,提交信息用短中文说行为,带台账号。
  2. 先写「开关关掉逐字回旧」的单测,再改代码。
  3. 新批次同时登记进 run_tests 的 SUITES 与例数表,哨兵按 3.9 节过一遍。
  4. 开发机全量绿之后才在 155 收盘后部署,部署要重建容器,先经审批。判收读数记进开发节点记录。
  5. 不动真实仓 188。
  6. 服务器上只 git pull不 git stash。判盘中盘后看容器内时间。
  7. 业务参数一律经参数中心读。一条 SQL 只碰一张表。

附录甲:几种情形的完整流程(可不读,但建议开发者读)

每个例子按「输入、今天的走法、自决开后的走法、落到哪里、当天怎么不重复」写。

例一,三票全看多,研判通过。 输入:基本面看多(质地好)、技术面看多·强(趋势多)、择时看多(昨夜 BUY。合议看多·强路由放行。今天进 scan_open 占名额扣金额advise_v2 给标准仓 5/2.5/2.5(估值贵则减半),规则闸过,研判 PASS 把握度 78因新建仓档位是 propose_only 进待确认队列人写理由采纳。自决开后自决块判采纳_apply_advice_tier 不降档_make_instruction 落一条 PROPOSED 指令,账本一行 system PASS。择时执行器每分钟一轮按实现 B 出手:分日配额、限价、不追高,窗口三个交易日;成交由回放认领进首批未平批次。当天不重复:在途指令进跳过集合。

例二,只有一方表态,就是今天的 688281。 输入基本面中性、技术面看多、择时无读数。合议看多·弱路由交人。今天进待确认队列人采纳。自决开后decide_kind 为 weak_consensus研判 PASS 则采纳试探仓 1% 一批TRIAL 开REJECT 则放弃并记账 judge REJECT。TRIAL 关时仍交人。当天不重复:采纳后在途;放弃后由研判驳回的当日闸挡住,满足解锁条件时可重问一次。

例三,择时有异议。 输入:基本面看多、技术面看多、择时看空(昨夜 SELL 或 AVOID。合议看多·中路由交人。今天进待确认队列。自决开后路由改观察「等择时转多」不产候选、不占名额处置词「择时待转多」。盘中若决策系统广播这只票转多信号消化写留痕下一轮装配时择时票由看空升为中性方向仍看多且两票表态路由变放行走例一。观察不落账每轮重算这是有意的。

例四,异议只在技术面。 输入基本面看多、择时看多、技术面看空趋势空。合议看多·中路由放行。今天advise_v2 标「观察」但没人读按标准仓出提议进待确认队列卡面写「技术面看空进观察」实下标准仓这是既有冲突。自决开后scan_open 读到 adv.route 为观察,写 decide_kind 为 tech_bear研判 PASS 则采纳试探仓REJECT 放弃。已持仓的这类票增持门照旧停回踩补足与盈利加仓,减持不受影响。

例五,目标价到价清仓。 输入:用户命令设目标价 30 元,现价 30.2。eval_target 产 EXIT 候选,数量按 T+1 可卖量。今天confirm 为真且来源在强制名单,进待确认队列,人采纳后 api_decide 按可卖量再夹一次落指令。自决开后decide_kind 为 target_price来源不强制EXIT 不在研判范围直接 PASS规则闸对减持只放行不拦落指令前按可卖量夹紧若该票挂着活动交易方案先撤方案再落指令账本 rule PASS。执行器卖出。同轮只发一条减持、到价优先于保垫减仓的规矩照旧跨轮时在途 EXIT 进跳过集合,保垫减仓让路。

例六,深亏补仓。 输入:某持仓浮亏 16% 触第二档eval_dca 产 DCA 候选数量不超过底仓一半。今天is_deep 置 confirm进待确认队列。自决开后decide_kind 为 dca_deep先过增持门与逻辑存疑判断再送研判必答「下跌是杀逻辑还是杀情绪」。契约规定杀逻辑或说不清一律驳回所以 PASS 即杀情绪:把握度不低于 60 则自动补仓_make_instruction 里 bump_once_guards 把 dca_count 记成本档档序各档只补一次REJECT 放弃记账 judge不可用交人。

例七,研判不可用。 输入任何买入候选决策系统超时或答复认不出。走法不变degraded 为真,一律交人,理由「研判不可用,降级人工确认」。人在待确认提议里用预设理由裁决。研判不可用的占比进日报,超过两成报警。

例八,研判驳回后解锁重问。 输入:早上某候选合议放行,研判 REJECT 把握度 72。今天REJECT 落账 judge当日闸挡住10:30 现价较驳回涨 2% 且量比达标解锁带强制标记重问PASS 后重问放行一律交人。自决开后:放弃记账仍写 judge重问放行改 decide_kind 为 reaskPASS 则采纳试探仓;能否买到由择时区间与不追高决定,可能当日买不上。

附录乙:与现有状态机与策略执行的冲突核对(可不读,但建议开发者读)

现有机制 有没有冲突 处理
提议状态机 WAIT_USER、ACCEPTED、DECLINED 没有。自动路不建提议;仍交人的走原状态机
指令状态机 PROPOSED、RULE_PASSED、DISPATCHED、CONFIRMED、REJECTED、EXPIRED、CANCELLED 没有。自动路复用 _make_instruction 自动清仓落指令前按可卖量夹紧
一次性守卫 fill_count、last_add_date、dca_count 没有。_make_instruction 内已调 bump_once_guards
当日跳过集合:研判驳回、规则闸拒、用户驳回、在途 要加一份:系统放弃当日不重评 排在用户驳回之后、在途之前
解锁重问,只认评审方 judge 的 REJECT 没有。研判引起的放弃仍写 judge合议或逻辑引起的写 system不重问 重问放行改自动试探仓,台账 015 记撤销
同轮只发一条减持、跨轮减持让路、同轮买卖互斥 没有。都在 scan 里,先于分流 目标价自动卖后在途 EXIT 让保垫减仓让路
策略层:策略票只评目标价 有一处。目标价到价自动清仓的票若挂着网格方案,网格买入腿会与清仓单对倒。今天靠人采纳时同样存在 自动清仓前撤该票活动方案,单测钉住
弱基本面紧止盈自动挂载,认账本 advice.tight_trail 没有,但有前提:账本 PASS 行的硬数字要带 advice数量要是试探仓那批 _apply_advice_tier 在自动路也跑
盘中确认包wait_confirm 观察 没有。观察不产候选 开关仍关09-23 再定
增持门 没有。先于产候选 深亏补仓自动时同样在门内
宏观偏热闸 没有。买入侧在分流前被过滤
名额与金额闸、规则闸、不追高、行业闸、刹车、黑名单、休假 没有。全部先于自决块
择时执行器实现 B 没有。自动指令照旧由它出手;窗口作废后指令 EXPIRED次日候选重评
PMS_OPEN_AUTO_EXEC_ON_VERDICT 四条件旁路 没有。自决 off 时仍走;非 off 时自决块先决定 下一期再摘除
候选处置快照与页面处置词 要加两种显示:系统已采纳、系统已放弃 页面包
观察读数包 加类别 3.6 节改动九
真实仓初始参数清单 加三条 第六节

附录丙:页面词表(可不读,改文案时照抄)

板块标题。

旧词 新词 气泡解释
等我拍板 待确认提议 系统生成、需人工采纳或驳回后才执行的交易提议
我的持仓 持仓
今日在办 当日指令 指令是系统已记账、准备或正在下单的一笔买卖
还没成交、今日成交、已经结束、今天没建仓的 未成交、已成交、已终止、未建仓候选 已终止:到期作废、被拦截或已撤销的指令
今天发生了什么 评审账本 系统每一次放行或驳回的记录
你做过的操作 操作日志 人工在页面上的每一次操作,含被拦截的
我的策略 交易方案 挂在单只持仓上的自动交易规则
系统在盯的候选 建仓候选 当日选股计划里尚未建仓、系统仍在评估的股票
整个组合的操作 组合操作 对全部持仓生效的操作
需要注意 运行提示 影响系统自动运行的状态
{{name}} 今天的信号 {{name}} · 个股详情
今天的信号(持仓表列) 当日信号
我设的价 人工设定价 通过命令设定的止损价与目标价

状态与处置词。

旧词 新词 气泡解释
已下单 已下单 已生成买入指令
待你确认 待确认 提议已生成,等人工裁决
将建仓 拟建仓 名额与资金充足,本轮将建底仓
等技术面开口 技术面待开口 布林带仍在收口,等开口向上再评估
等盘中确认 盘中确认中 技术面已开口,等盘中站上均价且量比达标
新增 择时待转多 三票看多但择时看空,等择时转多
被否决 未建仓 本轮评估后不建仓,原因见未建仓原因
在盯 候选观察 在当日选股计划内,尚未有处置结论
新增 系统已采纳、系统已放弃 系统按合议与研判自动决定
只提议,等你拍板 仅提议,需人工确认
待我拍板 需人工确认
你(评审方) 人工
你今天设的 人工当日设定
你设的只卖不买 人工冻结,只卖不买
出手、今日不再出手、条件没到、终检没过 下单、当日停止下单、条件未满足、终检未通过
等着校验、已挂单等成交、被挡下 待校验、已挂单待成交、已拦截
交你定 需人工裁决
同样的又来了 N 次 重复 N 次
休假模式、结束休假、休假中 暂停执行、恢复执行、已暂停执行
出手试算、出手一跳 下单试算、执行一轮下单

整句改写约二十句,以摸底报告表三为准,原则同上。