Lee el signo y la distribución del indicador, evita dos errores de lectura comunes y llévalo a una estrategia.
Tras una caída fuerte, el historial de liquidaciones muestra una barra negativa profunda. ¿Se liquidaron muchos largos, o el valor de esta moneda suele estar por debajo de 0? El indicador solo lee Binance, y 0 no es un punto de equilibrio; esos dos hechos deciden cómo leer esa barra. Si estás mirando liquidaciones por nivel de precio, eso es otra estimación de modelo: consulta Cómo leer el mapa de liquidaciones.
El indicador de liquidación es un valor escalado que muestra si se liquidaron más cortos o más largos en un periodo, calculado solo con el feed público de liquidaciones de Binance. Una liquidación es el cierre forzoso de una posición apalancada por parte del exchange: un largo liquidado se convierte en una orden de venta y un corto liquidado, en una de compra. Cada 5 minutos Blave suma la cantidad liquidada de cada lado (en monedas) por símbolo y calcula el indicador en tres pasos:
| Paso | Qué calcula |
|---|---|
| 1. Liquidación neta | Cada 5 minutos, liquidaciones de cortos menos liquidaciones de largos, en monedas y no en USD. Un tramo de 5 minutos sin registros de liquidación cuenta como 0. |
| 2. Suma móvil | Se suma dentro del timeframe elegido (24h por defecto). |
| 3. Escalado | Se divide por la desviación estándar móvil de 30 días de esa suma. No se resta la media, así que no es un z-score estándar. |
El valor no tiene límites. Su signo indica qué lado se liquidó más:
| Valor | Significado |
|---|---|
| > 0 | En el timeframe se liquidaron más cortos que largos (en monedas) |
| < 0 | Se liquidaron más largos que cortos |
| ≈ 0 | Los dos lados se compensan, no hubo registros de liquidación o el feed estaba caído; no significa que los largos y cortos de la moneda estén equilibrados |
La distribución es asimétrica: la cola inferior (liquidaciones de largos) es más profunda que la superior. Estos cuantiles son un cálculo propio de Blave a partir del feed de Binance, con velas de 1h y timeframe 24h, del 2024-09-15 al 2026-09-14, un valor por hora (n = 17,520):
| Moneda | p1 | p50 | p99 | Tiempo por encima de 0 |
|---|---|---|---|---|
| BTC | −3.76 | −0.01 | +3.31 | 48.8% |
| ETH | −4.07 | −0.08 | +2.79 | 43.1% |
| SOL | −4.01 | −0.17 | +2.87 | 37.6% |
| DOGE | −4.07 | −0.23 | +2.97 | 31.1% |
El resumen, el historial y las barras de 24h de la página del mapa solo usan el feed de liquidaciones de Binance. Binance envía como máximo una liquidación por símbolo por segundo y descarta el resto de ese segundo, así que es una muestra que se queda corta en los movimientos grandes.
Las unidades son monedas, así que las cantidades brutas no se comparan entre monedas; para eso usa el valor escalado. Mientras el feed está caído, el valor parece el de un periodo sin liquidaciones y el hueco no se marca.
Por encima de 0 se liquidaron más cortos que largos; por debajo, más largos. Pero al escalar no se resta la media, así que una moneda en la que suelen liquidarse más largos se desplaza de forma sistemática hacia valores negativos, y 0 no es su nivel normal.
La tabla de arriba da la proporción de tiempo por encima de 0 en ese periodo medido (velas de 1h, timeframe 24h). El mismo 0 está cerca de la mediana en BTC, pero en DOGE ya se inclina hacia liquidaciones de cortos más que la mayor parte del tiempo.
Hoy ninguna estrategia oficial usa datos de liquidación, así que los tres usos siguientes son esbozos sin backtest. Los umbrales del código toman prestados los cuantiles medidos arriba como punto de partida; no salen de un escaneo de parámetros, así que haz tu propio backtest antes de usarlos.
Lo más directo es marcar los periodos en que el valor cae en alguna de las colas. Como la cola inferior es más profunda, no uses el mismo valor absoluto para los dos lados. En BTC, p1 ronda −3.8 y p99 ronda +3.3.
LONG_FLUSH_TH = -3.8 # esbozo: cerca del p1 de BTC en 1h × 24h SHORT_FLUSH_TH = 3.3 # esbozo: cerca del p99 de BTC en 1h × 24h liq = fetch_liquidation(SYMBOL, INTERVAL, START, END, hdrs, timeframe='24h') df['LIQ'] = liq['alpha'] long_flush = df['LIQ'] <= LONG_FLUSH_TH # liquidaciones concentradas de largos short_flush = df['LIQ'] >= SHORT_FLUSH_TH # liquidaciones concentradas de cortos
Cómo operar esas marcas es tarea tuya: Blave no ha verificado si el precio revierte o continúa tras liquidaciones concentradas. Los cuantiles también cambian según la moneda; ETH, SOL y DOGE tienen un p1 más profundo que BTC, así que recalcula al cambiar de moneda.
Como 0 no es un punto de equilibrio, una regla del tipo "por encima de 0 se liquidan cortos" falla en monedas como DOGE, que pasan largas temporadas en negativo. Usa en su lugar los cuantiles de la propia moneda en una ventana pasada, menos afectados por ese sesgo de largo plazo:
# esbozo: cuantiles de los últimos 180 días; longitud de ventana no escaneada
lo = df['LIQ'].rolling('180D').quantile(0.01)
hi = df['LIQ'].rolling('180D').quantile(0.99)
extreme = (df['LIQ'] <= lo) | (df['LIQ'] >= hi)
Con una ventana demasiado corta, los umbrales se mueven con el precio reciente. Tampoco dejes que la ventana entre en el periodo de calentamiento, unos 30 días desde el inicio de los datos de la moneda (antes del 2023-01-31 en BTC y ETH), cuando la desviación estándar tenía muy pocas muestras y produce extremos falsos.
Un uso más prudente es añadirlo a la regla de entrada de una estrategia existente: no abrir posiciones nuevas mientras el valor esté en alguna de las colas. Reutiliza los dos umbrales del uso 1 y sustituye compute_entry por la condición de entrada de tu estrategia:
# esbozo: sin entrada mientras el valor esté en alguna cola flush = (df['LIQ'] <= LONG_FLUSH_TH) | (df['LIQ'] >= SHORT_FLUSH_TH) entry = compute_entry(df) & ~flush
Esta combinación no tiene backtest, y Blave no ha verificado que evitar las liquidaciones concentradas mejore el rendimiento. Solo trata "acaba de liquidarse una ola" como motivo para pausar entradas nuevas.
El indicador tiene dos ajustes. El timeframe es la ventana en la que se suma la liquidación neta: 15min, 1h, 4h, 8h, 24h o 3d, con 24h por defecto. El intervalo de velas (period) fija cada cuánto se toma un valor: 5min, 15min, 1h, 4h, 8h o 1d. El valor siempre se calcula primero en la cuadrícula de 5 minutos y cada vela toma el último. Cambiar el timeframe cambia la distribución; este es el mismo periodo medido con timeframe 1h en velas de 1h:
| Moneda | p1 | p50 | p99 | Tiempo por encima de 0 |
|---|---|---|---|---|
| BTC | −2.62 | 0.00 | +2.12 | 52.5% |
| ETH | −2.84 | 0.00 | +2.17 | 48.8% |
| SOL | −3.07 | 0.00 | +2.21 | 45.5% |
| DOGE | −3.50 | 0.00 | +2.09 | 40.3% |
Frente a 24h, 1h tiene colas más estrechas, una mediana de 0.00 en todas las monedas y una proporción por encima de 0 más cercana a la mitad. Recalcula los umbrales al cambiar de timeframe; un juego de números no sirve para otro. 15min, 4h, 8h y 3d no se midieron aquí.
| Página | Qué muestra | Acceso |
|---|---|---|
| Resumen de liquidaciones | Mapa de bloques con un desplegable para alternar los rankings de liquidaciones de cortos y de largos, 30 monedas en cada uno. El tamaño del bloque es el valor absoluto (respecto a los últimos 30 días de la moneda), no un importe; el color es la variación de precio en el timeframe. | Con sesión |
| Historial de liquidaciones | Barras del indicador de liquidación de una moneda sobre el precio, con opciones de timeframe e intervalo de velas y los campos de stat. | Sin Pro, los últimos 7 días llegan con retraso |
Son ideas para combinar señales, no resultados verificados:
| Combinación | Uso |
|---|---|
| Liquidaciones + Cazador de ballenas | Usa Cazador de ballenas para detectar movimientos inusuales del interés abierto y mira en qué cola estaba el indicador de liquidación en el mismo periodo, para saber si el movimiento vino con liquidaciones concentradas. |
| Liquidaciones + Intensidad taker | El indicador de liquidación solo ve el lado que fue forzado a salir. Usa Intensidad taker para ver la compra y venta agresiva del mismo periodo y cubrir la mitad voluntaria. |
El endpoint del indicador es GET /liquidation/get_alpha, con symbol, period, timeframe (24h por defecto) y un rango de fechas (start_date, end_date); en Blave Agent corresponde a fetch_liquidation. Solo devuelve velas cerradas, con timestamp, alpha y stat, y los rangos de más de 1 año se recortan. Los datos empiezan el 2023-01-01 en los símbolos más antiguos (BTC, ETH), y antes el valor es 0; otras monedas pueden empezar más tarde. La desviación estándar de 30 días necesita calentamiento, así que los valores con sentido empiezan unos 30 días después del inicio de los datos de cada moneda (hacia el 2023-01-31 en BTC y ETH).
El objeto stat de get_alpha describe la lectura más reciente, y sus nombres no coinciden del todo con lo que calculan:
| Campo | Qué calcula en realidad |
|---|---|
up_prob | Una regresión logística entrenada con los últimos 365 días usa el indicador de liquidación para predecir si el precio subirá o bajará 24h después y devuelve la probabilidad de subida. Los datos de entrenamiento incluyen el periodo actual, así que es una estimación dentro de la muestra, no una tasa de acierto fuera de la muestra. |
avg_up_return /avg_down_return | Rentabilidad media a 24h de todos los resultados al alza o a la baja de los últimos 365 días, sin distinguir el nivel del indicador. |
exp_value | up_prob × avg_up_return + (1 − up_prob) × avg_down_return, en decimal, no en porcentaje. |
is_data_sufficient | Si los datos de la moneda empiezan hace más de 365 días, no si este nivel de lectura tiene suficientes muestras. |
Para los endpoints y campos del mapa de liquidaciones, la variación del mapa y la página por exchange, consulta Cómo leer el mapa de liquidaciones.
stat es una estimación dentro de la muestra. Verifica cualquier umbral con tu propio backtest.