feat(옵투나·웹): 후처리 재탐색·ob_modes·적용감사·수집통계
- Optuna web jobs/TPE/apply snapshot·틱로더 정합, jobs limit·감사로그 - 백테 UI 호가모드·후보 적용 흐름, feed_collect_stats API/탭 - 가설검증·교차검증 룰, 4전략 스모크·OB slot41 진단 스크립트 Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -30,9 +30,12 @@ STRATEGIES="${STRATEGIES:-momentum tail breakout scalp}"
|
||||
# 꼬리 TPE 진입모드 — 한 스터디에 섞지 않음. 공백 구분 시 순차 2회.
|
||||
# TAIL_OPTUNA_ENTRY_MODES="align limit_atr"
|
||||
TAIL_OPTUNA_ENTRY_MODES="${TAIL_OPTUNA_ENTRY_MODES:-align}"
|
||||
# 돌파 TPE 손절모드 — 한 스터디에 섞지 않음. 공백 구분 시 순차 2회.
|
||||
# 돌파 TPE 손절모드 — 한 스터디에 섞지 않음. 공백 구분 시 순차.
|
||||
# BREAKOUT_OPTUNA_SL_MODES="fixed atr"
|
||||
BREAKOUT_OPTUNA_SL_MODES="${BREAKOUT_OPTUNA_SL_MODES:-fixed}"
|
||||
# 돌파 TPE 호가 스위치 — trial 축 아님. 손절×호가 최대 4순차.
|
||||
# BREAKOUT_OPTUNA_OB_MODES="off on"
|
||||
BREAKOUT_OPTUNA_OB_MODES="${BREAKOUT_OPTUNA_OB_MODES:-off}"
|
||||
# kiwoom|ls — 웹 Optuna 이력소스 / CLI UNIVERSE_HISTORY_SOURCE
|
||||
UNIVERSE_HISTORY_SOURCE="${UNIVERSE_HISTORY_SOURCE:-${BACKTEST_UNIVERSE_HISTORY_SOURCE:-kiwoom}}"
|
||||
PY="${PY:-.venv/bin/python}"
|
||||
@@ -45,9 +48,10 @@ MASTER="logs/optuna_4strat_tpe_${START}_${END}_${TS0}_master.log"
|
||||
echo "STRATEGIES=$STRATEGIES"
|
||||
echo "TAIL_OPTUNA_ENTRY_MODES=$TAIL_OPTUNA_ENTRY_MODES"
|
||||
echo "BREAKOUT_OPTUNA_SL_MODES=$BREAKOUT_OPTUNA_SL_MODES"
|
||||
echo "BREAKOUT_OPTUNA_OB_MODES=$BREAKOUT_OPTUNA_OB_MODES"
|
||||
echo "UNIVERSE_HISTORY_SOURCE=$UNIVERSE_HISTORY_SOURCE"
|
||||
echo "min_wr=$MIN_WIN_RATE min_pf=$MIN_PF min_trades=$MIN_TRADES"
|
||||
echo "apply-best=OFF orderbook=off n_jobs=1 (사후 results_gated + briefing.md)"
|
||||
echo "apply-best=OFF breakout-orderbook=스위치(스터디별) n_jobs=1 (사후 results_gated + briefing.md)"
|
||||
echo "master_log=$MASTER"
|
||||
free -h | sed -n '1,2p'
|
||||
df -h / | tail -1
|
||||
@@ -58,7 +62,8 @@ run_one() {
|
||||
local strat="$1"
|
||||
local entry_mode="${2:-}"
|
||||
local sl_mode="${3:-}"
|
||||
local ts study log sort_by
|
||||
local ob_mode="${4:-off}"
|
||||
local ts study log sort_by bo_extra
|
||||
ts="$(date +%Y%m%d_%H%M%S)"
|
||||
study="${strat}_tpe_${START//-/}_${END//-/}_${ts}"
|
||||
log="logs/optuna_${strat}_tpe_${ts}.log"
|
||||
@@ -67,8 +72,9 @@ run_one() {
|
||||
log="logs/optuna_${strat}_${entry_mode}_tpe_${ts}.log"
|
||||
fi
|
||||
if [[ "$strat" == "breakout" && -n "$sl_mode" ]]; then
|
||||
study="${strat}_${sl_mode}_tpe_${START//-/}_${END//-/}_${ts}"
|
||||
log="logs/optuna_${strat}_${sl_mode}_tpe_${ts}.log"
|
||||
bo_extra="${sl_mode}_ob_${ob_mode}"
|
||||
study="${strat}_${bo_extra}_tpe_${START//-/}_${END//-/}_${ts}"
|
||||
log="logs/optuna_${strat}_${bo_extra}_tpe_${ts}.log"
|
||||
fi
|
||||
sort_by="pnl"
|
||||
case "$strat" in
|
||||
@@ -77,18 +83,23 @@ run_one() {
|
||||
|
||||
{
|
||||
echo ""
|
||||
echo "-------- [$strat${entry_mode:+/$entry_mode}${sl_mode:+/$sl_mode}] START $(date -Is) study=$study univ=$UNIVERSE_HISTORY_SOURCE --------"
|
||||
echo "-------- [$strat${entry_mode:+/$entry_mode}${sl_mode:+/$sl_mode}${bo_extra:+/$bo_extra}] START $(date -Is) study=$study univ=$UNIVERSE_HISTORY_SOURCE --------"
|
||||
} | tee -a "$MASTER"
|
||||
echo "$log" > "logs/optuna_${strat}_tpe_latest.logpath"
|
||||
echo "$study" > "logs/optuna_${strat}_tpe_latest.study"
|
||||
# 웹 진행률: 전역 latest.study 가 이전 전략에 남으면 바가 1번에서 멈춤 → 잡별 파일
|
||||
if [[ -n "${OPTUNA_SEQ_ACTIVE_FILE:-}" ]]; then
|
||||
extra="${entry_mode:-${sl_mode:-}}"
|
||||
if [[ "$strat" == "breakout" && -n "$bo_extra" ]]; then
|
||||
extra="$bo_extra"
|
||||
else
|
||||
extra="${entry_mode:-${sl_mode:-}}"
|
||||
fi
|
||||
{
|
||||
echo "strategy=$strat"
|
||||
echo "study=$study"
|
||||
echo "entry_mode=${entry_mode:-}"
|
||||
echo "sl_mode=${sl_mode:-}"
|
||||
echo "ob_mode=${ob_mode:-}"
|
||||
echo "extra=${extra}"
|
||||
} > "$OPTUNA_SEQ_ACTIVE_FILE"
|
||||
fi
|
||||
@@ -104,7 +115,7 @@ run_one() {
|
||||
--min_trades "$MIN_TRADES"
|
||||
--min_win_rate "$MIN_WIN_RATE"
|
||||
--min_pf "$MIN_PF"
|
||||
--orderbook-filter off
|
||||
--orderbook-filter "$([[ "$strat" == "breakout" ]] && echo "$ob_mode" || echo off)"
|
||||
--no-progress
|
||||
--study-name "$study"
|
||||
--sort-by "$sort_by"
|
||||
@@ -132,7 +143,7 @@ run_one() {
|
||||
set -e
|
||||
|
||||
{
|
||||
echo "-------- [$strat${entry_mode:+/$entry_mode}${sl_mode:+/$sl_mode}] END rc=$rc $(date -Is) --------"
|
||||
echo "-------- [$strat${entry_mode:+/$entry_mode}${sl_mode:+/$sl_mode}${bo_extra:+/$bo_extra}] END rc=$rc $(date -Is) --------"
|
||||
echo "LOG=$log"
|
||||
grep -E 'OPTUNA_RESULT_JSON=|OPTUNA_BRIEFING_MD=|Best trial|optuna_best|❌|KeyError|Traceback' "$log" | tail -n 24 || true
|
||||
} | tee -a "$MASTER"
|
||||
@@ -150,7 +161,9 @@ for s in $STRATEGIES; do
|
||||
done
|
||||
elif [[ "$s" == "breakout" ]]; then
|
||||
for sm in $BREAKOUT_OPTUNA_SL_MODES; do
|
||||
run_one breakout "" "$sm"
|
||||
for om in $BREAKOUT_OPTUNA_OB_MODES; do
|
||||
run_one breakout "" "$sm" "$om"
|
||||
done
|
||||
done
|
||||
else
|
||||
run_one "$s"
|
||||
|
||||
Reference in New Issue
Block a user