S319 — Phase D + Q3 반전 + 퀀트 walk-forward + corp_code 100→200 확장¶
일자: 2026-05-26 (Tue)
선행: S318 (Phase A+B 완료, Phase C는 별도 보고서)
작업 옵션 1~5 순차 진행:
1. ~~Phase C 매크로~~ → docs/research/2026-05-26_phase_c_macro_walkforward.md
2. Phase D 차트 walk-forward ✅
3. Q3 반전 룰 재측정 ✅
4. 퀀트 walk-forward (ea_panel_dart 86종 × 19분기) ✅
5. corp_code 100→200 확장 (DART 99종 백필) 🔄
1. Phase D — 차트 분석기 walk-forward¶
1.1 방법¶
- t0 9개 (regime별): strong_down 3, down 3, flat 1, up 1, strong_up 1
- 각 t0 × 247종 OHLCV →
discovery.state_classifier.classify_state()→_raw_resolution_score - ★★ 신호 4개: absorption_score_last, spring_count_20d, vp_up_down_amount_ratio_log, volume_asymmetry_20d
- forward D+5/+10/+20 KOSPI 차감 alpha
1.2 t0별 spread_d20 (chart_score top decile − bottom)¶
| t0 | regime | KOSPI D+20 | spread_d20 |
|---|---|---|---|
| 2022-06-21 | strong_down | -1.58% | -9.90pp |
| 2022-07-05 | strong_down | +4.18% | -4.26pp |
| 2022-07-11 | strong_down | +6.53% | -3.05pp |
| 2022-04-21 | down | -3.26% | +8.62pp ★ |
| 2022-08-02 | down | +1.33% | +1.98pp |
| 2024-12-30 | down | +3.43% | -4.47pp |
| 2023-12-12 | flat | -0.40% | -5.17pp |
| 2024-04-16 | up | +4.41% | -0.36pp |
| 2025-12-17 | strong_up | +20.91% | +1.99pp |
1.3 ★★ 신호 regime 안정성 (D+20 alpha 평균)¶
| signal | down | flat | strong_down | strong_up | up |
|---|---|---|---|---|---|
| absorption_score_last HIGH (n=21) | -1.48% | +6.62% | +5.15% | -19.07% | +1.68% |
| spring_count_20d > 0 (n=1067) | +1.92% | +1.37% | +0.38% | -4.68% | +5.17% |
| vp_up_down_amount_ratio_log LOW (n=279) | -0.66% | -3.72% | +0.34% | -13.56% | +3.53% |
| volume_asymmetry_20d LOW (n=329) | -0.14% | -2.16% | +0.64% | -11.43% | +4.00% |
1.4 결론¶
S317 v2 ★★ 신호(67일 강세장)는 regime 의존성 강함, 4년 다시점에서 일관성 부재.
absorption_score_last HIGH: flat/strong_down에서 강하나 표본 매우 부족 (각 5건 이하). strong_up에서 역작동vp_up_down_amount_ratio_log LOW: bear 신호로 strong_up·flat에서 가장 강함 (역설). down에서는 미미spring_count_20d > 0: bull 신호로 up regime에서 작동, 강세장에서는 오히려 음수
운영 채택 안 함. 추가 분리: timeframe 차이(67일 vs 4년 → 신호 발화 시점이 단일 시점 vs 평균에서 큰 차이)일 가능성 검토 필요.
2. 옵션 3 — Q3 반전 룰 재측정¶
2.1 방법¶
discovery_walkforward summary (64 행 = 16 t0 × 4 horizon)의 in/out 라벨을 swap. spread_inv = -spread_orig.
2.2 결과¶
전체 spread 양수 비율: - 원본: 17/47 (36%) — 음수 우위 (Q3 룰이 역작동) 확인 - 반전: 30/47 (64%) — 양수 우위
D+20 t0별 반전 spread: - 양수 8/12 (66.7%) - 강한 양수: 2025-02-06 flat +15.44pp, 2024-04-16 up +36.25pp, 2026-04-22 strong_up +20.31pp, 2025-07-03 strong_up +15.03pp - 강한 음수: 2024-06-05 flat -13.31pp, 2025-12-17 strong_up -13.51pp
D+30 반전 양수 비율: 8/11 (72.7%) — 시평이 길수록 안정
2.3 regime 평균 (D+30 기준 spread_inv)¶
| regime | n_t0 | spread_orig | spread_inv |
|---|---|---|---|
| strong_down | 3 | -14.73% | +14.73% |
| up | 3 | -19.44% | +19.44% |
| flat | 3 | -6.44% | +6.44% |
| down | 3 | +5.72% | -5.72% |
| strong_up | 3 | +0.96% | -0.96% |
| baseline | 1 | -9.18% | +9.18% |
2.4 결론¶
반전 룰 채택 후보: strong_down / up / flat / baseline에서 양수 (5/6 regime). down·strong_up은 원본 룰이 약하게 작동.
Conditional rule 권장: - HOT = 회피 (대신 cooling/dead 매수), 단 down/strong_up regime에서는 원본 유지 - 다음 cycle에서 시점 6개 더 추가 + 통계 유의성 검정 필요
3. 옵션 4 — 퀀트 walk-forward (ea_panel_dart × 19분기) [v1→v2 N확장]¶
3.1 방법¶
- universe v1 = 86종 / v2 = 196종 (옵션 5 백필 후)
- 분기 시점 19개 (2021Q2 ~ 2025Q4, n≥10 충족)
- 발표 시점 = 분기말 + 50거래일 (보수)
- TOP decile vs BOTTOM decile (각 v1 ~8종 / v2 ~17종) KOSPI-adjusted alpha D+20/D+60
3.2 결과 (regime × horizon 평균 spread) — N확장 비교¶
| regime | n_t | v1(86종) d20 | v2(196종) d20 | v1(86종) d60 | v2(196종) d60 |
|---|---|---|---|---|---|
| down | 2 | +1.24% | +4.53% | +8.34% | +1.25% |
| flat | 7 | -0.08% | +0.62% | -4.36% | +1.43% |
| strong_up | 4 | -6.08% | +4.47% | -17.61% | +10.29% ★ |
| unknown | 3 | +10.89% | +7.71% | +7.57% | +9.23% |
| up | 3 | +2.76% | +2.12% | +9.12% | -4.01% |
전체: - v1: D+20 -0.19% (양수 8/17 = 47%), D+60 -1.98% (양수 7/16 = 44%) - v2: D+20 +2.67% (양수 11/17 = 65%), D+60 +2.54% (양수 9/16 = 56%) ★
3.3 결론¶
N확장 효과 극적 — S312v2 가설(EA TOP alpha) 부활: - 전체 D+20 spread 음수 → 양수 전환 (-0.19% → +2.67%) - strong_up regime D+60 -17.61% → +10.29% (방향 반전, EA 가속 종목이 강세장에서도 outperform 확인) - down regime D+20 +1.24% → +4.53% (회복기 작동 강화) - universe 부족이 알파 noise 원인이었음 검증
채택 가능 (regime conditional): - strong_up·down·flat에서 D+60 양수 → EA TOP decile 진입 - up regime D+60 음수 (-4.01%) 회피 - v3 단계: corp_code 200→300/500 확장 시 추가 정밀도 향상 기대
4. 옵션 5 — corp_code 100→200 확장 ✅¶
4.1 완료 결과¶
- universe_top500의 시총 101~200위 후보 102종 → DART corpCode.xml 매핑 99종 성공
data/dart_cache/corp_code_map_v2.parquet(197종 통합),corp_code_add_101_200.parquet(99종)
4.2 백필 결과 (≈12분)¶
- 99 corp × 7년(2020~2026) × 4분기 × CFS+OFS fallback
- 실측 6.5 calls/s, 3,537 calls, 415,461 rows appended, 1,368 errors (대부분 empty)
- 통합
fs_quarterly_5y.parquet: 853,061 rows (16.5MB) / 196 corps / 4,304 (corp,fy,q)
4.3 metrics + EA 재산출 결과¶
| 산출 | v1 (98종) | v2 (196종) |
|---|---|---|
| quarterly_metrics rows | 6,180 | 12,522 |
| ≥6분기 EA YoY 측정 가능 | 86종 | 178종 ★ |
| ≥5분기 EA_QoQ 가능 | 87종 | 179종 |
| EA(YoY) panel 건수 | 4,709 | 9,507 |
| EA_QoQ panel 건수 | 5,253 | 10,604 |
4.4 corp_code_map 복원¶
- v2 (197종)을 corp_code_map.parquet로 영구화
- 백업
corp_code_map_orig98.parquet보존
4.5 옵션 4 연쇄 효과¶
§3.2 v2 컬럼 참조. N확장만으로 전체 D+20 spread -0.19% → +2.67% 전환.
5. 종합 결론¶
5.1 채택 가능 신호 (3건)¶
- C5 deposit_lev_z LOW × flat (Phase C, n=46 hit 89% -4.43pp) — 한국 자금 dry powder 신호
- C5 deposit_credit_ratio_z LOW × down (n=11 hit 91% -3.23pp) — 레버↑+약세 추가하락
- EA TOP decile (revenue) regime-conditional ★ — N확장 후 채택
- strong_up D+60 +10.29% / down D+20 +4.53% / flat D+60 +1.43%
- up regime 회피 (D+60 -4.01%)
5.2 채택 보류 (2건)¶
- Phase D ★★ 차트 신호 — regime 의존성 강해 4년 다시점에서 noise. S317 v2(67일 강세장) 단일 시점 결과는 generalize 안 됨
- Q3 반전 룰 — D+30 양수 8/11 (73%) 유망하나 시점 6개 더 필요. conditional 적용 시 strong_down/up/flat 반전 + down/strong_up 원본
5.3 핵심 학습¶
- N확장이 alpha noise 해결의 1차 수단 — 86종 → 196종만으로 strong_up D+60 -17.61% → +10.29% 방향 반전
- 인벤토리 ★★ 신호도 단일 시점/regime 검증으로는 채택 위험. 다시점 walk-forward 필수
- Q3 룰처럼 단방향 룰은 regime 의존성으로 spread 사인 뒤집힘. conditional 적용 필요
5.4 다음 세션 진입점¶
- regime conditional rule book 작성 (Phase E) — 채택 3건 + 보류 2건 매트릭스화
- L_composite_z 합성 (FRED WALCL-TGA-RRP) 재현 → Phase C 보완
- KRX 파생 long→wide 변환 → Phase C 확장
- corp_code 200→300/500 추가 확장 → 옵션 4 v3
- 30분봉 OF 일일 cron 가동 (1년 후 backtest 가능)
- 새 루틴
/rs_discovery골격 PM 승인 — Phase E 종료 조건
6. 산출물¶
코드 (신규)¶
scripts/backtest/phase_d_chart_walkforward.pyscripts/backtest/q3_rule_invert.pyscripts/backtest/quant_walkforward_dart.pyscripts/backfill/corp_code_expand_to_200.py
데이터¶
data/backtest/phase_d/{per_t0/, summary, regime_spread}.parquetdata/backtest/q3_invert/{summary_with_inverted, regime_horizon_summary}.parquetdata/backtest/quant_walkforward_dart/{summary, regime_spread}.parquetdata/dart_cache/{corp_code_map_v2, corp_code_add_101_200}.parquet