feat(盯盘): 推荐操作区域置顶独立 + tag与XMPP动作级信号自动同步

- mofin_db: write_holding_strategy 内置tag同步语义——动作级信号
  (买入/可买入/可加仓/卖出/止盈)→current_recommend; 信号降级→
  清除current_recommend; active_manual人工标记永不被自动流覆盖/清除
- 新增 sync_recommend_tag() 供裸SQL调用方
- batch_reassess.save_result / per_stock stage-2 调用同步
- 盯盘Tab: '重点推荐'更名'推荐操作', 区域独立琥珀色视觉, 置顶
同步语义: XMPP买入信号(ACTION级告警)的个股=推荐操作区域个股,
信号消失(重评降级)时区域同步消失
This commit is contained in:
hmo
2026-07-21 23:31:57 +08:00
parent 05a60cf0d4
commit 9914ff9457
4 changed files with 61 additions and 13 deletions
+4 -1
View File
@@ -17,7 +17,7 @@ from datetime import datetime
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0, "/home/hmo/MoFin")
from llm_client import call_llm, REASSESS_MODEL, gateway_alive, ocg_alive
from mofin_db import snapshot_strategy_history
from mofin_db import snapshot_strategy_history, sync_recommend_tag
DB = "/home/hmo/MoFin/data/mofin.db"
COOLDOWN_HOURS = 1
@@ -359,6 +359,9 @@ def save_result(code, full_text, parsed):
sql = f"UPDATE holding_strategies SET {', '.join(updates)} WHERE code=? AND status='active'"
conn.execute(sql, params)
conn.commit()
# ── 推荐操作 tag 同步(与 XMPP 动作级信号同源)──
sync_recommend_tag(conn, code, parsed.get("signal", ""))
# 买入信号→推XMPP通知(在conn close前执行)
if parsed.get("signal") == "买入":
+8 -2
View File
@@ -557,8 +557,14 @@ def main():
if _sig_line:
_sig = '买入' if '买入' in _sig_line[0] else '关注' if '关注' in _sig_line[0] else '观望' if '观望' in _sig_line[0] else '卖出' if '卖出' in _sig_line[0] else ''
if _sig:
__import__('sqlite3').connect('/home/hmo/MoFin/data/mofin.db').execute(
"UPDATE holding_strategies SET timing_signal=? WHERE code=? AND status='active'", (_sig, code)).connection.commit()
_ts_conn = __import__('sqlite3').connect('/home/hmo/MoFin/data/mofin.db')
_ts_conn.execute(
"UPDATE holding_strategies SET timing_signal=? WHERE code=? AND status='active'", (_sig, code))
_ts_conn.commit()
# 推荐操作 tag 同步(与 XMPP 动作级信号同源)
from mofin_db import sync_recommend_tag
sync_recommend_tag(_ts_conn, code, _sig)
_ts_conn.close()
print(f" ✅ LLM信号={_sig} 已写入")
# 买入信号→推XMPP
if _sig == "买入":