PMS 持仓管理v{{ health.version || '-' }} · {{ health.now || '' }}

{{ marketState }} 买入 {{ ov.buy_halt ? '已暂停':'正常' }} 执行 {{ ov.exec_halt ? '已暂停':'正常' }} 自主 {{ tx('autonomy', ov.autonomy) }}? 计划 {{ planStatus.ok===false ? '不可用' : (planStatus.date || '-') }} 下发 {{ dm.mode || '-' }}?
{{ autoRefresh ? '自动' : '手动' }} · {{ lastRefresh }}
风控告警
账户总资产
{{ money(ov.total_asset) }}
可用资金 (估算)
{{ money(ov.cash_source==='ws' ? ov.cash_avail : ov.cash_est) }}
持仓市值
{{ money(ov.portfolio_mv) }}
仓位
{{ pct(ov.portfolio_pct) }} / {{ pct(ov.portfolio_cap) }}
浮动盈亏
{{ money(ov.float_pnl) }} {{ ov.float_pnl_pct==null?'':pct(ov.float_pnl_pct) }}
持仓数
{{ ov.names_count }} / {{ ov.max_names }}
等我拍板
{{ proposals.length }} 条
自主档位
{{ tx('autonomy', ov.autonomy) }}
颜色约定: 红=涨/盈 绿=跌/亏 琥珀=需注意 橙=被拦下 蓝=可操作/正常 ?

需要注意

· {{ a }}

等我拍板 · {{ proposals.length }} 条

暂无需要你确认的提议。
{{ nm(p.ts_code) }} {{ p.ts_code }} {{ tx('action', p.action) }}
{{ p.expire_at }} 前有效
决策系统:{{ p.judge_reason }}
{{ propWhy(p) }}
约 {{ p.qty }} 股 · 参考价 {{ (p.hard_numbers||{}).price==null ? '—' : (p.hard_numbers||{}).price }} · 约需 {{ money(((p.hard_numbers||{}).price||0)*(p.qty||0)) }}
采纳 驳回
采纳=记一笔待执行指令,由择时在窗口内择机下单;驳回=今日不再提这只。

我的持仓 · {{ heldPositions.length }} 只

今日在办

今天下出去的买卖单,按状态分三档:还在跑的、已成交的、已经结束的。
今天考察过、但没建仓的票,连原因一起摆出来。

今天发生了什么 · {{ ledger.length }} 条 {{ showLedger?'▲ 收起':'▼ 展开' }}

我的策略 · {{ strategies.length }} 个 {{ stratEnabled ? '策略层已启用' : '策略层总开关未开(PMS_STRATEGY_ENABLED)' }}

还没有挂任何交易方案。到「我的持仓」某行「更多 ▾ → 挂交易方案」给它挂一个。

操作日志 · {{ opLog.length }} 条 {{ showOpLog?'▲ 收起':'▼ 展开' }}

现价 {{ stratDlg.price }} · 持仓 {{ stratDlg.total_qty }} 股(T+1 可卖 {{ stratDlg.avail_qty }})· 浮盈 {{ pct(stratDlg.cushion_pct) }}。参数按这些现值给了默认,不用盲填。
做T 网格 跟踪止盈 自动执行 待我拍板
· {{ r }}

组合操作

对整个组合的手动动作。数值都基于当前实际持仓算出、并预览影响金额,不用盲填;危险动作要二次确认。
{{ ov.buy_halt?'恢复买入':'暂停买入' }} 停止一切新增买入并撤销在途买入指令;卖出与止损不受影响。当前:{{ ov.buy_halt?'已暂停买入':'买入正常' }}。
{{ ov.exec_halt?'结束休假':'休假模式' }} 所有自动动作暂停,只保留对账与日报。当前:{{ ov.exec_halt?'休假中':'正常运行' }}。
调整仓位 当前总仓位 {{ pct(ov.portfolio_pct) }}(市值 {{ money(ov.portfolio_mv) }} / 规模 {{ money(ov.scale) }}),可用资金 {{ money(ov.cash_source==='ws'?ov.cash_avail:ov.cash_est) }}。 目标 {{ posMovePreview }}
清仓行业 卖光某个行业的全部持仓,从下面选(不用手打): —— {{ ov.sector_ready===false?'行业数据未就绪':'当前无带行业的持仓' }}
一键清仓(紧急) 全部持仓({{ heldPositions.length }} 只,市值 {{ money(ov.portfolio_mv) }})按最快节奏卖出、不做择时优化。紧急离场用,需二次确认。

