콘텐츠로 이동

Topic — 정량 렌즈 vs 현행 차트분석 (대체/보완/추가 검증)

등록: 2026-06-29 (S358 말미) / 확장: 2026-06-29 (S360, PM 지시 2건) 상태: 🔵 S360 N1~N6 + S361 N7 완료. 다음 N8(차트 교체 설계). (N7서 매물대 라벨 버그 정정) 목적: S356~S358 정량 렌즈(시간갱신 P(win) + 검증 엔진)가 현행 discover 차트분석을 어디를 대체/보완/추가하는지 검증 → discover의 수학·차트 분석을 실제 수정.


★ PM 확장 지시 (S360, 이 토픽의 핵심 재정의)

PM 지시 1 — 결합 판정: "차트 관찰과 수학적 렌즈를 같이 썼을 때 확률을 높이는지 아닌지 판단하면서 같이 사용/폐기를 결정하고 discover의 수학·차트 분석을 수정해야 한다."

PM 지시 2 — P(win)은 d-n일 확률변화 + 3맥락과 같이 봐야 한다: "며칠째 오르고 있냐(ΔP)도 중요하지만 discover에서 같이 봐야 하는 건: ① 가격이 얼마나 반영된 상태인가 (가격 vs 매출 — 극단적으로 높나?) ② 그렇다면 시장환경은 괜찮은가 ③ 시장에 지속적으로 돈이 들어오고 있는가"

→ 정량 렌즈의 진입 신호 구조 재정의:

진입신호 = P(win) ΔP추세(d-n일 상승)
        × [가격 미반영]  (valuation gate: PSR/매출대비 안 극단적)
        × [시장환경 우호] (macro gate)
        × [자금 유입중]   (flow gate)
단일일 P(win) 절대수준이 아니라 변화궤적 + 3맥락 게이트의 곱이 검증 대상.

매크로 프록시 (PM 지시: 코스피 말고 예탁금/신용잔고도 같이)

  • ② 시장환경 + ③ 자금유입을 KOSPI 등락으로 근사하지 말고 고객예탁금 추이(대기자금 유입=③ 직접측정) + 신용잔고 추이(레버리지/과열=② 양면)로 측정.

1. 현행 차트분석 구조 (사실, .claude/agents/discover/chart-obs-*.md)

관찰 파일 보는 데이터
1. 추세·위치 chart-obs-trend trend/trajectory/exceptionality/cum_delta/상위TF
2. 이례일 사건 chart-obs-events exceptional_days(변동폭+거래대금+종가위치+당일수급, 지지/이탈)
3. 매물대 chart-obs-volume-profile volume_profile(POC·머리위매물·매집/분배 비대칭)
4. VSA·캔들 chart-obs-vsa-candles vsa(events/strength/spring) + candles(last_10/wick)
5. 30분 오더플로 chart-obs-orderflow price_reaction(가격대별 매수/매도 반응맵) + cvd_z/bvc/divergence
종합 chart-synthesizer 5관찰 -> 차트 verdict + 서사 (D2_chart_judge envelope)

2. 정량 렌즈 자산 + 데이터 (S356~S358, 가용성 확인 완료)

정량 축 산출/데이터 기간·표본 상태
시간갱신 P(win) build_pwin_sequential.py (lambda=0.5) OOS 2025~ (대형~중형 견고)
ΔP 추세 (신규) p_post의 n일(3/5/10) 누적변화+기울기 위 산출에 컬럼 추가 🔨 구현
검증엔진 4역할 S357 결과 (추세동참/저점/고점/폐기)
L3 손익비 RR build_pwin_rr.py 분위수회귀 OOS RR게이트 44%
① valuation gate quarterly_metrics(revenue) -> 가격/TTM매출 PSR 분기 ~2026Q1 ✅ 데이터有
② macro: 신용잔고 customer_deposit_normalized(credit_balance) 일별 2016~2026 ✅ 데이터有
③ flow: 고객예탁금 동 파일(deposit_balance/chg) 일별 2016~2026 ✅ 데이터有

(신용잔고 장기 시계열은 customer_deposit_normalized에 예탁금과 함께 일별 존재. credit_balance json 스냅샷은 2일치뿐이라 백테스트엔 미사용.)

