From 1910cef98b9fa98fe401ba6d0edbc415f87517ec Mon Sep 17 00:00:00 2001 From: hmo Date: Wed, 22 Jul 2026 10:48:49 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E7=A9=BA=E4=BF=A1=E5=8F=B7=E6=B8=85?= =?UTF-8?q?=E9=99=A4tag=20+=20=E5=8D=96=E5=87=BA/=E6=AD=A2=E7=9B=88?= =?UTF-8?q?=E4=BB=85=E6=8C=81=E4=BB=93=E8=82=A1=E7=AE=97=E5=8A=A8=E4=BD=9C?= =?UTF-8?q?=E4=BF=A1=E5=8F=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mofin_db.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/mofin_db.py b/mofin_db.py index 5b9bd385..cb18f17c 100644 --- a/mofin_db.py +++ b/mofin_db.py @@ -1148,12 +1148,18 @@ def sync_recommend_tag(conn, code: str, timing_signal: str): """裸 SQL 调用方(batch_reassess / per_stock_reassess)的推荐 tag 同步。 动作级信号 → current_recommend;信号降级 → 清除 current_recommend; active_manual(人工标记)永不动。与 XMPP 动作级告警同源(红线#12)。""" - _ACTION_SIGNALS = ("买入", "可买入", "可加仓", "卖出", "止盈") try: _old_tag_row = conn.execute( "SELECT tag FROM holding_strategies WHERE code=? AND status='active'", (code,)).fetchone() _old_tag = (_old_tag_row[0] or '') if _old_tag_row else '' - if timing_signal in _ACTION_SIGNALS: + # 卖出/止盈 仅对持仓股算动作信号(没持仓卖什么) + _ACTION_BUY = ("买入", "可买入", "可加仓") + _ACTION_SELL = ("卖出", "止盈") + if timing_signal in _ACTION_SELL: + _h = conn.execute("SELECT shares FROM holdings WHERE code=? AND is_active=1", (code,)).fetchone() + if not (_h and (_h[0] or 0) > 0): + timing_signal = "" # 非持仓的卖出/止盈不算动作信号 + if timing_signal in _ACTION_BUY or timing_signal in _ACTION_SELL: conn.execute( "UPDATE holding_strategies SET tag='current_recommend' " "WHERE code=? AND status='active' AND (tag IS NULL OR tag != 'active_manual')", @@ -1161,7 +1167,8 @@ def sync_recommend_tag(conn, code: str, timing_signal: str): conn.commit() if _old_tag != 'current_recommend': enqueue_recommend(conn, code) # 新推荐 → 摘要队列(batch 结束统一发) - elif timing_signal: + elif _old_tag == 'current_recommend': + # 空信号或非动作信号 → 清除自动推荐(active_manual 不动) conn.execute( "UPDATE holding_strategies SET tag='' " "WHERE code=? AND status='active' AND tag='current_recommend'",