콘텐츠로 이동

S309 — L×S v4b_swing5 + v4c Chart×Quant×Derivatives 3-axis 검증

날짜: 2026-05-24 (Sun) Topic: L (시스템 재설계) 선행: S308 (v1~v3 + v4a/v4b 완료) 다음: v4c 결함 보완 후 운영 진입 또는 stock-level 확장


1. 옵션 2 — v4b swing ±5% 재실행

1.1 변경

  • scripts/backtest/lxs_v4b_swing5_derivatives_standalone.py 신규 (v4b copy)
  • SWING_THRESHOLD: 0.08 → 0.05
  • 출력: data/backtest/lxs_v4b_swing5/

1.2 결과

  • swing 7건 (±8% 3건 → ±5% 7건, 표본 ~2.3배)
signal extreme events swing match mean lead median lead/concur/lag
basis_z 32 7/7 ★ -6.0d -2d 5/1/1
kr_10y_chg_z 31 7/7 -3.9d 0d 3/3/1
fut_oi_chg_z 21 6/7 -3.2d -1d 3/1/2
max_pain_dist_z 11 3/7 -4.7d -6d 2/0/1
vkospi_fut_z 1 3/7 -5.7d 0d 1/1/1
vkospi_proxy_z 0 0/7
pcr_oi_z 0 0/7
composite 0 0/7

1.3 해석

  • basis_z 선행성 견고: ±8%에서 mean 14d 선행, ±5%에서 6d 선행로 줄었으나 7/7 모든 swing 100% match. 폭이 다른 swing 모두 잡힘 → swing event 시점 알람으로 안정적.
  • kr_10y_chg_z 신규 부각: ±8%에서는 부각 안 됐으나 ±5%에서 7/7 match + 3d 선행. 작은 swing 시점에 의미.
  • VKOSPI / PCR: rolling 30일 기반 z 임계 ±1.5 못 넘김. 표본 부족.
  • Composite 실패: 가중평균이 개별 신호를 희석. 단일 신호 사용 권장 (특히 basis_z, kr_10y_chg_z).

1.4 운영 룰 권고 (옵션 2 결과)

  • swing 알람: basis_z 단독 또는 basis_z + kr_10y_chg_z 합의(둘 다 z ≥ ±1.5)
  • composite는 폐기.

2. 옵션 4 — v4c Chart × L×S × Derivatives 3-axis 결합

2.1 설계

  • 검증 단위: KOSPI 일자
  • 차트: 30분봉 250종목 → 일자 EOD 시점 classify_stateresolution_direction (-1/0/+1) breadth → chart_breadth_z
  • 퀀트: v2b의 일자별 L_bin/S_bin/cell (5영업일 sample → forward-fill)
  • 파생: v4 basis_z 등 + composite deriv_sent_z
  • 검증: 3축 cell × D+5/D+10/D+20 KOSPI 수익률 alpha (vs baseline mean)

2.2 데이터 교집합

  • 30분봉: 2026-02-13 ~ 2026-05-22 (75 영업일)
  • 파생: 2025-04-15 ~ 2026-04-14
  • v2b L×S: ~ 2026-04-15
  • inner-join 결과: 38일 (2026-02-19 ~ 2026-04-14)

PM 75일 조건은 파생 기간 제약으로 미충족. 4/15 이후 파생 백필 또는 차트만 별도 평가는 후속.

2.3 Baseline (38 days)

Horizon n mean median win
D+5 35 +1.16% +3.22% 54.3%
D+10 34 +2.14% +0.70% 55.9%
D+20 25 +2.78% +3.78% 64.0%

기간 자체가 강상승장(2/19 5089 → 4/14 5968, +17%). D+20 표본 25만 가용.

2.4 Single-axis alpha (vs baseline)

Chart axis (chart_breadth_z bin)

bin n mean D+5 (α) mean D+10 (α) mean D+20 (α)
MID 6 +6.57 (+5.41) +12.04 (+9.90) NaN
HIGH 2 +6.82 (+5.66) +14.10 (+11.96) NaN

결함: rolling 30일 z의 첫 30일 NaN으로 8일만 분류, 30일 UNKNOWN. 차트 breadth 분류 표본 부족. 그래도 분류된 cell은 모두 alpha 강한 양수.

Quant axis (L_bin × S_bin = cell)

cell n α D+5 α D+10 α D+20
HIGH_HIGH 4 +6.89 +12.61 NaN
HIGH_LOW 5 -3.13 +3.04 +12.83 ★
LOW_HIGH 13 -2.04 -6.31 -3.30
LOW_LOW 9 +1.41 +2.82 +3.81
VERY_HIGH_HIGH 2 +4.24 +7.15 NaN
VERY_HIGH_VERY_HIGH 3 +5.67 +9.16 NaN

L×S 직관 부분 검증: HIGH_HIGH·VERY_HIGH_VERY_HIGH(Bull) 강세 / LOW_HIGH(Top Warning) 약세 (-3.30pp D+20). HIGH_LOW(Contrarian Buy)는 D+5에 약했다가 D+20에 +12.83pp ★ — 시간차 반응.

