📝 자세한 노트
이번 업데이트는 **두 가지 축**입니다.
1. 7개 미국 종목 × 12개 전략 변형으로 그리드 백테스트를 돌려서, **모든 종목에서 양수 수익을 낸 단순 ORB 전략 1개**를 빌더의 참고 사례에 추가했습니다.
2. `1m × 60d`, `5m × 60d` 같이 Yahoo Finance 한계를 살짝 넘거나 경계에 걸려서 백테스트가 그냥 실패하던 케이스를 자동 처리합니다.
---
## ✅ 새 추천 전략 — `[참고] ORB Breakout RR3`
전략 빌더의 "참고 사례" 탭 첫 자리에 추가됐습니다.
### 무엇이 다른가
- **트리거 1개** — 09:30 5분봉 H를 close가 돌파하면 진입. FVG도 retest도 없습니다.
- **SL 0.4% / TP 1.2%** — RR=3. 손절은 짧고 익절은 길게.
- **하루 3건 한도** + 09:30~11:00 세션창 + 세션 종료 시 강제 청산.
### 백테스트 결과 (60일 / 5분봉)
내부 하니스로 SPY, QQQ, IWM, AAPL, NVDA, TSLA, DIA 7종목에 동시 적용한 결과입니다.
| 종목 | 거래 수 | 승률 | 수익률 | MDD |
|---|---|---|---|---|
| SPY | 96 | 52.1% | **+3.22%** | -9.19% |
| QQQ | 82 | 57.3% | **+11.31%** | -2.03% |
| IWM | 59 | 47.5% | **+7.96%** | -2.76% |
| AAPL | 73 | 42.5% | **+9.36%** | -5.06% |
| NVDA | 66 | 45.5% | **+11.38%** | -3.00% |
| TSLA | 62 | 29.0% | **+0.28%** | -5.76% |
| DIA | 64 | 54.7% | **+4.99%** | -6.48% |
| **평균** | — | **46.9%** | **+6.93%** | **-4.90%** |
- **7/7 종목 모두 양수** — TSLA 포함 모든 테스트 종목이 손실 없음
- **Calmar 1.41** (avgRet / |avgMDD|) — 위험 대비 수익이 가장 좋은 변형
- 비교: 기존 `ICT NY 9:30 + FVG Retest`는 같은 기간 평균 **-0.80%, 0/7 양수**
### 왜 이렇게 단순한 게 이기는가
같은 데이터로 ICT 풀체인(돌파 + FVG + retest)을 돌려보면 셋업의 **빈도가 낮고 진입이 너무 늦습니다**. 첫 5분봉 돌파만으로 진입하면 셋업이 자주 나오고, RR=3이 적은 승률을 보완합니다. **타이트한 0.4% SL은 변동성이 큰 NVDA·TSLA에서 작은 휩쏘를 피하면서 진짜 추세에는 1.2% TP까지 끌고 갑니다.**
### 빌더에서 쓰는 법
1. 좌측 참고 사례에서 `[참고] ORB Breakout RR3` 카드를 클릭해서 "체인 로드"
2. 종목을 원하는 것으로 바꾸기 (기본 SPY)
3. 백테스트 실행
기본 60일 5분봉이라 데이터 다운로드만으로 1~2초 안에 결과가 나옵니다.
### 주의
- 이 결과는 **최근 60일의 시장 레짐**에 대한 백테스트입니다. 추세 강한 구간에서 잘 동작했지만, 횡보·역추세 구간에서는 다를 수 있습니다.
- 실거래 비용(수수료·슬리피지)은 미국 디폴트(약 0.03% 슬리피지)가 적용된 결과입니다.
- 백테스트 결과는 미래를 보장하지 않습니다 — 자신의 자본/리스크 허용도에 맞춰 사용하세요.
---
## ✅ Yahoo Finance 분봉 한계 자동 처리
### 무엇이 문제였나
빌더에서 `1m × 60d`로 백테스트를 돌리면 다음 에러가 났습니다.
> Yahoo Finance 호출 실패: 1m data not available for startTime=... and endTime=... Only 8 days worth of 1m granularity data are allowed to be fetched per request.
Yahoo는 봉 단위별로 조회 가능 기간을 엄격히 제한합니다 (1분봉=8일, 5/15/30분봉=60일, 60분봉=2년). 그런데 빌더에선 봉 단위와 기간이 독립 드롭다운이라 사용자가 무효 조합을 만들 수 있고, 한 번 만들어진 무효 조합은 백테스트를 영구히 막았습니다.
### 어떻게 바꿨나
**3-layer 방어**로 무효 조합이 발생할 수 있는 모든 경로를 막았습니다.
1. **빌더 UI 자동 조정**
- 봉 단위(interval)를 바꾸면 현재 기간(range)이 한계를 넘으면 자동으로 안전한 값으로 줄어듭니다.
- 기간 드롭다운에서 현재 봉 단위로 불가능한 옵션은 "1m봉 불가" 같이 회색 처리되고 선택할 수 없습니다.
2. **핸들러 방어 클램프**
- 저장된 무효 전략(예: `1m × 60d`)도 더 이상 실패하지 않습니다. 핸들러가 자동으로 최대 유효 기간으로 조정해 데이터를 반환하고, "Yahoo 한계 자동 조정: 60d → 7d로 변경" 같은 토스트가 한 번 뜹니다.
3. **경계값 안전 버퍼**
- Yahoo는 "최근 N일 이내"를 strict하게 검사하기 때문에 **정확히 60일 경계**를 요청하면 거절합니다. 모든 분봉 요청에 1시간의 안전 버퍼를 자동 적용해서, `5m × 60d` 같은 케이스도 이제 항상 동작합니다.
### 영향
- `1m × 60d`, `5m × 60d`, `60m × 730d` 등 **경계에 걸리던 모든 조합이 안전하게 동작**합니다.
- 분봉 모드에서 잘못된 조합을 저장한 기존 전략도 빌더에서 열고 백테스트를 누르면 자동 보정됩니다.
---
## 🧪 내부적으로 추가된 검증 도구
이번 추천 전략을 정하기까지 사용한 그리드 백테스트 하니스를 `scripts/strategy-harness.ts`와 `scripts/strategy-harness-2.ts`에 추가했습니다 (개발자용). 향후 새 전략을 추천 사례로 추가할 때 동일한 데이터 검증 절차를 따릅니다.
- Phase 1: 10개 전략 변형 × 7종목 → 후보 ORB 식별
- Phase 2: ORB 12개 세부 변형 → Calmar/수익률/견고성 기준으로 1개 선정
---
## 🔧 자잘한 개선
- 전략 빌더 빌트인 참고 사례 카드가 1개 → 2개로 확장 (ORB RR3, ICT FVG)
- 분봉 한계 정보가 Range 드롭다운 옵션 라벨에 동적으로 반영
---
## 🐛 알려진 제약
- KRX 분봉은 KIS API 한계로 **당일 데이터만** 사용합니다 (v0.14와 동일).
- 해외 분봉 백테스트는 빌더 페이지의 yfinance 분봉을 사용하세요. 한계는 자동 처리됩니다.
---
⚠️ 본 도구의 결과는 과거 데이터 기반 시뮬레이션이며 미래 수익을 보장하지 않습니다. 추천 전략의 백테스트 결과 또한 특정 시장 레짐에서의 측정치입니다. 실투자 전 충분한 모의매매 검증을 권장합니다.