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))