feat(Core/UI): 백테스트 전역 엔진 선택 버튼 추가 및 스캘핑 Rust 방어로직 포팅 1차 완료
This commit is contained in:
75
scratch/restore_optuna_jobs.py
Normal file
75
scratch/restore_optuna_jobs.py
Normal file
@@ -0,0 +1,75 @@
|
||||
import sys
|
||||
|
||||
def restore_optuna_web_jobs():
|
||||
path = "/home/hoon/kis_bot/kis_trader/backtest/optuna_web_jobs.py"
|
||||
with open(path, "r") as f:
|
||||
content = f.read()
|
||||
|
||||
# Restore mode
|
||||
target1 = ' "web_cmd_full": m.get("web_cmd_full") or "",\n "join_study":'
|
||||
repl1 = ' "web_cmd_full": m.get("web_cmd_full") or "",\n "mode": m.get("mode"),\n "join_study":'
|
||||
content = content.replace(target1, repl1)
|
||||
|
||||
# Restore fields
|
||||
target2 = ' "source": m.get("source"),\n }'
|
||||
repl2 = ' "source": m.get("source"),\n "sort_by": m.get("sort_by"),\n "symbol": m.get("symbol"),\n "universe_history_source": m.get("universe_history_source"),\n "candle_source": m.get("candle_source"),\n "tick_source": m.get("tick_source"),\n "ob_source": m.get("ob_source"),\n "tail_entry_modes": m.get("tail_entry_modes"),\n "breakout_sl_modes": m.get("breakout_sl_modes"),\n "breakout_ob_modes": m.get("breakout_ob_modes"),\n "tpe_includes_orderbook": (m.get("result_summary") or {}).get("tpe_includes_orderbook"),\n }'
|
||||
content = content.replace(target2, repl2)
|
||||
|
||||
# Restore sort_by
|
||||
target3 = ' "mode": mode,\n "start": start,'
|
||||
repl3 = ' "mode": mode,\n "sort_by": data.get("sort_by") or meta.get("sort_by"),\n "start": start,'
|
||||
content = content.replace(target3, repl3)
|
||||
|
||||
with open(path, "w") as f:
|
||||
f.write(content)
|
||||
print("optuna_web_jobs.py restored")
|
||||
|
||||
def restore_backtest_web():
|
||||
path = "/home/hoon/kis_bot/backtest_web.py"
|
||||
with open(path, "r") as f:
|
||||
content = f.read()
|
||||
|
||||
target1 = ' db.close()\n\n\n@app.route("/api/feed_collect_stats", methods=["GET"])'
|
||||
repl1 = ' db.close()\n\n\n_feed_stats_cache = {}\n\n@app.route("/api/feed_collect_stats", methods=["GET"])'
|
||||
content = content.replace(target1, repl1)
|
||||
|
||||
target2 = ' from kis_trader.web.feed_collect_stats import build_feed_collect_stats\n\n day = (request.args.get("date") or request.args.get("day") or "").strip()[:10]'
|
||||
repl2 = ' from kis_trader.web.feed_collect_stats import build_feed_collect_stats\n import time\n\n day = (request.args.get("date") or request.args.get("day") or "").strip()[:10]'
|
||||
content = content.replace(target2, repl2)
|
||||
|
||||
target3 = ' heavy = heavy_raw in ("1", "true", "yes", "y", "on")\n db = _db()\n try:\n payload = build_feed_collect_stats(db, day=day, heavy=heavy)\n return jsonify({"ok": True, **payload})'
|
||||
repl3 = ' heavy = heavy_raw in ("1", "true", "yes", "y", "on")\n \n cache_key = f"{day}_{heavy}"\n now = time.time()\n \n if cache_key in _feed_stats_cache:\n cached = _feed_stats_cache[cache_key]\n is_today = (day.replace("-", "") == _default_trading_day_ymd().replace("-", ""))\n if not is_today or (now - cached["ts"] < 60):\n return jsonify({"ok": True, **cached["data"]})\n\n db = _db()\n try:\n payload = build_feed_collect_stats(db, day=day, heavy=heavy)\n _feed_stats_cache[cache_key] = {"ts": now, "data": payload}\n return jsonify({"ok": True, **payload})'
|
||||
content = content.replace(target3, repl3)
|
||||
|
||||
target4 = 'def api_optuna_jobs():'
|
||||
topn = '''@app.route("/api/optuna/topn/<job_id>", methods=["GET"])
|
||||
def api_optuna_topn(job_id: str):
|
||||
from kis_trader.backtest import optuna_web_jobs as owj
|
||||
meta = owj.load_job(job_id)
|
||||
if not meta:
|
||||
return jsonify({"ok": False, "error": "없는 job_id"}), 404
|
||||
rs = meta.get("result_summary") or {}
|
||||
return jsonify({
|
||||
"ok": True,
|
||||
"job_id": job_id,
|
||||
"label": meta.get("label") or meta.get("strategy") or job_id,
|
||||
"strategy": meta.get("strategy"),
|
||||
"sort_by": meta.get("sort_by"),
|
||||
"mode": meta.get("mode"),
|
||||
"start": meta.get("start"),
|
||||
"end": meta.get("end"),
|
||||
"study_short": meta.get("study_short"),
|
||||
"tpe_includes_orderbook": rs.get("tpe_includes_orderbook"),
|
||||
"period_info": meta.get("period_info"),
|
||||
"top5_gated": rs.get("top5_gated") or [],
|
||||
"n_trading_days": rs.get("n_trading_days")
|
||||
})
|
||||
|
||||
'''
|
||||
content = content.replace(target4, topn + target4)
|
||||
with open(path, "w") as f:
|
||||
f.write(content)
|
||||
print("backtest_web.py restored")
|
||||
|
||||
restore_optuna_web_jobs()
|
||||
restore_backtest_web()
|
||||
Reference in New Issue
Block a user