Índice de Calor de Perpetuos
Cómo se calculan el percentil por activo y el score global de peso igual, qué significan los contadores de amplitud, y hasta dónde llegan los datos.
Consulta el widget en vivo en /perpetuals/positioning.
Fuentes de datos
El Índice de Calor lee un único archivo aguas arriba: data/research/heat_index.json, escrito por el cron de PPI shadow-log en cada disparo horario a las :05 UTC. Ese mismo cron mantiene los archivos ppi_log.jsonl por activo. Así que el índice hereda la cadencia de 8 horas del PPI a nivel de datos (un nuevo dato por liquidación de financiación de Binance), aunque el FE haga polling cada cinco minutos.
El PPI en sí es un z-score móvil de 180 ciclos sobre las tasas de financiación USDT-M de Binance por activo (3 ciclos/día × 60 días ≈ 60 días de contexto). El shadow logger lleva capturadas aproximadamente 2.049 liquidaciones por activo desde 2024-07-07, que es la distribución histórica contra la que se mapea el percentil.
Percentil por activo
Para cada activo cubierto el índice ranquea el valor actual del PPI contra la propia historia de 22 meses de ese activo. La fórmula es bisect_right directo: cuántas muestras históricas son menores o iguales al valor actual, dividido por el total y multiplicado por 100.
percentil_pct = bisect_right(sorted(historia), ppi_actual)
/ len(historia) × 100Un score de 92 en BTC significa que el funding-z de BTC de hoy está por encima del 92% de todos los funding-z de BTC observados desde 2024-07-07. Cada activo se gradúa contra su propia curva, así que un BTC 92 y un DOGE 12 en el mismo día son dos afirmaciones sobre posición-dentro-de-la-historia por activo, no que las tasas absolutas sean iguales.
Agregado global
El score de mercado es el promedio de peso igual de los seis PPI actuales por activo, mapeado al percentil del mismo agregado de peso igual computado históricamente sobre cada timestamp donde los seis activos tienen valor. La ventana histórica tiene aproximadamente 2.049 de esos timestamps, igual que la profundidad por activo.
agg_actual = mean([ppi.btc, ppi.eth, ppi.sol, ppi.bnb,
ppi.xrp, ppi.doge])
agg_historico = [mean(ppi_por_activo(t)) for t in timestamps_compartidos]
pct_global = bisect_right(sorted(agg_historico), agg_actual)
/ len(agg_historico) × 100Peso igual, no peso por OI. BTC domina el open interest al rondar el 60% del OI total de perpetuos, así que un composite con peso por OI seguiría a BTC de cerca. El peso igual saca amplitud a la superficie. Cuando cinco de seis venues corren calientes juntos el score sube, aunque BTC solo no haya roto.
Contadores de amplitud
Junto al percentil global, el payload expone dos contadores: cuántos de los seis activos están actualmente en las bandas Hot o Euphoric, y cuántos están en Cold o Panic. El widget los renderiza como “1 de 6 perps en zona caliente”.
La amplitud separa un cambio amplio de régimen de una explosión de un solo activo. Score global 75 con breadth_hot=5 significa que la mayor parte del mercado está tibia a la vez. Score global 75 con breadth_hot=1 significa que un venue está en un extremo alto y está empujando el promedio él solo. Mismo número de portada, microestructura muy distinta.
Cacheo y frescura
El endpoint lee heat_index.json en cada petición y devuelve 503 si el archivo tiene más de dos horas. Más allá de ese plazo algo va mal aguas arriba (timer caído, cron de PPI fallando, disco lleno) y servir valores de calor obsoletos engañaría al FE más que un error honesto.
Cache-Control fija max-age de 5 minutos más stale-while-revalidate de 10 minutos, así un CDN puede absorber la mayor parte del tráfico sin servir nunca por encima de la edad real del archivo. El polling del FE coincide: refresco SWR cada cinco minutos. Como el archivo se actualiza cada hora, 11 de cada 12 peticiones de cliente devuelven bytes idénticos desde el CDN.
Limitaciones
- Descriptivo, no predictivo. Un Índice de Calor de 90 no predice un dump. Dice que las tasas de financiación actuales están en el 10% superior de las condiciones observadas en el período cubierto. La decisión recae en el lector.
- 22 meses no son un ciclo completo de cripto. La fecha de inicio 2024-07-07 implica que la distribución histórica no incluye el bear 2018-2020, la manía de 2021, ni el contagio de 2022. El “percentil 99” de hoy es el percentil 99 de una muestra que no cubre todo el rango de comportamiento de financiación que ha producido cripto.
- BNB corre más estrecho que el resto. El 58,7 % de los ciclos de BNB desde 2024-07-07 cayeron en
Neutral, frente al 33-43 % en los otros cinco activos. Así que un percentil de 80 en BNB representa una desviación menor en términos absolutos de tasa que un percentil de 80 en BTC. El agregado de peso igual diluye esta asimetría pero no la arregla. - El peso igual le da a DOGE el mismo voto que a BTC. Lectores con cabeza de capital deberían leer las barras por activo, no el composite, ya que el composite muestra amplitud y no exposición ponderada por capital.
- La financiación liquida cada 8 horas, no continuamente. El valor de PPI que usa el Índice de Calor se actualiza con la financiación, así que el score puede quedarse sobre una cifra obsoleta hasta 8 horas durante un movimiento rápido intra-ciclo. El cron horario recoge la nueva liquidación dentro de una hora desde que imprime.
Versionado
Lanzamiento inicial v1.0.0 el 2026-05-21. Los cambios materiales en la ruta de cómputo (nueva ponderación, ajustes de umbral, entradas adicionales) suben la versión y actualizan la fecha de publicación. Las correcciones de redacción no.