feat: 策略实验室多版本体系 — v1~v4.1迭代+12维上下文(大盘/趋势变化)+因子归因+版本对比列表
This commit is contained in:
@@ -533,28 +533,66 @@ def get_tracking():
|
||||
|
||||
|
||||
|
||||
@app.route("/api/research/backtest")
|
||||
def get_research_backtest():
|
||||
import sqlite3
|
||||
from datetime import datetime, timedelta
|
||||
period = request.args.get("period", "1y")
|
||||
capital = float(request.args.get("capital", 1000000))
|
||||
end_date = datetime.now().strftime("%Y-%m-%d")
|
||||
if period == "6m":
|
||||
start_date = (datetime.now() - timedelta(days=180)).strftime('%Y-%m-%d')
|
||||
elif period == "1y":
|
||||
start_date = (datetime.now() - timedelta(days=365)).strftime('%Y-%m-%d')
|
||||
else:
|
||||
start_date = (datetime.now() - timedelta(days=730)).strftime('%Y-%m-%d')
|
||||
@app.route("/api/research/strategies")
|
||||
def api_research_strategies():
|
||||
"""策略版本列表(含回测结果摘要)"""
|
||||
try:
|
||||
from backtest_framework import run_strategy_research
|
||||
result = run_strategy_research(start_date, end_date, capital)
|
||||
from flask import jsonify
|
||||
return jsonify(result)
|
||||
from strategy_lab import list_strategies
|
||||
return jsonify({'strategies': list_strategies()})
|
||||
except Exception as e:
|
||||
from flask import jsonify
|
||||
return jsonify({'error': str(e)}), 500
|
||||
|
||||
|
||||
@app.route("/api/research/backtest")
|
||||
def api_research_backtest():
|
||||
"""运行指定策略版本的回测"""
|
||||
from datetime import datetime, timedelta
|
||||
version = request.args.get('strategy', 'v4.1')
|
||||
period = request.args.get('period', '6m')
|
||||
capital = float(request.args.get('capital', 1000000))
|
||||
end_date = '2026-07-24' # 数据完整截止日
|
||||
days = {'1m': 30, '6m': 185, '1y': 365, '2y': 730}.get(period, 185)
|
||||
start_date = (datetime.strptime(end_date, '%Y-%m-%d') - timedelta(days=days)).strftime('%Y-%m-%d')
|
||||
try:
|
||||
from strategy_lab import run_backtest, analyze_trade_list, save_analysis
|
||||
result = run_backtest(version, start_date, end_date, capital)
|
||||
analysis = analyze_trade_list(result.get('trades', []), version)
|
||||
save_analysis(version, analysis)
|
||||
result['insights'] = analysis.get('insights', [])
|
||||
return jsonify(result)
|
||||
except ValueError as e:
|
||||
return jsonify({'error': str(e)}), 404
|
||||
except Exception as e:
|
||||
return jsonify({'error': str(e)}), 500
|
||||
|
||||
|
||||
@app.route("/api/research/analysis")
|
||||
def api_research_analysis():
|
||||
"""指定策略版本的因子归因分析"""
|
||||
version = request.args.get('strategy', 'v4.1')
|
||||
try:
|
||||
from strategy_lab import analyze_trades
|
||||
return jsonify(analyze_trades(version))
|
||||
except Exception as e:
|
||||
return jsonify({'error': str(e)}), 500
|
||||
|
||||
|
||||
@app.route("/api/research/trades")
|
||||
def api_research_trades():
|
||||
"""指定策略版本的交易明细"""
|
||||
import sqlite3 as _sq, json as _json
|
||||
version = request.args.get('strategy', 'v4.1')
|
||||
conn = _sq.connect("/home/hmo/MoFin/data/mofin.db")
|
||||
row = conn.execute(
|
||||
"SELECT results_json FROM strategy_research WHERE version=? ORDER BY id DESC LIMIT 1",
|
||||
(version,)).fetchone()
|
||||
conn.close()
|
||||
if not row:
|
||||
return jsonify({'error': f'无 {version} 回测结果'}), 404
|
||||
res = _json.loads(row[0])
|
||||
return jsonify({'strategy': version, 'trades': res.get('trades', [])})
|
||||
|
||||
|
||||
@app.route("/api/overview")
|
||||
def api_overview():
|
||||
"""概览数据"""
|
||||
|
||||
Reference in New Issue
Block a user