S323 — v4 백테스트 (3도구, 2년+, regime 5분할, transition vs acceleration 결정)
일자: 2026-05-26 (Tue)
기간: 2023-09-01 ~ 2026-05-15 (655 영업일, 약 2.7년)
universe: 일별 거래대금 가속도 상위 10종 × 655일 = 6,550 case
도구: 3도구 (차트 일봉 + 퀀트 EA + L1 매크로 게이트), OF/재료 제외
선행: v3 (S322, 8개월) — S2_strict_3 채택했으나 약세장 미검증
1. 데이터 + 분포
1.1 L1 매크로 게이트
- ON 206 / OFF 449 (655일 중 31%)
- v3 67% 대비 엄격 — 약세장 포함되어 매크로 OFF 비율 큼
1.2 Regime 5분할 (KOSPI 60d ret)
| regime |
일수 |
비율 |
| strong_up |
2,290 |
35% |
| up |
1,500 |
23% |
| flat |
1,460 |
22% |
| down |
1,230 |
19% |
| strong_down |
70 |
1% |
1.3 L2 시나리오 분포 (6,550 case)
| 시나리오 |
n |
| imb_up_late_avoid |
1,630 |
| dist_late_avoid |
1,149 |
| imb_down_avoid |
1,019 |
| balance_emerging |
749 |
| balance_neutral |
690 |
| imb_up_acceleration_confirmed |
527 ★ |
| transition_to_imb_up_confirmed |
301 ★ |
1.4 Regime × L2 cross (핵심)
- transition_confirmed × down: 49건 (강세장 외에도 발생)
- transition_confirmed × strong_up: 128건
- acceleration_confirmed × strong_up: 223건 (가속은 강세장 편중)
2. 전략 비교 결과
2.1 전체 (D+20 hold)
| 전략 |
n_eval |
alpha_mean |
median |
win |
Sharpe |
ret_mean |
nav% |
MDD |
| S2_transition_only |
78 |
+2.91% |
-3.41% |
42.3% |
+0.405 ★ |
+10.34% |
+30815% |
-62.7% |
| S2_strict_3 (연속 confirmed) |
46 |
+1.87% |
-3.21% |
41.3% |
+0.24 |
+8.65% |
+1000% |
-63.2% |
| S2 (top2, 둘 다) |
233 |
+1.26% |
-4.45% |
39.5% |
+0.18 |
+8.46% |
+72M% |
-93.1% |
| S2_acceleration_only |
114 |
-0.64% |
-5.60% |
35.1% |
-0.09 |
+6.88% |
+11K% |
-77.7% |
2.2 핵심 발견 — v3 결론 뒤집힘
v3 (8개월 강세장)에서 채택했던 S2_strict_3 (연속 confirmed)보다 S2_transition_only (전환 초입 단일)가 모든 지표에서 우수:
- alpha +2.91% vs +1.87% (+1.04pp)
- Sharpe +0.405 vs +0.24 (1.7배)
- win 42.3% vs 41.3%
2.3 진단
(1) "전환 초입(transition)" > "가속(acceleration)"
- transition: BALANCE → IMBALANCE_UP 첫 발생 = 시장이 아직 모르는 자리
- acceleration: 이미 IMBALANCE_UP 유지 + 가속 = 시장이 이미 알고 있음
- alpha의 본질 = 정보 비대칭 → 전환 초입에 정보 우위
(2) v3 결론이 강세장 편향이었음
- v3 strong_up 80% → acceleration 많이 잡힘
- v3 "연속 confirmed" = 강세장에서 한 종목 며칠 연속 가속 = 흔한 패턴
- 2년+ 균형 잡힌 시기로 보면 단순 acceleration은 noise
3. Regime별 성과 — S2_transition_only 약세장 검증
| regime |
n |
alpha |
win |
Sharpe |
ret |
| strong_up |
53 |
+3.23% |
41.5% |
+0.39 |
+12.75% |
| up |
7 |
+6.50% |
42.9% |
+1.04 |
+9.50% |
| down |
8 |
+4.82% |
50% |
+1.54 ★ |
+7.19% |
| flat |
9 |
-3.35% |
33.3% |
-1.12 |
-0.32% |
| strong_down |
1 |
+1.60% |
100% |
(n=1) |
+9.81% |
★ 약세장에서도 작동
- down regime: alpha +4.82%, Sharpe 1.54, win 50% — 강세장보다 좋음
- strong_down n=1만 측정 → 통계 신뢰 X (4년 동안 strong_down 70일뿐)
- flat만 음수 — 추세 없는 시기 회피 필요
S2_strict_3 약세장 비교
| regime |
S2_strict_3 alpha |
S2_transition_only alpha |
| strong_up |
+1.87% |
+3.23% |
| up |
+5.23% (n=4) |
+6.50% (n=7) |
| down |
-5.20% (n=1) |
+4.82% (n=8) |
| flat |
-1.27% (n=2) |
-3.35% (n=9) |
S2_strict_3은 약세장에서 약함 (down n=1 -5.20%), transition_only는 강함.
4. PM 본질 재검증
| 본질 |
검증 결과 |
| ✅ "좋은 종목에서 충분히 수익" |
D+20 hold, alpha +2.91% (transition only) |
| ✅ "정말 좋은 종목 한두 개" |
일별 1종 → alpha 최대, 회전율 낮음 |
| ✅ "위험 낮추기" (약세장 작동) |
down regime Sharpe 1.54 — 약세장에서도 양수 alpha |
| ❌ "기민하게 이동" |
(v3에서 검증, EXIT 룰 알파 깎음, 재검증 안 함) |
5. 채택 모델 — S2_transition_only
5.1 진입 룰
- L1 매크로 게이트 ON (206/655일)
- L2 = transition_to_imb_up_confirmed (BALANCE → IMBALANCE_UP 전환 + 확증)
- acceleration 제외 (이미 늦은 자리)
- confirmed = supply_demand_ratio > 0 AND bvc_5bar ≥ 0.55 AND cvd_z > 0
- 일별 최상위 1종만 (score_universe 거래대금 가속도 기준)
- EA z>0 강제 X
5.2 보유 룰
- D+20 무조건 hold
- EXIT 룰 없음 (v3에서 검증: 모든 EXIT 룰이 알파 깎음)
- 한국 시장 신호 lag 6-9일 → 단기 EXIT은 회복 직전 손절
5.3 결과 (2년+)
- n = 78 진입 / 통계 의미 있는 수준
- alpha mean +2.91%, Sharpe +0.41, MDD -62.7%
- ret mean +10.34%, ret win 62.8% ★
- 약세장(down) 작동 검증 — Sharpe 1.54
5.4 운영 시나리오
- 매일 universe 산출 → L1 ON 확인 → transition_to_imb_up_confirmed 시나리오 1개 선택
- D+20 hold, 평균 1개월 1~2회 진입
- 동시 보유 평균 4-5종
6. 한계 + v5 권고
6.1 한계
- transition 시나리오 발생 빈도 낮음 — 301건/6550 = 4.6%, L1 ON 필터 후 78건
- strong_down n=1 — 극단 약세장 검증 불가
- flat regime 음수 alpha — 추세 없는 시기 회피 룰 필요
- outlier 의존성 — median -3.41% vs mean +2.91% → 소수 종목이 평균 견인
- 재료/OF 미사용 — 추가 검증 도구 부재
6.2 v5 권고
- Flat regime EXIT 룰 — 추세 없으면 진입 보류
- Transition 신호 강도 세분화 — supply_demand_ratio + bvc + cvd z 합산 score로 상위만
- 재료 도구 재도입 — 종목별 뉴스 fetch + 매칭 (S/A급 만 GO)
- outlier 종목 사후 패턴 분석 — alpha ≥ 20% 종목들의 사전 식별 가능 패턴
7. 결론
v4 핵심 학습 (3가지)
- v3 결론은 강세장 편향이었음 — 8개월 데이터로 결정한 acceleration 우선이 2년+ 전체에서는 약함
- transition (전환 초입) > acceleration (가속) — 정보 비대칭 우위가 alpha의 본질
- 약세장에서도 transition_confirmed 작동 — down regime Sharpe 1.54, win 50%
채택: S2_transition_only
- 룰: L1 ON + L2=transition_to_imb_up_confirmed + 일별 1종 + D+20 hold
- 성과: alpha +2.91%, Sharpe +0.41, win 42.3%, n=78
- 약세장 작동 확인 (down +4.82%)
v3 vs v4 비교 (채택 모델 변경)
| 항목 |
v3 (S2_strict_3) |
v4 (S2_transition_only) |
| 기간 |
8개월 강세장 |
2.7년 전체 regime |
| n_eval |
19 |
78 |
| alpha_mean |
+5.31% |
+2.91% |
| Sharpe |
+0.46 |
+0.41 |
| 약세장 검증 |
❌ (down n=1) |
✅ (down n=8, Sharpe 1.54) |
| 진입 빈도 |
매우 낮음 |
적절 (1개월 ~2-3회) |
| 신뢰도 |
낮음 (소표본) |
충분 |
다음 세션 (PM 결정)
- v5: Flat regime EXIT 룰 추가 — flat -3.35% 회피
- 재료 도구 재도입 — 종목별 뉴스 fetch 활용
- 운영 진입 — 현재 S2_transition_only를 morning_open 루틴에 통합
8. 산출물
코드
scripts/backtest/sim_v4_a_extend.py
scripts/backtest/sim_v4_b_context.py
scripts/backtest/sim_v4_c_strategy.py
데이터
data/backtest/sim_v4/macro_gate.parquet (655일)
data/backtest/sim_v4/daily_universe.parquet (6,550 case + regime 라벨)
data/backtest/sim_v4/case_context.parquet (38 cols × 6,550)
data/backtest/sim_v4/strategy_{S2, S2_strict_3, S2_acceleration_only, S2_transition_only}.parquet
data/backtest/sim_v4/strategy_compare.json