From bfe0b9c0b58be1e9d03f0a13f0a71f95c147dc60 Mon Sep 17 00:00:00 2001 From: hmo Date: Thu, 13 Aug 2026 14:03:16 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20scanner=E6=B8=A9=E5=8C=BA=E8=AF=BB?= =?UTF-8?q?=E5=8F=96=E7=BB=9F=E4=B8=80regime=5Fgate=E5=B9=B3=E6=BB=91?= =?UTF-8?q?=E6=B8=A9=E5=8C=BA=E2=80=94=E2=80=94mr=5Fscanner/predictive=5Fo?= =?UTF-8?q?versold=E7=9A=84regime=E5=88=A4=E5=AE=9A=E4=BC=98=E5=85=88?= =?UTF-8?q?=E5=B9=B3=E6=BB=91K=3D5(regime=5Fgate),=E5=9B=9E=E9=80=80?= =?UTF-8?q?=E5=8E=9F=E5=A7=8Bmarket=5Fregime,adx=E4=BB=8D=E8=AF=BB?= =?UTF-8?q?=E5=8E=9F=E5=A7=8B=E8=A1=A8(=E7=94=9C=E5=8C=BA=E9=97=A8?= =?UTF-8?q?=E6=8E=A7);=20=E9=81=BF=E5=85=8D=E8=A2=AB=E5=8D=95=E6=97=A5?= =?UTF-8?q?=E5=99=AA=E9=9F=B3=E8=AF=AF=E5=AF=BC;=20s2=5Fscanner=E4=BF=9D?= =?UTF-8?q?=E6=8C=81RSI=E6=81=90=E6=85=8C=E9=97=A8=E6=8E=A7=E4=B8=8D?= =?UTF-8?q?=E5=8F=98(=E6=B8=A9=E5=BA=A6=E7=BB=B4=E5=BA=A6,=E6=AD=A3?= =?UTF-8?q?=E7=A1=AE=E8=AE=BE=E8=AE=A1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/profile-scripts/mr_scanner.py | 25 ++++++++++++++++++- .../predictive_oversold_scanner.py | 24 +++++++++++++++++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/deploy/profile-scripts/mr_scanner.py b/deploy/profile-scripts/mr_scanner.py index 60930eed..ec9aae71 100644 --- a/deploy/profile-scripts/mr_scanner.py +++ b/deploy/profile-scripts/mr_scanner.py @@ -63,7 +63,30 @@ TOP_N = 10 def load_regime(): - """读取 market_regime 最新状态""" + """读取当前温区。优先平滑温区(regime_gate K=5),回退原始 market_regime。 + adx 仍需从原始表补(甜区门控用)。""" + # 平滑温区优先 + try: + from regime_gate import get_current_regime + _rg = get_current_regime() + if _rg and _rg.get("regime") != "unknown": + _base = {"date": _rg.get("date", ""), "regime": _rg.get("regime"), "smoothed": True} + # 补 adx/above_ma20(甜区门控需要) + try: + conn = sqlite3.connect(str(DB_PATH), timeout=5) + row = conn.execute( + "SELECT date, above_ma20, adx, regime FROM market_regime " + "ORDER BY date DESC LIMIT 1").fetchone() + conn.close() + if row: + _base["above_ma20"] = bool(row[1]) + _base["adx"] = row[2] + except Exception: + pass + return _base + except Exception: + pass + # 回退原始 try: conn = sqlite3.connect(str(DB_PATH), timeout=5) row = conn.execute( diff --git a/deploy/profile-scripts/predictive_oversold_scanner.py b/deploy/profile-scripts/predictive_oversold_scanner.py index 8baef16a..fae379e3 100644 --- a/deploy/profile-scripts/predictive_oversold_scanner.py +++ b/deploy/profile-scripts/predictive_oversold_scanner.py @@ -81,7 +81,29 @@ def _singleton_guard(max_age_sec, script_tag): def load_market_state(): - """读取大盘状态(market_regime 表 + 指数RSI/回撤)""" + """读取大盘状态(平滑温区优先,回退原始 market_regime + 指数RSI/回撤)""" + # 平滑温区优先 + try: + from regime_gate import get_current_regime + _rg = get_current_regime() + if _rg and _rg.get("regime") != "unknown": + _base = {"date": _rg.get("date", ""), "regime": _rg.get("regime"), "smoothed": True} + # 补 adx/above_ma20 + try: + conn = sqlite3.connect(str(DB_PATH), timeout=5) + row = conn.execute( + "SELECT date, above_ma20, adx, regime FROM market_regime " + "ORDER BY date DESC LIMIT 1").fetchone() + conn.close() + if row: + _base["above_ma20"] = bool(row[1]) + _base["adx"] = row[2] + except Exception: + pass + return _base + except Exception: + pass + # 回退原始 try: conn = sqlite3.connect(str(DB_PATH), timeout=5) row = conn.execute(