Whale walls
Cómo se detectan las órdenes grandes en reposo dentro del libro de órdenes en vivo y qué significan los umbrales.
Qué cuenta como whale wall
Un whale wall (muro de ballena) es un único nivel de precio en el libro de órdenes de un exchange cuya cantidad en reposo alcanza o supera un mínimo configurado. El rastreador lee el libro en vivo, conserva todos los niveles de compra o venta que cumplen el mínimo y sigue ese nivel a lo largo del tiempo como un único objeto rastreado. Los mínimos se guardan por par de trading y por mercado, no como una única cifra global, y solo se rastrean los pares con una configuración guardada y activada. Si un wall desaparece y reaparece al mismo precio en menos de cinco minutos con una cantidad parecida, se trata como la misma orden y no como una nueva.
La vida de un wall dentro del rastreador
El stream transporta cinco nombres de evento: wall_appeared, wall_updated, wall_cancelled, wall_filled y wall_partialfill. Appeared marca la primera vez que un nivel cumple el mínimo; updated se dispara con cada cambio de cantidad. Un nivel que desaparece no se cierra de inmediato. Pasa a un estado pendiente durante un máximo de cinco minutos y, si el mismo precio regresa con una cantidad que el rastreador puntúa con 0,70 o más como la misma orden, se fusiona de nuevo y su contador de huecos aumenta. Solo cuando pasan los cinco minutos sin que regrese, el rastreador emite un único evento de cierre. En el panel, cancelled y filled eliminan la fila, mientras que updated y partial-fill la mantienen y reescriben sus cifras.
Los eventos de cierre se tratan de forma distinta al filtrado por tamaño. El servidor descarta los eventos appeared y updated por debajo de tu mínimo antes de que salgan del canal, pero siempre reenvía cancelled y filled, porque un cliente puede seguir manteniendo ese wall desde un snapshot anterior y necesita eliminarlo. El panel sigue la misma regla: ignora una actualización por debajo del umbral, pero nunca ignora una eliminación. Por eso un wall puede desaparecer de tu panel poco después de que subas el mínimo, sin que llegue ningún wall nuevo a sustituirlo.
Cómo decide el rastreador entre ejecutado, ejecución parcial y cancelado
Cada vez que un nivel rastreado se reduce, el rastreador busca operaciones que se hayan producido a ese precio o cerca de él y aproximadamente en el mismo momento. Cuando esas operaciones explican la mayor parte de la reducción, esta se anota como ejecutada. Cuando solo explican una parte, se acredita únicamente el volumen que confirman y, cuando la evidencia es escasa, solo una fracción de ese volumen. Una reducción sin ninguna evidencia de operaciones detrás se anota como cancelación. La ventana de búsqueda llega más hacia atrás que hacia delante, porque una operación suele llegarnos antes que la actualización de profundidad que la refleja.
Esas cantidades se acumulan durante la vida del wall en un total ejecutado y un total cancelado. Cuando el wall se cierra por fin, la parte acumulada ejecutada decide el evento de cierre: un 90 por ciento o más es ejecutado, un 20 por ciento o más es una ejecución parcial, y cualquier cosa por debajo es cancelado. Dos casos especiales anulan la aritmética. Un wall que desaparece en un solo tick sin reducciones registradas, pero cuyo nivel había sido atravesado por el precio de mercado, se anota como ejecutado. Un wall que vivió menos de 500 milisegundos casi sin nada ejecutado, y al que el precio no cruzó, se clasifica como spoofing.
Exchanges y mercados cubiertos
Se cubren cuatro mercados: Binance Futures, Binance Spot, Coinbase y Hyperliquid. Binance Futures y Hyperliquid se agrupan como futuros; Binance Spot y Coinbase como spot. Los datos del libro de órdenes y de operaciones se leen directamente del feed público por WebSocket de cada exchange. La cobertura no es idéntica en todos los mercados: los rastreadores de Coinbase y Hyperliquid solo funcionan para una lista explícita de pares que cada mercado admite, y algunos pares se omiten en Binance Spot porque no están listados allí. En la interfaz eliges qué mercados mostrar, y la cabecera indica cuántos de los cuatro están seleccionados.
Ajustes que controlas tú
Dos filtros de tamaño gobiernan el panel. Min fija el wall más pequeño que se muestra; Big fija el nivel por encima del cual un wall se marca como orden grande. Ambos ofrecen los mismos valores predefinidos —5, 10, 25, 50, 100 y 250 unidades del activo base— más un importe personalizado, y ambos se pueden expresar en unidades del activo base o en dólares mediante un único conmutador de moneda, con el equivalente en dólares junto a cada valor predefinido. Los valores por defecto cambian según el par, así que cambiar de símbolo aplica los valores propios de ese par. Las preferencias se guardan en el navegador y, cuando tienes la sesión iniciada, se sincronizan con tu cuenta.
Cómo de actuales son los datos
El panel se abre con un snapshot puntual de los walls activos en ese momento y después se mantiene al día mediante un stream de eventos enviados por el servidor —uno para futuros y otro para spot—, de modo que los cambios llegan según ocurren y no según un temporizador de refresco. El filtro de tamaño se aplica en el servidor dentro de la petición del snapshot. El servidor envía un heartbeat cada 15 segundos y un comentario keep-alive cada 30. El cliente marca los datos como obsoletos tras 30 segundos sin eventos, considera muerta la conexión si faltan heartbeats durante 45 segundos, y reconecta con backoff exponencial hasta diez intentos. Se carga un snapshot al conectar y tras un cambio de símbolo o de umbral; una reconexión automática restaura únicamente el stream y continúa desde el último número de secuencia que vio.
Cómo mantiene el panel coherentes el snapshot y el stream
El stream se abre antes de que llegue el snapshot, así que los eventos se aplicarían a un libro que está a punto de ser reemplazado. En vez de eso se guardan en un búfer de hasta 10.000 eventos mientras se pide el snapshot; si ese búfer se desborda, se descarta la mitad más antigua y el descarte se registra. Una vez que llega el snapshot, el búfer se ordena y se reproduce, conservando solo los eventos cuyo número de secuencia es superior al del snapshot. Los eventos aplicados se escriben después en pantalla en lotes por fotograma de animación, con appeared, filled y cancelled en cola por delante del resto.
- Bajo carga, el servidor solo descarta tráfico de baja prioridad: appeared, filled y cancelled nunca se descartan de un canal, mientras que los eventos updated sí pueden descartarse una vez que el búfer del canal supera las 800 entradas.
- Cuando algo se descarta, el servidor no se queda callado: envía un evento data_gap con el número de eventos descartados y el motivo, ya sea descarte por backpressure o un cliente que se quedó atrás.
- Cambiar un umbral de tamaño reabre el stream con el nuevo filtro y trae un snapshot nuevo; los walls que ya no superan el umbral se eliminan antes del mapa local.
- Cambiar el símbolo limpia el mapa de walls, el número de secuencia y las métricas antes de pedir nada nuevo, para que los dos símbolos nunca se mezclen.
Leer el panel
Los walls del mismo mercado se agrupan en buckets de precio, con un tamaño de bucket elegido automáticamente a partir del nivel de precio. Cada fila muestra el precio del bucket y su tamaño total en dólares o en unidades del activo base, un marcador para las filas que superan tu umbral de orden grande, y una barra que muestra el tamaño acumulado apilado hacia el mejor precio. Al pasar el cursor por una fila se abre una franja de detalle con mercado, lado, precio, valor, valor acumulado, distancia al precio actual en porcentaje, cantidad y la antigüedad del wall más antiguo del bucket. Los walls que el mercado ya ha atravesado están ocultos por defecto, bajo el supuesto de que probablemente estén ejecutados; una acción de la paleta de comandos vuelve a mostrarlos.
Qué es en realidad una fila: buckets de precio
Una fila no es una orden. Antes de dibujar nada, cada wall rastreado se redondea sobre una rejilla de precios, y los walls que caen en el mismo paso, en el mismo mercado y el mismo lado, se fusionan en una sola fila. El paso sale del propio precio: a partir de 1.000 el paso es 0,1; de 10 hasta 1.000 es 0,01; y por debajo de 10 es 0,001. Así, un nivel cercano a 100.000 se agrupa a la décima de dólar, mientras que un nivel cercano a 3 se agrupa a la décima de céntimo. Nada de tus ajustes de tamaño cambia la rejilla.
Cada bucket lleva después la cantidad sumada, el valor sumado en dólares, cuántos walls contiene y la antigüedad del más antiguo y del más reciente. El marcador de orden grande se comprueba contra el total del bucket, no contra ninguna orden individual, así que varios walls medianos situados en un mismo paso pueden encenderlo entre todos. Tras el agrupado, las compras se ordenan de forma descendente y las ventas de forma ascendente, y se acumula un total corriente desde la parte superior de cada lista. La barra detrás de una fila muestra ese total corriente medido contra el mayor total corriente de la misma tarjeta, y por eso las barras son comparables dentro de un mercado pero no entre mercados.
Walls atravesados y las marcas de precio
Lo de «atravesado» lo deciden dos cifras que la página guarda por su cuenta: el precio más alto y el más bajo que ha visto desde que seleccionaste el símbolo actual. Un wall de venta cuenta como atravesado en cuanto la marca máxima alcanza o supera su precio; un wall de compra cuenta como atravesado en cuanto la marca mínima alcanza o baja hasta su precio. El razonamiento es que el mercado ya ha operado en ese nivel, así que un wall que siga ahí es más probable que sea un resto en el propio estado del cliente que tamaño real en reposo. Ocultarlos es el comportamiento por defecto.
Conviene conocer dos consecuencias. Las marcas se reinician cada vez que cambias de símbolo, así que justo después de un cambio el filtro no tiene nada sobre lo que actuar y no se oculta nada hasta que empiezan a llegar precios. Y el filtro se aplica mientras el panel agrega, no solo mientras dibuja, así que un wall oculto también desaparece de los totales del mercado y del máximo que escala las barras. Desactivar el filtro desde la paleta de comandos devuelve esos walls, y su aportación a los totales, de inmediato.
Los cuatro diseños
El menú de diseño ofrece cuatro opciones predefinidas. Las cuatro leen los mismos datos de walls y los mismos umbrales; se diferencian en cómo se colocan las filas y, en un caso, en qué se dibuja siquiera.
- Default: una tarjeta por mercado seleccionado, colocadas una junto a otra y con desplazamiento horizontal, con las compras en la columna izquierda y las ventas en la derecha. Las tarjetas se pueden arrastrar para reordenar los mercados, y su anchura se puede fijar en píxeles, definir como una parte del contenedor o ajustar automáticamente. Al final se puede añadir una tarjeta agregada adicional.
- Compact: también una tarjeta por mercado, pero cada tarjeta es una escalera vertical: ventas arriba, el precio actual del mercado en el centro y compras debajo.
- Aggregate: dos paneles uno junto a otro, ambos mostrando todos los mercados seleccionados fusionados en una sola lista, con una etiqueta de mercado en color en cada fila. El panel izquierdo es la escalera vertical y el derecho es la vista de dos columnas de compras y ventas.
- Chart: sustituye el panel por completo por un gráfico de velas de un solo mercado: Binance Futures, Binance Spot o Coinbase. Los marcos temporales van de un minuto a una semana, con cinco minutos por defecto. Los niveles de wall se dibujan sobre las velas como bandas horizontales etiquetadas con su valor y una nota de «antigüedad · recuento», con un máximo de 64 niveles a la vez, y un panel de profundidad se sitúa junto al gráfico.
La puntuación de spoofing existe en la API, no en el panel
La interfaz no tiene ningún indicador de spoofing. La franja de detalle de la fila muestra mercado, lado, precio, valor, valor acumulado, distancia, cantidad, antigüedad y la insignia de orden grande; la barra en reposo muestra el estado de la conexión, eventos por segundo, frescura, número de walls, totales de compra y venta, desequilibrio y una insignia de salud. Ninguna lleva una puntuación de spoofing, y no hay ningún filtro ni orden basado en ella. La puntuación vive solo en la API, en dos endpoints —uno para futuros y otro para spot— bajo la ruta de whale walls.
Una petición acepta un filtro opcional de símbolo y mercado más un lookback en horas, que por defecto es 24 y se limita a 168. La respuesta es una entrada por símbolo y mercado, cada una con una puntuación compuesta de 0 a 100, una lectura de baja, moderada o alta en los umbrales de 40 y 70, el número de walls analizados y los cuatro factores que hay detrás de la puntuación: la proporción de walls que vivieron menos de 60 segundos, el número medio de huecos de desaparición y regreso por wall, la proporción de walls cancelados con un valor superior a un umbral fijo en dólares y el número medio de cambios de cantidad. Solo cuentan los walls cerrados, un par necesita al menos diez de ellos para aparecer siquiera, y los resultados se guardan en caché durante un minuto.
Dónde encaja el panel de whale walls junto al resto del libro de órdenes
El panel no pretende ser un libro de órdenes completo. Solo se rastrean los niveles que alcanzan o superan tu mínimo, así que el espacio entre dos filas no es libro vacío: es simplemente tamaño que nunca llegó a calificar. La profundidad agregada, el historial de desequilibrio, el historial de profundidad y el mapa de calor del libro de órdenes son endpoints aparte con su propia ruta de datos, y una segunda familia de endpoints agrega esos mismos eventos de wall en totales, ratios y deltas de compra y venta en lugar de niveles individuales. Leer una fila de whale wall como una foto completa de la liquidez a ese precio es un error que los datos no respaldan.
Los precios que aparecen junto a cada mercado no vienen del stream de walls en absoluto. El navegador abre sus propias conexiones WebSocket a Binance Futures, Binance Spot, Coinbase y Hyperliquid y lee los precios directamente, y por eso una tarjeta puede mostrar un precio en vivo antes de que haya llegado un solo wall, y el precio sigue moviéndose mientras el stream de walls se reconecta. El mismo motor de walls también alimenta un widget de whale walls en el Terminal, así que los umbrales de tamaño y el conmutador de moneda que fijas en un sitio se aplican en el otro.