3. 검증 방식 (PM 결정: 관찰축별 1:1 매핑 + 중첩검증)

(A) 1:1 매핑 — 각 관찰축 ↔ 정량 후보, 4분류 판정

차트 관찰 대응 정량 후보 예상관계(가설)
1. 추세·위치 hmm_bull / kalman_slope + P(win) ΔP추세 보완(추세를 확률 변화로 수치화)
2. 이례일 사건 (직접대응 약함) 차트 고유?
3. 매물대 vecm_dip / volume_profile 보완 또는 빈칸
4. VSA·캔들 spring dd60 / kalman_slope 저점 대체 후보
5. 30분 오더플로 30분엔진(표본 82일) 중복/표본부족
(차트에 없음) P(win) ΔP + RR 추가
(차트에 없음) ① valuation gate 추가 (가격 vs 매출 반영도)
(차트에 없음) ②③ 예탁금/신용잔고 게이트 추가 (시장환경·자금유입)

(B) 중첩검증 — 결합이 확률을 높이나 (PM 지시1의 핵심)

  • 차트 verdict 확보: 대표 10종목 재현 실행 (S358 9칸+삼성에 과거시점 chart-synthesizer).
  • OOS forward(fwd5)로 대조:
  • 단독 P(win) win율 vs P(win)×ΔP추세 vs P(win)×ΔP×3게이트 → 어느 결합이 win↑?
  • 차트 verdict(GO/WAIT/PASS) vs 정량신호 → 중복(같은판단·같은적중)/모순/고유.
  • 산출: 각 칸 대체/보완/추가/빈칸 + 결합 win율 표 (게이트 추가마다 적중 변화).

4. 성공조건

  • ΔP추세 + 3게이트 컬럼이 10종목 seq에 부착되고, OOS에서 단독 P(win) 대비 win차 측정.
  • 결합 단계별 win율 표: P(win)단독 → +ΔP → +valuation → +macro(예탁/신용) 각 효과 수치.
  • 5관찰 x 정량 매트릭스 각 칸 대체/보완/추가/빈칸 판정 + 근거(중첩검증 수치).
  • discover 수정 권고: 무엇을 정량으로 대체, 무엇을 차트로 남길지.

5. 미결/주의

  • 차트 verdict 재현: 과거 시점 chart-synthesizer 실행 (10종목, 비용 큼 — 대표 시점만).
  • 거래하위 종목은 P(win) 라벨 표본 없음(universe밖) → 검증은 거래상위.
  • valuation: 분기 데이터라 일별 forward-fill, 발표시차(vintage) 주의(미래정보 누설 금지).
  • 예탁금/신용잔고는 시장 전체 시계열(종목 무관) → 같은 날 모든 종목에 동일 게이트값.

6. WBS (S360)

  • [x] N1: ΔP추세 + valuation/예탁금/신용잔고 + 바닥/고점 게이트 부착 (build_combo_signal.py)
  • [x] N2: 결합 단계별 OOS win율 (S360 work log). 바닥+7.8%p, 가격미반영+5.3%p 최강. 신용비과열 -3.6%p(방향오류 의심). ΔP·예탁금 약함(+1.2%p).
  • [x] N2b: 종목풀 150종 확대 견고화 (eval_regime_pool.py). 확률연속상승=견고한 트리거 (전체0.385→연속2 0.448→연속3 0.462, win중앙 동반상승). 저점우위는 소표본 noise로 소멸, 저점단독 무의미(연속상승과 결합해야 효과). 신용잔고 방향 재검토는 미결.
  • [~] N3+N4: 차트 raw 신호 vs 정량 중첩검증 (eval_chart_vs_quant.py, 진행중). PM 결정: LLM verdict 재현 대신 차트 raw신호 직접 대조(build_d2_input CI, as-of 누설없음). 차트신호(spring/추세/매물대overhang/cum_delta) x 정량(streak2/저점) 4분면 forward win.
  • [x] N4b/N4c: 30분봉 OF 고유성 + execution 엣지 검증. 둘 다 win 추가가치 없음. 차트 살아있는 단서=변동성/낙폭관리뿐(매물대 MAE 0.9%p, divergence meanR).
  • [x] N5: discover 수정 권고서 (docs/discover_research/S360_discover_revision_recommendation.md). 방향판정=정량 streak로 대체/강화, 차트=실행(손절·진입)+맥락 역할 재배치. 차트 전면폐기 금지.
  • [x] N6: 누락엔진(수급 kalman_accum·공매도 short_change) streak 재검증 (eval_supply_short_streak.py). win 추가가치 미미(+0.9%p). 정량 win 신호원은 P(win) streak로 수렴. S357 '약함' streak서도 유지.

