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(): """指定策略版本的因子归因分析"""