fix: auto_init_availability按市场评估——港股策略探测strategy_research.market,避免误标不可用致港股表全空
This commit is contained in:
@@ -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))
|
||||
|
||||
Reference in New Issue
Block a user