콘텐츠로 이동

S361 N8 — 차트 분석기 완전 제거 → 순수 수학 렌즈 통합 설계안

일자: 2026-06-30 (Tue) 근거: S360 N1~N6 (2026-06-29_S360_combo_signal_vs_chart.md) + S361 N7 (2026-06-30_S361_n7_seat_prob_value.md). PM 결정 (2026-06-30): "차트 자리를 지금의 차트 분석기가 담당하는 게 아니라, 필요한 부분만 남기고 없애고 다 수학적 렌즈로 통합." → 선택지 중 "완전 제거, 순수 수학" 채택. 성격: 설계안. 실제 코드/에이전트 삭제는 PM 승인 + seq 인프라 선결 후 (CLAUDE.md §2/§3).


0. 완전 제거가 가능한 결정적 근거

LLM 차트 분석기 6개는 데이터를 생산하지 않는다 — 코드가 만든 수치를 서술할 뿐이다.

차트 관찰 데이터 생산 주체 (사실) LLM 역할
관찰1 추세·위치 chart_indicators.compute_trend/trajectory/exceptionality 수치 받아 서술
관찰2 이례일 compute_exceptional_days 수치 받아 서술
관찰3 매물대 compute_volume_profile (overhang/poc/asym) 수치 받아 서술
관찰4 VSA·캔들 compute_vsa/compute_candles 수치 받아 서술
관찰5 오더플로 30분봉 OF 산출 수치 받아 서술
종합 synthesizer (위 수치 종합) verdict 판정

→ 자리(overhang)·손절폭(MAE)·방향(streak) 모두 이미 수치 컬럼. N7 1등 셀 판정 전체가 LLM 한 줄 없이 코드로 재현됐다(실제 N7 검증이 그렇게 돌았음, eval_n7_seat_prob_value.py). 검증상 LLM 차트 서술·verdict의 win·손익비 기여 = 0 (S360 N4: 차트만 ON base이하, 결합이득 0).

결론: LLM 차트 분석기 6개는 "코드 수치를 자연어로 옮긴 중간층"일 뿐, 제거해도 정보 손실 없음. 자리·손절폭·이례일까지 전부 수학 렌즈 컬럼으로 흡수.


1. 검증이 확정한 진입 신호 (순수 수치)

방향(오를 확률)  = P(win) 사후확률 streak ≥ 2        [build_pwin_sequential]
진입 자리         = 비저점(dd60 비극단) AND 머리위매물많음(overhang_below 낮음=저항앞)
                                                      [chart_indicators.compute_volume_profile + q_dd60]
손절폭(예상 낙폭) = MAE (1등 셀 -0.0353 < 전체 -0.0485)   [triple_barrier mae]
기댓값            = touch_return / RR (1등 셀 0.330 > 전체 0.226)  [touch_return_5d]
1등 셀 win 0.483 · RR 0.330. 견고성(N7 §4b): 147종·6분기 전부 엣지>0. 전부 코드 산출 컬럼.


2. 현행 → 교체 구조

현행

[Phase 3.7] pregate: 코드 가중합(차트위치+pullback+OF) -> 30종
[Phase 4]   D2 = chart-synthesizer(LLM, 관찰1~5 LLM 종합) -> verdict   ← 제거 대상
[Phase 5]   D7 portfolio-selector

교체 후 (순수 수학)

[Phase 3.7] pregate(수학): streak≥2 1차컷 + 자리 스코어(비저점 AND 저항앞눌림) -> 30종
[Phase 4]   D2 = chart_score(코드): 자리적격 + MAE 손절폭 + 기댓값 산출 (LLM 없음)
            (D3~D6 정량/실적/재료 judge는 유지 — 본 설계 범위 밖)
[Phase 5]   D7 portfolio-selector: 방향=streak, 자리=chart_score 수치 결합

삭제 대상 (PM 승인 후): - .claude/agents/discover/chart-obs-trend.md - .claude/agents/discover/chart-obs-events.md - .claude/agents/discover/chart-obs-volume-profile.md - .claude/agents/discover/chart-obs-vsa-candles.md - .claude/agents/discover/chart-obs-orderflow.md - .claude/agents/discover/chart-synthesizer.md (+ chart-judge.md) - scripts/discover/steps/의 D2 LLM 호출부 → chart_score() 코드 함수로 대체. - chart_indicators.py의 compute_유지*(데이터 생산자, LLM만 제거).


3. 신규 코드 함수 — chart_score(code, date) (LLM 대체)

기존 compute_* 수치를 받아 자리·손절폭·기댓값을 코드로 판정. (D2_chart_judge envelope 대체)

