Pro+ 7일 무료 · 카드 불필요무료 체험 시작하기

Whale wall

실시간 오더북에서 대형 대기 주문을 탐지하는 방식과 임계값의 의미입니다.

무엇이 whale wall로 인정되는가

whale wall(고래 벽)은 거래소 오더북에서 대기 수량이 설정된 최솟값 이상인 가격 레벨 하나를 뜻합니다. 추적기는 실시간 호가창을 읽어 최솟값을 충족하는 모든 매수·매도 레벨을 보관하고, 그 레벨을 하나의 추적 대상으로 삼아 시간에 따라 따라갑니다. 최솟값은 전역 값 하나가 아니라 거래 페어별, 거래소별로 저장되며, 저장되어 있고 활성화된 설정을 가진 페어만 추적됩니다. wall이 사라졌다가 5분 안에 같은 가격에 비슷한 수량으로 다시 나타나면, 새 주문이 아니라 같은 주문으로 취급합니다.

추적기 안에서 wall이 겪는 일생

스트림은 다섯 가지 이벤트 이름을 전달합니다. wall_appeared, wall_updated, wall_cancelled, wall_filled, wall_partialfill입니다. appeared는 레벨이 처음으로 최솟값을 충족한 순간을 표시하고, updated는 수량이 바뀔 때마다 발생합니다. 사라진 레벨이 곧바로 마감되지는 않습니다. 최대 5분 동안 대기 상태로 옮겨지며, 같은 가격이 추적기가 같은 주문으로 0.70 이상 점수를 매기는 수량으로 돌아오면 다시 병합되고 공백 횟수가 하나 늘어납니다. 5분이 지나도 돌아오지 않을 때에만 추적기가 마감 이벤트 하나를 내보냅니다. 보드에서는 cancelled와 filled가 행을 제거하고, updated와 부분 체결은 행을 남긴 채 숫자만 다시 씁니다.

마감 이벤트는 크기 필터링과 다르게 취급됩니다. 서버는 최솟값보다 작은 appeared와 updated 이벤트를 채널 밖으로 내보내기 전에 버리지만, cancelled와 filled는 언제나 전달합니다. 클라이언트가 이전 snapshot에서 받은 그 wall을 아직 들고 있을 수 있고, 그것을 지워야 하기 때문입니다. 보드도 같은 규칙을 따릅니다. 임계값 미만의 갱신은 무시하지만 제거는 결코 무시하지 않습니다. 최솟값을 올린 직후, 새 wall이 들어오지도 않았는데 보드에서 wall이 사라지는 이유가 바로 이것입니다.

새 레벨최소 기준 충족추적 중보드에 표시됨대기사라짐, 최대 5분wall_appeared레벨 사라짐wall_updated돌아와 일치90% 체결체결90% 이상20% 체결부분 체결20%~89%체결 근거 없음취소20% 미만순간적 존속spoofing500ms 미만 존속
추적기는 사라진 레벨을 5분 동안 대기 상태로 붙잡아 둡니다. 같은 가격이 같은 주문으로 볼 만한 수량, 즉 0.70 이상의 일치 점수로 돌아오면 이력과 공백 횟수를 그대로 유지한 채 보드로 복귀합니다. 그렇지 않으면 누적 체결 비율에 따라 마감 분류가 정확히 하나 발생합니다. 여기에는 두 가지 예외가 있습니다. 가격이 뚫고 지나간 wall은 수량 감소 기록이 없어도 체결로 기록되고, 500밀리초 미만만 존재했고 체결이 거의 없었으며 가격이 통과하지도 않은 wall은 spoofing(허수 주문)으로 기록됩니다.

추적기가 체결, 부분 체결, 취소를 판단하는 방법

추적 중인 레벨이 줄어들 때마다 추적기는 거의 같은 시점에 그 가격 또는 그 부근에서 이루어진 체결 내역을 찾습니다. 일치한 체결량이 줄어든 크기의 대부분을 차지하면 체결로 기록합니다. 일부만 차지하면 확인된 체결량만 인정하고, 근거가 약한 경우에는 그마저도 일부만 인정합니다. 체결 근거가 전혀 없는 감소분은 취소로 기록합니다. 검색 구간은 갱신 시점을 기준으로 이후보다 이전 쪽이 더 넓습니다. 체결은 그것을 반영하는 호가 깊이 갱신보다 대개 먼저 도착하기 때문입니다.

