From 823b24cccbfc6d34615fffc4db7e365361598ac4 Mon Sep 17 00:00:00 2001 From: zlt Date: Wed, 12 Aug 2026 15:10:56 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=A1=B5=E9=9D=A2=E5=B8=83?= =?UTF-8?q?=E5=B1=80=E6=A0=B7=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/services/proposal_service.py | 18 +++++++++++++----- app/web/static/index.html | 12 ++++++------ 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/app/services/proposal_service.py b/app/services/proposal_service.py index 4238e36..89fe837 100644 --- a/app/services/proposal_service.py +++ b/app/services/proposal_service.py @@ -239,8 +239,16 @@ def disposition_snapshot(now=None) -> dict: view = portfolio.positions_view() params = _scan_params(view) stock_params = command_service.effective_stock_params() - # 与实盘扫描同一份 skip: 在途 / 今日已被规则闸拒 / 今日已被研判闸驳回的新建仓 - skip = {**_judge_rejected_open_keys(), **_rejected_today_keys(), **_inflight_keys()} + # 给交易员的白话原因: 用同一套去重键 (口径与实盘扫描一致), 但值不含内部闸门术语、 + # 也不指引任何终端命令 —— 原来的 _*_keys() 串带「研判闸/规则闸/看 make t-gate」, 那是 + # 给日志与运维看的, 不该出现在交易员页面。落库顺序同实盘 (在途最后, 覆盖被拒)。 + skip = {} + for _k in _judge_rejected_open_keys(): + skip[_k] = "决策系统今天判过暂不建仓,明天开盘会重新评估" + for _k in _rejected_today_keys(): + skip[_k] = "今天没通过合规检查,明天开盘会重新评估" + for _k in _inflight_keys(): # 在途; 前端多半已按指令/提议标成「已下单/待你确认」 + skip[_k] = "系统已经在处理这只票(见『等我拍板』或『今日在办』)" sink = {"skipped": []} # 丢弃用: _scan_open 只往里 append/extend, 不读它 would = _scan_open(view, params, stock_params, skip, {}, sink) except Exception as e: @@ -301,7 +309,7 @@ def _route_one(c, view, params, stock_params, brake_active, now, dry_run, out, if not dry_run: pms_repo.insert_ledger(ts_code=code, action=action, arbiter="rule", verdict="REJECT", price_at=price, hard_numbers=c["hard_numbers"], - failed_checks=gate["failed"], reason="自主提议未过规则闸") + failed_checks=gate["failed"], reason="自主提议未通过合规检查") return # ---- 二级: 研判闸 (补足/加仓/补仓/新建仓; 减持不送研判) ---- @@ -320,12 +328,12 @@ def _route_one(c, view, params, stock_params, brake_active, now, dry_run, out, "recent_ledger": _recent_ledger(code)}) if verdict["verdict"] == judge.REJECT: out["rejected"].append({"ts_code": code, "action": action, "by": "judge", - "failed": [verdict.get("reason") or "研判驳回"]}) + "failed": [verdict.get("reason") or "决策系统驳回"]}) if not dry_run: pms_repo.insert_ledger(ts_code=code, action=action, arbiter="judge", verdict="REJECT", price_at=price, hard_numbers=c["hard_numbers"], - reason=verdict.get("reason") or "研判驳回") + reason=verdict.get("reason") or "决策系统驳回") return if verdict.get("degraded"): out["degraded"] = True diff --git a/app/web/static/index.html b/app/web/static/index.html index 40f7cdd..37738db 100644 --- a/app/web/static/index.html +++ b/app/web/static/index.html @@ -187,7 +187,7 @@ pre.json{background:var(--surface-2);border:1px solid var(--hair);border-radius: {{ tx('action', p.action) }}
{{ p.expire_at }} 前有效
-
研判:{{ p.judge_reason }}
+
决策系统:{{ p.judge_reason }}
{{ propWhy(p) }}
约 {{ p.qty }} 股 · 参考价 {{ (p.hard_numbers||{}).price==null ? '—' : (p.hard_numbers||{}).price }} @@ -396,7 +396,7 @@ pre.json{background:var(--surface-2);border:1px solid var(--hair);border-radius: - 须落在单股上限内(规则闸兜底) + 须落在单股上限内(合规检查兜底) 跌破未买档→买一份,涨破已买档→卖一份(从 T+1 可卖存量);跌破下界=继续持有、不再买。 @@ -1353,10 +1353,10 @@ createApp({ lot: { BASE:'底仓', FILL:'回踩补足', ADD:'盈利加仓', DCA:'补仓', T0:'做T仓', RECON:'对账调整' }, frozen: { NONE:'', COMMAND_HALT:'命令冻结(禁增持)', BRAKE:'刹车冻结', MANUAL:'手动冻结' }, posStatus: { PLANNED:'计划建仓', OPENING:'建仓中', HOLDING:'持有中', EXITING:'清仓中', CLOSED:'已清仓' }, - insStatus: { PROPOSED:'待校验', RULE_PASSED:'规则闸已过', JUDGE_PASSED:'研判已过', DISPATCHED:'已下发挂单', + insStatus: { PROPOSED:'待校验', RULE_PASSED:'合规已过', JUDGE_PASSED:'复核已过', DISPATCHED:'已下发挂单', CONFIRMED:'已成交', REJECTED:'被拒', EXPIRED:'到期作废', CANCELLED:'已撤销' }, - arbiter: { rule:'规则闸', judge:'研判闸', user:'你' }, - verdict: { PASS:'放行', REJECT:'驳回', NOTE:'记录', UNAVAILABLE:'研判暂不可用' }, + arbiter: { rule:'合规检查', judge:'决策系统', user:'你' }, + verdict: { PASS:'放行', REJECT:'驳回', NOTE:'记录', UNAVAILABLE:'决策系统暂不可用' }, stype: { T0:'做T', GRID:'网格', TRAIL:'跟踪止盈' }, stratStatus: { ACTIVE:'运行中', PAUSED:'已暂停', CANCELLED:'已撤下', DONE:'已完成' }, }; @@ -1424,7 +1424,7 @@ createApp({ out.push(o.price_missing.length + ' 只取不到实时价(停牌等),其盈亏与安全垫暂不可用'); if (o.sector_ready === false) out.push('行业数据未就绪,行业类操作暂不可用'); const j = (dm.value || {}).judge; - if (j && j.available === false) out.push('研判暂不可用:补足/加仓/补仓一律降级为需你确认'); + if (j && j.available === false) out.push('决策系统暂不可用:补足/加仓/补仓一律降级为需你确认'); const c = wsc.value || {}; if (c.conn_state && c.conn_state !== 'ONLINE') out.push('行情/成交通道未连接(' + c.conn_state + ')'); if (c.resync_required) out.push('通道待人工全量对账');