Perpetuals Heat Index
자산별 백분위와 동등 가중 글로벌 점수의 계산 방법, breadth 카운터의 의미, 데이터가 아직 닿지 못하는 곳.
실시간 위젯 보기: /perpetuals/positioning.
데이터 출처
Heat Index는 상류 파일 하나만 읽습니다: data/research/heat_index.json, PPI shadow-log cron이 매시간 :05 UTC에 작성. 같은 cron이 자산별 ppi_log.jsonl 파일도 유지합니다. 그래서 인덱스는 데이터 수준에서 PPI의 8시간 케이던스를 상속(Binance funding 결산당 새 데이터 1개), FE는 5분마다 폴링하지만요.
PPI 자체는 Binance USDT-M funding rate의 자산별 180-사이클 롤링 z-score(일 3 사이클 × 60일 ≈ 60일 컨텍스트). Shadow logger는 2024-07-07 이후 자산당 약 2,049 결산을 캡처했고, 그것이 백분위가 매핑되는 역사적 분포입니다.
자산별 백분위
각 추적 자산에 대해 인덱스는 현재 PPI 값을 그 자산 자체의 22개월 히스토리에 대해 순위 매깁니다. 공식은 단순 bisect_right: 현재 값 이하인 역사적 PPI 샘플 개수를 세고 총 개수로 나눈 뒤 100을 곱합니다.
백분위_pct = bisect_right(sorted(history), current_ppi)
/ len(history) × 100BTC 점수 92는 오늘 BTC funding-z가 2024-07-07 이후 관측된 모든 BTC funding-z의 92%보다 높이 있다는 뜻. 각 자산은 자체 곡선에 대해 평가되므로 같은 날 BTC 92와 DOGE 12는 자산별 역사-내-위치에 대한 두 진술이지, 절대 funding rate가 같다는 뜻이 아닙니다.
글로벌 집계
시장 전체 점수는 6개 자산별 현재 PPI의 동등 가중 평균을, 6개 자산 모두 값이 있는 모든 timestamp에 대해 역사적으로 계산된 같은 동등 가중 집계의 백분위에 매핑한 값입니다. 역사적 윈도는 그런 timestamp 약 2,049개, 자산별 depth와 동일.
current_agg = mean([ppi.btc, ppi.eth, ppi.sol, ppi.bnb,
ppi.xrp, ppi.doge])
historical_agg = [mean(per_asset_ppi(t)) for t in shared_timestamps]
global_pct = bisect_right(sorted(historical_agg), current_agg)
/ len(historical_agg) × 100OI 가중이 아닌 동등 가중. BTC가 전체 perp OI의 약 60%로 open interest를 지배하므로 OI 가중 composite는 BTC를 가깝게 추적할 것입니다. 동등 가중은 대신 breadth를 표면화. 6개 중 5개 venue가 함께 hot으로 갈 때 BTC 단독으로 break out 안 했어도 점수가 오릅니다.
Breadth 카운터
글로벌 백분위와 함께 payload는 두 카운터를 노출: 6개 자산 중 현재 Hot 또는 Euphoric 밴드에 있는 개수, 그리고 Cold 또는 Panic에 있는 개수. 위젯은 이를 “6개 중 1개가 핫존”으로 렌더링합니다.
Breadth는 광범위한 regime 변화와 단일 자산의 폭발을 구분. 글로벌 점수 75 + breadth_hot=5는 시장 대부분이 동시에 따뜻하다는 뜻. 글로벌 점수 75 + breadth_hot=1는 한 venue가 극단적 고점에 있어서 혼자 평균을 끌어올리고 있다는 뜻. 같은 헤드라인 숫자, 매우 다른 microstructure.
캐싱과 신선도
엔드포인트는 매 요청마다 heat_index.json을 읽고, 파일이 2시간 이상 오래되었으면 503을 반환합니다. 그 너머는 upstream에서 뭔가 잘못된 상태(timer 죽음, PPI cron 실패, 디스크 가득)이며 stale heat 값을 서빙하는 것이 정직한 오류보다 FE를 더 오도합니다.
Cache-Control은 max-age 5분과 stale-while-revalidate 10분으로 설정되어, CDN이 파일의 실제 나이를 초과해서 stale-serving 하지 않으면서 대부분의 트래픽을 흡수할 수 있습니다. FE 폴링이 일치: SWR 5분마다 새로고침. 파일이 시간 단위로 업데이트되므로 12개 클라이언트 요청 중 11개는 CDN에서 동일 바이트를 반환합니다.
한계
- 서술적, 예측적 아님. Heat Index 90은 dump를 예측하지 않습니다. 현재 funding rate가 추적 기간 동안 관측된 조건의 상위 10%에 있다고 말할 뿐. 결정은 독자에게 있습니다.
- 22개월은 완전한 crypto 사이클이 아님. 2024-07-07 시작일은 역사적 분포가 2018-2020 bear, 2021 mania, 2022 contagion을 포함하지 않는다는 뜻. 오늘의 “99 백분위”는 crypto가 만들어낸 전체 funding 행동 범위를 커버하지 않는 표본의 99 백분위입니다.
- BNB는 나머지보다 더 좁게 움직임. 2024-07-07 이후 BNB 사이클의 58.7%가
Neutral에 들어갔고, 다른 5개 자산은 33-43%. 그래서 BNB 백분위 80은 BTC 백분위 80보다 절대 funding rate 측면에서 더 작은 편차를 나타냅니다. 동등 가중 집계는 이 비대칭을 희석하지만 고치지는 않습니다. - 동등 가중은 DOGE에게 BTC와 같은 투표권을 부여. 자본 가중 독자는 composite가 아닌 자산별 막대를 봐야 하며, composite는 breadth를 보여주는 것이지 자본 가중 노출을 보여주는 것이 아닙니다.
- Funding은 8시간마다 결산, 연속이 아님. Heat Index가 사용하는 PPI 값은 funding과 함께 업데이트되므로, 빠른 intra-cycle 움직임 동안 점수가 stale 수치 위에 최대 8시간 머물 수 있습니다. 시간 단위 cron이 새 결산을 인쇄 후 1시간 이내에 픽업합니다.
버전
v1.0.0 최초 릴리스 2026-05-21. 컴퓨트 경로의 중요 변경(새 가중치, 임계값 조정, 추가 입력)은 버전을 올리고 발행일을 갱신합니다. 문구 수정은 그대로.