이 금액들은 wall이 살아 있는 동안 체결 합계와 취소 합계로 누적됩니다. wall이 최종적으로 마감될 때 누적 체결 비율이 마감 이벤트를 결정합니다. 90% 이상이면 체결, 20% 이상이면 부분 체결, 그보다 낮으면 취소입니다. 이 계산을 뒤집는 특수한 경우가 두 가지 있습니다. 기록된 감소 없이 한 틱 만에 사라졌지만 시장 가격이 그 레벨을 뚫고 지나갔다면 체결로 기록합니다. 500밀리초 미만만 존재했고 체결이 거의 없었으며 가격이 통과하지도 않았다면 spoofing(허수 주문)으로 분류합니다.

다루는 거래소와 시장

네 곳을 다룹니다. Binance Futures, Binance Spot, Coinbase, Hyperliquid입니다. Binance Futures와 Hyperliquid는 선물로, Binance Spot과 Coinbase는 현물로 묶입니다. 오더북과 체결 데이터는 각 거래소의 공개 WebSocket 피드에서 직접 읽어옵니다. 커버리지가 거래소마다 똑같지는 않습니다. Coinbase와 Hyperliquid 추적기는 해당 거래소가 지원하는 명시적 페어 목록에 대해서만 돌아가고, 일부 페어는 Binance Spot에 상장되어 있지 않아 건너뜁니다. 인터페이스에서는 어떤 거래소를 표시할지 고를 수 있고, 헤더가 네 곳 중 몇 곳이 선택되어 있는지 보여줍니다.

직접 설정하는 항목

보드는 두 개의 크기 필터로 움직입니다. Min은 아예 표시할 최소 wall 크기를 정하고, Big은 그보다 크면 대형 주문으로 표시되는 기준을 정합니다. 둘 다 같은 사전 설정값(기초자산 5, 10, 25, 50, 100, 250 단위)과 직접 입력 값을 제공하며, 통화 전환 스위치 하나로 기초자산 단위와 미국 달러 중 어느 쪽으로도 표현할 수 있고 각 사전 설정값 옆에 달러 환산액이 표시됩니다. 기본값은 페어마다 다르므로 종목을 바꾸면 그 페어의 기본값이 적용됩니다. 환경설정은 브라우저에 보관되며, 로그인한 상태라면 계정에 동기화됩니다.

데이터가 얼마나 최신인가

보드는 현재 활성화된 wall들의 일회성 snapshot으로 시작한 뒤, server-sent event 스트림(선물용 하나, 현물용 하나)을 통해 스스로를 최신 상태로 유지합니다. 그래서 변경 사항이 새로고침 주기가 아니라 발생하는 대로 도착합니다. 크기 필터는 snapshot 요청 시 서버 측에서 적용됩니다. 서버는 15초마다 heartbeat를, 30초마다 keep-alive 주석을 보냅니다. 클라이언트는 이벤트 없이 30초가 지나면 데이터를 오래된 것으로 표시하고, heartbeat가 45초 동안 없으면 연결이 끊긴 것으로 간주하며, 지수 백오프로 최대 열 번까지 재연결을 시도합니다. snapshot은 연결할 때와 종목 또는 임계값을 바꿨을 때 불러오며, 자동 재연결은 스트림만 복구하고 마지막으로 본 순번부터 이어갑니다.

