S357 — v3 엔진 검증 결과 종합¶
일자: 2026-06-28 ~ 06-29 목적: v3 정량 엔진이 한국 단기에서 실제 작동하는가. 줄세우기(IC)가 아니라 PM 방향(국면별 변화·진입/매도·고점/저점)으로 검증. 모집단: 일봉 419종 × 5년(2021-07~2026-06), universe=매일 D20거래대금 200위.
0. 검증 방법론 진화 (PM 교정 반영)¶
| 단계 | 방법 | 한계/교정 |
|---|---|---|
| 1. 줄세우기 IC | "신호 높은 종목이 더 오르나" (종목간 cross-section) | PM: 이걸로 효과 판정 불가. baseline 섞여 변화 못 봄 |
| 2. 가격-수치 동행 시계열 | 한 종목 시간축에 30엔진 나란히 | PM: 국면 라벨 코드로 못 나눔 → 에이전트가 차트로 판단 |
| 3. 구간 분할 + 에이전트 | 5년을 10구간, 에이전트가 국면 식별 + 수치변화 서술 | 국면별 경향 드러남 |
| 4. 종목내 분위 × Triple-Barrier | 매매자 관점: 진입/매도/관망 + 통계검정 | baseline 제거(종목내 정규화) |
| 5. 스윙 고점/저점 시점 엔진값 | 고점/저점 신호 식별 | 종목내 백분위로 baseline 제거 |
핵심 교훈: 풀링(전종목 한 솥) 통계는 종목별 baseline이 섞여 변화를 못 본다. 종목내 정규화(분위/백분위)해야 경향이 드러난다. 예: kalman_accum이 풀링 IC에선 "제각각"(34% 양)이나, 구간 분석에선 상승=증가/하락=감소로 일관.
1. 두 검증의 정의¶
분석 A — 진입/매도 효과 (entry_exit_quantile.csv):
- 각 엔진을 종목내 5분위로 → 분위별 이후 +1(저점성공=매수효과)/−1(고점)/평균R.
- Q5(상위)−Q1(하위) win 차이 >0 = 상위분위서 매수 유리.
- 라벨 = Triple-Barrier 5일 (±2σ).
분석 B — 고점/저점 신호 (swing_extremes.csv):
- ZigZag 8%로 단기 고점(H)·저점(L) 식별 (391종, 고점 10,206 / 저점 9,911).
- 각 피벗 시점 엔진값을 종목내 백분위(0~1)로 → 고점평균 vs 저점평균.
- 고−저 >0 = 고점에서 엔진 백분위 높음 / <0 = 저점에서 높음. Mann-Whitney 검정.
2. 결과 — 엔진 4역할 분류¶
① 추세동참형 진입신호 (강세 확인 매수 → 효과 큼)¶
| 엔진 | A: Q5−Q1 win | A: Q5−Q1 R | B: 고−저 |
|---|---|---|---|
| hmm_bull #1 | +16.2%p | +1.40% | +0.07 |
| strength_regime #44 | +14.3%p | +1.38% | +0.29 (고점서도 높음=과열주의) |
| → 종목내 상위 분위일 때 매수 시 +1 비율 14~16%p↑. 단 저점은 아님(추세 동참). |
② 저점 식별신호 (역추세 매수자리)¶
| 엔진 | B: 고−저 | A: Q5−Q1 win |
|---|---|---|
| dd60(낙폭) | +0.44 (저점서 낮음) | −0.8%p |
| kalman_slope #3 | +0.35 (저점서 낮음) | −2.3%p |
| vecm_dip #63 | −0.30 (저점서 높음=눌림) | +3.7%p (진입도 유리) |
| overnight #64 | −0.27 (저점서 높음) | −1.4%p |
| → vecm_dip은 저점신호 + 진입효과 겸함. |
③ 고점 경고신호¶
| 엔진 | B: 고−저 | 비고 |
|---|---|---|
| rsemi_sk #29 | +0.54 (고점서 상방반변동성 큼) | 30분봉 82일 표본 |
| strength_regime | +0.29 | (①에도 — 양면) |
④ 무의미 (통계·실질 둘 다 신호 없음 → 폐기 후보)¶
| 엔진 | A: Q5−Q1 win | B: 고−저 |
|---|---|---|
| kyle_lambda #34 | −3.1%p | +0.00 ns |
| quantreg_q50 #7 | −0.5%p | −0.00 ns |
| copula_dep #14 | −1.7%p | −0.00 ns |
| short_hawkes #47 | +0.1%p | −0.00 ns |
| evt_tail #10 | +3.0%p | −0.00 ns (고저 무의미) |
기타 (약신호/상충)¶
- corwin_schultz(−7.8%p, 진입 역방향), bns_rj(−6.9%p, 82일), sqrt_impact(win↑R↓ 상충), amihud(하위분위 R 유리), short_change(약한 진입+), ssa_trend/roll_spread/conformal/s_score_sig/garch_drift/kalman_accum(약함).
3. 데이터 인프라 (오늘 구축)¶
수집기 (scripts/discover/research/)¶
| 수집기 | API | 산출 | 커버리지 |
|---|---|---|---|
| collect_flow_5y.py | 키움 ka10045(슬라이딩) | 수급 5년(외인/기관 순매수) | 419/419, 중앙값 1220일 |
| collect_strength_5y.py | 키움 ka10047(연속조회) | 체결강도 5년 | 419/419, 1220일 |
| collect_short_5y.py | 키움 ka10014(슬라이딩) | 공매도 5년 | 418/419, 중앙값 1043일(105종 2년미만) |
| engines_statarb.py | 보유 일봉 PCA | s-score 전종목 | 125k셀 |
엔진/분석 (scripts/discover/research/)¶
- engine_builder.py — 단일종목 25엔진 단일 진입점
- signal_timeline_full.py — 가격+30엔진 시계열 (evt/quantreg step=5 최적화)
- segment_timeline.py — 10구간 분할 (에이전트 입력)
- engine_codirection.py / engine_action_stats.py / analysis_entry_exit.py / analysis_swing_extremes.py
데이터 한계 (해석 시 명시)¶
- 30분봉 엔진(vpin/bns_rj/rsemi_sk): 1138봉 = 82거래일(2026-02~06)만. 단기 표본.
- 공매도: 105종 2년 미만 커버리지.
- 틱 기반: 구조적 불가(직전 1일만) → v3 선정렌즈 제외. 손실 없음.
4. 결론¶
- 단독 종목불문 견고 엔진 = 3개: hmm_bull·strength_regime(추세동참 진입), amihud(유동성, 풀링에선 73% 음).
- 저점/고점 신호 분리됨: 저점=dd60/kalman_slope/vecm_dip/overnight, 고점=rsemi_sk.
- 폐기 후보 5개: kyle_lambda, quantreg_q50, copula_dep, short_hawkes, evt_tail(고저).
- PM 방향 입증: 줄세우기로 묻혔던 신호가 종목내 정규화·국면 분석으로 드러남(kalman_accum 사례).
6. 실종목 변곡점 검증 (삼성 005930 · 현대차 005380, 2026년)¶
PM 요청: 2026 움직임의 주요 변곡점을 엔진으로 어디까지 판별 가능한가.
방법: 변곡점 ZigZag 8% 식별 → 각 ±10일 윈도 가격+26엔진을 에이전트가 전수 평가(선행/동행/후행).
산출: segments/{code}_2026_inflections.md, segments/{code}_2026.md.
변곡점 판별 집계 (삼성 12개 + 현대차 9개 = 21개)¶
| 사전(N일전)판별 | 동행만(당일확인) | 못잡음 | |
|---|---|---|---|
| 삼성 12개 | 0 | 5(주로 저점) | 5 (+경계 2) |
| 현대차 9개 | 0 | 5 | 4 (+경계 2) |
사전 판별 = 0/21. −2일 이상 선행 신호 낸 엔진 없음. 전부 동행 또는 후행.
핵심 결론 (데이터 확정)¶
- hmm_bull 모순 확정: 삼성 −20.5%/−19.8%/−18.0%/−14.5% 모든 대형 조정 고점에서 hmm_bull +0.996~1.000 만점 유지. 큰 추세 강세는 잡으나 그 안의 조정·고점은 전혀 못 잡음. (분석A 진입효과 +16%p와 별개)
- 고점 > 저점 난이도: 고점에서 강세엔진(hmm/kalman_slope/strength/kalman_accum)이 역설적으로 최대/개선 → 고점 경고 능력 0. 저점은 당일 동행 신호 존재(dd60 극단·vecm 음→양·strength 급등).
- 저점도 "당일 확인"까지: 사전 예측·깊이 예측 불가. 삼성 3-04(−21%)→3-31(−23%) 추가하락이 증거. s_score_sig(과매도)는 현대차 4저점 전부 무반응.
- 그나마 일관 단서: vecm_dip(고점 D-1 음심화/저점 당일 양전), strength_regime 다이버전스(현대차 고점 D-2). 단 1일·단독불충분.
★ 의미 재정의 (S356 설계 전제와 일치 — PM 확인)¶
변곡점 "예측 실패"가 아니라 엔진은 예측 도구가 아니라 확률영역 식별 도구임이 재확인됨: - "오늘까지의 확률만 안다, 내일은 모른다" = 모든 엔진이 동행/후행인 이유. - "내일 되어야 확률 조정" = 저점이 당일/익일에만 확인되는 이유(정보 도착 후 갱신). - "유의한 가격영역에서 진입, 맞으면 먹고 틀리면 손절" = 분석A·B가 준 유의 영역(dd60 극단·vecm 양전 등)에서 진입 = 기댓값 게임. - 잘못된 기대(변곡 타이밍 맞히기) → 올바른 용도(P(win) 높은 영역 식별 + 손익비 관리).
→ S356 5층 L2(도달확률)·L3(손익비)·L5(결합)이 하려던 것과 정확히 일치.
2종목 ↔ 전종목 정합¶
2종목 변곡 사례(저점 당일확인 / 강세레짐만)가 §2 전종목 통계(분석B 저점신호 dd60+0.44·kalman_slope+0.35·vecm−0.30 유의)와 같은 결론 → 일반화 가능성 높음.
7. 다음 세션 (미결)¶
- ★ 다음 작업 = 확률영역 식별 → P(win)+기대R 산출 (S356 L3 손익비·L5 결합). 검증된 유의 영역(저점신호 dd60/kalman_slope/vecm + 추세동참 hmm/strength) 기반. PM "임의조합 금지→검증후 결합" 조건 충족됨(이번 검증이 근거).
- horizon 1일·20일 재확인 (보유기간별 신호 변화)
- 무의미 엔진 폐기 확정 (kyle_lambda·quantreg·copula·short_hawkes·evt_tail 고저)
- 30분봉(82일)·공매도(105종 2년미만) 단기표본 엔진 재확인
- 보강 3건(Market Breadth·RRG·IR) 미착수