From 650e67c082fb1f5e0ca6e5e166904765b98ab643 Mon Sep 17 00:00:00 2001 From: hmo Date: Thu, 30 Jul 2026 03:44:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20v=5Fcombo=E8=90=BD=E5=9C=B0Step3?= =?UTF-8?q?=E2=80=94=E2=80=94price=5Fmonitor=E6=8C=89exit=5Fmode=E5=88=86?= =?UTF-8?q?=E6=B4=BE=E5=87=BA=E5=9C=BA(swing=E6=B3=A2=E6=AE=B5=E5=87=BA?= =?UTF-8?q?=E5=9C=BA/=E5=86=8D=E8=BF=9B=E6=A3=80=E6=B5=8B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/profile-scripts/price_monitor.py | 27 +++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/deploy/profile-scripts/price_monitor.py b/deploy/profile-scripts/price_monitor.py index 760ba2cc..158b01fa 100644 --- a/deploy/profile-scripts/price_monitor.py +++ b/deploy/profile-scripts/price_monitor.py @@ -512,6 +512,33 @@ def run_once(round_label=""): if code not in state: state[code] = {} + # ── v_combo波段出场检测(exit_mode=swing的持仓,2026-07-29落地)── + if d.get("exit_mode", "swing") == "swing" and (d.get("shares") or 0) > 0: + try: + import sqlite3 as _sq + _c2 = _sq.connect("/home/hmo/MoFin/data/mofin.db") + _ma = _c2.execute("SELECT close, high, ma10 FROM stock_daily WHERE code=? ORDER BY date DESC LIMIT 4", (code,)).fetchall() + _c2.close() + if len(_ma) >= 3: + _closes = [r[0] for r in _ma] + _highs = [r[1] for r in _ma] + _ma10s = [r[2] for r in _ma if r[2]] + if _ma10s: + _ma10 = _ma10s[0] + # 连续2日收破MA10 → 波段出场 + below = sum(1 for c in _closes[:2] if c < _ma10) + if below >= 2 and price < _ma10 and _can_push(code, "swing_out"): + outputs.append(f"📉 {name}({code}) {price} 连续破MA10({_ma10:.2f}) → 波段先出(可减仓)") + record_event(code, name, "swing_out", price, str(_ma10)) + _push_action("波段出场", f"📉 {name}({code}) {price} 连续2日破MA10({_ma10:.2f}) → 波段先出,建议减仓;收回MA10且创新高再进") + # 收回MA10且突破前一日高点 → 波段再进 + elif price > _ma10 and len(_highs) >= 2 and _highs[0] > _highs[1] and _can_push(code, "swing_re"): + outputs.append(f"📈 {name}({code}) {price} 收回MA10({_ma10:.2f})且突破前高 → 波段再进") + record_event(code, name, "swing_re", price, str(_ma10)) + _push_action("波段再进", f"📈 {name}({code}) {price} 收回MA10({_ma10:.2f})且突破前一日高点 → 波段再进,可接回") + except Exception as _e: + pass + # 时间预算检查:如果超时,跳过重评只做状态记录 _budget_low = (time.time() - start) > TIME_BUDGET