29 KiB
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 已定决策:
- 命令驱动:用户命令是最高约束与主要驱动源;持仓系统的自主判断(如"跌到 −15% 能不能补仓")是第二驱动源,受命令参数约束。
- 连接关系(一期即生效):持仓系统 ↔ 决策系统直接交互;持仓系统 ↔ 下游系统交互;决策系统与下游系统断开——对下游的管理权限(下单、审批、卖出指挥)由决策系统移交持仓系统。决策系统的分析产出全部保留并成为持仓系统的输入。
- 上游不变:上游量化系统的输出(买入计划、告警、评分池)原样保留,持仓系统的建仓计划围绕这些输出建立。
- 决策方式:规则引擎为主 + 关键点研判。仓位数学全部确定性代码;定性研判(该不该补仓、回踩是洗盘还是出货、何时出手)委托决策系统——它本来就是研判系统,持仓系统不另建一套研判栈。
- 仓位框架:百分比制(占总规模的 %),单股分批 50/25/25,含一手可行性检查;风险敞口只做披露告警,不反推数量。
- 事实源:命令 = 用户;实际持仓/成交 = 下游两表(持仓系统账本定期对账);研判 = 决策系统。
1. 总体架构与决策系统配套修改清单
用户(管理页面:参数设置 / 命令下达 / 进度与账本查看 / 提议确认)
│
┌─────────▼──────────────────────────────────────────────┐
│ 持仓系统 tradingSystem (PMS) │
│ 命令系统 → 方案生成器 → 持仓账本(批次/成本/安全垫) │
│ → 动作引擎(命令驱动 + 自主提议) → 规则闸 → 研判/择时 │
└────┬────────────────────────────▲───────────────────────┘
│ 指令(买入/卖出, 带数量限价) │ 研判与择时答复 / 每日结论 / 盘中信号
▼ │
下游系统(QMT侧) 决策系统 bionic_trader
挂单/成交/两表维护 (核心分析功能照旧, 与下游断开)
│ ▲
└── 成交回放/对账 ──▶ PMS ────┘(上游量化输出 → 供 PMS 建仓规划 + 供决策系统分析, 均不变)
三条铁律:
- 命令至上:任何自动决策不得突破用户命令参数;任务命令与自主动作冲突时命令优先,在途自主指令自动撤销;命令之间冲突由用户在页面裁决,系统不代替用户仲裁。
- 分工不越权:持仓系统决定「做什么、多少」,决策系统决定「该不该、何时」(定性研判与择时),下游只管执行。决策系统研判服务不可用时,持仓系统降级为保守规则 + 人工确认,不自建第二套研判。
- 先记账后动作 + 故障即守成:指令先落表(幂等键)再下发;持仓系统故障 = 不产生新指令、持仓保持现状;每条降级路径显式日志;账本与下游定期对账,以下游为实际持仓事实源。
决策系统配套修改清单(原则:分析核心零改动,仅执行出口改道;在 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. 配置项(初值;全部参数可经管理页面在线修改,页面改动持久化后优先于文件初值)
# 命令类参数初值
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. 验证方案(实机,用户执行)
- 上线前:方案生成器单测(降仓凑额排序/一手合并/上限与行业拦截各边界);命令状态机单测;页面参数改动 → 配置生效链路。
- 首日检查点:①命令解析与方案落表 ②每笔指令的规则闸硬数字日志 ③择时配额与出手记录 ④回放/对账计数 ⑤页面四块可用。
- SQL 抽查:
pms_plan对照命令意图;pms_action_ledger的 price_at 与行情对照。 - 两周后:命令执行成本统计(相对命令日收盘价);提议队列的反事实收益——为三期判分定口径。
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 + 单页 |