# tradingSystem · 持仓管理系统总体设计 (PMS) > 状态: **V0.4,设计定稿·开发启动** | 日期: 2026-07-27 > **V0.4 修订(依用户六点反馈)**:①命令目录**不再分期,一次性全部实现**——功能开发一次到位,上线按外部依赖分三步切换(§14);②新增独立交付物 `QMT_INTERFACE_REQUIREMENTS.md`(与 QMT 侧协商的数据与接口需求清单,含资金快照与指令通道建议 DDL);③决策系统配套修改获批,可直接开发;④行业划分接口给出具体方案(§5:`pms_industry_map` 自定义映射表 + 可插拔适配器);⑤管理页面技术形态确认(FastAPI + 单页)。 > **V0.3 修订(依用户九点反馈)**:①术语可读性修订,清除"买腿/卖腿/回轧"等机翻词;②**重大更正——决策系统保持在线**:形态计算、每日定时分析、盘中研判等核心功能一概不动,改动仅限"执行出口改道"(与 QMT 侧的直接读写一期即切断,权限移交持仓系统),V0.2 按"决策系统整体下线"的理解作废;③上游量化系统输出不变,**持仓系统的建仓计划围绕上游输出建立**;④一期 autonomy 默认"提议待确认"获确认;⑤`trading_order`/`trading_position` 仍归下游系统维护,仅管理权限由决策系统移交持仓系统;⑥参数设置、命令下达与数据展示以**可视化后端页面**实现;⑦命令场景目录扩充(§3.1,待用户决断取舍);⑧内置择时规则全部参数化、页面可调;⑨行业集中度改为**硬性拦截**,行业划分依据留接口。 > 沿革:V0.1 中间层/两级闸门/安全垫三义 → V0.2 命令驱动/百分比仓位 → 本版。冲突处以本版为准。 > 关联文档(bionic_trader 仓库): `DECISION_LOOP_DESIGN.md`、`DATA_MODEL.md`、`PIPELINES.md`。写作纪律沿袭既有文档:术语先白话、阈值给硬数字且可配置、失败路径显式、未确认事项进清单。 --- ## 0. 一句话目标与角色分工 **一句话**:用户通过管理页面下达大方向命令(规模、上限、升降仓、对某股做T),持仓系统把命令翻译成分股分批的行动方案并管好账本与纪律,决策系统负责研判与择时,下游系统负责挂单成交——四层各司其职,谁也不越权。 | 层 | 职责 | 频次 | |---|---|---| | 用户 | 中低频大方向命令:总规模 200 万、总仓上限 60%、单股上限 8%、降仓 10%、对某股做T、清仓某股 | 天/周级 | | **持仓系统(本系统,PMS)** | 命令解析 → 方案制订(哪只股、什么动作、多少数量)→ 账本/批次/安全垫/纪律 → 指令编排与下发 | 持续 | | 决策系统(bionic_trader) | **核心功能照旧**:每日认知闭环、形态计算、盘中研判、风控仲裁、反思闭环;对持仓系统提供研判与择时服务。**不再直接指挥下游** | 每日 + 盘中 | | 下游系统(QMT 侧) | 挂单、成交、维护 `trading_order` / `trading_position`(两表仍归其维护) | 盘中 | **V0.3 已定决策**: 1. **命令驱动**:用户命令是最高约束与主要驱动源;持仓系统的自主判断(如"跌到 −15% 能不能补仓")是第二驱动源,受命令参数约束。 2. **连接关系(一期即生效)**:持仓系统 ↔ 决策系统直接交互;持仓系统 ↔ 下游系统交互;**决策系统与下游系统断开**——对下游的管理权限(下单、审批、卖出指挥)由决策系统移交持仓系统。决策系统的分析产出全部保留并成为持仓系统的输入。 3. **上游不变**:上游量化系统的输出(买入计划、告警、评分池)原样保留,持仓系统的建仓计划围绕这些输出建立。 4. **决策方式**:规则引擎为主 + 关键点研判。仓位数学全部确定性代码;定性研判(该不该补仓、回踩是洗盘还是出货、何时出手)委托决策系统——它本来就是研判系统,持仓系统不另建一套研判栈。 5. **仓位框架**:百分比制(占总规模的 %),单股分批 50/25/25,含一手可行性检查;风险敞口只做披露告警,不反推数量。 6. **事实源**:命令 = 用户;实际持仓/成交 = 下游两表(持仓系统账本定期对账);研判 = 决策系统。 --- ## 1. 总体架构与决策系统配套修改清单 ``` 用户(管理页面:参数设置 / 命令下达 / 进度与账本查看 / 提议确认) │ ┌─────────▼──────────────────────────────────────────────┐ │ 持仓系统 tradingSystem (PMS) │ │ 命令系统 → 方案生成器 → 持仓账本(批次/成本/安全垫) │ │ → 动作引擎(命令驱动 + 自主提议) → 规则闸 → 研判/择时 │ └────┬────────────────────────────▲───────────────────────┘ │ 指令(买入/卖出, 带数量限价) │ 研判与择时答复 / 每日结论 / 盘中信号 ▼ │ 下游系统(QMT侧) 决策系统 bionic_trader 挂单/成交/两表维护 (核心分析功能照旧, 与下游断开) │ ▲ └── 成交回放/对账 ──▶ PMS ────┘(上游量化输出 → 供 PMS 建仓规划 + 供决策系统分析, 均不变) ``` **三条铁律**: 1. **命令至上**:任何自动决策不得突破用户命令参数;任务命令与自主动作冲突时命令优先,在途自主指令自动撤销;命令之间冲突由用户在页面裁决,系统不代替用户仲裁。 2. **分工不越权**:持仓系统决定「做什么、多少」,决策系统决定「该不该、何时」(定性研判与择时),下游只管执行。决策系统研判服务不可用时,持仓系统降级为保守规则 + 人工确认,**不自建第二套研判**。 3. **先记账后动作 + 故障即守成**:指令先落表(幂等键)再下发;持仓系统故障 = 不产生新指令、持仓保持现状;每条降级路径显式日志;账本与下游定期对账,以下游为实际持仓事实源。 **决策系统配套修改清单**(原则:**分析核心零改动,仅执行出口改道**;在 bionic_trader 仓库实施): | 类别 | 内容 | |---|---| | 零改动(核心功能,已复查确认保留) | 每日认知闭环(22:30 扫描 → 信号/支撑压力/研报/预测曲线)、视觉形态识别、宏观水温、盘中事件研判(watcher/审计)、风控仲裁、持仓体检 HOLD_CHECK、watch_conditions、反思闭环 L1/L2/L3 与运营日报、月度记忆挖掘、对外 API | | 出口改道 | ①ENTRY_GATE 不再回写 `trading_buy_plan`(建仓审批权移交 PMS),其仲裁能力转为**应 PMS 请求的建仓研判服务**;②风控 SELL、盘中 ENTRY/EXIT 广播照常产出,但**下游停止直接执行**,改由 PMS 订阅消化后统一决定卖出指令;③持仓体检、止盈研判结论同样以信号形式供 PMS 消费 | | 新增(接入性) | 研判服务扩展:`process_intraday_audit` 新增 PMS 请求类 direction(建仓研判 / 补仓研判 / 择时研判),输入由 PMS 提供 context,输出结构化裁决给 PMS——复用其既有仲裁哲学与代码路径,不重写 | --- ## 2. 术语表 | 术语 | 白话解释 | |---|---| | 参数命令 | 改变长期约束的命令(规模/上限/持仓数/自主档位/做T授权等),立即生效并持久化,页面可随时修改 | | 任务命令 | 有生命周期的一次性使命(降仓 10%、清仓某股、建仓某股至 6%),状态机 待处理→规划中→执行中→完成/撤销,进度可查、可撤销 | | 方案 (plan) | 一条任务命令展开成的分股行动清单(A 减半、B 清仓、C 停止买入…),每项带数量、优先级、执行窗口 | | 择时 | 一条指令在执行窗口内的具体出手时机,由决策系统研判;未接通或不可用时用内置保守规则 | | 底仓 / 批次 | 单股目标仓位按 50%/25%/25% 分三批:底仓(BASE)/回踩补足(FILL)/盈利加仓(ADD);另有补仓(DCA)/做T(T0) 批 | | 安全垫 (cushion) | (现价 − 摊薄成本)/摊薄成本,含做T利润。≥3% 为厚垫(SOLID),解锁加仓资格 | | 自主提议 | 非命令触发的动作候选(规则扫描出的补足/加仓/补仓/减仓机会),按自主档位决定自动执行还是待用户确认 | | 自主档位 (autonomy) | `full`(闸门与研判通过即执行) / `propose_only`(增持类全部待用户确认,一期默认) / `off`(只执行命令) | | 一手检查 | A股 100 股起买。批次金额买不足一手 → 自动合并批次(50/25/25→60/40→100),仍不足则放弃该股并提示 | 代码格式:PMS 内部一律 Tushare 点式(`600000.SH`);读决策系统结论表转前缀式。金额单位元,数量单位股(整百)。 --- ## 3. 命令系统与管理页面 ### 3.1 命令场景目录(已定:不分期,全部一次性实现) **A. 资金与总体参数(参数命令)** | 命令 | 语义与要点 | |---|---| | 设定总规模 | 总操作资金(如 200 万)。注资/抽资即改此值,PMS 重算所有百分比约束;抽资导致超限 → 生成降仓提议供确认 | | 设定总仓上限 | 如 60%。调低后超限 → 生成降仓提议供确认(不自动强平) | | 设定单股上限 / 默认目标仓位 | 如 8% / 6% | | 设定最大持仓数 | 如 15 只 | | 设定自主档位 | full / propose_only / off | | 设定预留现金比例 | 总规模中永不动用的部分(如 10%),与总仓上限双重约束 | **B. 组合级动作(任务命令)** | 命令 | 语义与要点 | |---|---| | 降仓 X%(窗口 N 日) | §3.2 全流程示例。优先级:停新买 → 清弱票 → 收利润 → 最后动底仓 | | 升仓 X%(窗口 N 日) | 加仓对象来源:①既有持仓中垫厚且决策系统看多的票补到目标 ②上游计划池 + 决策系统研判筛出的新票建仓 | | 全局暂停买入 / 恢复 | 避险冻结:停止一切新增买入(在途买入指令撤销),卖出与止损不受影响 | | 全局暂停执行 / 恢复 | "休假模式":所有自动动作暂停,仅保留账本对账与日报 | | 一键清仓(紧急) | 全部持仓按最快节奏卖出(窗口默认 1 日,不做择时优化),页面二次确认后执行 | | 清仓某行业 / 限制某行业上限 | 依赖行业划分接口(§5),数据源未配置时此类命令置灰并提示 | **C. 个股级动作(任务/参数命令)** | 命令 | 语义与要点 | |---|---| | 建仓某股至目标 % | 围绕上游计划/用户指定,分批投放(50/25/25),决策系统研判把关 | | 清仓某股 / 减至 X% | 窗口内分日卖出 | | 冻结某股 / 解冻 | 停止该股一切增持(在途撤销),卖出不受影响 | | 做T授权 / 取消(t_ratio) | 只有授权的股票才做T;T 仓 = 持仓 × t_ratio(上限 1/3) | | 设定某股止损价 / 目标价 | 覆盖系统默认参考位,触发即生成卖出方案(止损)或止盈提议 | | 黑名单(永不买入)/ 白名单(优先规划) | 影响建仓候选筛选 | | 调整命令窗口 / 撤销命令 | 对在途任务命令 | ### 3.2 「降仓 10%」全流程(任务命令示例) ``` 用户在页面下达: 降仓 10% (窗口 3 个交易日) 1. 规划: 释放金额 = 规模×10% = 20 万, 按卖出优先级凑足: ①撤销在途买入类任务与指令(先停止继续投入) ②清弱票: 浮亏且安全垫为负、持续 ≥5 日的票 → 清仓(如 B 股 8 万) ③收利润: 浮盈票卖出加仓批/补足批与浮盈部分, 保留底仓(如 A 股减半 7 万) ④仍不足 → 各票按市值等比例微减(凑足 5 万) 2. 方案落表并在页面展示(逐股动作+数量+优先级+截止日),用户可改可撤 3. 执行: 每条卖出指令经规则闸校验 → 决策系统择时(未接通时用内置保守择时)→ 下游挂单 4. 每日收盘更新进度(已释放 12/20 万);窗口末日仍未完成 → 按限价兜底完成或顺延一日并告警 5. 完成: 页面回执(实际释放额/明细/相对命令日收盘价的执行成本) ``` ### 3.3 管理页面(一期最小版) FastAPI + 单页应用(延续 bionic `dashboard.html` 的轻量风格),四块:**参数设置**(A 类命令全部可视化编辑,改动即持久化并生效)、**命令台**(B/C 类命令下达、在途命令进度与撤销)、**持仓与账本**(每票批次/成本/安全垫/冻结状态,总览仪表)、**提议确认**(propose_only 档位下的待确认队列,一键采纳/驳回)。日报在页面可查。 --- ## 4. 持仓账本(基座) **pms_position(一票一行)**:`ts_code / status(计划|建仓中|持有|退出中|已清)` / `frozen_reason(无|命令冻结|刹车|人工)` / `total_qty / avail_qty(T+1 可卖)` / 分类持仓 `base_qty/fill_qty/add_qty/dca_qty/t0_qty` / `avg_cost(摊薄, 含T利润)` / `realized_t_profit` / `cushion_pct/cushion_state/cushion_peak` / `pct_of_scale(市值占规模%)` / 参考位快照(决策系统支撑压力,或兜底自算)/ `t0_enabled` / 纪律计数器。 **pms_lot(批次)**:`lot_type(BASE|FILL|ADD|DCA|T0)` / 数量价格日期 / 已实现盈亏。卖出核销次序 **T0 → ADD(新→旧) → DCA → FILL → BASE**(保底仓纪律);清仓命令则全量核销。 **成交回放与对账(生命线)**:每 5 分钟增量回放 `trading_order` 成交单入批次(对不上指令的外部成交并入 BASE 并告警留痕);盘中轻对账 + 日终全量对账,**以下游为准**修正并留调整痕迹;除权检测(数量与价格反比突变 → 按比例调整批次,比例不吻合 → ERROR 待人工);`avail_qty` 按 T+1 规则每日重置。 --- ## 5. 仓位框架:百分比制 以用户参数命令为纲(默认值即初始配置):**规模 200 万、总仓 ≤60%、单股 ≤8%、持仓 ≤15 只**。 ``` 单股目标仓位 = 建仓命令指定, 默认 6%(12 万) 分批投放: 底仓 50%(6 万)→ 回踩补足 25%(3 万)→ 盈利加仓 25%(3 万) 补仓 DCA ≤ 底仓的 50%(3 万),计入单股上限,终身一次 T 仓 = 持仓市值 × t_ratio(命令参数,硬上限 1/3) 一手检查: 任一批金额 < 现价×100 → 批次自动合并(50/25/25 → 60/40 → 100),仍不足一手 → 放弃并提示 ``` **风险披露线(不定量,只告警)**:每笔买入指令计算敞口 = 数量 × (买价 − 止损参考)。单笔敞口 > 规模×1% 或组合累计 > 规模×6% → 告警并在研判请求中标红。止损参考 = 决策系统支撑位(主口径)/ 自算参考位(兜底,§13)。 **组合层**:总仓上限由用户命令控制(升降仓判断权在用户,PMS 在日报与页面提示大盘区制供参考,不自动联动)。**行业集中度为硬性拦截**:同行业 ≤ 4 只 且 ≤ 总仓的 40%,超限的买入指令直接拒绝。 **行业划分接口(具体方案,已定)**:抽象为 `IndustryClassifier.get(ts_code) -> 行业名 | None`,数据源经 `PMS_SECTOR_SOURCE` 切换: - `custom_table`(**默认建议**):自定义映射表 `pms_industry_map(ts_code 主键, industry 行业名, updated_at)`——用户后续提供何种划分(申万/中信/自定义板块)都只是往这张表灌数据,代码零改动;页面提供简单的查看与导入入口。 - `gp_stock_category`:现成适配器,接决策系统生态已有的行业表(153 侧),作为映射表就绪前的临时数据源。 - `""`(未配置):行业约束自动停用,页面显著提示(不静默放行也不误拦),行业类命令置灰。 组合刹车:自高水位回撤 ≥5% → 自主增持停 3 个交易日(命令类不受限,执行前提示)。 --- ## 6. 动作引擎(双轨:命令驱动 + 自主提议) **命令驱动**动作由方案生成器产出,只过规则闸(上限/一手/冻结/T+1 可卖等合规校验)即入择时队列——用户意志不再送研判。**自主提议**动作由规则扫描触发,先过规则闸,再送决策系统研判(§7),最后按自主档位分流:`full` → 自动执行;`propose_only`(一期默认)→ 落提议队列待用户在页面确认;`off` → 不扫描。 **建仓来源(呼应上游不变)**:上游量化系统照常产出买入计划与评分池 → PMS 作为唯一承接方消费(原决策系统 ENTRY_GATE 的承接角色移交至此):候选进入建仓规划 → 按百分比框架定批次数量 → 送决策系统建仓研判(复用其 gate 仲裁能力,出口改道)→ 通过则生成买入指令。用户的建仓/升仓命令同样从这个候选池 + 白名单中选股。 | 引擎 | 触发(自主提议口径) | 关键约束 | |---|---|---| | FILL 回踩补足 | 建仓期(≤10 交易日)内回踩支撑带不破,浮亏 < 3% | 每票 1 次;补后 ≤ 目标仓位 | | ADD 盈利加仓 | 安全垫 ≥ +3% 且创 5 日新高或站上压力位 | 距上次 ≥2 交易日;≤ 单股上限;距 MA5 <+6%(不追高) | | DCA 补仓 | 浮亏触及 **−8% / −15%** 评估档(各评估一次,执行终身一次) | ≤ 底仓 50%;止损参考不下移;**−15% 及更深永远需用户确认**;研判必答"下跌是杀逻辑还是杀情绪" | | TRIM 保垫减仓 | 安全垫峰值 ≥6% 且回吐过半 → 减 1/3 锁盈 | 纯规则自动执行(减持方向不设确认门槛) | | SWITCH 调仓 | 一期仅命令驱动;自主汰弱换强二期 | 换股成对编排:**卖出成交确认后再下达买入** | | T0 做T | 仅命令授权股票。正T:距当日高点回落 ≥3% 且近支撑;反T:近压力位或涨 ≥5% 后滞涨 | 当日 ≤1 次;**14:50 强制平回**(当日买卖数量对齐,绝不让 T 仓过夜变成变相加减仓);单票/全局当日T亏熔断(0.3%/1% 规模)后禁T;二期上线 | --- ## 7. 两道关口(规则闸 + 研判闸) - **规则闸(一级,全指令必过,PMS 纯代码)**:下发前用最新数据终检——命令参数上限、一手检查、T+1 可卖、冻结状态、刹车状态、行业集中度、(买入)不追高。任一不过或必要输入缺失 → 拒绝(宁可不动),未通过项落账本。 - **研判闸(二级,仅自主提议的补足/加仓/补仓/调仓,由决策系统承担)**:PMS 备齐硬数字与账本流水作为 context → 请求决策系统研判(其 `process_intraday_audit` 新增 PMS 请求类 direction,复用既有仲裁哲学:代码算数、AI 裁定性、越界收口)→ 结构化答复 通过/驳回+理由。研判服务不可用 → 自动降级 propose_only(人工确认替位)+ ERROR 告警。命令驱动动作不过研判闸(不用 AI 审用户)。 - 两道关口的每次评审都落 `pms_action_ledger`(评审方=规则/研判/人工、当时现价、硬数字、未通过项/理由;驳回同样落)——"拒了的后来涨了多少"是后期调参的核心数据。 --- ## 8. 择时执行器(双实现,接口先行) ``` 输入: {指令ID, 股票, 方向, 总数量, 执行窗口, 限价提示, 优先级} 输出(逐日): {当日配额, 出手时点/价格带, 成交回执} 实现A(主): 委托决策系统盘中择时研判(PMS_EXEC 类 direction)——执行/等待 + 建议价, PMS 只管配额与兜底 实现B(兜底, 一期先行): 内置保守择时 ``` **内置保守择时(实现B,参数全部可配置且页面可调)**:每日配额 = 剩余量 ÷ 剩余窗口天数(向上取整到一手)。卖出:避开开盘 30 分钟;现价 ≥ 当日均价(VWAP)时分笔卖出配额;14:45 未完成 → 现价×0.998 限价兜底。买入:现价 ≤ 当日均价或进入回踩带时买入配额;当日涨幅 > 5% 停止买入(不追高);窗口末日 14:45 强制限价完成或按命令属性作废。停牌/一字板当日跳过顺延;窗口耗尽未完成 → 命令置"部分完成"并告警。每次出手记子指令,父指令聚合进度。 --- ## 9. 与下游系统的通道(权限移交的落点) `trading_order` / `trading_position` **仍归下游系统维护**;变化在于对下游的指挥权:原先由决策系统行使的部分管理权限(建仓审批、卖出指挥)移交持仓系统,下游停止直接执行决策系统的信号。通道形态(与下游对账后定稿): - **方案 Y(推荐,趁架构调整一步到位)**:新指令接口 `pms_order_request`(表或 Redis 流,买入卖出统一):`指令ID(幂等) / 股票 / 方向 / 数量 / 限价 / 有效期 / 来源='pms'`,下游轮询执行并回写状态;成交仍落 `trading_order`(PMS 回放对账口径不变)。 - **方案 X(过渡兼容)**:买入沿用 `trading_buy_plan`(PMS 直接置 6 待挂单、署名 `approved_by='pms'`);卖出扩展现有通道补数量字段。 卖出通道确认前,减持类自主动作只记账不下发(影子运行);**命令类的降仓/清仓是用户意志,通道未通前由用户人工执行、PMS 记账跟踪**——这是一期最优先打通的环节。 --- ## 10. 调度总表(Asia/Shanghai,全任务带交易日守卫 + 收尾统计摘要) | 调度 | 时间 | 任务 | |---|---|---| | 盘前准备 | 交易日 08:50 | 命令收敛、当日方案与配额刷新、参考位取数(决策系统昨夜结论)、冻结与刹车结算 | | 命令轮询 | 每 1 分钟(全天) | 新命令解析 → 方案生成 → 任务状态机推进 | | 盘中执行 | 交易时段每 1 分钟 | 择时执行器出手 + 自主提议扫描(规则闸 → 研判闸 → 按档位分流) | | 信号消化 | 常驻 | 订阅决策系统盘中信号(风控 SELL/止盈/反转),转化为卖出方案或提议 | | 成交回放 | 交易时段每 5 分钟 | `trading_order` 增量回放 + 轻对账 | | T 仓平回 | 14:50(二期) | 做T强制平回 | | 日终结算 | 15:10 | 全量对账、除权检测、安全垫峰值、命令进度日结 | | 运营日报 | 15:30 | 关注区(命令进度/待确认提议/对账差异/刹车/影子指令)+ 全量统计,页面可查 | --- ## 11. 数据模型(153 代理侧建表,严格单表访问;DDL 出 `ddl_pms_v1.sql`) | 表 | 关键列 | 说明 | |---|---|---| | `pms_command` | command_id(uk) / cmd_type / params_json / status / progress_json / issued_at / done_at | 命令与进度(参数命令的当前值以本表最新生效记录为准) | | `pms_plan` | plan_id / command_id idx / ts_code / action / qty_or_amount / priority / deadline / status | 方案明细 | | `pms_position` / `pms_lot` | §4 | 账本 | | `pms_instruction` | instruction_id(uk) / 来源(plan/proposal) / ts_code / action / qty / limit_price / status(待检→规则闸过→研判过→已下发→已成交确认 / 拒绝 / 过期 / 撤销) / dispatch_ref / 子单聚合 | 指令状态机 | | `pms_proposal` | proposal_id / ts_code / action / qty / hard_numbers_json / status(待确认→采纳/驳回/过期) | 自主提议待确认队列 | | `pms_action_ledger` | 评审方(rule\|judge\|user) / verdict / price_at / hard_numbers_json / failed_checks_json / reason / outcome_scored | 评审账本(调参判分锚) | | `pms_daily_report` | ymd(uk) / report_json | 日报 | --- ## 12. 配置项(初值;**全部参数可经管理页面在线修改**,页面改动持久化后优先于文件初值) ```python # 命令类参数初值 PMS_TOTAL_SCALE = 2_000_000; PMS_PORTFOLIO_CAP = 0.60; PMS_STOCK_CAP = 0.08 PMS_STOCK_TARGET_DEFAULT = 0.06; PMS_MAX_NAMES = 15; PMS_AUTONOMY = "propose_only" # 批次与安全垫 PMS_BATCH_SPLIT = "0.5,0.25,0.25"; PMS_CUSHION_SOLID = 0.03 PMS_TRIM_PEAK = 0.06; PMS_TRIM_GIVEBACK = 0.5 PMS_DCA_TRIGGERS = "-0.08,-0.15"; PMS_DCA_DEEP_CONFIRM = -0.15; PMS_DCA_MAX_RATIO = 0.5 PMS_NO_CHASE_MA5 = 0.06 # 行业约束(硬拦截;划分依据接口化) PMS_SECTOR_MAX_NAMES = 4; PMS_SECTOR_MAX_RATIO = 0.40; PMS_SECTOR_SOURCE = "" # 空=约束停用并页面提示 # 执行与择时(实现B 全参数) PMS_EXEC_WINDOW_TDAYS = 3; PMS_BUY_HALT_DAYUP = 0.05; PMS_SELL_AVOID_OPEN_MIN = 30 PMS_EOD_FORCE_TIME = "14:45"; PMS_EOD_FORCE_DISCOUNT = 0.998; PMS_MIN_LOT_MERGE = True # 风险披露与刹车 PMS_RISK_WARN_ENTRY = 0.01; PMS_RISK_WARN_PORTFOLIO = 0.06 PMS_BRAKE_DRAWDOWN = 0.05; PMS_BRAKE_DAYS = 3 # 研判闸 PMS_JUDGE_ENABLED = True; PMS_JUDGE_ACTIONS = "FILL,ADD,DCA,SWITCH"; PMS_JUDGE_TIMEOUT = 90 # T0(二期) PMS_T0_ENABLED = False; PMS_T0_RATIO_MAX = 0.333 PMS_T0_STOCK_DAY_LOSS = 0.003; PMS_T0_GLOBAL_DAY_LOSS = 0.01; PMS_T0_CLOSE_TIME = "14:50" ``` --- ## 13. 降级与容错 | 场景 | 行为 | |---|---| | 决策系统研判/择时服务不可用 | 择时退实现B;自主增持降级 propose_only;参考位若停更(数据日龄 >3 交易日)用**自算参考位**:支撑 = max(MA20, 近20日低点×1.01)、压力 = 近60日高点、止损 = 底仓成本−2×ATR 与支撑取高(因子表由上游数据管道维护,独立可用);全部标注"兜底口径" | | 行业划分数据源未配置 | 行业硬拦截自动停用,页面显著提示(不静默放行也不误拦) | | 实时价/因子缺失 | 该票该轮跳过;连续 3 日缺失 → 冻结自主动作并告警 | | 指令下发失败/超时 | 指令置过期 + ERROR,不自动重发;命令进度受阻 → 日报与页面关注区置顶 | | 对账不一致 | 以下游为准修正 + 调整痕迹 + 告警;连续 3 日 → ERROR 待人工 | | 命令冲突 | 后到命令入队并在页面提示冲突,由用户裁决执行顺序 | --- ## 14. 实施方式:功能一次性开发,上线按依赖分步切换 **开发(一次到位,已定)**:全部功能一个开发周期完成——完整命令目录 + 管理页面(四块)+ 账本与对账 + 方案生成器 + 百分比仓位框架 + 规则闸 + 全部动作引擎(含 T0)+ 择时执行器(实现 A 接口 + 实现 B 内置)+ 决策系统信号订阅 + 日报。决策系统侧的配套修改(出口改道 + PMS 研判 direction)同步在 bionic_trader 仓库开发。 **上线切换(按外部依赖排序,不是功能分期)**: | 步 | 前置依赖 | 启用内容 | 通过标准 | |---|---|---|---| | 1 影子运行 | 无(只读权限即可) | 账本/回放/对账、页面查看、命令与方案生成(不下发)、自主提议记录 | 账本连续 5 日对账零差异;方案与提议在页面可核 | | 2 实盘接管 | `QMT_INTERFACE_REQUIREMENTS.md` 协商落地(指令通道 + 数据项);下游停止直接执行决策系统信号 | 命令执行(内置择时)、自主提议 propose_only、T0(对已授权股票) | 一条降仓命令端到端走通(页面下达→方案→分日执行→回执);一笔做T完整平回 | | 3 研判接通 | 决策系统配套修改联调完成 | 择时切实现 A、建仓/补仓/加仓研判闸生效、自主档位可开 full | 择时 A/B 可切换;一笔 −15% 补仓走完"研判+用户确认"链 | **判分与调参**为长期例行(评审账本与命令回执判分:降仓时机成本、提议采纳率与胜率、择时 A vs B 对比 → 阈值回调),随步骤 2 起自然积累数据,月度出校准报告。 --- ## 15. 验证方案(实机,用户执行) 1. 上线前:方案生成器单测(降仓凑额排序/一手合并/上限与行业拦截各边界);命令状态机单测;页面参数改动 → 配置生效链路。 2. 首日检查点:①命令解析与方案落表 ②每笔指令的规则闸硬数字日志 ③择时配额与出手记录 ④回放/对账计数 ⑤页面四块可用。 3. SQL 抽查:`pms_plan` 对照命令意图;`pms_action_ledger` 的 price_at 与行情对照。 4. 两周后:命令执行成本统计(相对命令日收盘价);提议队列的反事实收益——为三期判分定口径。 ## 16. 确认状态(2026-07-27 六点反馈后) | # | 事项 | 状态 | |---|---|---| | 1 | 命令场景目录取舍与分期 | ✅ 已定:全部实现、不分期(§3.1、§14) | | 2 | 与下游系统的数据与通道协商 | 🔄 进行中:需求清单已成文 → `QMT_INTERFACE_REQUIREMENTS.md`,由用户持此与 QMT 侧协商,答复回填该文档 | | 3 | 决策系统配套修改(§1 清单) | ✅ 已批准,直接开发(bionic 仓库实施) | | 4 | 账户资金快照 | ✅ 已并入需求清单(数据项 A3) | | 5 | 行业划分数据源 | ✅ 接口方案已定(§5:`pms_industry_map` 自定义映射表为默认,用户后续灌数即可) | | 6 | 管理页面技术形态 | ✅ 已定:FastAPI + 单页 |