
El Martín Pescador: Calidad del Mercado
La salud y madurez de un mercado no pueden estimarse solo a través del precio y el volumen. Sus actores y sus relaciones tienen un…
El Martín Pescador: Calidad del Mercado
Presentado anteriormente en el resumen de FTX de noviembre de 2020
La salud y madurez de un mercado no pueden estimarse solo a través del precio y el volumen. Sus actores y sus relaciones tienen un impacto significativo en la dirección que tiende a tomar una industria. Consideraremos los exchanges, los principales creadores de mercado (market makers) y los participantes comunes del mercado y cómo sus interacciones están dando forma a los criptomercados.
En este artículo, analizaremos la limitación física de los motores de emparejamiento (matching engines) de los exchanges y cómo esto impacta al mercado cripto en general, además de algunas propuestas que podrían hacer de las criptomonedas un mercado más justo y eficiente.
Los límites físicos del trading
Durante miles de años, los humanos han trabajado para hacer sus mercados más resilientes, eficientes y cada vez más rápidos. Desde las redes logísticas hasta los sistemas de procesamiento de pagos en línea, la búsqueda de la reducción de la latencia es tan antigua como los propios mercados. ¿Qué sucede cuando una industria se enfrenta a un obstáculo que no puede superar? El descubrimiento del silicio y sus aplicaciones nos permitió acercar la velocidad de propagación de la información a la velocidad de la luz. No podemos hacerlo más rápido.
Habiendo trabajado en el motor de emparejamiento de Euronext, obtuve una comprensión de cómo exprimir al máximo los límites físicos del hardware y desarrollar Motores de Emparejamiento (ME) más rápidos.
El ME es el corazón de cualquier exchange. Los maratonistas altamente cualificados tienen un latido lento pero fuerte que puede hacer mucho; cada latido está optimizado para proporcionar la mejor eficiencia y velocidad al llevar los nutrientes a los tejidos y músculos. De manera similar, el ME es responsable de resolver las operaciones de trading de manera eficiente y rápida, asegurando al mismo tiempo que la información resultante se transmita a la parte correcta de las infraestructuras del Exchange, de manera fiable y resiliente. La latencia del ME está disminuyendo año tras año gracias a los equipos de los exchanges que trabajan arduamente, mientras que algunos viejos líderes comienzan a acomodarse y se sientan sobre el trofeo, perdiendo cada día más y más clientes.
“Si no subes, bajas”
Bajemos para poder subir: Desmitificando la CPU 101:
Mediados de la década de 2000 marcaron el final de la era de la ley de Moore, cuando la actualización a hardware de mayor frecuencia traía mejoras automáticas de rendimiento. En cambio, la industria recurrió a un modelo donde las ganancias de rendimiento provienen de añadir más unidades de ejecución (núcleos). Pero aprovechar las arquitecturas multinúcleo requiere esfuerzos adicionales de desarrollo y prueba, y un enfoque ingenuo de añadir más hilos a menudo no cumple con las expectativas de escalabilidad. ¿Por qué?
“Una Unidad Central de Procesamiento (CPU) es realmente buena en una tarea, muchas CPUs no son buenas como equipo por defecto”.
Una CPU se compone de una unidad de procesamiento y una unidad de memoria. Un núcleo de CPU está organizado para ejecutar instrucciones a su velocidad de frecuencia. Por ejemplo, una CPU de 3 GHz procesa cada instrucción en 0.333 ns (1,000,000,000 ns = 1 seg). La tecnología de semiconductores (en nanómetros) determina los límites físicos.
La realidad es mucho más compleja. Asumimos que las instrucciones y los datos ya están almacenados en los registros físicos de la CPU que funcionan a la misma velocidad que la frecuencia de la CPU. En realidad, las instrucciones y los datos se almacenan en una arquitectura de memoria caché de múltiples niveles (L1/L2/L3). Cuanto más cerca esté físicamente de la unidad de procesamiento de la CPU, más rápido y pequeño será. Por lo tanto, la caché L1 es la más rápida y la más pequeña. La Figura 1 muestra la microarquitectura de la CPU multinúcleo y el tamaño/velocidad correspondiente de cada nivel de caché.

