139 lines
3.9 KiB
Bash
Executable File
139 lines
3.9 KiB
Bash
Executable File
#!/bin/bash
|
|
# 중편입·틱가 주입 후 전전략 Optuna 재탐색 + 1위 적용
|
|
# 순서: 미장(전역+종목cfg) 우선 → 국장4 (내일용)
|
|
# 이후: 웹백테 스모크 + 요약 리포트
|
|
#
|
|
# nohup bash scripts/run_optuna_mid_enroll_full_apply.sh >> logs/optuna_mid_enroll_master_nohup.log 2>&1 &
|
|
# tail -f "$(cat logs/optuna_mid_enroll_latest_master.logpath)"
|
|
|
|
set -euo pipefail
|
|
cd /home/hoon/kis_bot
|
|
mkdir -p logs kis_trader/backtest/results
|
|
|
|
START="${START:-2026-07-21}"
|
|
END="${END:-2026-07-23}"
|
|
MODE="${MODE:-tpe}"
|
|
# 미장 22시 전 우선: US는 100, 국장은 200 (필요 시 env 오버라이드)
|
|
US_TRIALS="${US_TRIALS:-100}"
|
|
KR_TRIALS="${KR_TRIALS:-200}"
|
|
MIN_TRADES="${MIN_TRADES:-1}"
|
|
MIN_WIN_RATE="${MIN_WIN_RATE:-0}"
|
|
MIN_PF="${MIN_PF:-0}"
|
|
# 종목 cfg — DB us_momentum_stock_config
|
|
US_SYMBOLS="${US_SYMBOLS:-QQQM SPCX SPYM TSLA}"
|
|
PY="${PY:-.venv/bin/python}"
|
|
TS0="$(date +%Y%m%d_%H%M%S)"
|
|
MASTER="logs/optuna_mid_enroll_${START}_${END}_${TS0}_master.log"
|
|
REPORT="logs/optuna_mid_enroll_${START}_${END}_${TS0}_report.txt"
|
|
|
|
{
|
|
echo "======== mid-enroll/tick Optuna FULL+APPLY $(date -Is) ========"
|
|
echo "START=$START END=$END MODE=$MODE"
|
|
echo "US_TRIALS=$US_TRIALS KR_TRIALS=$KR_TRIALS"
|
|
echo "US_SYMBOLS=$US_SYMBOLS"
|
|
echo "apply-best=ON (gated 1위, pnl<=0 스킵)"
|
|
echo "master=$MASTER"
|
|
free -h | sed -n '1,2p'
|
|
} | tee -a "$MASTER"
|
|
echo "$MASTER" > logs/optuna_mid_enroll_latest_master.logpath
|
|
echo "$REPORT" > logs/optuna_mid_enroll_latest_report.path
|
|
|
|
run_one() {
|
|
local strat="$1"
|
|
local trials="$2"
|
|
local symbol="${3:-}"
|
|
local ts study log sort_by tag
|
|
ts="$(date +%Y%m%d_%H%M%S)"
|
|
tag="$strat"
|
|
if [[ -n "$symbol" ]]; then
|
|
tag="${strat}_${symbol}"
|
|
fi
|
|
study="${tag}_${MODE}_${START//-/}_${END//-/}_${ts}"
|
|
log="logs/optuna_${tag}_${MODE}_${ts}.log"
|
|
sort_by="pnl"
|
|
case "$strat" in
|
|
momentum|us_momentum|scalp) sort_by="score" ;;
|
|
esac
|
|
|
|
{
|
|
echo ""
|
|
echo "-------- [$tag] START $(date -Is) study=$study trials=$trials --------"
|
|
} | tee -a "$MASTER"
|
|
echo "$log" > "logs/optuna_${tag}_${MODE}_latest.logpath"
|
|
echo "$study" > "logs/optuna_${tag}_${MODE}_latest.study"
|
|
|
|
set +e
|
|
local cmd=(
|
|
"$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 "$MIN_WIN_RATE"
|
|
--min_pf "$MIN_PF"
|
|
--orderbook-filter off
|
|
--no-progress
|
|
--study-name "$study"
|
|
--sort-by "$sort_by"
|
|
--apply-best
|
|
)
|
|
if [[ -n "$symbol" ]]; then
|
|
cmd+=(--symbol "$symbol")
|
|
fi
|
|
"${cmd[@]}" >"$log" 2>&1
|
|
local rc=$?
|
|
set -e
|
|
|
|
{
|
|
echo "-------- [$tag] END rc=$rc $(date -Is) --------"
|
|
echo "LOG=$log"
|
|
grep -E 'OPTUNA_RESULT_JSON=|Best trial|apply-best|gated|DB 미적용|❌|KeyError|Traceback' "$log" | tail -n 30 || true
|
|
} | tee -a "$MASTER"
|
|
|
|
if [[ "$rc" -ne 0 ]]; then
|
|
echo "⚠️ [$tag] 실패 rc=$rc — 계속" | tee -a "$MASTER"
|
|
fi
|
|
return 0
|
|
}
|
|
|
|
# ── 1) 미장 전역 + 종목 cfg (22시 오픈 우선) ──
|
|
run_one us_momentum "$US_TRIALS"
|
|
for sym in $US_SYMBOLS; do
|
|
run_one us_momentum "$US_TRIALS" "$sym"
|
|
done
|
|
|
|
# ── 2) 국장 4전략 (내일) ──
|
|
for s in momentum tail breakout scalp; do
|
|
run_one "$s" "$KR_TRIALS"
|
|
done
|
|
|
|
{
|
|
echo ""
|
|
echo "======== Optuna ALL DONE $(date -Is) ========"
|
|
} | tee -a "$MASTER"
|
|
|
|
# ── 3) 웹백테 스모크(현재 DB) + 요약 ──
|
|
{
|
|
echo ""
|
|
echo "======== POST: web backtest smoke $(date -Is) ========"
|
|
} | tee -a "$MASTER"
|
|
|
|
set +e
|
|
"$PY" -u scripts/post_optuna_mid_enroll_verify.py \
|
|
--start "$START" --end "$END" \
|
|
--report "$REPORT" \
|
|
>>"$MASTER" 2>&1
|
|
vrc=$?
|
|
set -e
|
|
echo "verify_rc=$vrc report=$REPORT" | tee -a "$MASTER"
|
|
|
|
{
|
|
echo ""
|
|
echo "======== ALL PIPELINE DONE $(date -Is) ========"
|
|
echo "master=$MASTER"
|
|
echo "report=$REPORT"
|
|
echo "봇 재시작은 verify 스크립트가 필요 시 수행"
|
|
} | tee -a "$MASTER"
|