MarketTrace
M1포지셔닝M2풋프린트M3청산M4Funding
방법론 · v1.0.0 · 업데이트 2026-05-12

크로스 익스체인지 청산

청산 테이프가 어떻게 소싱·정규화·사이징·해석되는가: WS 피드, 스키마, 사이드 의미론, 적응 버킷팅, 클러스터 탐지, 신선도 규칙.

실시간 위젯 보기: /perpetuals/liquidations.

데이터 출처

3 거래소의 WebSocket 피드, 자산별로 정규화된 Redis 스트림. 모든 실행된 청산 출력이 테이프에 들어옵니다 — open interest로 청산 압력을 추정하지 않고, 손절 존을 추론하지 않으며, 출력을 합성하지 않습니다.

각 데몬이 이벤트를 자산별 Redis Stream prod:liq:<asset>:events에 기록. 상한 MAXLEN ≈ 10 000(약 4시간 캐스케이드 밀집 데이터, 한산한 날엔 24시간 전체). 백엔드는 REST와 WebSocket 두 표면 모두 단일 자산 스트림에서 읽음. 별도 pubsub 채널 없음 — 스트림 자체가 브로드캐스트 표면.

이벤트 스키마

이벤트별 필드는 세 출처에서 동일. 두 타임스탬프는 의도적으로 구분:

사이드 의미론

청산 스트림은 거래소의 청산 주문 관점에서 사이드를 인코딩하는데, 트레이더의 포지션과 반대. 우리는 실패한 포지션 방향으로 정규화:

테이프 색상은 이를 따름: 빨강 점 = 롱이 날아감(가격 하락), 초록 점 = 숏이 날아감(가격 상승).

크기 스케일링

viewBox-px의 점 반지름은 clamp(√(usd / $10 000) × 2, 4, 22). sqrt가 면적별 선형 스케일링을 억제하여 $1 M 이벤트가 $100 K 이벤트의 약 ~3.16배로 보이게 함 — 10배가 아님 — 그리고 단일 캐스케이드 출력이 주변 모든 것을 가리지 않음. 하한 clamp는 $10 K 미만의 작은 이벤트에 가독 hit 영역 유지. 상한 clamp는 가장 큰 캐스케이드가 패널을 벗어나지 않게 함.

r = clamp(sqrt(usd / 10_000) * 2, 4, 22)   // viewBox-px

# 참고 값(크기 범례)
$10 K   → r ≈ 4
$100 K  → r ≈ 6.3
$1 M    → r = 20
$10 M+  → r = 22 (clamped)

적응 렌더링

원시 산점도는 ~15분 체제까지만 스케일링됨. 그 이상에서는 1초 내 수백 개의 작은 출력이 균일한 빛으로 뭉쳐 캐스케이드 구조가 사라짐. 우리는 윈도우에 따라 렌더 모드를 전환:

Hit 테스트, top-N 주석, 툴팁은 렌더링된(버킷화된) 이벤트에 대해 실행. 클러스터 탐지, 누적 패널, 속도 서브 패널은 원시 이벤트를 스캔 — 이 신호는 호버 대상이 아닌 이벤트당 밀도와 사이드 흐름에 관한 것이기 때문.

클러스터 탐지

가격 클러스터 대역은 활성 윈도우의 원시 이벤트에서 탐지:

reference_price = 현재 mid (최신 이벤트 가격)
bin_width       = reference_price * 0.001    // 0.1 %
이벤트를 round((price - reference) / bin_width)로 빈

각 빈에 대해:
  if Σ usd ≥ 윈도우 총액의 15 % AND distinct events ≥ 3:
    클러스터로 표시
    cluster_price = 빈 가격의 거래량 가중 평균

Σ usd로 상위 3개 클러스터 보유

각 클러스터는 점선 수평선과 배지 $X cluster · N× @ price를 받음. 거래량 가중 평균(빈의 명목 중간점이 아닌)이 선을 달러가 실제로 집중된 깊이에 위치시킴.

Top-N 인라인 주석

윈도우의 가장 큰 점 중 최대 3개가 인라인 $amount · time · venue|N× 라벨을 받아 시선이 즉시 가장 큰 캐스케이드로 향함. $50 K 하한이 잡티에 라벨링하는 것을 방지. 라벨 앵커는 점이 차트 왼쪽 절반인지 오른쪽 절반인지에 따라 뒤집혀 텍스트가 오른쪽 축이나 왼쪽 가장자리를 넘지 않음.

청산 속도 서브 패널

누적 패널 아래에 미러된 바 차트가 시간 버킷당 Σ usd를 사이드별로 분할 표시: 숏은 베이스라인 위로(초록), 롱은 아래로(빨강). 버킷 크기는 산점도의 적응 임계값을 따름(≤ 15m에서 30s, 1–4h에서 1min, 24h에서 5min)으로 막대가 위의 점과 시각적으로 정렬됨.

피드 상태

자산-거래소별 상태 해시 prod:liq:status:<asset>:<exchange>가 5초마다 새로고침, TTL 60초. 백엔드가 이를 세 상태로 변환:

상태 툴팁의 지연 p50 / p99 숫자는 데몬의 producer_ts_ms − ts_ms 200 이벤트 롤링 링 버퍼에서 샘플링됨.

빈 시간 대역

윈도우의 청산이 전혀 없는 연속 구간에 미묘한 배경색 부여. 그렇지 않으면 24시간 뷰가 6시간 로컬 데이터만 가질 때 “그 기간에 캐스케이드 없음”이 아닌 깨진 렌더러처럼 읽힘. 임계값 gap ≥ 윈도우의 5 % — 24시간 뷰의 조용한 30분을 표시하기에 충분히 짧고, 조용한 초들 사이에 차트를 마이크로 대역으로 줄무늬로 그리지 않기에 충분히 큼.

캐싱

한계

버전

방법론 버전 v1.0.0 · 업데이트 2026-05-12. 중요 변경(새 거래소, 공식 조정, 임계값 변경)은 버전을 올리고 위의 구조화 데이터의 dateModified를 갱신.