ls증권 히스토리 구독 넣음
This commit is contained in:
128
scripts/run_optuna_scalp_breakout_ls.sh
Executable file
128
scripts/run_optuna_scalp_breakout_ls.sh
Executable file
@@ -0,0 +1,128 @@
|
||||
#!/bin/bash
|
||||
# 스캘핑 → 돌파 Optuna (LS 유니버스) 순차 실행
|
||||
# --apply-best 없음 · 실매 미적용 · 봇 재시작 없음
|
||||
#
|
||||
# nohup bash scripts/run_optuna_scalp_breakout_ls.sh \
|
||||
# >> logs/optuna_scalp_bo_ls_nohup.out 2>&1 &
|
||||
# tail -f "$(cat logs/optuna_scalp_bo_ls_latest_master.logpath)"
|
||||
|
||||
set -euo pipefail
|
||||
cd /home/hoon/kis_bot
|
||||
mkdir -p logs kis_trader/backtest/results
|
||||
|
||||
START="${START:-2026-07-27}"
|
||||
END="${END:-2026-07-28}"
|
||||
MODE="${MODE:-tpe}"
|
||||
TRIALS="${TRIALS:-200}"
|
||||
MIN_TRADES="${MIN_TRADES:-1}"
|
||||
HIST_SRC="${HIST_SRC:-ls}"
|
||||
PY="${PY:-}"
|
||||
if [[ -z "$PY" ]]; then
|
||||
if [[ -x .venv/bin/python ]]; then
|
||||
PY=".venv/bin/python"
|
||||
else
|
||||
PY="python3"
|
||||
fi
|
||||
fi
|
||||
|
||||
TS0="$(date +%Y%m%d_%H%M%S)"
|
||||
MASTER="logs/optuna_scalp_bo_ls_${TS0}_master.log"
|
||||
{
|
||||
echo "======== 스캘핑+돌파 Optuna(LS) 시작 $(date -Is) ========"
|
||||
echo "START=$START END=$END MODE=$MODE TRIALS=$TRIALS HIST=$HIST_SRC"
|
||||
echo "apply-best=OFF 실매적용=없음 · 순차: scalp → breakout"
|
||||
echo "master=$MASTER"
|
||||
free -h | sed -n '1,2p'
|
||||
} | tee -a "$MASTER"
|
||||
echo "$MASTER" > logs/optuna_scalp_bo_ls_latest_master.logpath
|
||||
|
||||
run_one() {
|
||||
local STRAT="$1"
|
||||
# breakout/tail: pnl|win_rate 만 허용. scalp/momentum: score|pnl|win_rate
|
||||
local SORT_BY="score"
|
||||
if [[ "$STRAT" == "breakout" || "$STRAT" == "tail" ]]; then
|
||||
SORT_BY="pnl"
|
||||
fi
|
||||
local STUDY="${STRAT}_${MODE}_ls_${START//-/}_${END//-/}_${TS0}"
|
||||
local OPTUNA_LOG="logs/optuna_${STRAT}_${MODE}_ls_${TS0}.log"
|
||||
echo "$STUDY" > "logs/optuna_${STRAT}_ls_latest.study"
|
||||
echo "$OPTUNA_LOG" > "logs/optuna_${STRAT}_ls_latest.logpath"
|
||||
|
||||
{
|
||||
echo ""
|
||||
echo "-------- ${STRAT} Optuna START $(date -Is) --------"
|
||||
echo "study=$STUDY sort_by=$SORT_BY"
|
||||
echo "optuna_log=$OPTUNA_LOG"
|
||||
} | tee -a "$MASTER"
|
||||
|
||||
set +e
|
||||
"$PY" -u kis_trader/backtest/param_search_optuna.py \
|
||||
--strategy "$STRAT" \
|
||||
--mode "$MODE" \
|
||||
--start "$START" \
|
||||
--end "$END" \
|
||||
--trials "$TRIALS" \
|
||||
--min_trades "$MIN_TRADES" \
|
||||
--min_win_rate 0 \
|
||||
--min_pf 0 \
|
||||
--sort-by "$SORT_BY" \
|
||||
--orderbook-filter off \
|
||||
--universe-history-source "$HIST_SRC" \
|
||||
--study-name "$STUDY" \
|
||||
--no-progress \
|
||||
--n-jobs 1 \
|
||||
>> "$OPTUNA_LOG" 2>&1
|
||||
local RC=$?
|
||||
set -e
|
||||
|
||||
{
|
||||
echo "-------- ${STRAT} Optuna 종료 rc=$RC $(date -Is) --------"
|
||||
if [[ $RC -ne 0 ]]; then
|
||||
echo "❌ ${STRAT} 실패 log=$OPTUNA_LOG"
|
||||
else
|
||||
"$PY" - <<PY || true
|
||||
import json
|
||||
from pathlib import Path
|
||||
study = "${STUDY}"
|
||||
root = Path("kis_trader/backtest/results")
|
||||
cands = sorted(root.glob(f"optuna_${STRAT}*.json"), key=lambda p: p.stat().st_mtime, reverse=True)
|
||||
hit = None
|
||||
for p in cands[:40]:
|
||||
try:
|
||||
d = json.loads(p.read_text(encoding="utf-8"))
|
||||
except Exception:
|
||||
continue
|
||||
if d.get("optuna_study_name") == study or study in p.name:
|
||||
hit = p
|
||||
break
|
||||
if hit:
|
||||
d = json.loads(hit.read_text(encoding="utf-8"))
|
||||
print("best_json", hit)
|
||||
print("best_value", d.get("optuna_best_value"), "trial", d.get("optuna_best_trial_number"))
|
||||
rows = d.get("results") or []
|
||||
if rows:
|
||||
best = max(rows, key=lambda r: float(r.get("total_pnl") or -1e18))
|
||||
print(
|
||||
"best_summary trades", best.get("total_trades"),
|
||||
"wr", best.get("win_rate"),
|
||||
"pnl", best.get("total_pnl"),
|
||||
)
|
||||
else:
|
||||
print("best_json: (매칭 없음 — 로그 확인)")
|
||||
PY
|
||||
fi
|
||||
} | tee -a "$MASTER"
|
||||
return "$RC"
|
||||
}
|
||||
|
||||
RC_ALL=0
|
||||
run_one scalp || RC_ALL=$?
|
||||
run_one breakout || RC_ALL=$?
|
||||
|
||||
{
|
||||
echo ""
|
||||
echo "실매 미적용(apply-best 없음) · 봇 재시작 없음"
|
||||
echo "======== 전체 종료 rc=$RC_ALL $(date -Is) ========"
|
||||
} | tee -a "$MASTER"
|
||||
|
||||
exit "$RC_ALL"
|
||||
Reference in New Issue
Block a user