S307+OF 백테스트 — 30분봉 OF 활성 효과 검증
Date: 2026-05-24 (Sun)
Topic: L (시스템 재설계)
Predecessor: S307 백테스트 (4 trigger / OF 제외)
1. 설계
- 모집단: S307 16,172 sample 중 30분봉 캐시 공통 가용 범위(2026-02-13 ~ 2026-05-22) 내 624개
- 30분봉 캐시: 80종목 universe 일괄 fetch (키움 ka10080, 종목당 900봉, 총 85초)
- 데이터 사용:
- 일봉 OHLCV → VSA/Wyckoff/AMT/Bulkowski (S303 캐시 재사용)
- 30분봉 OHLCV (t_date 15:30까지) → OF trigger (compute_order_flow → evaluate_orderflow)
- trigger 수: 5 (S307의 4 + OF)
- strong_threshold: max(3, n_total - 1) = 4 (S305와 동일)
- 결과: 549 success / 75 skip(30분봉 < 60봉 부족) / 59초
2. Verdict 변화 매트릭스 (S307 → S307+OF, 같은 sample 549)
v_of AVOID AVOID_STRONG BUY BUY_STRONG MIXED MIXED_BUY_LEAN MIXED_SELL_LEAN
v_s307
AVOID 9 0
AVOID_STRONG 15 4 1
BUY 91 3
BUY_STRONG 3 6
MIXED 54
MIXED_BUY_LEAN 250
MIXED_SELL_LEAN 112
주요 흐름
| 변환 |
건수 |
의미 |
| AVOID_STRONG → AVOID |
15 |
strong_threshold 회복(4 trigger 3→ 5 trigger 4)으로 STRONG 강등 |
| AVOID_STRONG → AVOID_STRONG |
4 |
유지 |
| AVOID_STRONG → MIXED_SELL_LEAN |
1 |
OF BUY 신호로 sell 우위 약화 |
| BUY_STRONG → BUY |
3 |
동일 원리(strong threshold) |
| BUY → MIXED_BUY_LEAN |
3 |
OF SELL 신호 가능 |
3. Verdict 분포 변화 (549 sample)
| Verdict |
S307 |
S307+OF |
delta |
| MIXED_BUY_LEAN |
252 |
253 |
+1 |
| MIXED_SELL_LEAN |
113 |
113 |
0 |
| BUY |
95 |
91 |
-4 |
| MIXED |
54 |
55 |
+1 |
| AVOID |
9 |
24 |
+15 |
| BUY_STRONG |
6 |
9 |
+3 |
| AVOID_STRONG |
20 |
4 |
-16 |
→ STRONG 분류 정밀도 회복. S307 백테스트에서 발견했던 "OF 제외로 STRONG이 너무 쉽게 발화하는" 문제가 OF 활성화로 정상화.
4. OF trigger 발화 빈도
| OF decision |
count |
ratio |
| HOLD |
531 |
96.7% |
| BUY |
14 |
2.6% |
| SELL |
4 |
0.7% |
| active 합 |
18 |
3.3% |
OF는 매우 보수적. 96.7%가 HOLD = OF 단독으로는 명확한 신호 거의 없음. 그러나 활성 18건의 alpha는 강함:
| 호라이즌 |
OF active (n=18) |
OF BUY (n=14) |
| D+5 mean |
+0.63% |
— |
| D+10 mean |
+1.98% |
— |
| D+20 mean |
+18.09% |
+19.65% |
| D+60 |
insufficient (60d 미래 부족) |
|
OF active D+20 +18.09% — 모집단 baseline(~+11%)보다 +7pp alpha. 표본 18건이라 신뢰구간 넓지만 방향성 명확.
5. Verdict별 D+20 alpha (S307 vs S307+OF, 같은 sample 한정)
| Verdict |
n_s307 |
n_of |
mean_s307 |
mean_of |
| AVOID |
9 |
24 |
+11.81% |
+9.69% |
| AVOID_STRONG |
20 |
4 |
+7.87% |
N/A (n<5) |
| BUY |
95 |
91 |
+15.50% |
+15.36% |
| BUY_STRONG |
6 |
9 |
+24.97% |
+38.03% |
| MIXED |
54 |
55 |
+13.38% |
+13.84% |
| MIXED_BUY_LEAN |
252 |
253 |
+11.74% |
+11.23% |
| MIXED_SELL_LEAN |
113 |
113 |
+11.06% |
+10.81% |
핵심
- BUY_STRONG (n=9) D+20 +38.03% — S307에서 정밀도 약화 우려 → OF 활성화로 회복. S305 BUY_STRONG D+20 +5.67%, S307 +4.62%였던 alpha가 OF 활성 sample에서는 매우 강함. 단 표본 9건 한계.
- AVOID_STRONG (n=4) — 표본 부족 (n<5)으로 alpha 측정 못 함. 회복된 STRONG 분류 자체가 더 의미 있음.
- AVOID (n=24) +9.69% — baseline보다 살짝 낮음, 회피 가치 약함. 가용 기간 자체가 상승장.
- BUY/LEAN 등 일반 verdict는 변동 미미.
6. Baseline (가용 기간 549 sample)
- D+20 mean ~ +11~13% (verdict별로 다름)
- 가용 기간(2026-02 ~ 2026-04)은 강한 상승장 (HLB / 한화에어로 등 신고가 진행)
7. 결론
검증 결과
- OF 30분봉 활성화는 STRONG 분류 정밀도를 회복시킴 — S307 백테스트의 "OF 제외로 STRONG 과발화" 문제 해소 확인. AVOID_STRONG 20→4 / BUY_STRONG 6→9 (분류 일관성 향상).
- OF는 보수적 trigger — 96.7% HOLD. 활성 신호는 드물지만 발화 시 강한 alpha (active D+20 +18.09%, BUY D+20 +19.65%).
- 96% verdict 동일 — OF가 큰 분포 변화를 주지 않음. 주로 strong threshold 분기에서만 효과.
제약
- 30분봉 가용 범위 한정 (2026-02-13 ~ 2026-04-15 sample 549개). 키움 ka10080이 현재 시점 900봉만 제공하므로 과거 시점 백테스트는 OF 평가 불가.
- D+60 미래 데이터 부족. 가용 sample 대부분의 t_date가 데이터 끝점에 가까워 D+60 측정 불가.
- 표본 한계. BUY_STRONG/AVOID_STRONG n=4~9. alpha 측정 신뢰구간 넓음.
PM 정책 검증
- OF는 30분봉/900봉 (PM 2026-05-24 정책) — 기술적으로 가능 확인. 인프라(80종목 fetch 85초) 부담 적음.
- 분봉 인프라 도입 가치 확인 — STRONG 분류 정확도 + 활성 신호 alpha 강도 모두 의미 있음.
8. 산출물
scripts/discovery/fetch_minute_30_universe.py — 80종목 일괄 fetch
scripts/backtest/s307of_run_backtest.py — OF 활성 백테스트
scripts/backtest/s307of_compare.py — S307 vs S307+OF 비교
scripts/backtest/s307of_check_range.py — 가용 범위 확인
data/minute_charts/30min/{code}.parquet — 80종목 캐시
data/backtest/s307of/samples.parquet — 549 sample
9. 미해결 / 다음
- 30분봉 정기 갱신 자동화 — 키움 ka10080은 항상 최근 900봉만 주므로 일별 fetch + 누적 캐시 필요
- 누적 캐시 도입 시 과거 시점 OF 백테스트 가능 — 1년 후엔 약 250+ 거래일 OF 데이터 확보
- 표본 확대 후 alpha 신뢰도 재검증 — 현재 18건 active는 통계적으로 약함
- 다음 단계 (PM 결정): 차트 + 시장 + 재료 결합 시스템 본격 설계