Files
kis_trader/scratch/restore_optuna_jobs.py

76 lines
4.3 KiB
Python

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()