Deriv axis (basis_z bin)

bin n α D+5 α D+10 α D+20
VERY_LOW 2 +1.67 +0.93 -4.02
LOW 5 +1.12 -0.80 +2.20
MID 15 +0.54 +0.60 +2.07
HIGH 13 +0.33 +0.39 +0.24
VERY_HIGH 3 -6.73 -3.34 -6.97 ★

basis_z VERY_HIGH가 회피 신호: 선물 프리미엄 극단 강세 = 과매수 → D+20 -6.97pp alpha. v4b 14d 선행과 정합. 운영 활용 가능.

2.5 2-axis (chart × deriv_bin)

cell n α D+5 α D+10 α D+20
MID|HIGH 4 +5.95 +11.25 NaN
HIGH|MID 2 +5.66 +11.96 NaN
MID|MID 2 +4.58 +8.54 NaN
UNKNOWN|VERY_HIGH 3 -6.73 -3.34 -6.97 ★
UNKNOWN|LOW 5 +1.12 -0.80 +2.20

차트 양호 + 파생 중상위 = 강한 alpha. 차트 미분류일도 파생 VERY_HIGH면 강력 회피.

2.6 3-axis joint cell (top |α D+20|)

cell n α D+5 α D+10 α D+20
UNKNOWN|HIGH_LOW|MID 2 -4.42 +1.18 +14.04 ★
UNKNOWN|HIGH_LOW|HIGH 2 -7.12 -0.63 +11.61 ★
UNKNOWN|LOW_LOW|MID 4 -1.39 +3.92 +5.72
UNKNOWN|LOW_HIGH|HIGH 5 -4.20 -9.95 -4.31 ★
MID|VERY_HIGH_VERY_HIGH|HIGH 2 +5.21 +8.39 NaN
UNKNOWN|LOW_HIGH|VERY_HIGH 2 -4.23 +2.13 -2.63
UNKNOWN|LOW_LOW|LOW 3 +1.12 -2.00 +2.35
UNKNOWN|LOW_HIGH|MID 4 +1.43 -7.64 -2.25

HIGH_LOW (Contrarian) + 파생 MID/HIGH: D+20 +14.04 / +11.61pp ★ — 가장 강한 양의 alpha. R7 CF7 가설 (Contrarian Buy = 최고 보상) 38일 표본 부분 재검증. LOW_HIGH (Top Warning) + 파생 HIGH: D+10 -9.95 / D+20 -4.31pp — Top Warning 가설 재검증.

2.7 결함 (S310 보완 필요)

  1. chart_breadth_z rolling 30일 → 38일 중 30일 UNKNOWN. 효과적 cell 분류 8일뿐.
  2. 해결: rolling 20일 또는 z 임계 ±1.0 완화.
  3. 38일 표본: PM 75일 조건 미충족. 4/15~5/22 파생 백필 필요.
  4. D+20 표본 25: 마지막 20일 forward look-ahead 짤림. 검증 기간 짧음.
  5. L×S forward-fill: 5영업일 sample을 평일 ffill → 같은 cell이 5일 연속. 자기상관 위험.

2.8 운영 결론 (v4c 38일 기준, 잠정)

  • 차트 ↑ + 파생 MID ~ HIGH = Bull 강세 (D+10 α +11pp)
  • L×S HIGH_HIGH / VERY_HIGH × VERY_HIGH = Bull 강세 (D+10 α +9~12pp)
  • L×S HIGH_LOW (Contrarian) + 파생 정상 = D+20 +11~14pp ★
  • basis_z VERY_HIGH = 강한 회피 (D+20 -6.97pp)
  • L×S LOW_HIGH (Top Warning) + 파생 HIGH = 회피 (D+10 -9.95pp)

38일 표본 + 강상승장 baseline 한계, but 방향성은 v2b/v2c OOS 결과와 정합.


3. 산출물

  • scripts/backtest/lxs_v4b_swing5_derivatives_standalone.py (옵션 2)
  • scripts/backtest/lxs_v4c_chart_quant_deriv.py (옵션 4 메인)
  • scripts/backtest/_v4c_inspect_*.py (스키마 점검 헬퍼 3종)
  • data/backtest/lxs_v4b_swing5/
  • signal_metrics.json
  • derivatives_with_features.parquet
  • data/backtest/lxs_v4c/
  • merged_3axis.parquet
  • chart_breadth.parquet
  • summary.json
  • docs/research/2026-05-24_S309_lxs_v4c_3axis.md (본 문서)

4. PM 결정 대기 (다음 세션)

  1. chart_breadth_z rolling 윈도우 단축 (30→20일) 으로 v4c 재실행 → cell 분류 표본 회복?
  2. 파생 4/15~5/22 백필 후 75일 검증 → PM 옵션 4 원조건 충족?
  3. v3 stock-level conditional alpha 진입? (regime × 종목별 D+N)
  4. 운영 진입 (morning/signal-synthesizer에 basis_z VERY_HIGH 회피 룰 + L×S cell 매핑 통합)?