diff --git a/mofin_db.py b/mofin_db.py index 156e8ce2..6bbb8ed2 100644 --- a/mofin_db.py +++ b/mofin_db.py @@ -1135,16 +1135,21 @@ def reconcile_signal_from_analysis(conn, code: str) -> str: if verdict: new_sig = verdict # ── 矛盾降级(2026-07-24 老爸:688660综合结论=买入但操作建议说"继续空仓观望暂不执行")── - # 【综合结论】给方向,【操作建议】给执行。操作建议明确否定买入时, - # 以操作建议为准——信号降级为关注,tag/exec 一律不许升。 + # 【综合结论】给方向,【操作建议】/【建议仓位】给执行。执行层明确否定买入时, + # 以执行为准——信号降级为关注,tag/exec 一律不许升。 if new_sig in ("买入", "可买入", "可加仓"): _NEG_ADVICE = ("继续空仓", "暂不执行", "不宜买入", "不买入", "不建仓", "不新建仓", - "等待企稳", "暂缓买入", "保持空仓", "维持空仓", "不建议买入", "空仓观望") + "等待企稳", "暂缓买入", "保持空仓", "维持空仓", "不建议买入", "空仓观望", + "不建议操作", "等待价格回落", "等待回调", "高于买入区上沿") for line in fa.split("\n"): - if "【操作建议】" in line or line.strip().startswith("【操作建议】"): - if any(k in line for k in _NEG_ADVICE): - new_sig = "关注" - print(f" [RECONCILE] {code} 操作建议否定买入('{line.strip()[:40]}'),信号降级为关注", flush=True) + if "【建议仓位】" in line and ("不新建仓" in line or "不建仓" in line): + new_sig = "关注" + print(f" [RECONCILE] {code} 建议仓位=不建仓('{line.strip()[:40]}'),信号降级为关注", flush=True) + break + if ("【操作建议】" in line or line.strip().startswith("【操作建议】")) \ + and any(k in line for k in _NEG_ADVICE): + new_sig = "关注" + print(f" [RECONCILE] {code} 操作建议否定买入('{line.strip()[:40]}'),信号降级为关注", flush=True) break elif old_sig in ("买入", "可买入", "可加仓"): new_sig = "" # 无裁决且陈旧动作信号 → 清除 diff --git a/server.py b/server.py index 1b130852..73f49b0d 100644 --- a/server.py +++ b/server.py @@ -248,8 +248,12 @@ def get_watch(): d['suggested_position_pct'] = pct rr = d.get('rr_ratio') or 0 sig_now = d.get('timing_signal') or '' + # 仓位必须明确%("减仓或观望/中等仓位"不算可执行的仓位——2026-07-24 老爸) + _has_pos = bool(_re.search(r'(\d+(?:\.\d+)?)\s*%', d.get('position_advice') or '')) if sig_now in _WEAK_SIGNALS: d['rec_exec'] = False # 弱信号永远排队 + elif not _has_pos: + d['rec_exec'] = False # 无明确仓位,排队 elif rr >= 2.0 and _cum + pct <= _budget_pct + 1e-9: d['rec_exec'] = True # 可执行(2026-07-24 老爸:门槛1.5→2.0,边缘推荐不算优) _cum += pct