콘텐츠로 이동

차트 발굴 — Layer A/B/C 한국 데이터 매핑

작성: 2026-05-23 | 상위 Topic: docs/topics/topic_system_redesign.md 근거 리서치: docs/research/20260522_chart_flow_structuring_research.md (R3) 소관: R3 §5 다음 단계 (1) "Layer A/B/C 통합 스키마를 한국 데이터 가용성에 맞춰 확정 — 어느 필드가 키움 REST/기존 수집기로 즉시 산출 가능한지 매핑."


0. 이 문서의 지위

R3 §2가 정의한 통합 스키마(Layer A 정규화 사실값 / B 검출 신호·국면 / C 조건부 확률)의 각 필드를 우리 도구·데이터에 1:1로 매핑한 표. 이 매핑이 확정돼야 차트 발굴기 v0가 어디부터 시작할지가 결정된다.

가용성 범례: ✅ 즉시 산출 / ⚠️ 변형·재보정 필요 / ❌ 부재 버전 범례: v0 = 첫 가동(차트 발굴기) / v1 = 신호·국면 확장 / v2 = base-rate 엔진 결합

원칙 (R3 S1·S6·S7 인용): - 모든 필드는 정규화값(z-score·백분위·비율·ATR 정규화). 절대값 금지. - feature는 시점 t 이전 데이터만. 사후 라벨(ultimate high)은 학습 라벨 전용. - 미국·BTC 캘리브레이션 임계값은 한국 시총·거래대금 tier별 재보정 필수.


1. Layer A — 정규화 사실값 (절대값 0건)

1-A. price_level

필드 R3 정의 산출 도구 한국 가용성 우리 현황 v0
range_pos_52w 52주 range 내 위치 0~100 FDR 일봉 252일 ✅ 즉시 수집 가능 Y
high_proximity 현재가 / 52주 고가 FDR 일봉 252일 ✅ 즉시 수집 가능 Y
price_zscore_20d (가격 − MA20) / σ FDR 일봉 20일 ✅ 즉시 수집 가능 Y
drawdown_60d 60일 고점 대비 낙폭 FDR 일봉 60일 ✅ 즉시 수집 가능 Y

전부 일봉만으로 산출. v0 핵심 4필드.

1-B. volume_flow

필드 R3 정의 산출 도구 한국 가용성 우리 현황 v0
rvol_20d 거래량 / 20일 평균 FDR 일봉 ✅ 즉시 수집 가능 Y
vol_zscore 거래량 z-score (log 권장) FDR 일봉 ✅ 즉시 수집 가능 Y
cmf_20d Chaikin Money Flow −1~+1 FDR 일봉(OHLCV) ✅ 즉시 수집 가능 Y
obv_slope_z OBV 기울기 z-score FDR 일봉 ✅ 즉시 수집 가능 Y
foreign_flow_z 외인 순매수(거래대금 대비) z pykrx / flow_series/{code}.json 보유(351종) Y
inst_flow_z 기관 순매수 z pykrx / flow_series 보유 Y
flow_relative_pct 수급 절대량의 거래대금 대비 백분위 flow_series + 거래대금 보유, 신규 산출 Y

외인·기관 수급이 한국 강점. v0에 전부 포함.

1-C. vsa (per-bar, 최근 N봉)

필드 R3 정의 산출 도구 한국 가용성 v0
vol_ratio vol / SMA(vol, 7) FDR 일봉 ✅ 즉시 Y
spread_ratio (H−L) / SMA(H−L, n) FDR 일봉 ✅ 즉시 Y
close_pos (C−L)/(H−L) ∈ [0,1] FDR 일봉 ✅ 즉시 Y
err_zscore |ΔC| / (vol_ratio × ATR_norm), z-score 음극단=absorption FDR 일봉 ✅ 즉시 Y
absorption_flag err_zscore + close_pos 조건부 위 조합 Y

VSA 원시지표는 OHLCV만으로 충분. 임계값(R3 §3-1: vol 2.0/1.2/0.5 등 BTC 캘리브레이션)은 한국 재보정 필요 — v0는 임계 없이 만 산출, 임계 적용은 Layer B에서.

1-D. order_flow (틱 부재 — 분봉 BVC 근사)

원칙 정정: order_flow의 본래 그릇은 분봉. 일봉 BVC는 통계 약함(샘플 1/일). 키움 REST get_minute_chart(5분봉, 장중 ~78봉/일)로 분봉 BVC를 산출하는 게 R3 CF4 의도. 일봉 산출은 fallback.

