tradingSystem/FRONTEND_TRADER_VIEW_PLAN.md

19 KiB
Raw Blame History

PMS 前端「交易员视图」改造方案 v1.1

2026-08-10 起草v1.1 并入用户四点反馈与「站在交易员角度」的重排。 落地方向(已拍板):六块全套 + 同一单页加「交易员/运维」开关、默认交易员,运维模式保留现控制台。 纪律:只做加法(不碰后端引擎与既有 API 行为)、可读性优先(完整中文句、不摆裸键/裸码/表名)、 按交易员任务组织而非按后端模块。

v1.1 相对 v1 的四处变化(详见文内标注):

  1. 配色定为 A 股习惯(红涨绿跌)。
  2. 股票中文名取自 153 表 gp_code_allgp_code_two = ts_codegp_name)。
  3. 命令重新归类:多数命令是交易员动作(清仓某只/暂停买入/设止损/一键清仓),下沉到持仓行内与 「组合操作」块;只有调度类运维按钮(回放/对账/日终/exec-tick/扫描…)才进运维模式。
  4. 翻译表全部改用从代码核实的真实枚举DDL + cushion.py措辞贴交易员语境未登记的码显示原码并告警不臆造。

一、目标与判收

最终检验:交易员打开页面,不需记任何内部词汇,就看清四件事——手里有什么、系统想干什么以及为什么、 此刻要我拍板的是哪几条、今天发生与在办的是什么;并能安全完成交易员该做的动作(采纳/驳回提议、 对某只票清/减/设止损、暂停买入、一键清仓、撤在办委托、调高层旋钮)。运维机制原样保留但不挡在面前。

输出级判收(五条,任一不满足即未判收):交易员视图的首屏与每块里——

  1. 不出现任何 PMS_ 开头的裸参数键;
  2. 不出现任何数据库表名(pms_qmt_orderpms_action_ledger 之类);
  3. 不出现任何裸状态码(WAIT_USER / EXECUTING / REJECT / full 之类);
  4. 每一条提议、每一条裁决、每一个动作按钮都带一句完整中文说明(提议/裁决给理由,按钮给「点了会怎样」);
  5. 每个数字都有单位和中文标签。

平行判收:运维模式里现控制台的每个按钮、每张表都还在,行为一字未变。


二、现状定位(以代码为准)

前端是单页 app/web/static/index.htmlVue3 + ElementPlus1088 行)+ app/web/main.pyFastAPI 托管, 所有接口走 ok() 包装、失败也回 HTTP 200 由顶部横幅提示)。它面向搭系统的人:参数区摆裸键 PMS_TOTAL_SCALE)、分区标题印表名(「出口委托 (pms_qmt_order)」)、一排调度类运维按钮 (回放/对账/日终/materialize/exec-tick/scan-proposals/digest-signals/清 resync、状态全是裸码、 按后端模块而非交易员任务组织。

关键发现:翻译材料与动作命令基本都现成。 命令目录 command_spec.SPECS 每条自带中文 label EXIT_STOCK→清仓某股、HALT_BUY→全局暂停买入、SET_STOP_PRICE→设定某股止损价,还带 danger/instant/disabled_reason);参数中心 param_store 每键配了中文说明;提议表 pms_proposal 自带 judge_verdict/judge_reason;账本 reason 是现成文本。缺的是把裸 token 换人话的一层薄映射 + 按任务重排 + 把交易员动作从运维堆里拎出来。 因此本次是纯加法的呈现层,后端引擎与既有 API 不动。


三、设计原则

  1. 只做加法。 后端引擎、状态机语义、既有 API 入参出参一律不改;交易员视图消费现有接口。
  2. 可读性优先。 裸键→中文标签+说明;裸码→中文短语;表名不上台面;理由用完整自然句。
  3. 任务导向。 按「交易员此刻要做什么」分块;命令按「作用在某只票 / 作用在整个组合」就近摆放, 而不是集中在一个「命令台」里让人查手册。
  4. 分层可见。 交易员默认视图 + 运维高级模式一个开关切换;危险动作(一键清仓/暂停/force 对账/清 resync 加二次确认,弹窗写清后果。
  5. 翻译单一事实源。 所有 token→人话映射集中一处全页共用杜绝措辞打架。配色按 A 股习惯:红涨绿跌

四、总体形态

同一单页,顶部「交易员 运维」切换,默认交易员。两套视图共用同一批后端接口,差别只在呈现:

  • 交易员视图:六块(下一节),只读接口 + 现有的少量写接口(采纳/驳回提议、下命令、撤在办委托、改参数), 全部经翻译层渲染、按任务就近摆放。
  • 运维模式:现控制台原样搬过来(调度类运维按钮、裸 cmd_type 命令台表单、通道明细、 出口委托/上行消息原始表、全量参数),危险动作加二次确认。

后端改动至多两处只读加法:① GET /api/labels 吐翻译字典(或字典写死前端);② 一个批量「代码→中文名」 只读查询(见 §5 名称映射)。不新增写接口、不改既有接口。部署仍 make deploy + make test


五、六块逐块设计(数据来源锚到真实字段)

股票中文名映射全块共用PMS 用点式 ts_code(如 688280.SH)。取名走 153 表 gp_code_all 连接键 gp_code_all.gp_code_two = ts_code → 取 gp_name(简称,页面主显)与 fullname(全称,悬浮显示); gp_code_two 缺时用 gp_codeSH688280 形)经 command_spec.normalize_code 归一兜底。落地=复用现有 153 连接(downstream_repo 已在读 gp_ 表)加一个 name_map(codes) 批量只读、按日缓存。 注意:该表 industry 列示例为 NULL不拿它当行业源——行业仍走现有 industry 服务;这里只取名称。

