feat(옵투나): score·min_trades·후처리 재탐색 및 웹 job 개선

PnL/(MDD+ADD) score·legacy 정렬·거래일×min_trades 게이트를 공통화한다.
후처리 ob_modes·study store·4전략 TPE 순차 스크립트와 문서를 갱신한다.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Your Name
2026-08-28 16:46:27 +09:00
parent a0fe66bc11
commit 1387fbdf47
10 changed files with 583 additions and 136 deletions

View File

@@ -458,7 +458,7 @@ OR 5장 채우는 시간: LS 틱동기면 체결 몇 번(초 단위) · 키움 ~
5. 스냅 없이 OHLC로 호가 **지어내기** 금지.
6. 모의에 ORD_DVSN=13 강제 금지.
7. 필터 TTL과 저장 TTL을 **한 키로 묶지 말 것** (`FILTER_MAX_AGE` vs `TICK_MAX_AGE`).
8. 캔들 TPE 본체에 호가 ON/OFF를 넣지 말 것. 숫자 탐색은 **후처리**만 (§8).
8. Optuna 호가: **현재 기본은 본 TPE에 진입 호가 포함** (`OPTUNA_TPE_INCLUDE_ORDERBOOK`). 돌파는 스터디 스위치로 ON/OFF 분리. 상세 `docs/옵투나.md` §1. (구 “캔들 TPE에 호가 넣지 말 것”은 옛 권고.)
9. 거래대금·시총회전 **만**으로 손절 만들지 말 것.
10. 필터 ON인데 호가 사진이 없다고 **통과**시키지 말 것. REST로 메우지 말 것 (`REJECT_IF_EMPTY`).
@@ -484,13 +484,19 @@ OR 5장 채우는 시간: LS 틱동기면 체결 몇 번(초 단위) · 키움 ~
---
## 8. Optuna / TPE (2026-08-15)
## 8. Optuna / TPE (2026-08-28 · 상세는 `docs/옵투나.md`)
### 캔들 본체 TPE (Stage 1)
매수필터 ON/OFF · EXIT_OB · STOP_OB 를 **차트 trial 축에 넣지 않음**.
끈 구간과 켠 구간이 한 랭킹에 섞이면 순위가 호가 날씨에 흔들린다.
> **주의:** 아래 「캔들 본체에 호가 넣지 말 것」은 **옛 권고(2026-08-15)**.
> **현재 코드 기본**은 `OPTUNA_TPE_INCLUDE_ORDERBOOK=true` → 본 TPE에 진입 호가가 들어간다.
> 돌파만 **스터디 스위치**(off/on 분리). 꼬리·모멘·스캘은 아직 **같은 스터디 categorical**.
> 진실·분리 vs trial 수: **`docs/옵투나.md` §1**.
### 후처리 (Stage 2) — **이미 동작**
### 본 TPE (현재)
- 기본: 차트 + 호가(및 휩쏘)를 **trial에서 함께** 평가.
- 돌파: `--orderbook-filter off|on` · 한 스터디에 ON/OFF 안 섞음 (OFF 편애 방지).
- `INCLUDE_ORDERBOOK=true` 이면 사후 8방 **기본 생략** (성적 사기 방지).
### 후처리 (Stage 2) — INCLUDE_ORDERBOOK=false 일 때 / FORCE 시
`optuna_postprocess_topn.py``optuna_orderbook_recommend.py`.
구 JSON만 다시: `python3 -u kis_trader/backtest/optuna_rerun_postprocess.py --result-json <path>`
(`--apply-best` 아님. 실매 숫자는 안 바뀜.)
@@ -501,11 +507,11 @@ OR 5장 채우는 시간: LS 틱동기면 체결 몇 번(초 단위) · 키움 ~
|----|------------------------------|-----------|
| 스프레드 % | 0.1 ~ 8.0 step 0.1 | 모멘텀 운영 3.0 포함 |
| 잔량비 | 0.05 ~ 1.5 step 0.05 | 0.58~1.0 포함 |
| 매도벽 배수 | 1 ~ 80 step 1 | 운영 3 / 스캘프 8. **예전 후처리는 이 축이 없어** 벽 탈락을 못 봄 |
| 매도벽 배수 | 1 ~ 80 step 1 | 운영 3 / 스캘프 8 |
| lookback | `OPTUNA_OB_LOOKBACK_MIN` 기본 30분 | |
건수 하한: 잔여가 원본의 **30% 미만**이면 trial 무효 → 너무 센 컷은 점수에서 죽음.
후처리는 **이미 난 체결 + 근처 호가 재생**. 실매 “스냅 없음 통과” 구멍은 **모델링하지 않음** (그건 B안 필터 TTL).
건수 하한: 잔여가 원본의 **30% 미만**이면 trial 무효.
후처리는 **이미 난 체결 + 근처 호가 재생**. 실매 “스냅 없음 통과” 구멍은 **모델링하지 않음** (B안 필터 TTL).
DB 반영은 사용자 명시 / `scripts/apply_optuna_ob_consensus.py` 만. 후처리 재실행 ≠ 적용.