Files
kis_trader/.cursor/rules/no-ohlc-fallback-parity.mdc
2026-07-30 18:05:07 +09:00

46 lines
2.3 KiB
Plaintext

---
description: 백테·Optuna·파람서치에서 OHLC 폴백으로 체결·고점·PnL 숫자 변조 절대 금지
alwaysApply: true
---
# OHLC 폴백 숫자 변조 절대 금지 (실매↔백테 정합)
## 한 줄
틱 청산/틱 진입 ON 이면 **봉 OHLC(high/low)로 체결가·max_price·손익을 채우거나 보정하지 않는다.**
체크박스·env `*_TICK_FALLBACK_OHLC=true` 여도 **엔진은 무시**한다. Optuna/파람은 **강제 False**.
## 왜
실매는 WS 틱만으로 고점·청산을 본다.
백테가 틱 전에 3분봉 `high`를 `max_price`에 넣거나, 틱 없을 때 OHLC intrabar로 래칫/손절을 내면 **미래 고점 look-ahead·유령 청산**으로 실매와 다른 엔진이 된다.
## 절대 금지
- 틱 청산 루프에서 `pos["max_price"] = max(..., bar.high / holding_peak)` **선반영**
- `tick_fallback_ohlc or is_eod` 로 EOD에 OHLC 폴백 **강제**
- Optuna / Grid 파람 / 웹백테가 OHLC 폴백 ON 으로 **랭킹·PnL 변조**
- “틱 없으면 OHLC로라도 거래 수 맞추기”
## 허용
- 틱 청산 **OFF** 인 레거시 순수 OHLC 모드 (폴백이 아님 — 봉이 본체)
- EOD: 틱 미청산 시 **직전가/종가로 장마감 플랫만** (봉 고저로 래칫 재계산 금지)
## 해외 모멘텀 — 국장과 “다르게 설계”한 게 아님 (오해 금지)
- **실매**: 국장·해외 모두 WS 현재가(틱 캐시)로 청산 판정 (`check_sell_signal_momentum_live`). DB `ws_ticks` 테이블을 장중 리플레이하지 않음.
- **백테/Optuna**: 동일 `momentum_backtest_*` 경로. `market=US` 이면 **`ws_ticks_us`** (국장은 `ws_ticks`). 틱 ON 기본 · OHLC로 고점/체결 변조 금지(본 규칙).
- “해외=순수 분봉·틱청산 해당 없음”은 **잘못된 메모**다. 틱+OHLC 혼입 버그 점검에서 해외를 빼 말하면 **안 된다** — 국장과 같은 정합 규칙을 적용한다.
## 구현 앵커
- `resolve_backtest_sell`: `use_tick_exit` → OHLC 폴백 무시
- `tail_engine` Phase1: 틱 ON 시 봉 high 로 max 선반영 금지
- Optuna/파람: `backtest_tick_fallback_ohlc = False` 강제
- UI: `*_FALLBACK_OHLC` / 꼬리 체크 = **빨간 음영** (위험 표시)
## 보고
고치기 전 “폴백으로 맞추자”고 제안하지 말 것. 잔여 갭은 **틱 공백·체결 슬리피지·미청산 보유**로 분류.