Figura 1: Microarquitectura de CPU Multinúcleo
Para entender qué causa una latencia larga y ciclos perdidos, tenemos que comprender los fundamentos de la Ley Universal de Escalabilidad aplicada al sistema de CPU multinúcleo. Los principales parámetros que impactan la escalabilidad son:
- Contención de recursos del núcleo: debido a la hiper-ejecución (hyperthreading), por ejemplo. Varios hilos de software quieren acceder simultáneamente a las mismas unidades de ejecución, y por lo tanto el procesamiento se serializa y prioriza.
- Contención de memoria caché: ocurre cuando hay contención del mismo núcleo sobre su memoria caché privada (L1/L2) en caso de cambio de contexto del sistema operativo, o cuando el tamaño del problema es demasiado grande para almacenarse en la memoria caché privada. Este fenómeno se denomina cache thrashing (agitación de caché). En multinúcleo, el cache thrashing ocurre en la caché L3 compartida (o LLC, last level cache) entre los núcleos. Por lo tanto, el impacto son varios cientos de nanosegundos perdidos en latencia. La solución debe ser un software inteligente que mejore la localidad de los datos en el procesamiento en caché para también mejorar la utilización del ancho de banda de la memoria mientras se mantiene el núcleo de la CPU ocupado realizando cómputos locales; este es un problema muy difícil, y hoy no hay una solución fácil.
- Coherencia de caché: es un mecanismo de hardware que permite una comunicación fluida de núcleo a núcleo siempre que haya una sincronización de software (mutex, barrera, etc.) o acceso a la misma área de memoria por ambos núcleos. Una simple coherencia de caché (una línea de caché) cuesta al menos 600 ciclos.
Carga experimentada por los motores de emparejamiento
Teniendo en cuenta las limitaciones de las CPU, los exchanges tienen que gestionar sus operaciones. Primero, los exchanges tienen que gestionar las posiciones de sus traders. Esto los expone a riesgos de liquidez cuando ocurren liquidaciones masivas durante episodios de alta volatilidad del mercado. Los exchanges tienden a gestionar la liquidación de esas posiciones de maneras que eviten efectos de onda en otros participantes del mercado cuando ocurren liquidaciones masivas. También necesitan hacer cumplir las reglas del mercado y poner en cola las operaciones (backlog trades), para garantizar la resiliencia y consistencia de sus servicios.
El percentil 99 representa el 1% superior de los valores de latencia más altos para las consultas evaluadas dentro de un intervalo de tiempo dado para una tarea determinada. Un software resiliente y eficiente será considerado por el percentil 99, que se convertirá en el umbral de latencia publicitado. Los motores de emparejamiento de los exchanges, independientemente de lo bien codificados que estén, siempre estarán limitados por estas latencias, lo que limita el rendimiento total de transacciones para sus usuarios. Si un exchange tiene una cantidad limitada de transacciones por segundo.