필드 R3 정의 산출 도구 한국 가용성 v0
approx_delta_bvc 표준화수익률 t분포 CDF → 매수비율 (정확도 ~80%, R3 CF4) 분봉 권장 (키움 5분봉, 일봉 fallback) Y (분봉)
lower_wick_ratio (min(O,C)−L)/(H−L), 봉별 산출 후 일별 통계 분봉 또는 일봉 Y
upper_wick_ratio (H−max(O,C))/(H−L) 분봉 또는 일봉 Y
cvd_zscore 분봉 BVC delta 누적 → z-score 분봉 BVC 누적 Y (분봉)
cvd_price_divergence CVD−가격 발산 ±1/0 위 + 가격 시계열 Y
ofi_zscore_20d Multi-Level OFI (호가 quote size 기반, R3 §3-3 arXiv:1907.06230) 호가 누적 데이터 필요 — 분봉도 불가 v2 보류

분봉 BVC는 v0 포함. ofi_zscore_20d만 호가 인프라 부재로 v2.

분봉 수집 — 단계별로 완전히 다름:

단계 유니버스 분봉 사용 목적
개발/연구 (base-rate 엔진 구축, 패턴 발굴, 임계 한국 재보정) KOSPI+KOSDAQ 전 종목 (~2,500) × N년 광범위 수집 — 통계 표본 최대화 (적을수록 신뢰도↓) 신호·국면별 D+N 분포 측정, 패턴 발굴
실전 운영 (일별 후보 추출) funnel 압축 후 N개 (예: 50) Stage 2 비싼 계산에만 적용 빠른 일일 스캔

운영 funnel (R4 CF1 — "싼 필터 먼저 + 무거운 계산 나중"):

  • Stage 1 (싼, 전 universe): 일봉 Layer A 12필드 → 횡단면 z-score → 상위 N개 (예: 500 → 50)
  • Stage 2 (비싼, 상위 N만): 그 N개에만 분봉 호출 → order_flow 5필드 + 분봉 정밀 VSA → 최종 후보
  • 분봉 호출 비용: N=50 × 1 API call ≈ 30초. 일평균 운영 부담 미미.

개발 단계의 분봉 수집은 별도 작업 (코퍼스 구축). 운영 단계의 funnel과 혼동 금지.


2. Layer B — 검출 신호·패턴·국면 + base rate

2-A. vsa_signal

필드 R3 정의 산출 한국 가용성 v0
vsa_signal 8신호 + upthrust/spring (거래량×스프레드×추세×봉방향×종가위치 조합) + strength(2~4) Layer A 1-C 위 룰엔진 ⚠️ 한국 임계 재보정 필요 (S7) v1
signal_base_rate 신호별 D+N 상승률 base-rate 엔진 ❌ 외부 미신뢰 (CF2) v2

v0는 Layer A 값만 산출, 신호 검출(임계 비교)은 v1. 한국 시총·거래대금 tier별 재보정 후 적용.

2-B. auction_state (Market/Volume Profile)

필드 R3 정의 산출 도구 한국 가용성 v0
auction_state balance / imbalance_up / imbalance_down + state_age_bars 분봉 또는 일봉 집계 ⚠️ 분봉 필요 v1
poc_pct, vah_pct, val_pct POC(최다 거래 가격), VAH/VAL(TPO 70%) 키움 REST 분봉(get_minute_chart) ⚠️ 분봉 누적 수집 신규 v1
va_width_atr VA 폭의 ATR 정규화 위 + ATR ⚠️ v1
poc_migration_5d 5일 POC 이동 5일치 분봉 누적 ⚠️ v1
hvn/lvn 거래량 봉우리/골짜기 Volume Profile 함수 ⚠️ v1
nearest_lvn_dist_atr 현재가에서 가장 가까운 LVN까지 ATR 거리 위 + ATR ⚠️ v1
rotation_factor_20 봉별 고저 갱신 ±1씩, 20봉 합산 FDR 일봉 ✅ 즉시 (일봉으로 가능) Y(일봉 한정)
va_overlap_ratio_1d 전일 VA와 당일 VA 겹침 비율 분봉 필요 ⚠️ v1
day_type Trend / Normal / Neutral / Double Distribution 분봉 분석 ⚠️ v1
balance_score 0~1 위 종합 ⚠️ v1

Profile류는 분봉 수집·집계 인프라가 필요해 v1 작업. 일봉만으로 가능한 rotation_factor_20만 v0에 추가.

2-C. wyckoff (4국면)

