tradingSystem/POSITION_MGMT_DESIGN.md

330 lines
29 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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 | 只有授权的股票才做TT 仓 = 持仓 × 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 + 单页 |