콘텐츠로 이동

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일 이상 선행 신호 낸 엔진 없음. 전부 동행 또는 후행.

핵심 결론 (데이터 확정)

  1. hmm_bull 모순 확정: 삼성 −20.5%/−19.8%/−18.0%/−14.5% 모든 대형 조정 고점에서 hmm_bull +0.996~1.000 만점 유지. 큰 추세 강세는 잡으나 그 안의 조정·고점은 전혀 못 잡음. (분석A 진입효과 +16%p와 별개)
  2. 고점 > 저점 난이도: 고점에서 강세엔진(hmm/kalman_slope/strength/kalman_accum)이 역설적으로 최대/개선 → 고점 경고 능력 0. 저점은 당일 동행 신호 존재(dd60 극단·vecm 음→양·strength 급등).
  3. 저점도 "당일 확인"까지: 사전 예측·깊이 예측 불가. 삼성 3-04(−21%)→3-31(−23%) 추가하락이 증거. s_score_sig(과매도)는 현대차 4저점 전부 무반응.
  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) 미착수