设置 {{ showSettings?'▲ 收起':'▼ 展开' }}

系统在盯的候选 · 今日选股计划 · 计划日 {{ planStatus.date || '—' }}

系统还在盯、可能建仓的票。已下单 / 待你确认 / 被否决的,见上方「今日在办」与「等我拍板」。
{{ n }}
上游计划暂不可用。

上游信号 · 只读参考,不进下单逻辑 {{ showUpstream?'▲ 收起':'▼ 展开' }}

总规模
{{ money(ov.scale) }}
组合市值
{{ money(ov.portfolio_mv) }}
总仓位
{{ pct(ov.portfolio_pct) }} / {{ pct(ov.portfolio_cap) }}
可用额度
{{ money(ov.cap_room) }}
账户可用 (估算)
{{ money(ov.cash_source==='ws' ? ov.cash_avail : ov.cash_est) }}
持仓数
{{ ov.names_count }} / {{ ov.max_names }}
浮动盈亏
{{ money(ov.float_pnl) }}
厚垫 / 负垫
{{ ov.solid_names }} / {{ ov.neg_names }}
页面改动持久化到 pms_runtime_param, 优先于 settings.py 初值; 基础设施连接串只在 .env 维护。
保存修改 ({{ dirtyCount }}) 放弃修改

下达命令

{{ c.label }} {{ c.cls==='param'?'参数':'任务' }} {{ curSpec.cls==='param' ? '参数命令 (立即生效)' : '任务命令 (生成方案)' }} 高危
{{ curSpec.note }}
{{ fieldLabel(name) }}
下达
任务命令下达后立即生成方案并落 pms_plan; 指令下发由择时执行器负责 (下一批交付)。

在途命令与进度

持仓总览 ({{ positions.length }} 只)

在途指令

{{ dm.hint }} 展开可看每日子单与择时依据; 成交量以下游回放为准, 不拿下发量当成交量。

评审账本 (规则闸 / 研判闸 / 人工裁决全量留痕)

待确认队列 (自主档位 {{ ov.autonomy }})

propose_only 档位下, 增持类自主动作全部在此等待裁决; 减持方向不设确认门槛。 采纳后先落指令表 (先记账后动作), 由择时执行器分日出手。
进程 {{ wsc.process_alive ? '在线':'不在线' }} {{ wsc.conn_state || '-' }} 心跳 {{ wsc.heartbeat_age_sec==null ? '从未' : wsc.heartbeat_age_sec+'s 前' }}
每 3 秒自动刷新 刷新
seq 已落库
{{ wsc.last_seq }}
seq 已确认
{{ wsc.acked_seq }}
待入账上行
{{ wsc.inbox_pending }}
收 / 发
{{ wst.rx||0 }} / {{ wst.tx||0 }}
成交 / 拒绝
{{ wst.trades||0 }} / {{ wst.rejects||0 }}
重连
{{ wst.reconnects||0 }}
对端时钟偏差
{{ wst.peer_skew_ms==null ? '—' : (wst.peer_skew_ms>0?'+':'') + wst.peer_skew_ms + 'ms' }}

通道明细

下发模式 {{ wsMode || '-' }} 上次连上 {{ wsc.connected_at || '—' }} 出口队列 {{ JSON.stringify(wsc.queue||{}) }}
最后错误: {{ wsc.last_error }}
最后一条拒绝: {{ wst.last_reject }}
最后断开原因: {{ wst.last_close }}

出口委托 (pms_qmt_order)

上行消息 (pms_qmt_inbox) · 新→旧