Esto suma un par de miles de operaciones por instrucción de emparejamiento, para que el ME las gestione. También tienen restricciones para consultas de negocio relacionadas con el servicio a muchos instrumentos y el manejo de millones de mensajes por segundo.
¿Cómo lograr escalabilidad y estabilidad desde un punto de vista arquitectónico?
El ME es un perfil computacional de flujo de trabajo altamente interconectado, que combina datos de múltiples fuentes, donde la frecuencia de comunicación entre módulos y sus interdependencias son altas y dinámicas. La sincronización y programación de hilos debe realizarse de forma dinámica y rápida.
El software reactivo es una filosofía de diseño y un cambio de paradigma que abarca la construcción de microservicios reactivos a gran escala y aplicaciones reactivas de grano fino (un solo proceso). Basado en un diseño de paso de mensajes asíncrono, existe una plétora de modelos de programación concurrente que permiten construir software reactivo desde cero. El modelo de actor es uno de esos modos de programación probado en batalla.
Los actores son un concepto muy eficiente, que soporta todo el ciclo de vida desde el desarrollo hasta la producción. Al estar mapeados directamente a conceptos funcionales, los actores acortan la distancia entre las arquitecturas de negocio y funcionales; encapsulan la lógica a un nivel lo suficientemente granular para dividir el trabajo entre desarrolladores; son conceptos directamente utilizables para pruebas; y permiten a los administradores decidir la topología dinámicamente, basándose en el hardware disponible y la carga de la aplicación.
El ME que recibe estas operaciones distribuirá los cómputos necesarios entre los núcleos de CPU disponibles. Si un núcleo está lleno, los datos se envían a un nivel de caché superior, a los sockets de la placa base, o en el peor de los casos, de vuelta a la RAM y se envían a los recursos de hardware (esto tiene el costo más alto porque necesita llegar a otros componentes).
Cada vez que un núcleo tiene que sincronizarse para equilibrar la carga, paga la "tarifa de latencia". Cuantos más núcleos añadas, más se pueden distribuir los datos, pero más tarifas de latencia pagarás. Esta tarifa aumenta exponencialmente. Esta es principalmente la razón por la que los exchanges no pueden simplemente escalar comprando más servidores, y también por la que pueden ser víctimas de su propio éxito. El punto crítico de latencia se alcanza cuando la entropía interviene, dispersando los datos a muchos núcleos y estos solo se hacen promesas entre sí para esperar datos para ejecutar instrucciones.
La estrategia utilizada por los ingenieros es dedicar cada núcleo a una función específica y nunca hacer nada más, asegurarse de que nunca reciban demasiados datos o instrucciones, y evitar en la medida de lo posible cualquier sincronización y aleatoriedad de las entradas. Para lograr esto, tendrán que gastar dinero en investigación y/o invertir en software para gestionar la asignación de memoria y el control del núcleo. Y especialmente contar con ingenieros rigurosos que no desperdicien ni un byte de tiempo de CPU.
Dilema:
Los exchanges y el mercado en su conjunto se encuentran en un dilema: aumentar la carga a costa de hacer más aparentes sus limitaciones de velocidad y latencia.
Lado de la oferta (Sell side):
Desde el punto de vista del lado de la oferta (exchanges), se gasta mucho dinero desarrollando soluciones para manejar mejor la entropía. Se necesitan desarrolladores talentosos que comprendan el dilema de la latencia, incluida la entropía generada por tener una base de clientes en crecimiento (software de trading, algo traders, creadores de mercado). En algún momento, los límites de diseño son alcanzados por las reglas de la física. Teniendo en cuenta que cualquier error se acumula y puede volverse doloroso rápidamente, esto termina limitando la capacidad de desarrollo hasta que la innovación se mata por el miedo a crear nuevos costos de latencia. Los exchanges eventualmente tienen que reducir el riesgo de mal funcionamiento del ME debido a lo que puede ser similar a un Ataque de Denegación de Servicio Distribuido (Distributed Denial of Service) provocado por participantes legítimos del mercado.
Para mitigar estos riesgos, aplican límites de tasa (rate limits) y priorizan qué instrucciones les brindan las mejores oportunidades de negocio. La CPU y la latencia son física y matemáticas. La investigación, el rigor y las nociones de "equidad" son a discreción humana. Si ralentizas a todos, haces que el mercado sea más ineficiente para la mayoría de los traders. Luego, esto da una ventaja a aquellos con recursos (ingeniero de codificación de bajo nivel, capital para desplegar, equipo de investigación, volumen). Otro punto a mencionar, cada operación, por razones legales, debe guardarse incluso si es para cancelar la orden un par de milisegundos después. Las firmas de HFT (High Frequency Trading) ejercen una gran carga en los exchanges con recursos mayormente desperdiciados a costa del exchange.
Lado de la demanda (Buy side)
Desde el punto de vista del lado de la demanda (el de los clientes), un ME ilimitado permite mejores estrategias, más competencia, mercados más eficientes, mejores oportunidades de arbitraje entre exchanges y un mercado más justo para los traders de bajo volumen que pueden acceder a la liquidez al mismo ritmo que todos los demás.
Cuando el número de clientes aumenta, el ME se ralentiza y excluye a la mayoría de los traders. Comprar servidores en la proximidad geográfica de los servidores de los exchanges permite a ciertos participantes del mercado enviar patrones de precios específicos, lo cual es de particular interés desde un punto de vista regulatorio y de los exchanges. Durante períodos de alta volatilidad, el HFT consumirá en gran medida la liquidez de la competencia y absorberá las órdenes pasivas de los no-HFT que logran pasar el flujo de órdenes (orderflow). Los tomadores (takers) tienden a actuar como traders informados y su flujo de órdenes puede considerarse tóxico para otros participantes.
Un ejemplo que la mayoría de los traders ya experimentan, fue una estrategia HFT que enviaba órdenes a una tasa de 6,000 órdenes colocadas y canceladas por segundo. Lo que significa que cada cotización tiene una vida más corta que 1.6 millonésimas de segundo, la cantidad de tiempo que tarda la luz en viajar unos 1,500 pies. Cualquiera que esté más lejos de la mitad de esa distancia no tiene ninguna posibilidad de ejecutar operaciones contra estas cotizaciones. Esta es una estrategia comúnmente utilizada llamada quote stuffing (relleno de cotizaciones), posible porque un participante del mercado se encuentra en el mismo centro de datos que el exchange. Esto conduce hoy a grandes diferenciales ocultos (spreads), creados cuando órdenes agresivas golpean al exchange.
Surgen preguntas sobre las reglas del mercado que solo el lado de la oferta puede aplicar con el incentivo de los reguladores o la autorregulación para mejorar la calidad de sus servicios. Los partidarios del HFT dirán que mejoran la liquidez al reducir el diferencial (spread) y la posibilidad de que ocurran otras estrategias maliciosas, como el spoofing.
Otros dirán que tal velocidad es injusta. Los no-HFT se encuentran atrapados entre los límites de tasa, las estrategias de arbitraje estadístico y las cotizaciones fantasma (ghost quotes), lo que reduce la posibilidad de que los pequeños participantes ganen. Además de los participantes altamente cualificados, en los últimos años han surgido nuevos productos como los quantos de altcoins, que son los más preocupantes en el momento de escribir este artículo. La fiebre de las ICO y la mayor parte de la escritura y la educación sobre la trampa de liquidez del mercado de criptomonedas han llevado a los traders a preferir productos apalancados con liquidez mejorada en lugar de monedas/tokens al contado de baja liquidez, como se detalla en el anterior resumen de FTX de junio de Clarens Caraccio.
Estar largo en "Inverso" es más arriesgado que estar "corto". A medida que el precio baja, la posición acumula más y más delta y expone al trader a un mayor riesgo de liquidación. Una nueva ola de traders está recurriendo a productos altamente apalancados con la misma baja liquidez subyacente al contado, pero esta vez expuestos a gamma negativa en posiciones "largas" cuando se utiliza colateral que no es USD.
Los creadores de mercado buscan posiciones neutrales; sus tasas de órdenes de toma (taker orders) dependen en su mayoría de su inventario. En mayor volatilidad y sin los incentivos adecuados, no se molestarán en ejecutar una liquidación óptima de su inventario en libros de órdenes límite débiles con intensidad controlada. Retiran liquidez frente a traders informados para evitar posibles pérdidas ellos mismos. Los participantes apalancados terminan viendo cómo sus posiciones son eliminadas por el motor de riesgo de los exchanges solo porque los libros de órdenes del índice subyacente han sido retirados.
Los mercados de Bitcoin y altcoins no están regulados por ninguna "regla justa" genérica con respecto a la latencia, los diferenciales, los requisitos de colateral o la estructura de tarifas. Pero todos los exchanges aplican límites de tasa basados en el volumen. Estos límites están diseñados principalmente para proteger los motores de emparejamiento contra la alta carga de la demanda y proporcionar un mercado de criptomonedas eficiente.
El aumento de nuevas herramientas para operar rápidamente dentro de estos límites y capturar la liquidez disponible permite a los participantes no sistemáticos también capturar estas ineficiencias con una ejecución más rápida para operar contra los creadores de mercado, pero esto entra directamente en conflicto con ellos. El papel de cotizar límites bajos de liquidez es un trabajo tedioso que necesita incentivos, ahora también son caz