1. 今日一览 需要注意(顶部)

  • 给谁看:一眼掌握账户全局,并把「今天有什么不对/降级」用人话摆出来。

  • 数据来源GET /api/overviewportfolio.overview()+ 提议条数 + GET /api/dispatch-mode / /api/ws-channel(通道)。

  • 一览字段映射

    接口字段 显示
    total_assetcash_avail(cash_source=ws) 账户总资产、可用资金(标「实时」);estimate 时标「估算」并置灰
    portfolio_mvportfolio_pct 持仓市值、仓位占比
    float_pnlfloat_pnl_pct 当日浮动盈亏(红涨绿跌
    names_count/max_names 持仓 N 只 / 上限 M 只
    提议条数 等我拍板 N 条(可点跳第 2 块)
    autonomy 自主档位:全自动 / 只提议不下手 / 暂停
  • 需要注意条(有才显示,各一句人话):buy_halt/exec_halt/brake_until→「已暂停买入 / 休假模式 / 组合刹车中(至 X 日)」;price_missing→「N 只取不到现价(停牌等),其盈亏与安全垫暂不可用」; 研判 UNAVAILABLE 占比高→「研判暂不可用,多只提议降级为需你确认」;通道 conn_state≠ONLINEresync_flag=1→「行情/成交通道断开 / 待人工对账」。这些让交易员知道「系统今天为什么不太动」。

2. 等我拍板(提议卡片,最高频,重心)

  • 数据来源GET /api/proposals?status=WAIT_USERpms_repo.list_proposals,含解析好的 hard_numbers、 以及提议自带的 judge_verdict/judge_reason)。

  • 每张卡片

    来源字段 显示
    ts_code 股票简称 + 代码(gp_name;悬浮全称 fullname
    action 中文动作(见翻译表:建新仓/加仓/补仓/换仓…)
    judge_reason 研判意见原句(完整中文),如「站上关键位、量比放大,驱动仍成立」
    hard_numbers(价/分/主题/档位/预期空间/热度/名次) 一句人话理由 + 关键数字,如「候选榜第 3、强传导主题『算力』、预期空间 +42%、当前尚未过热」
    qty × hard_numbers.price 数量 / 参考价 / 约需金额
    expire_at 有效期(还剩 X 小时,过期自动作废)
  • 动作:「采纳」「驳回」→ POST /api/proposals/{id}/decide;旁注「采纳=记一笔待执行指令, 由择时在窗口内择机下单;驳回=今日不再提这只」。采纳后端回的 warning(一次性守卫没锁上)原样弹出,不吞。

3. 我的持仓(每行带行内快捷动作)

  • 数据来源GET /api/positionsportfolio.positions_view());展开 GET /api/positions/{code}/lots + GET /api/ledger?ts_code=<code>

  • 行字段映射

    来源字段 显示
    ts_code 简称 + 代码
    price/price_ok 现价;price_ok=false 标「估价(停牌/无分钟线)」,该行盈亏与安全垫标不可用
    avg_costmarket_valuepct_of_scale 摊薄成本、市值、占规模比例
    price/avg_cost1 浮动盈亏(红涨绿跌
    cushion_state/cushion_pct/cushion_peak 安全垫:浮亏无垫 / 薄垫 / 厚垫 + 当前垫幅 + 峰值
    neg_cushion_days 安全垫连续为负 N 日(清弱票判据提示)
    statusfrozen_reason 持仓状态(持有中/建仓中/清仓中…);冻结时标「已冻结(禁增持,卖出不受影响)」
    stop_ref/目标价/ref_source 止损价 / 目标价(用户设定标「手动」)
    「下一步」 cushion_state+参数合成人话:「浮盈已过厚垫线,达标可加仓」「浮亏进入补仓评估档,深档需你确认」
  • 行内快捷动作v1.1 新增,就近摆放,下命令走现有 POST /api/commands):清仓某只(EXIT_STOCK)、 减至 X%REDUCE_STOCK)、设止损价(SET_STOP_PRICE)、设目标价(SET_TARGET_PRICE)、 冻结/解冻(FREEZE_STOCK/UNFREEZE_STOCK)、拉黑(BLACKLIST_ADD)。每个按钮旁注后果;卖出类给轻确认。

  • 展开区:批次(底仓/回踩补足/盈利加仓/补仓/做T 各多少股,lot_type 见翻译表)+ 该股账本时间线(整句化)。

