From f7c1240157e530d1b2004685dffbb7e8484334c7 Mon Sep 17 00:00:00 2001 From: xxm Date: Sun, 16 Aug 2026 07:36:30 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=8F=AF=E7=94=A8=E6=80=A7API=E2=80=94?= =?UTF-8?q?=E2=80=94GET=E6=9F=A5/POST=E8=AE=BE=E5=8D=95=E4=B8=AA/=E6=89=B9?= =?UTF-8?q?=E9=87=8F/init=E6=8C=89=E6=A0=87=E5=87=86A=E8=87=AA=E5=8A=A8?= =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server.py | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/server.py b/server.py index c17c7d6f..33bbc0b8 100644 --- a/server.py +++ b/server.py @@ -930,6 +930,44 @@ def api_research_backtest(): return jsonify({'error': str(e)}), 500 +@app.route("/api/research/availability") +def api_research_availability(): + """策略手动可用性状态(2026-08-16 老莫把关) + GET /api/research/availability → 全部状态 + POST /api/research/availability → {version, available, note?} 设单个 + POST /api/research/availability?batch=1 → {versions:[...], available, note?} 批量 + POST /api/research/availability?init=1 → 按标准A自动初始化新策略 + """ + import sys as _sy + _sy.path.insert(0, "/home/hmo/MoFin/deploy/profile-scripts") + from strategy_qualify import (load_availability, set_available, + auto_init_availability, get_benchmarks) + if request.method == "GET": + return jsonify(load_availability()) + data = request.get_json(silent=True) or {} + try: + if request.args.get("init"): + from strategy_lab import list_strategies + versions = sorted({s["version"] for s in list_strategies(period_tag="10y")}) + changed = auto_init_availability(versions, bench=get_benchmarks()) + return jsonify({"initialized": changed, "count": len(changed)}) + if request.args.get("batch"): + versions = data.get("versions") or [] + available = data.get("available", True) + note = data.get("note", "") + out = {} + for v in versions: + out[v] = set_available(v, available, note) + return jsonify({"updated": out, "count": len(out)}) + version = data.get("version") + if not version: + return jsonify({"error": "missing version"}), 400 + entry = set_available(version, data.get("available", True), data.get("note", "")) + return jsonify({"updated": version, "entry": entry}) + except Exception as e: + return jsonify({"error": str(e)}), 500 + + @app.route("/api/research/analysis") def api_research_analysis(): """指定策略版本的因子归因分析"""