연결snapshot + 스트림0초15초30초45초서버가 보냄heartbeatkeep-alive 주석클라이언트의 판단데이터 오래됨 표시연결 끊김 판정지수 백오프, 최대 10회 시도재연결스트림만 — snapshot 없음
시간은 연결 시작이 아니라 마지막 이벤트 또는 마지막 heartbeat를 기준으로 잽니다. 의도적인 경로, 즉 페이지를 열거나 종목을 바꾸거나 임계값을 변경할 때만 snapshot을 받아옵니다. 스트림이 끊긴 뒤의 자동 재연결은 스트림만 다시 열 뿐인데, 서버가 이어받을 수 있는 이벤트 id를 보내지 않기 때문입니다. 백오프는 1초에서 시작해 두 배씩 늘어나 30초에서 멈추고, 열 번 시도한 뒤 중단됩니다. 그 뒤에는 연결이 오류로 보고되고 수동 재연결 버튼이 나타납니다.

보드가 snapshot과 스트림을 일치시키는 방법

스트림은 snapshot이 도착하기 전에 열리므로, 그대로 두면 곧 교체될 호가창에 이벤트가 적용되고 맙니다. 그래서 snapshot을 받아오는 동안 이벤트를 최대 1만 개까지 버퍼에 담아둡니다. 이 버퍼가 넘치면 오래된 절반이 버려지고 그 사실이 기록됩니다. snapshot이 도착하면 버퍼를 정렬해 재생하되, 순번이 snapshot보다 큰 이벤트만 남깁니다. 적용된 이벤트는 애니메이션 프레임 단위로 묶여 화면에 반영되며, appeared, filled, cancelled가 나머지보다 앞줄에 놓입니다.

  • 부하가 걸리면 서버는 우선순위가 낮은 트래픽만 덜어냅니다. appeared, filled, cancelled는 채널에서 절대 버려지지 않지만, updated 이벤트는 채널 버퍼가 800개를 넘어서면 버려질 수 있습니다.
  • 무언가를 버릴 때 서버는 조용히 넘어가지 않습니다. 버린 이벤트 수와 사유(부하 조절에 의한 폐기이거나, 뒤처진 클라이언트)를 담은 data_gap 이벤트를 보냅니다.
  • 크기 임계값을 바꾸면 새 필터로 스트림이 다시 열리고 새 snapshot을 받아옵니다. 임계값을 더 이상 넘지 못하는 wall은 로컬 맵에서 먼저 제거됩니다.
  • 종목을 바꾸면 새로운 것을 요청하기 전에 wall 맵과 순번, 지표가 모두 지워지므로 두 종목이 섞이는 일이 없습니다.

보드 읽는 법

같은 거래소의 wall들은 가격 bucket(가격 구간)으로 묶이며, bucket 크기는 가격대에 따라 자동으로 정해집니다. 각 행은 bucket 가격과 달러 또는 기초자산 단위의 총 크기, 대형 주문 임계값을 넘은 행에 붙는 표시, 그리고 최우선 호가 쪽으로 쌓아 올린 누적 크기를 보여주는 막대를 표시합니다. 행에 마우스를 올리면 거래소, 방향, 가격, 가치, 누적 가치, 현재가와의 거리(%), 수량, 그리고 bucket 안에서 가장 오래된 wall의 경과 시간을 담은 상세 스트립이 열립니다. 시장이 이미 통과해 지나간 wall은 체결되었을 가능성이 높다는 전제 아래 기본적으로 숨겨지며, 커맨드 팔레트의 동작으로 다시 켤 수 있습니다.

한 행의 정체: 가격 bucket

한 행은 주문 하나가 아닙니다. 무엇을 그리기 전에 추적 중인 모든 wall이 가격 격자 위로 반올림되고, 같은 거래소·같은 방향에서 같은 눈금에 떨어진 wall들은 한 행으로 합쳐집니다. 눈금 크기는 가격 자체에서 나옵니다. 1,000 이상이면 0.1, 10 이상 1,000 미만이면 0.01, 10 미만이면 0.001입니다. 그래서 100,000 부근의 레벨은 10센트 단위로, 3 부근의 레벨은 0.1센트 단위로 묶입니다. 크기 설정을 어떻게 바꾸든 이 격자는 달라지지 않습니다.