입력: chart_indicators.compute_volume_profile().overhang_below_pct
      seq q_dd60 (저점 분위)
      triple_barrier mae / touch_return
출력 (D7이 받는 수치):
  seat_fit     : 1등 셀 적격 = (q_dd60 비극단) AND (overhang_below <= 종목내 median)  [N7 최선조합]
  seat_score   : 연속 스코어 (overhang 낮을수록 + 비저점일수록 ↑)
  exp_mae      : 진입시 예상 낙폭 (손절선 설계용)
  exp_rr       : touch/|mae| 기댓값

주의 — N7 자리 방향 (직관 반대): 신고가/머리위 매물 적음(overhang 높음)이 손익비 열위 (RR 0.206). 저항 앞 눌림(overhang 낮음)이 우위(RR 0.330). 기존 pregate의 "신고가 근접 선호"를 반전해야 함. 저점자리(dd60 극단)는 배제(돌파×저점 win 0.315).


4. 흡수·제거·신규 매핑 (관찰별)

차트 관찰 win/손익비 기여 (검증) 처리
관찰1 추세·위치 단독 base이하, 결합이득0 수치 흡수: q_dd60(비저점)·MA slope만 chart_score 입력. LLM 제거
관찰2 이례일 확률변화로 흡수 제거: 이례일(거래대금급증·큰변동·종가위치)은 seq 우도 입력 → 그날 p_post가 움직임. 이례일의 진위=그후 streak로 판정(S357§6). 별도 서사는 확률갱신의 자연어 중복. exceptional_days 수치는 D7 노출 가능(LLM 없이)
관찰3 매물대 자리 손익비 최선축 수치 흡수(핵심): overhang_below → seat_score. LLM 제거
관찰4 VSA·캔들 spring 단독 win≈base 제거: spring/흡수형 수치는 vsa 컬럼 존재하나 win 기여0 → chart_score 미사용(폐기후보)
관찰5 오더플로 win 추가0, div meanR 단서 수치 흡수(보조): cvd_divergence meanR 단서만 기댓값 보조로. LLM 제거
종합 synthesizer verdict win 기여0 제거: chart_score() 코드가 대체

6개 LLM 전부 제거. compute_* 수치 생산자는 유지, chart_score()가 판정.

5. 잃는 것 — 거의 없음 (PM 논리로 정정)

이전 초안은 "이례일 서사·LLM 종합을 포기하는 판단"이라 썼으나, 따져보면 둘 다 수학 렌즈가 흡수/대체:

  • 이례일 → 확률변화가 흡수 (포기 아님): 이례일이 만든 가격·거래 충격은 build_pwin_sequential 우도 입력(hmm/strength/dd60/overnight)에 그날 반영 → p_post가 움직임. 이례일의 진위(진짜 신호였나)는 그후 streak가 오르는가로 판정(= S357§6 "재료 진위는 사후확률 갱신으로만 안다"). 별도 LLM 서사는 확률갱신이 이미 한 일을 자연어로 중복 서술.
  • 종합판단 → 수치 조건문으로 대체 (포기 아님): synthesizer의 "종합"은 5개 코드 수치를 엮어 verdict 내기. 엮는 규칙(국면 판정→결정 관찰→상충 해소, 명세 라인33-36)은 if-then 휴리스틱이라 chart_score() 조건문으로 코드화 가능. 게다가 그 verdict win 기여 0(S360 N4).
  • 유일하게 새로 안 잃는 한계: 장중 진입 정밀화. 일별 라벨로 측정 불가했던 영역인데 정량도 일별이라 동일 한계 — 차트 제거로 새로 잃는 것 아님.

순수 수학화로 잃는 win/손익비/맥락 거의 없음. PM "수학적 렌즈는 수학으로만 작동하면 된다" 정합.

6. 선결 인프라 (제거 실행 전 필수)

  1. 일배치 seq 갱신: build_pwin_sequential 매일 universe → p_post 시계열(streak·chart_score 토대). ★이게 없으면 streak 산출 불가 = 교체 불가. 최우선 선결.
  2. chart_score() 코드 작성 + 기존 D2 LLM 호출부 대체 + 스모크.
  3. 라벨 다양화(1/20일)로 자리 방향(신고가 반전)·폐기후보(VSA/cum) 재확인.

7. 한 줄 결론

차트 분석기 LLM 6개는 코드 수치를 자연어로 옮긴 중간층 — 제거하고 자리·손절폭·기댓값을 chart_score() 코드 함수로 흡수한다. discover 차트 영역은 LLM 0, 순수 수학. 방향=streak, 자리=overhang+dd60, 손절=MAE. 코드/에이전트 삭제는 PM 승인 + seq 인프라 선결 후.