fix(digest): 信号从非动作级转入动作级时强制入队

- 原条件只检查tag新旧(持有→卖出时tag已遗留current_recommend→不入队)
- 新加: 旧信号非动作+新信号动作→入队(即使tag不变)
- 补充触发00700/300308/688639的历史卖出推送
This commit is contained in:
hmo
2026-07-27 10:08:11 +08:00
parent 0708a5ffaa
commit d27287f49b
+9 -4
View File
@@ -1248,9 +1248,10 @@ def sync_recommend_tag(conn, code: str, timing_signal: str):
active_manual(人工标记)永不动。与 XMPP 动作级告警同源(红线#12)。"""
try:
recompute_rr(conn, code) # 先入先算:保证 tag/入队/盯盘排序拿到新鲜 RR
_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 ''
_row = conn.execute(
"SELECT tag, timing_signal FROM holding_strategies WHERE code=? AND status='active'", (code,)).fetchone()
_old_tag = (_row[0] or '') if _row else ''
_old_sig = (_row[1] or '') if _row else ''
# 卖出/止盈 仅对持仓股算动作信号(没持仓卖什么)
_ACTION_BUY = ("买入", "可买入", "可加仓")
_ACTION_SELL = ("卖出", "止盈")
@@ -1264,7 +1265,11 @@ def sync_recommend_tag(conn, code: str, timing_signal: str):
"WHERE code=? AND status='active' AND (tag IS NULL OR tag != 'active_manual')",
(code,))
conn.commit()
if _old_tag != 'current_recommend':
# 入队条件:tag 新鲜转成 或 信号从非动作级转入动作级
#(防:信号持有→卖出但tag已遗留current_recommend就不入队——2026-07-27 老爸)
_old_action = _old_sig in _ACTION_BUY or _old_sig in _ACTION_SELL
_new_action = timing_signal in _ACTION_BUY or timing_signal in _ACTION_SELL
if _old_tag != 'current_recommend' or (not _old_action and _new_action):
enqueue_recommend(conn, code) # 新推荐 → 摘要队列(batch 结束统一发)
elif _old_tag == 'current_recommend':
# 空信号或非动作信号 → 清除自动推荐(active_manual 不动)