차트·수급 구조화 방법론 리서치 (Round 3)¶
작성: 2026-05-22 | 선행: Round 1·2 (20260522_llm_trading_discovery_research.md, ..._interpretation_methods_research.md)
주제: 퀀트·차트패턴 분석이 차트·수급을 어떻게 구조화·정량화하는가 — 특히 '불균형 → 균형 이동'과 VSA 관점
목적: 발굴 시스템의 '분석기법 레이어' 설계 — raw 차트·수급 → 정규화·구조화된 사실 + base rate. LLM 에이전트는 이 구조만 종합.
0. 한 줄 결론¶
5개 영역(VSA / Auction·Profile / Order Flow / Wyckoff / 패턴·base-rate)을 조사한 결과, 4개 분석 모듈이 사실 같은 현상의 다른 렌즈였고, 전부 정규화(z-score·백분위·비율) 로 수렴했다. 정규화는 우연이 아니라 강제 결론 — look-ahead 방어와 종목 간 비교를 동시에 푼다. 그리고 신뢰할 base rate는 외부에 거의 없다 — 자체 측정이 필수.
1. 핵심 발견 (영역 횡단)¶
CF1. 정규화 = look-ahead 방어 + 구조화를 동시에 해결¶
5개 에이전트가 독립적으로 같은 결론: 절대 가격·절대 수급금액을 쓰면 안 된다. VSA는 자기 이동평균 대비 비율(vol_ratio), Profile은 ATR 정규화(poc_pct), Order Flow는 z-score(ofi_zscore), 패턴은 백분위(range_pos_52w). 절대값 = ① 종목 식별 → look-ahead 누출(SK하이닉스 1,940,000원), ② 종목 간 비교 불가. 정규화 구조화 사실 = look-ahead 방어인 동시에 에이전트 게으름 제한 발판 — Round 2 결론과 동일 설계로 다시 수렴.
CF2. 신뢰할 base rate는 외부에 없다 — 자체 측정 필수¶
- VSA(q1): "VSA 신호 win rate를 측정한 공개 학술 연구 없음. 재량적 방법론."
- Wyckoff(q4): "딥러닝 정확도 99.98%는 합성 데이터 분류 정확도 — 실제 ACC→markup 전환 확률이 아님. 실전 base rate 공개 출처 없음."
- 패턴(q5): Bulkowski만 패턴 base rate 측정 방법론(failure rate, avg rise, perf rank)을 제공. 수치 자체는 미국 일봉 기준. → 한국 종목 코퍼스로 각 신호·패턴·조합의 D+N base rate를 직접 측정해야 한다. 이게 앞서 합의한 base-rate 엔진의 실체.
CF3. 4개 모듈은 같은 현상의 다른 렌즈 — '불균형↔균형'으로 통합된다¶
- VSA effort vs result(거래량 대비 가격진전)
- Auction 불균형(vertical) ↔ 균형(horizontal)
- Order Flow absorption(흡수) ↔ exhaustion(소진)
- Wyckoff 매집(accumulation) ↔ 분배(distribution)
넷 다 "큰 거래량이 가격을 움직이는가, 흡수되는가"를 본다. effort↑·result↓ = absorption = 불균형 해소 = 매집/분배. PM이 말한 "불균형 → 균형 이동"이 정확히 이 공통 축이다. → 4개를 따로 두지 말고 하나의 불균형 상태기(state machine)로 통합.
CF4. 틱데이터 없이 OHLCV로 공격성 근사 가능¶
q3: 체결·호가 데이터가 없어도 — BVC(Bulk Volume Classification: 표준화 수익률을 t분포 CDF에 넣어 매수비율 추정, 틱 불필요, 시간바 정확도 ~80%), close location value (C−L)/(H−L), 꼬리 비율(아랫꼬리=받침 매수 흡수)로 일/분봉에서 OFI·delta를 근사. 한국 일봉/분봉만으로도 "받침 vs 추격" 프록시 산출 가능.
CF5. 조건부 확률은 시장 레짐을 조건축에 반드시 포함¶
q5: base rate는 시장 국면(평온/위기, VIX, 최근 수익률)에 따라 크게 변동. "이 패턴 → 상승 68%"는 레짐을 안 나누면 거짓. regime-split base rate 필수.
CF6. feature/label 시간경계를 스키마에 못박는다¶
q5: ultimate high 같은 사후 라벨은 학습 라벨로만, feature로 쓰면 look-ahead. 모든 feature는 시점 t 이전 데이터로만 산출. 백테스트와 라이브 추론이 동일 함수를 공유하도록 스키마에 시간경계 명시.
2. 통합 분석레이어 출력 스키마 (제안)¶
q5 권고대로 3계층. 모든 값 시점 t 이전 데이터로만 산출.
Layer A — 정규화 사실값 (절대값 0건)¶
price_level:
range_pos_52w # 52주 range 내 위치 0~100
high_proximity # 현재가 / 52주 고가
price_zscore_20d # (가격 - MA20) / σ
drawdown_60d # 60일 고점 대비 낙폭
volume_flow:
rvol_20d # 거래량 / 20일 평균
vol_zscore # 거래량 z-score
cmf_20d # Chaikin Money Flow −1~+1
obv_slope_z # OBV 기울기 z-score
foreign_flow_z # 외인 순매수(거래대금 대비) z-score ※한국 추가
inst_flow_z # 기관 순매수 z-score ※한국 추가
flow_relative_pct # 수급 절대량의 거래대금 대비 백분위
vsa (per-bar, 최근 N봉):
vol_ratio, spread_ratio, close_pos(0~1)
err_zscore # effort-result 비율 z-score
absorption_flag
order_flow:
approx_delta_bvc # BVC 근사 델타 (틱 부재 시)
close_loc_value, lower_wick_ratio, upper_wick_ratio
cvd_zscore, cvd_price_divergence(±1/0)
ofi_zscore_20d # 호가 데이터 있을 때
Layer B — 검출 신호·패턴·국면 + 각각의 base rate¶
vsa_signal: enum(8신호 + upthrust/spring) + strength(2~4) + signal_base_rate
auction_state: balance | imbalance_up | imbalance_down + state_age_bars
poc_pct, vah_pct, val_pct, va_width_atr, poc_migration_5d
hvn/lvn: in_lvn, nearest_lvn_dist_atr
rotation_factor_20, va_overlap_ratio_1d, day_type, balance_score(0~1)
wyckoff:
phase: ACC | MARKUP | DIST | MARKDOWN + phase_confidence
last_event: SC|AR|ST|Spring|SOS|LPS|UTAD|SOW... + events[]
laws: supply_demand_balance, cause_count(P&F), effort_result_divergence
chart_pattern: pattern_id + bulkowski {fail_rate, avg_rise, perf_rank}
Layer C — 조건 조합 조건부 확률 (레짐별, 샘플수 명시)¶
conditional_base_rate:
condition_hash # 사실 조합 식별자
regime # 레짐 라벨 (조건축 필수 — CF5)
n_historical_samples
base_rate_up_DN # P(D+N 상승 | 조건, 레짐)
return_distribution
confidence_flag # 샘플 부족 시 low
→ 에이전트 입력 = Layer A+B+C 스냅샷. 에이전트는 이 정규화 구조만 종합해 verdict 산출, raw 접근 없음. 동일 스냅샷이 백테스트 입력이자 라이브 추론 입력 (CF6).
3. 영역별 핵심 (구현 수치)¶
3-1. VSA (q1)¶
- 원시 3지표:
spread=H−L,close_position=(C−L)/spread,volume_ratio=vol/SMA(vol,7). - 임계값(PyQuantLab, BTC 캘리브레이션 — 한국 재보정 필요): vol 2.0/1.2/0.5, spread 1.2/0.83, close 0.7/0.3.
- 8신호(거래량×스프레드×추세×봉방향×종가위치 조합) + strength 2~4. + upthrust/spring(prior_high·support 돌파 boolean).
- effort vs result:
err = |ΔC| / (vol_ratio × ATR_norm), z-score 음극단 = absorption. - 출처: PyQuantLab VSA, Tom Williams 방법론
3-2. Auction Market Theory + Profile (q2)¶
- AMT:
equilibrium → trend → new equilibrium순환. 최상위 라벨auction_state. - Market Profile: POC(최다 거래 가격), Value Area(TPO 70% = ±1σ), VAH/VAL. 산출법 — POC 시작 → 위·아래 2칸 비교 큰 쪽 확장 → 70% 도달까지.
- Volume Profile: HVN(거래량 봉우리=균형/정체), LVN(골짜기=불균형/가속). 가격은 LVN을 빠르게 통과, HVN에서 머문다 — 불균형↔균형의 직접 관측.
- Rotation Factor: 봉별 고저 갱신 ±1씩 → N봉 합산. 0 근처=균형, 절대값 큼=불균형.
- 출처: Market Profile Wikipedia, Value Area 산출, Volume Profile HVN/LVN
3-3. Order Flow Imbalance (q3)¶
- OFI:
Σ(주문량×방향),ΔP=β·OFI. Multi-Level OFI는 가격분산 65~87% 설명(arXiv:1907.06230). - Delta/CVD: Ask체결−Bid체결 누적. CVD-가격 다이버전스 = 받침 vs 추격 핵심 신호.
- Absorption:
volume_zscore × (1−|price_range_norm|). Exhaustion: 델타 부호 유지 + 거래량 단조감소. - Aggressor 추정: Tick rule(~91%), Lee-Ready(~93%), BVC(틱 불필요, ~80%).
- 출처: Multi-Level OFI arXiv:1907.06230, BVC, Absorption/Exhaustion
3-4. Wyckoff 매집-마크업-분배 (q4)¶
- 4국면 ACC/MARKUP/DIST/MARKDOWN. 이벤트: SC·AR·ST·Spring·SOS·LPS(매집) / BC·UT·UTAD·SOW·LPSY(분배).
- 정량 임계(TradingView Wyckoff Phase Classifier): climax 거래량 MA×2.0(대형)/1.5(중소형), test 거래량 ≤MA×0.7, 돌파 tolerance 0.5~2.0%, 최소 range 8%(대형)/15%(저유동).
- 3법칙: 수요공급 / 원인과결과(P&F count) / 노력과결과(거래량-가격 발산).
- A/D Line:
MFM=((C−L)−(H−C))/(H−L),ADL+=MFM×Vol. 가격↑ ADL↓ = 분배 의심. - 출처: StockCharts Wyckoff, Wyckoff Phase Classifier
3-5. 패턴 통계 + base rate (q5)¶
- Bulkowski: failure rate(돌파 후 5%↑ 못 가는 비율), avg rise(돌파→ultimate high), perf rank(1~100).
- 가격 정규화:
range_pos_52w,price_pctile_252d,price_zscore_20d. - 거래량 정규화: RVOL(현재/평균), CMF(−1~+1), CVD z-score.
- 조건부 확률: 조건 만족 시점 전수 추출 → D+N 수익률 분포 →
P(상승|조건,레짐). 레짐을 조건축에 필수 포함. - 출처: Bulkowski 방법론, CMF, 조건부확률 backtesting
4. 설계 시사점 (분석레이어)¶
| # | 시사점 |
|---|---|
| S1 | 모든 출력 필드는 정규화값(z-score·백분위·비율·ATR정규화). 절대 가격·절대 금액 금지 — look-ahead 방어 + 종목간 비교 + 게으름 제한을 한 설계로 |
| S2 | VSA·Auction·OrderFlow·Wyckoff를 따로 두지 말고 단일 '불균형 상태기'로 통합 (CF3) — 넷 다 effort↔absorption의 다른 렌즈 |
| S3 | base rate는 외부 신뢰 불가 → 한국 종목 코퍼스 자체 측정. VSA 신호별·Wyckoff 국면전환별·패턴조합별 D+N 상승률 측정 = base-rate 엔진 |
| S4 | 틱데이터 없어도 BVC·close location·꼬리비율로 공격성 근사 — 한국 일/분봉으로 시작 가능 |
| S5 | 조건부 base rate는 레짐별 분리 산출 (CF5) |
| S6 | feature는 시점 t 이전만. 사후 라벨(ultimate high)은 학습 라벨 전용. 백테스트=라이브 동일 함수 (CF6) |
| S7 | 모든 임계값(VSA 2.0/1.2, Wyckoff climax 배수 등)은 미국·BTC 캘리브레이션 → 한국 시총·거래대금 tier별 재보정 필수 |
5. 다음 단계 (주말 작업 입력)¶
본 Round 3는 발굴 시스템 '분석기법 레이어'의 구조화 방법론을 확정했다. 주말 작업 시: 1. §2 통합 스키마(Layer A/B/C)를 한국 데이터 가용성에 맞춰 확정 — 어느 필드가 키움 REST/기존 수집기로 즉시 산출 가능한지 매핑. 2. base-rate 엔진 설계 — 과거 N년 한국 일봉·수급으로 신호·국면·패턴별 D+N 상승률 측정 (레짐 분리, look-ahead 차단). 3. 임계값 한국 재보정 (S7). 4. 첫 백테스트: "큰 상승 다음날" — 본 스키마로 사례를 구조화 → base rate 측정 → 엄격 포맷으로 에이전트 verdict → 적중률·헷지율 측정.
부록: 전체 출처¶
VSA: PyQuantLab · volumespreadanalysis.com · Master the Markets · ATAS Upthrust/Shakeout · VSA+ML Auction/Profile: Topstep AMT · Tradingriot AMT · marketprofile.info · mypivots VA 산출 · Market Profile Wikipedia · QuantVPS Volume Profile · ATAS rotation factor Order Flow: OFI EmergentMind · Multi-Level OFI 1907.06230 · CVD TradingView · Absorption/Exhaustion anomiq · BVC · Trade classification · VPIN Wyckoff: StockCharts Wyckoff · StockCharts A/D Line · Quantum Trading 3법칙 · Wyckoff Phase Classifier 패턴/base-rate: Bulkowski 방법론 · StockCharts CMF · TradingSim RVOL · 조건부확률 연구 · conditional coverage