8. 다음 세션 1순위 (PM 지시 2026-06-29) — 매물대×확률×기댓값 결합 → 차트 교체

  • [x] N7: 매물대 × P(win) streak × 기댓값 3축 joint cross (eval_n7_seat_prob_value.py, work_log 2026-06-30_S361_n7_seat_prob_value.md). ★ 매물대 라벨 버그 정정: ch_overhang_clear가 overhang_below_pct 정의와 정반대 (실증 corr +0.40/+0.70). eval_chart_execution.py:151 <=>= 정정 후 패널 재생성. 결과: 자리는 win보다 기댓값(손익비)을 가름. streak≥2 × 머리위매물많음(저항밑) × 비저점이 RR(touch/|mae|) 0.330(전체 0.226 대비 +46%)·MAE -0.0353·win 0.483로 최선 = 저항 재돌파 직전 눌림목 + 확률 턴. 저점자리는 결합서도 해로움(돌파×저점 win 0.315). S360 N4c "매물대 단서지 수익아님"이 결합서 손익비 신호로 드러남. PM '계산 먼저 확인' 적중. ⚠️ S360 N4c work_log 결론문 이름 반전 정정 필요(데이터 유효, "돌파"↔"머리위매물많음"). 견고성 통과: 1등 셀(n=2222, 147종) — 종목 쏠림無(상위3 제거 0.483→0.482), 시기 6분기 전부 엣지>0(중앙값+0.035, 약세·강세 분기 모두 base 상회). eval_n7_robustness.py/ eval_n7_time_split.py. = "이미 돌아선 추세종목이 다음 저항 앞 눌린 자리"가 종목·시기 견고.
  • [x] N8: ★PM 결정 — 차트 분석기 LLM 6개 완전 제거 → 순수 수학 (S361_N8_chart_to_quant_redesign.md). 근거: LLM 6개는 chart_indicators.compute_ 가 만든 수치를 자연어로 옮긴 중간층일 뿐(데이터 생산 안 함), 검증상 win·손익비 기여 0. 자리(overhang)·손절폭(MAE)·방향(streak) 전부 이미 수치 컬럼. 설계: 6 에이전트(chart-obs-trend/events/vp/vsa/orderflow + synthesizer/judge) 삭제 → chart_score(code,date) 코드함수가 D2 대체(seat_fit=비저점AND저항앞눌림·exp_mae·exp_rr 산출). compute_ 수치생산자는 유지. pregate "신고가선호 반전"(N7: 저항앞눌림 RR0.330>신고가0.206). 잃는 것 거의 없음(PM 논리): 이례일=확률변화(p_post/streak)가 흡수, 종합판단=수치 조건문 대체. 별도 LLM 서사는 확률갱신의 자연어 중복. 선결=일배치 seq 인프라(최우선). 삭제는 PM 승인 후.
  • [ ] (선결) 일배치 seq 인프라: build_pwin_sequential 매일 universe -> p_post 시계열(streak 토대).

7. S360 진행 결과 (요약)

PM 질문 "결합이 확률 높이나" -> YES, 게이트별 차등: - P(win)상위(win 0.502)에 바닥자리(+7.8%p)·가격미반영(+5.3%p) 더하면 0.55~0.58. - ΔP추세 약함(+1.2%p) — '며칠째 상승'보다 '확률높음×바닥×미반영'이 강함. - 신용비과열 방향오류(-3.6%p), 고점경고OFF +4.2%p(82일 표본). - 상세: docs/work_logs/2026-06-29_S360_combo_signal_vs_chart.md