그다음 각 bucket은 합산 수량, 합산 달러 가치, 포함된 wall 개수, 그중 가장 오래된 것과 가장 최근 것의 경과 시간을 담습니다. 대형 주문 표시는 개별 주문이 아니라 bucket 합계를 기준으로 판정되므로, 한 눈금에 놓인 중간 크기 wall 여러 개가 함께 그 표시를 켤 수 있습니다. 묶기가 끝나면 매수는 내림차순, 매도는 오름차순으로 정렬되고 각 목록의 맨 위에서부터 누적 합계가 쌓입니다. 행 뒤의 막대는 그 누적 합계를 같은 카드 안의 최대 누적 합계와 견준 값입니다. 그래서 막대는 한 거래소 안에서는 비교할 수 있지만 거래소끼리는 비교할 수 없습니다.

108,450$4.2Mbinance행 하나주문이 아니라 가격 bucket대형 주문 점bucket 합계 ≥ Bigbucket 가격격자 단위로 반올림bucket 합계USD 또는 기초자산거래소 배지통합 뷰에서만누적 막대카드 최댓값 대비 비율상세 스트립마우스를 올리면 표시현재가와의 거리(%)bucket 내 가장 오래된 wall의 경과 시간
왼쪽부터 오른쪽으로 한 행에는 대형 주문 표시, 반올림된 bucket 가격, 그리고 그 bucket의 총 가치가 담깁니다. 뒤에 깔린 음영 막대는 해당 방향 맨 위에서부터의 누적 합계이며, 같은 카드 안의 가장 큰 누적 합계를 기준으로 비율을 잡습니다. 거래소 배지는 통합 뷰에서만 나타납니다. 행에 마우스를 올리면 페이지 하단에 상세 스트립이 열리는데, 거리는 bucket 가격과 현재가의 차이를 백분율로 나타낸 값이고, 경과 시간은 그 bucket 안에서 가장 오래된 whale wall(고래 벽)의 나이입니다.

통과된 wall과 가격 최고·최저 기록

"통과됨"은 페이지가 자체적으로 관리하는 두 숫자, 즉 현재 종목을 선택한 이후 본 최고가와 최저가로 판단합니다. 최고가 기록이 매도 wall의 가격에 닿거나 넘어서면 그 wall은 통과된 것으로 간주됩니다. 최저가 기록이 매수 wall의 가격에 닿거나 그 아래로 내려가면 마찬가지입니다. 근거는 이렇습니다. 시장이 이미 그 레벨에서 거래했으므로, 아직 그 자리에 남아 있는 wall은 살아 있는 대기 물량이라기보다 클라이언트 상태에 남은 잔재일 가능성이 큽니다. 이를 숨기는 것이 기본값입니다.

알아둘 만한 결과가 두 가지 있습니다. 종목을 바꾸면 최고·최저 기록이 초기화되므로, 전환 직후에는 필터가 판단할 근거가 없어 가격이 들어오기 시작할 때까지 아무것도 숨겨지지 않습니다. 그리고 이 필터는 렌더링할 때만이 아니라 보드가 집계할 때 적용되므로, 숨겨진 wall은 거래소 합계와 막대 크기를 정하는 최댓값에서도 함께 빠집니다. 커맨드 팔레트에서 필터를 끄면 그 wall들과 합계에 대한 기여분이 곧바로 돌아옵니다.

네 가지 레이아웃