4. 今日在办与动向(v1.1 强化:先看在办,再看已发生

  • 在办(前瞻)GET /api/instructions(在途指令:要买/卖什么、限价、窗口、进度)+ GET /api/ws-channel 的出口委托(pms_qmt_order,枚举简化:排队/已报/部分成交/已成/已撤/过期/被拒)。每条可 POST /api/instructions/{id}/cancel)。让交易员看清「系统今天正打算做什么、我能不能拦」。
  • 已发生(回溯)GET /api/ledger + 成交合并成人话时间线「10:32 XX研判驳回建新仓——证据不足」 「10:35 你采纳了 XX 的建仓提议」「14:46 XX 成交 1700 股 @34.71」。

5. 组合操作 设置(v1.1:把交易员级组合命令从运维里拎出来

  • 组合操作(下命令走 POST /api/commands,危险项二次确认):暂停买入/恢复买入(HALT_BUY/RESUME_BUY)、 休假模式/恢复(HALT_ALL/RESUME_ALL)、一键清仓(紧急)LIQUIDATE_ALLdanger,二次确认+输 YES、 降仓/升仓(REDUCE_EXPOSURE/INCREASE_EXPOSURE)、清仓某行业/限行业上限(SECTOR_EXIT/SECTOR_CAP 行业源未就绪时置灰并给 disabled_reason)。每个按钮旁用 command_spec 里现成的 note 说明后果。
  • 设置GET/POST /api/params,标签用 param_store 现成中文说明):总操作规模、总仓上限、单股上限、 最大持仓只数、预留现金比例、自主档位(中文枚举下拉)。改「自主档位/总仓上限」这类会触发降仓提议的,改完给提示。 其余几十个参数留运维模式。SECRET_KEYS(签名种子)本就不入库不显示,保持不动。

6. 运维模式(开关切过去,只留调度/联调这类)

  • 内容:调度类运维按钮(回放 replay、对账 reconcile、日终 daily-settle、materialize、exec-tick、 sweep-windows、scan-proposals、digest-signals、premarket、build-report、rebuild-preflight/accept、 清 resync、plan-refresh、downstream-schema、裸 cmd_type 命令台表单(GET /api/commands/catalog 已带中文 label交易员平时用第 3/5 块的按钮,这里保留给联调)、通道明细(连接/seq 水位/出口队列/上行消息)、 出口委托与上行消息原始表、全量参数、行业映射导入。
  • 加固(只加不改)danger=trueHALT_*reconcile?force=trueclear-resync 一律二次确认。接口本身不动。

可选v1 收尾或 v2候选/关注——GET /api/upstream/plan(今日选股计划主榜/观察档)给交易员一个 「系统在盯哪些、为什么会冒出这些提议」的上下文。默认折叠,不占首屏。


六、翻译层(从代码核实,未登记即显原码并告警)

动作 actionDDL pms_plan/pms_qmt_order.intent + cushion.py + PMS_BATCH_SPLIT 语义核实)

交易员看到的 依据
OPEN 建新仓 首次建仓
FILL 回踩补足 建仓期按批把仓位补到目标(非「建满」)
ADD 盈利加仓 安全垫达厚垫SOLID才解锁
DCA 浮亏补仓 跌到评估档补仓(深档需确认)
TRIM 保垫减仓 垫子回吐过半的止盈减仓
EXIT 清仓
T0 / T0_ROUND 做T日内 收盘应归零
SWITCH 换仓 PMS_JUDGE_ACTIONS(研判侧动作),执行层少见,出现即按此显示
HALT 停手(内部标记) 方案层动作,一般不面向交易员

状态类(全部取自 DDL 列注释)