필드 R3 정의 산출 도구 한국 가용성 v0
phase ACC / MARKUP / DIST / MARKDOWN + confidence Wyckoff 룰엔진 (R3 §3-4) ⚠️ 임계 한국 재보정 필요 (climax 거래량 MA×2.0/×1.5, range 8%/15%) v1
last_event, events[] SC·AR·ST·Spring·SOS·LPS·UTAD·SOW… 룰엔진 + 가격·거래량 이벤트 ⚠️ v1
supply_demand_balance 3법칙 #1 거래량-가격 비율 ⚠️ v1
cause_count P&F count (3법칙 #2) P&F 차트 ⚠️ v2
effort_result_divergence 거래량-가격 발산 (3법칙 #3) err_zscore 시계열 ✅ Layer A로 부분 산출 v1
ad_line MFM = ((C−L)−(H−C))/(H−L), ADL+=MFM×Vol FDR 일봉 ✅ 즉시 Y

→ Wyckoff 룰엔진 전체는 v1. A/D Line만 v0에 추가(일봉 OHLCV로 산출, R3 §3-4 정의).

2-D. chart_pattern (Bulkowski)

필드 R3 정의 산출 한국 가용성 v0
pattern_id Bulkowski 60+ 패턴 매칭 패턴 인식 룰엔진 ⚠️ 구현 부담 v2
bulkowski.fail_rate, avg_rise, perf_rank 미국 일봉 기준 수치 base-rate 엔진 자체측정 외부 신뢰 불가 (CF2). 한국 코퍼스로 자체 측정 필요 v2

→ Bulkowski는 base-rate 엔진(v2)과 결합. v0·v1 보류.


3. Layer C — 조건 조합 조건부 확률

필드 R3 정의 산출 도구 한국 가용성 v0
condition_hash 사실 조합 식별자 Layer A+B 조합 해시 base-rate 엔진 후 v2
regime 레짐 라벨 (조건축 필수 — CF5) macro_series + risk_on_off ⚠️ 시점 t 빈티지 필요 v2
n_historical_samples 조건 만족 사례 수 한국 코퍼스 백테스트 base-rate 엔진 산출 v2
base_rate_up_DN P(D+N 상승 | 조건, 레짐) base-rate 엔진 산출 v2
return_distribution 수익률 분포 base-rate 엔진 산출 v2
confidence_flag 샘플 부족 시 low base-rate 엔진 산출 v2

Layer C 전체 = base-rate 엔진 산출물. 첫 백테스트("큰 상승 다음날", R3 §5(4))가 그 엔진의 첫 가동.


4. v0 채택 필드 (차트 발굴기 첫 시제품)

위 매핑에서 v0 = Y 표기된 필드만 발췌. 전부 일봉 OHLCV + 외인·기관 수급(보유)으로 산출 가능, 추가 수집 0.

Layer A — 정규화 사실값 (v0 17필드)
  price_level (4)    : range_pos_52w, high_proximity, price_zscore_20d, drawdown_60d
  volume_flow (7)    : rvol_20d, vol_zscore, cmf_20d, obv_slope_z,
                       foreign_flow_z, inst_flow_z, flow_relative_pct
  vsa (5)            : vol_ratio, spread_ratio, close_pos, err_zscore, absorption_flag
  order_flow (5, 분봉): approx_delta_bvc(분봉 BVC), lower_wick_ratio, upper_wick_ratio,
                       cvd_zscore(분봉 누적), cvd_price_divergence
  ※ ofi_zscore_20d 는 호가 quote-size 데이터 필요 → v2 보류

Layer B — 신호·국면 (v0 부분, 2필드)
  rotation_factor_20 : 일봉으로 산출 가능한 Profile 지표
  ad_line            : A/D Line (Wyckoff 3법칙 부분)

Layer C — 조건부 확률
  v0 미포함 (base-rate 엔진 = v2)

v0 차트 발굴기 = 종목별 Layer A 17필드 + Layer B 2필드 산출 → 횡단면 정규화 → 합성 점수 → 상위 N 후보 + fired_signals 태그.


5. v1·v2 로드맵

v1 — Layer B 확장

  • VSA 8신호 + upthrust/spring 룰엔진 (R3 §3-1 임계 한국 재보정 후 적용)
  • Wyckoff phase·event 룰엔진 (R3 §3-4 임계 한국 재보정)
  • Market Profile (분봉 수집 인프라 신규 — 키움 REST get_minute_chart 누적)
  • CVD-가격 발산 산출

v2 — Layer C base-rate 엔진

  • 한국 종목 일봉·수급 코퍼스 N년 백테스트
  • 신호·국면·패턴별 D+N 상승률 측정 (look-ahead 차단)
  • 레짐 분리 (R3 CF5 필수) — risk_on_off 시점 t 빈티지 산출 인프라
  • Bulkowski 패턴 한국판 fail_rate / avg_rise / perf_rank 측정
  • 첫 백테스트: "큰 상승 다음날" (R3 §5(4))

6. 다음 단계

  1. 본 매핑 PM 확정
  2. v0 차트 발굴기 코드 — scripts/discovery/chart_scan.py
  3. 입력: 거래대금 상위 N 종목 코드 리스트 + 기준일
  4. 처리: FDR 일봉 252일 + flow_series → Layer A 17 + Layer B 2 산출 → 횡단면 z-score → 합성 점수
  5. 출력: data/discovery/chart_candidates/{date}.json + 1페이지 md
  6. 결과 보고 → v1 우선순위 결정 (VSA 신호? Wyckoff? Profile?)