隐藏 pong pong 每 5 秒一条且按协议 §5 带 seq, 不隐藏会把成交冲没
调度器 (--profile sched) 会自动按调度总表执行; 此处按钮用于未接调度或临时验证时手动触发。
推进待规划命令 方案转指令 出手试算 (不下发) 出手一跳 窗口收口
提议扫描试算 (不落表) 提议扫描
成交回放 账本对账 盘前准备 日终结算 生成日报 导出下游表结构
当前下发通道: {{ dm.mode }} —— {{ dm.hint }} (通道在「参数设置 → PMS_DISPATCH_MODE」切换)
{{ opsResult }}
强刷 + 灌行业映射 只重读 计划不带价格与金额 —— 买多少/什么价一律 PMS 自己算; 行情取不到价的票会被剔除。
计划日 {{ planStatus.date }} (日龄 {{ planStatus.age_tdays }} 交易日) · 热度日 {{ planStatus.heat_date || '-' }} · 快照 {{ (planStatus.market_snapshot_days||[]).join(',') }} · 上游主题上限 {{ planStatus.theme_cap }} · theme 灌映射 {{ JSON.stringify(planStatus.theme_sync||{}) }}
请求 {{ JSON.stringify(planStatus.query||{}) }} · 漏斗: 打分池 主榜 {{ (planStatus.funnel||{}).scored_main }} / 观察 {{ (planStatus.funnel||{}).scored_observe }} →(券商预期 + 目标价≥现价 + 主题限额 + top)→ 实收 主榜 {{ (planStatus.funnel||{}).returned_main }} / 观察 {{ (planStatus.funnel||{}).returned_observe }}
按当前参数筛选: 排序池 {{ planCand.considered }} → 合格 {{ planCand.eligible }} → 取 {{ (planCand.items||[]).length }} 只 · 白名单档位取全 {{ planCand.tier_complete===null ? '不适用' : (planCand.tier_complete ? '是':'否') }} · 丢弃 {{ JSON.stringify(planCand.dropped||{}) }} · {{ planCand.st_unknown.length }} 只无名称, ST 判不了已放行
{{ (planCand.items||[]).map(x=>x.ts_code).join(' ') }}
榜单变化
重算变化 {{ chgSt.hint }}
{{ chg.kind === 'first' ? '首次落快照' : (chg.prev_date + ' → ' + chg.curr_date) }} · 名册 {{ chg.roster_size.prev }} → {{ chg.roster_size.curr }} · 新进 {{ chg.counts.entered }} · 掉榜 {{ chg.counts.exited }} · 升档 {{ chg.counts.tier_up }} · 降档 {{ chg.counts.tier_down }} · 覆盖翻转 {{ chg.counts.bucket_moved }} · 名次跳变 {{ chg.counts.rank_jump }} · 榜尾进出 {{ chg.tail_churn.entered + chg.tail_churn.exited }} 只未计入 (那一版吃满 top, 尾部是截断噪音不是观点变化) · 其中 {{ chg.tail_churn.held_exempt }} 只因是持仓票照报 (持仓票不受榜尾闸约束 —— 漏报一条就是一个仓位) · 同一计划日出现多版: {{ chgRevised.map(x => x[0] + '×' + x[1]).join(', ') }}
上游把一只持仓票摘出榜或降了档, 是"还该不该继续拿着"的直接信号 —— 单独拎出来免得被几十条新进榜淹掉。它只是提示, 不自动产生任何指令: 要减要清仍走命令台或提议确认。
同一「计划日」出现多行 = 上游那天重算过多版(UPSTREAM_PLAN_API.md §7.3: `/plan` 是实时算的, 应答里没有 generated_at, 下游本来没办法判断手上这份是哪一版)。 指纹不含 score —— 分数抖动但次序没变不算新版本, 否则表白涨而信息量为零。
主榜明细
「预期空间」= 券商目标价相对现价的空间 (上游 upside 字段, 2.12 → +212%)。噪音大, 所以永不参与排序 —— 排序始终按 score; 只在 PMS_PLAN_MIN_UPSIDE 上做下限过滤。 筛选参数在「参数设置」里: PMS_PLAN_TOP_N / PMS_PLAN_TIERS / PMS_PLAN_INCLUDE_OBSERVE / PMS_PLAN_MIN_SCORE / PMS_PLAN_MIN_SOURCES / PMS_PLAN_MIN_UPSIDE / PMS_PLAN_STALE_TDAYS。
发给上游的三个: PMS_PLAN_TOP / PMS_PLAN_OBS_TOP / PMS_PLAN_THEME_CAP (0=不传, 用上游默认 20/10/5)。PMS_PLAN_THEME_CAP_LOCAL 是 PMS 侧的同主题限额, 在 TOP_N 截断之前生效 —— 让上游别裁 (THEME_CAP 设大) + PMS 自己裁, 前 N 名才不会被单一主题垄断。
PMS_PLAN_EXCLUDE_ST 默认开: 上游名单明确不剔除 ST/*ST, 这道闸在 PMS 侧。 「主题」是传导主题(事件驱动、天天变、覆盖约三成), 不是行业 —— 行业硬拦截 请把 PMS_SECTOR_SOURCE 设成 gp_stock_category, 别用 PMS_PLAN_THEME_SYNC。
{{ planResult }}

关注区

{{ JSON.stringify(report.report||{}, null, 2) }}