码 → 人话
提议 pms_proposal.status WAIT_USER 等你确认 / ACCEPTED 已采纳 / DECLINED 已驳回 / EXPIRED 已过期
指令 pms_instruction.status PROPOSED 待校验 / RULE_PASSED 规则闸已过 / JUDGE_PASSED 研判已过 / DISPATCHED 已下发(挂单中) / CONFIRMED 已成交 / REJECTED 被拒 / EXPIRED 到期作废 / CANCELLED 已撤销
委托 pms_qmt_order.status QUEUED 排队 / SENDING·SENT 已报 / PARTIAL 部分成交 / FILLED 已成 / CANCELLED 已撤 / EXPIRED 过期 / REJECTED 被拒 / SEND_FAILED·ABORTED 未发出
命令 pms_command.status 任务PENDING 待处理 / PLANNING 规划中 / EXECUTING 执行中 / PARTIAL 部分完成(顺延) / DONE 已完成 / CANCELLED 已撤销参数EFFECTIVE 生效中 / SUPERSEDED 已被覆盖
方案 pms_plan.status PENDING 待执行 / GATED 待解锁(动作引擎未放行) / EXECUTING 执行中 / DONE 已完成 / PARTIAL 部分完成 / CANCELLED 已撤销
持仓 pms_position.status PLANNED 计划建仓 / OPENING 建仓中 / HOLDING 持有中 / EXITING 清仓中 / CLOSED 已清仓
冻结 frozen_reason NONE 未冻结 / COMMAND_HALT 命令冻结(禁增持) / BRAKE 组合刹车冻结 / MANUAL 手动冻结
安全垫 cushion_state NONE 浮亏无垫 / THIN 薄垫 / SOLID 厚垫
批次 lot_type BASE 底仓 / FILL 回踩补足 / ADD 盈利加仓 / DCA 补仓 / T0 做T仓 / RECON 对账调整
裁决 arbiter/verdict rule 规则闸 / judge 研判闸 / user 你PASS 放行 / REJECT 驳回 / NOTE 记录(信号留痕) / UNAVAILABLE 研判暂不可用
现价来源 cash_source/参考位 ref_source ws 实时(账户快照) / estimate 估算bionic 决策系统 / self_calc 兜底自算 / user 你设定
自主档位 autonomy full 全自动 / propose_only 只提议不下手 / off 暂停
通道 conn_state/resync_flag ONLINE 已连接 / OFFLINE 断开 / CONNECTING 连接中 / STOPPED 已停resync=1 待人工全量对账

verdictNOTE/UNAVAILABLE 是 DDL 注释PASS/REJECT之外、由信号/研判路径后加的实际取值, 已在此登记。翻译层遇到未登记的码:显示原码 + 一条告警,绝不静默套错文案(防「显示得像对的」)。 命令与参数标签直接用 command_spec.list_commands()label/noteparam_store 的中文说明,不自造。


七、落地路径(只做加法)

  1. 前端index.html 顶部加「交易员/运维」切换;新增六块交易员组件,调用 §5 列出的现有接口; 新增翻译字典模块(或拉 GET /api/labels);行内/组合动作复用现有 POST /api/commands。现有各块整体归入运维模式。
  2. 后端(至多两处只读加法)GET /api/labels(翻译字典,或写死前端);name_map(codes) 批量代码→中文名 (复用 153 连接读 gp_code_all,按日缓存)。不新增写接口、不改既有接口行为。
  3. 部署:源码打进镜像 → make deploymake test 见 ALL SUITES PASS前端不影响 469 例,按纪律照跑)。
  4. 离线兜底:沿用 static/vendor/,新组件不加外网依赖。

八、判收清单(实机逐条对)

交易员视图(五条输出级):首屏与六块搜不到裸 PMS_ 键 / 搜不到表名 / 搜不到裸状态码 / 每条提议·裁决·动作按钮都有一句完整中文 / 每个数字有单位与标签。

动作走通:采纳·驳回提议、行内清仓/减仓/设止损、组合暂停买入/一键清仓(二次确认)、撤在办委托—— 各走一遍,账本与指令落表与改造前一致。

运维模式功能不减:调度类按钮、裸命令台、通道明细、出口/上行原始表、全量参数逐一还在; 危险动作弹二次确认;抽三个运维接口返回与改造前一致。

回归make test ALL SUITES PASS。


九、边界与不做什么

  • 不碰后端引擎、状态机语义、闸门逻辑;交易员视图只读 + 复用已有写接口。
  • 危险动作只在前端加确认,后端行为不动。
  • 单用户自用v1 不做权限/角色体系(交易员/运维是同一人的两个视图,非权限隔离)。
  • 移动端适配、图表美化、候选/关注块留 v2或 v1 收尾)。

十、已定与待办

本轮已定(用户 08-10 反馈):① 红涨绿跌;② 中文名走 gp_code_allgp_code_two=ts_code→gp_name ③ 命令按交易员/运维重分类(本稿 §5④ 翻译措辞贴交易员语境、枚举以代码为准(本稿 §6

仍想请你过一眼

  1. §5 第 3、5 块的行内动作与组合动作清单是不是你要的那几个(清/减/止损/冻结/拉黑;暂停/休假/一键清仓/降升仓/行业)——多退少补你定。
  2. §6 翻译表的中文用词逐条可改;你点头后写死进翻译层。
  3. 「候选/关注」块放 v1 收尾还是 v2。