MarketTrace
M1PosicionamientoM2FootprintM3LiquidacionesM4FinanciaciónM5Perfil de volumen
Metodología · v1.0.0 · publicado 2026-05-21

Í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) × 100

Un 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) × 100

Peso 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

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.