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]
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. 선결 인프라 (제거 실행 전 필수)¶
- 일배치 seq 갱신: build_pwin_sequential 매일 universe → p_post 시계열(streak·chart_score 토대). ★이게 없으면 streak 산출 불가 = 교체 불가. 최우선 선결.
- chart_score() 코드 작성 + 기존 D2 LLM 호출부 대체 + 스모크.
- 라벨 다양화(1/20일)로 자리 방향(신고가 반전)·폐기후보(VSA/cum) 재확인.
7. 한 줄 결론¶
차트 분석기 LLM 6개는 코드 수치를 자연어로 옮긴 중간층 — 제거하고 자리·손절폭·기댓값을 chart_score() 코드 함수로 흡수한다. discover 차트 영역은 LLM 0, 순수 수학. 방향=streak, 자리=overhang+dd60, 손절=MAE. 코드/에이전트 삭제는 PM 승인 + seq 인프라 선결 후.