From 2d8291057bc3924aceb788f008cf7cb3fe870e01 Mon Sep 17 00:00:00 2001 From: xxm Date: Sun, 16 Aug 2026 08:25:10 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20auto=5Finit=5Favailability=E6=8C=89?= =?UTF-8?q?=E5=B8=82=E5=9C=BA=E8=AF=84=E4=BC=B0=E2=80=94=E2=80=94=E6=B8=AF?= =?UTF-8?q?=E8=82=A1=E7=AD=96=E7=95=A5=E6=8E=A2=E6=B5=8Bstrategy=5Fresearc?= =?UTF-8?q?h.market,=E9=81=BF=E5=85=8D=E8=AF=AF=E6=A0=87=E4=B8=8D=E5=8F=AF?= =?UTF-8?q?=E7=94=A8=E8=87=B4=E6=B8=AF=E8=82=A1=E8=A1=A8=E5=85=A8=E7=A9=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- deploy/profile-scripts/strategy_qualify.py | 32 +++++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/deploy/profile-scripts/strategy_qualify.py b/deploy/profile-scripts/strategy_qualify.py index edd87b2b..711a1110 100644 --- a/deploy/profile-scripts/strategy_qualify.py +++ b/deploy/profile-scripts/strategy_qualify.py @@ -106,9 +106,25 @@ def save_availability(data): AVAIL_JSON.write_text(json.dumps(data, ensure_ascii=False, indent=1), encoding="utf-8") -def auto_init_availability(versions, bench=None): +def _strategy_market(version): + """探测策略市场:strategy_research.market('hk'=港股,否则 A股)""" + try: + conn = sqlite3.connect(str(DATA_DIR / "mofin.db"), timeout=5) + r = conn.execute( + "SELECT market FROM strategy_research WHERE version=? AND COALESCE(market,'')!='' " + "ORDER BY id DESC LIMIT 1", (version,)).fetchone() + conn.close() + if r and r[0] == "hk": + return "hk" + except Exception: + pass + return "a" + + +def auto_init_availability(versions, bench=None, market_by_version=None): """新策略按标准 A 自动初始化可用性(一般默认可用;长期不合格则不可用) 已存在的手动状态不动。返回新增的默认可用策略。 + market_by_version: dict {version: 'a'|'hk'},缺省按 strategy_research.market 探测 """ bench = bench or get_benchmarks() avail = load_availability() @@ -116,12 +132,20 @@ def auto_init_availability(versions, bench=None): for v in versions: if v in avail: continue - ev = evaluate_strategy(v, "a", bench=bench) + mkt = (market_by_version or {}).get(v) or _strategy_market(v) + ev = evaluate_strategy(v, mkt, bench=bench) # 默认:长期合格即可用(A 标准);长期不合格(10y跑不赢大盘)默认不可用 - default_avail = bool(ev and ev["long_ok"]) + # 无评估数据(如港股策略在 hk 也无温区数据)→ 默认可用(不误杀新策略) + default_avail = True if ev is None else bool(ev["long_ok"]) + if ev is None: + note = "自动初始化:无温区数据,默认可用" + elif default_avail: + note = "自动初始化(标准A)" + else: + note = "自动初始化:长期不合格(10y<大盘)" avail[v] = { "available": default_avail, - "note": "自动初始化(标准A)" if default_avail else "自动初始化:长期不合格(10y<大盘)", + "note": note, "updated_at": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), } changed.append((v, default_avail))