레이아웃 메뉴는 네 가지 사전 설정을 제공합니다. 네 가지 모두 같은 wall 데이터와 같은 임계값을 읽으며, 행을 어떻게 배치하는지가 다르고, 그중 하나는 아예 무엇을 그리는지가 다릅니다.

  • Default: 선택한 거래소마다 카드 하나씩을 나란히 놓고 가로로 스크롤하며, 왼쪽 열에 매수, 오른쪽 열에 매도를 둡니다. 카드를 드래그해 거래소 순서를 바꿀 수 있고, 너비는 픽셀로 고정하거나 컨테이너 대비 비율로 정하거나 자동으로 맞출 수 있습니다. 맨 끝에 통합 카드를 하나 더 붙일 수도 있습니다.
  • Compact: 마찬가지로 거래소마다 카드 하나씩이지만, 각 카드가 세로 사다리 형태입니다. 위에 매도, 가운데에 그 거래소의 현재가, 아래에 매수가 놓입니다.
  • Aggregate: 두 개의 패널을 나란히 놓고, 둘 다 선택한 모든 거래소를 하나의 목록으로 합쳐 보여주며 모든 행에 색상 거래소 배지를 답니다. 왼쪽 패널은 세로 사다리이고, 오른쪽 패널은 매수·매도 2열 뷰입니다.
  • Chart: 보드를 통째로 단일 거래소의 캔들스틱 차트로 대체합니다. Binance Futures, Binance Spot, Coinbase 중 하나를 고를 수 있습니다. 타임프레임은 1분부터 1주까지이며 기본값은 5분입니다. wall 레벨은 캔들 위에 가로 띠로 그려지고 가치와 "경과 시간 · 개수" 표기가 붙으며 한 번에 최대 64개까지 표시되고, 차트 옆에는 호가 깊이 패널이 자리합니다.

spoof 점수는 API에만 있고 보드에는 없습니다

인터페이스에는 spoofing 지표가 없습니다. 행 상세 스트립은 거래소, 방향, 가격, 가치, 누적 가치, 거리, 수량, 경과 시간, 대형 주문 배지를 보여주고, 하단 바는 연결 상태, 초당 이벤트 수, 신선도, wall 개수, 매수·매도 합계, 불균형, 상태 배지를 보여줍니다. 어느 쪽에도 spoof 점수는 없으며, 그것을 기준으로 하는 필터나 정렬도 없습니다. 이 점수는 오직 API에만, whale wall 경로 아래 두 개의 엔드포인트(선물용 하나, 현물용 하나)에 존재합니다.

요청에는 선택적인 종목·거래소 필터와 시간 단위 lookback(조회 기간)을 넣을 수 있으며, lookback의 기본값은 24이고 상한은 168입니다. 응답은 종목과 거래소 조합마다 한 항목씩이며, 각 항목에는 0에서 100까지의 종합 점수, 40과 70을 경계로 한 낮음·보통·높음 판정, 분석된 wall 개수, 그리고 점수를 이루는 네 가지 요소가 담깁니다. 네 요소는 60초 미만만 존재한 wall의 비율, wall당 평균 사라짐·복귀 공백 횟수, 고정된 달러 금액을 넘는 취소된 wall의 비율, 그리고 평균 수량 변경 횟수입니다. 마감된 wall만 집계되고, 한 페어가 목록에 나타나려면 그런 wall이 최소 열 개는 있어야 하며, 결과는 1분 동안 캐시됩니다.

whale wall 보드가 오더북 전체에서 차지하는 자리

이 보드는 의도적으로 완전한 오더북이 아닙니다. 최솟값 이상인 레벨만 추적되므로, 두 행 사이의 공간은 비어 있는 호가창이 아니라 단지 기준에 들지 못한 물량일 뿐입니다. 통합 호가 깊이, 불균형 이력, 깊이 이력, 오더북 히트맵은 각자의 데이터 경로를 가진 별도 엔드포인트이며, 또 다른 계열의 엔드포인트들은 같은 wall 이벤트를 개별 레벨이 아니라 매수·매도 합계와 비율, 델타로 집계합니다. whale wall 행 하나를 그 가격대 유동성의 전부로 읽는 것은 데이터가 뒷받침하지 않는 오해입니다.

각 거래소 옆에 표시되는 가격은 wall 스트림에서 오는 것이 아닙니다. 브라우저가 Binance Futures, Binance Spot, Coinbase, Hyperliquid에 자체 WebSocket 연결을 열어 가격을 직접 읽어옵니다. 그래서 wall이 하나도 도착하지 않은 상태에서도 카드가 실시간 가격을 보여줄 수 있고, wall 스트림이 재연결되는 동안에도 가격은 계속 움직입니다. 같은 wall 런타임이 Terminal의 whale wall 위젯도 뒷받침하므로, 한쪽에서 설정한 크기 임계값과 통화 전환은 다른 쪽에도 그대로 적용됩니다.