Las cascadas de liquidaciones como señal de trading: cómo leer el flujo forzado y preanunciado
La mayor parte del flujo del mercado es un secreto hasta que se imprime. Un vendedor discrecional decide vender cuando lo decide; conoces su intención por la cinta, después de los hechos. Las liquidaciones apalancadas son la excepción, y la excepción es enorme. Una liquidación es forzada — el titular de la posición no puede decidir si ocurre — y está preanunciada — el precio exacto al que se activa es una función determinista de parámetros que son, en cadena, totalmente públicos y, fuera de cadena, estimables estadísticamente. Cada largo apalancado es una orden de venta a mercado permanente, descansando a un precio que está transmitiendo a cualquiera que se tome la molestia de calcularlo.
Eso cambia el marco por completo. El artículo complementario sobre la mecánica de las liquidaciones de Aave y Compound aborda las liquidaciones desde el lado del liquidador — la carrera de infraestructura para ser quien repaga la deuda incobrable y cobra el bono. Este artículo adopta el lado del trader ante el mismo objeto: no "¿cómo gano la liquidación?", sino "el agregado de los precios de liquidación de todos los demás es un mapa del flujo forzado futuro, y puedo operar contra ese mapa". Construimos dos versiones del mapa — una exacta en cadena, otra difusa para los perpetuos de CEX — cuantificamos cuándo una cadena de liquidaciones se vuelve autorreforzante y exponemos, con cuidado, qué le hace el flujo resultante al precio.
El gráfico de profundidad de liquidaciones en cadena
En un mercado monetario, el precio de liquidación de una posición no se estima. Se deriva. Recordemos el factor de salud del artículo introductorio sobre la mecánica: una posición se puede liquidar cuando
donde son las cantidades de garantía, sus precios de oráculo, los umbrales de liquidación y los valores de la deuda. No volveremos a derivarlo; lo invertimos. Tomemos el caso común — una única garantía volátil (por ejemplo, WETH) que financia deuda estable (USDC). Al establecer y despejar el precio de la garantía obtenemos el precio de activación de la posición:
Ese único número es lo que el prestatario ha anunciado. Dice: si WETH toca en el oráculo, esta posición se convierte en oferta forzada. Y el tamaño de esa oferta también se puede conocer: cuando se activa, un liquidador repaga de deuda y se apodera de una garantía cuyo valor es , por lo que aproximadamente
de valor de garantía llega al mercado (o se cubre) cuando se activa la posición.
Tomemos la posición concreta del artículo sobre la mecánica: 10 WETH depositados a $3{,}000, 20,000 USDC prestados, umbral de liquidación y bono del 5 %. Su activación es , y con un factor de cierre del 50 % coloca de oferta forzada de WETH a ese precio. Un prestatario, una barra en el gráfico. Hazlo para cada prestatario del protocolo, agrupa los resultados por y tendrás un histograma: valor nocional de venta forzada en función del precio. Ese es el gráfico de profundidad de liquidaciones en cadena — el primo nativo de DEX de un libro de órdenes, salvo que las "órdenes" son involuntarias y sus precios se calculan, no se cotizan.

Tres advertencias de honestidad evitan que esto sea una fantasía:
- Las posiciones con varios activos no tienen un único precio de activación. Una posición con dos garantías volátiles y dos deudas se liquida sobre una superficie en el espacio de precios, no en un punto. La reducción práctica consiste en calcular la activación a lo largo del eje de la garantía volátil dominante, manteniendo todos los demás precios de oráculo en su valor actual. Eso es correcto para un movimiento en un activo y erróneo para un movimiento de una cesta correlacionada — algo importante, porque las caídas correlacionadas son precisamente cuando muchos activadores se mueven juntos. Trata el de un solo activo como una aproximación marginal de primer orden, no como una garantía.
- La venta forzada un dump de mercado en un único mercado. Los liquidadores competentes no venden a mercado a ciegas la garantía incautada en el pool disponible más delgado; enrutan a través de DEX y CEX, y a menudo mantienen la garantía y cubren el delta en un perp en lugar de realizarla inmediatamente (el problema del swap de salida en el que profundiza el artículo introductorio sobre la mecánica). Por eso es un límite superior del flujo que afecta al precio, no una estimación puntual. Parte se filtra hacia coberturas que nunca tocan el mercado al contado.
- Los activadores se mueven con el oráculo, no con el mercado. En Aave y Compound, la posición se vuelve liquidable cuando el oráculo cruza , y los oráculos se actualizan con una cadencia de desviación y latido, por detrás del mercado. Por tanto, el gráfico de profundidad es un mapa de dónde el flujo forzado se vuelve elegible, condicionado por la siguiente transmisión del oráculo — una sutileza que el artículo introductorio cubre en detalle.
Una tercera fuente se sitúa entre el gráfico del mercado monetario y el mapa de calor de CEX: los DEX de perps. Hyperliquid, GMX y dYdX v4 gestionan perpetuos apalancados como un exchange centralizado, pero mantienen el estado de las posiciones en cadena o en una cámara de compensación consultable. Eso significa que sus precios de liquidación obedecen la misma fórmula de margen aislado que los perps de CEX, pero se calculan a partir de posiciones reales (tamaño, garantía, entrada), no de una estimación basada en el OI agregado. El estado de la cámara de compensación de Hyperliquid expone el margen de cada cuenta y el precio de marca; las posiciones de GMX están en cadena y se liquidan a precios derivados del oráculo mediante keepers. La consecuencia práctica: para los DEX de perps puedes construir un mapa de liquidaciones con el apalancamiento de estilo CEX, pero con la precisión de estilo on-chain, mucho más cercano a la exactitud del gráfico de Aave que a las conjeturas del mapa de calor. Cuando un mercado publica las posiciones, nunca tienes que adivinar.
Incluso con estas advertencias, el gráfico en cadena es el mapa más limpio del flujo forzado que existe en los mercados: ninguna suposición sobre la distribución del apalancamiento, ningún tamaño oculto, y cada entrada se puede leer del estado.
El mapa de calor de liquidaciones de CEX
Los exchanges centralizados de perpetuos te ofrecen la situación opuesta: un interés abierto muchísimo mayor y casi ninguno de los detalles a nivel de posición que hacen exacto el gráfico en cadena. No puedes leer las posiciones individuales. Lo que sí puedes leer es el interés abierto agregado y el volumen negociado. El mapa de calor de liquidaciones es lo que obtienes al intentar reconstruir el gráfico de profundidad a partir de esos agregados más ciertas suposiciones, y esas suposiciones son determinantes.
La aritmética por posición es sencilla. Para un largo lineal con margen aislado (liquidado en USDT) abierto al precio , con apalancamiento y tasa de margen de mantenimiento , la liquidación se activa cuando el patrimonio cae hasta el requisito de mantenimiento:
y simétricamente . Fijemos una entrada en con y recorramos los niveles de apalancamiento:
| Apalancamiento | Distancia por debajo de la entrada | |
|---|---|---|
| 5× | $2,415 | −19.5% |
| 10× | $2,715 | −9.5% |
| 25× | $2,895 | −3.5% |
| 50× | $2,955 | −1.5% |
| 100× | $2,985 | −0.5% |
La forma de esa columna explica por completo por qué los mapas de calor se iluminan justo por debajo del precio reciente: las posiciones con alto apalancamiento se liquidan a una distancia mínima de la entrada, así que allí donde se haya negociado volumen recientemente, se concentra una banda densa de activadores de 50–100× a una fracción de porcentaje. El constructor del mapa de calor sigue estos pasos: tratar el volumen negociado reciente como una aproximación de dónde se abrieron las posiciones (su ), distribuir ese volumen entre un conjunto supuesto de niveles de apalancamiento — 5×, 10×, 25×, 50×, 100× con ciertos pesos supuestos —, proyectar cada parte a su y sombrear el eje de precios según el nocional apalancado estimado que se liquida allí. Las bandas brillantes son zonas densas de liquidación estimada.

Sé explícito sobre por qué esta es una imagen difusa y no el gemelo del gráfico en cadena:
- La distribución del apalancamiento es desconocida. Todo el mapa de calor es una convolución del volumen con un histograma de apalancamiento supuesto. Distintas suposiciones reubican las bandas brillantes. Dos proveedores de datos reputados publican mapas de calor visiblemente distintos para el mismo mercado el mismo día, y ambos tienen "razón" dadas sus creencias previas.
- El margen cruzado rompe la fórmula por posición. El anterior es un resultado para margen aislado. Una posición con margen cruzado se liquida según el patrimonio de toda la cuenta, por lo que su activador efectivo depende de las otras posiciones del trader, su PnL no realizado y cualquier garantía que añada durante el movimiento — nada de esto es observable. El tamaño con margen cruzado es, en la práctica, invisible para el estimador.
- Tamaño oculto y dinámico. El interés abierto es un agregado neto y bruto; no te indica la correspondencia entre el OI y las entradas individuales. Los traders añaden, reducen y cubren posiciones continuamente. El margen de mantenimiento escalonado ( aumenta con el nocional de la posición) desplaza los activadores de las posiciones grandes respecto de los de las pequeñas con el mismo apalancamiento.
- La liquidación se ejecuta por tramos, no instantáneamente. Los exchanges liquidan las posiciones grandes de forma incremental y canalizan el riesgo residual mediante un fondo de seguro y el desapalancamiento automático, por lo que ni siquiera un grupo ubicado correctamente se descarga en una sola operación.
La forma correcta de interpretar el mapa de calor es como una priori sobre dónde probablemente se concentra el flujo forzado, que debe confirmarse o refutarse con las ejecuciones de liquidación realizadas (el flujo forceOrder de la sección del pipeline que aparece abajo), no como un libro contable. Es realmente útil y realmente impreciso, y fingir lo contrario es la forma de acabar arrollado por los mismos grupos que estás observando. Para entender por qué se acumula tanto apalancamiento en los perpetuos — y por qué el coste de financiación sigue empujando esas posiciones hacia sus activadores — consulta el arbitraje de tasas de financiación entre exchanges.
Dinámica de cascadas, cuantificada
Una liquidación individual es un dato. Una cascada es el bucle de retroalimentación, y tiene un umbral que se puede escribir. El bucle es mecánico: una venta forzada golpea el libro → el impacto en el precio mueve el mercado → el movimiento empuja al siguiente nivel de posiciones más allá de su activador → esas posiciones se liquidan → más ventas forzadas → se repite. Que esto se extinga o se descontrole no depende del sentimiento; es una proporción de dos cantidades que ya has construido.
Trabajemos con caídas de precio fraccionarias . Hay dos componentes:
- Densidad de liquidación — nocional de venta forzada por unidad de caída fraccionaria del precio, leído directamente del gráfico de profundidad / mapa de calor: . Mide cuánto combustible está acumulado en una banda de precios.
- Profundidad de mercado — nocional de venta a mercado necesario para mover el precio una unidad de . Bajo un modelo lineal de impacto (Kyle), vender un nocional mueve el precio en . Es la capacidad del libro de órdenes para absorber el flujo forzado, y es exactamente la cantidad que aborda el análisis de paredes del libro de órdenes y posición en la cola — una "pared" es un pico local en .
Ahora iteremos. Un shock exógeno hace caer el precio , activando de ventas forzadas. Esa venta provoca una caída adicional . Definamos el multiplicador de cascada
y la recursión es simplemente . La caída total es una serie geométrica:
Todo depende del valor de :
- — subcrítica. Cada ronda de liquidaciones activa menos ventas que la anterior. La cascada se extingue por sí sola; el movimiento total es un múltiplo acotado del shock inicial. La mayoría de los eventos de liquidación están aquí.
- — supercrítica. Cada ronda activa al menos tantas ventas como la anterior. La serie geométrica diverge; el movimiento solo está limitado por el agotamiento de las posiciones liquidables, el aumento de la profundidad del libro a precios más bajos o un interruptor de circuito del exchange. Este es el régimen de "flash crash / squeeze de largos".
es un número de reproducción — el de una epidemia de liquidaciones. Indica que la cascada se descontrola exactamente cuando la liquidez de venta forzada concentrada en una banda de precios supera la liquidez del libro disponible allí para absorberla. Por eso un shock moderado que entra en un grupo denso sobre un libro delgado es mucho más peligroso que un shock grande que entra en un espacio de precios vacío: el peligro está en , no en el tamaño del shock. Esta estructura autoexcitada — eventos que provocan más eventos del mismo tipo — es la misma que motiva modelar el flujo de órdenes con procesos de Hawkes, y explica por qué las liquidaciones llegan en grupos en vez de hacerlo de forma uniforme.

Pongámosle números. Supongamos que el libro es tal que una venta a mercado de $10M mueve ETH un 1 %, de modo que de nocional por unidad de precio fraccionario. Ahora comparemos dos regímenes para la banda de 1 % de ancho justo por debajo del precio al contado:
- Banda densa, $30M de nocional de venta forzada agrupado. Entonces y . Supercrítica: un shock que roce la parte superior de la banda detona toda la pila, y el suelo del modelo no lo fija , sino el punto en el que se agotan las posiciones.
- Banda dispersa, $6M de nocional agrupado. Entonces , y el movimiento total es — una caída amplificada pero acotada. El mismo shock, el mismo libro, un grupo cinco veces más pequeño, y el resultado cambia de colapso a mecha comprable.
La versión discreta es una simulación breve sobre los grupos ordenados, y vale la pena escribirla porque hace tangible el umbral:
def cascade(p0, clusters, kyle_lambda):
"""
p0: price after the exogenous shock
clusters: {trigger_price: forced_notional} for long positions
kyle_lambda: fractional price impact per $ of market sell (1/depth)
Returns the floor price and total liquidated notional.
"""
p, sold, fired = p0, 0.0, set()
while True:
new = [(tp, n) for tp, n in clusters.items()
if tp not in fired and tp >= p]
if not new:
break
q = sum(n for _, n in new) # this round's forced sell
fired.update(tp for tp, _ in new)
p *= (1 - kyle_lambda * q) # linear price impact of the round
sold += q
return p, sold
Dos observaciones prácticas. Primero, es local: varía a lo largo del eje de precios porque tanto (densidad del grupo) como (profundidad del libro) cambian. La pregunta operable no es "¿es frágil el mercado?", sino "¿en qué precio específico cruza el valor 1?". Segundo, el mismo mecanismo funciona a la inversa para los cortos durante una subida (un short squeeze es una cascada con los signos invertidos), así que el mapa tiene dos lados: combustible de liquidaciones de largos por debajo del precio al contado y combustible de liquidaciones de cortos por encima. El bucle venta forzada → impacto en el precio → venta forzada es el mecanismo de riesgo endógeno formalizado en la literatura sobre ventas forzadas (Cont y Wagalath), donde la liquidación bajo presión fabrica su propia correlación e impacto.
Señales: grupos como imanes y zonas de reversión
Un mapa del flujo forzado genera dos lecturas operables distintas, casi opuestas, según el momento en relación con la cascada.
Antes: los grupos son imanes de precio. Un grupo denso de liquidaciones es un conjunto de flujo garantizado y no sensible al precio. Eso atrae a dos tipos de actores: traders que buscan liquidez y quieren ejecutar un tamaño grande contra contrapartes forzadas, y traders depredadores que empujan el precio hacia el grupo específicamente para activar el flujo (la caza de stops, a escala de protocolo). El resultado es una tendencia bien documentada a que el precio gravite hacia los grupos grandes: el nivel actúa como un imán porque existe un incentivo permanente para reducir la distancia. Cuando ves que el mercado al contado deriva hacia una banda brillante con poca convicción, la propia banda forma parte de la explicación. Predecir la reacción del libro a medida que se acerca el precio — ¿absorberá la pared el flujo o cederá? — es exactamente el tipo de problema de predicción del libro de órdenes a corto plazo que abordan modelos como DeepLOB.
Después: los grupos son zonas de reversión. Esta es la lectura más valiosa y más abusada, así que hay que expresarla con cuidado. El flujo de liquidaciones forzadas es, por construcción, no informativo: el vendedor no vende porque tenga la opinión de que el precio es demasiado alto; vende porque un motor de margen se lo ordenó. El flujo no informativo mueve el precio temporalmente. Una vez agotadas las posiciones agrupadas, la venta mecánica se detiene de golpe y, si la cascada se pasó del valor razonable durante la caída, el precio tiende a retroceder: la "mecha de liquidación". El mecanismo no es una leyenda: es el resultado estándar de que el impacto en el precio de la venta forzada y no informada tiene un componente transitorio que revierte cuando cesa el flujo, la misma lógica de venta forzada que produce una dislocación temporal y una reversión parcial posterior en la literatura sobre ventas bajo presión en la renta variable.

La disciplina que esto exige, expresada de la forma más tajante posible:
- La reversión a la media después de una cascada es una tendencia documentada, no una ley ni una cifra. Depende de que el flujo haya sido realmente no informativo y de que no llegue información nueva durante la cascada. Una cascada de liquidaciones que también sea el reajuste de precio del mercado ante noticias reales (un desacople, un exploit, un shock macroeconómico) no revertirá: el flujo forzado y el flujo informativo se superponen, y solo el primero es transitorio. No existe una ventaja universal de "comprar la mecha", y cualquier porcentaje específico de reversión que veas citado sin una muestra, un mercado y un régimen indicados debe tratarse como marketing.
- La señal es el agotamiento, no la caída. El momento operable llega cuando las ejecuciones de liquidaciones realizadas se vuelven menos frecuentes — cuando la cinta
forceOrderse queda en silencio después de un estallido — porque es entonces cuando el vendedor mecánico ya no está. Entrar en mitad de una cascada supercrítica () es ponerse delante del mismo bucle de retroalimentación sobre el que advertía la sección anterior. - Ambas lecturas necesitan el mismo mapa. El imán y la reversión son los mismos grupos vistos en fases distintas; no puedes operar ninguno de los dos sin construir primero el gráfico de profundidad y el mapa de calor, y conciliarlos continuamente con las ejecuciones realizadas.
También existe una lectura direccional más lenta en la asimetría del mapa de dos lados. El combustible de liquidaciones de largos está por debajo del precio al contado y el de cortos, por encima; cuando un lado está mucho más cargado que el otro, el mercado tiene un sesgo mecánico hacia el lado pesado, porque es allí donde un shock encuentra el flujo más autorreforzante. Un mercado con una pared de liquidaciones de largos a un 3 % por debajo y casi nada por encima es estructuralmente frágil a la baja, independientemente de la narrativa: el camino de menor resistencia es el camino con más combustible. El funding persistente y unilateral suele construir esa asimetría: un mercado que paga a los largos por mantenerse cortos (funding profundamente negativo) acumula cortos concurridos cuyo grupo de liquidación queda entonces por encima del precio como combustible para un squeeze, y viceversa. La cinta de funding y el mapa de liquidaciones son dos vistas del mismo apalancamiento.
El pipeline de datos
El sistema fusiona dos feeds de caracteres opuestos: un índice de posiciones en cadena orientado al futuro (donde el flujo forzado será elegible) y un flujo de liquidaciones de CEX realizado (donde el flujo forzado se está imprimiendo ahora mismo). Uno te dice dónde está el combustible; el otro te dice que se ha encendido.
El mapa futuro — índice de posiciones en cadena. Parte del historial de eventos de Aave/Compound (Supply, Borrow, Repay, Withdraw, LiquidationCall), ya sea reproduciendo logs o consultando un subgrafo en The Graph, y agrúpalos en los saldos actuales de cada usuario — el mismo subsistema de indexación exacto que el artículo introductorio sobre la mecánica describe para los bots de liquidación, reutilizado aquí para agregar en lugar de ejecutar. A partir de los saldos y los parámetros de riesgo actuales, calcula el y el de cada posición, y agrúpalos en el histograma del gráfico de profundidad. Actualízalo con cada bloque nuevo; el histograma es barato de mantener incrementalmente una vez que los saldos están activos.
La cinta realizada — flujo forceOrder de Binance. Binance Futures publica liquidaciones reales por websocket, wss://fstream.binance.com/ws/!forceOrder@arr (matriz de todos los símbolos) o <symbol>@forceOrder; cada evento incluye el lado, el precio y la cantidad de una orden de liquidación. Hay un detalle documentado que conviene señalar, precisamente por la necesidad de ser honestos sobre la imprecisión: el flujo público está limitado como máximo a un evento de liquidación por símbolo por segundo; durante una cascada violenta, cuando las liquidaciones llegan mucho más rápido que 1/s, el flujo muestrea en lugar de informar de cada ejecución, por lo que el volumen agregado de liquidaciones reconstruido a partir de él subestima sistemáticamente justo cuando más importa. Usa el flujo para conocer el momento y la dirección de la cascada (si se está activando, qué lado, si se acelera o se reduce), no como un libro contable preciso del volumen.
Un esqueleto mínimo de ingesta — dos productores asíncronos que escriben en un bus normalizado:
import asyncio, json, websockets
async def binance_liquidations(bus):
url = "wss://fstream.binance.com/ws/!forceOrder@arr"
async with websockets.connect(url) as ws:
async for msg in ws:
o = json.loads(msg)["o"] # order payload
await bus.put({
"src": "binance", "kind": "realized",
"symbol": o["s"],
"side": o["S"], # SELL = long liquidation
"price": float(o["p"]),
"qty": float(o["q"]), # NB: stream is sampled at 1/s
})
async def onchain_positions(bus, subgraph, poll=12):
while True:
positions = subgraph.fetch_open_positions() # balances + risk params
chart = {}
for pos in positions:
p_liq = pos.debt / (pos.collateral * pos.liq_threshold)
q = pos.close_factor * pos.debt * (1 + pos.liq_bonus)
chart[round(p_liq, 2)] = chart.get(round(p_liq, 2), 0.0) + q
await bus.put({"src": "aave", "kind": "forward", "chart": chart})
await asyncio.sleep(poll) # ~1 block cadence
async def main(subgraph):
bus = asyncio.Queue()
await asyncio.gather(
binance_liquidations(bus),
onchain_positions(bus, subgraph),
consumer(bus), # reconcile forward map vs realized tape, emit signals
)
El consumer es donde vive la estrategia: mantiene el mapa futuro (el gráfico en cadena más el mapa de calor de CEX estimado), estima el multiplicador de cascada local frente a la profundidad viva del libro de órdenes y observa la cinta realizada de forceOrder para detectar la activación y — la parte operable — el agotamiento. Cuando la cinta estalla y después se reduce mientras el precio se sitúa por debajo de un grupo que el mapa indicaba que estaba allí, tienes un exceso no informativo con el vendedor forzado ya fuera: la configuración de reversión. Cuando la cinta se acelera y por delante, tienes una cascada supercrítica de la que debes mantenerte al margen. El mismo mapa, acciones opuestas, y la cinta es lo que las desambigua en tiempo real.
Qué debes llevarte
Las liquidaciones invierten la asimetría informativa habitual de los mercados: en lugar de que el flujo permanezca oculto hasta imprimirse, el precio y el tamaño de la venta forzada se pueden calcular de antemano — exactamente en cadena, aproximadamente en los perps de CEX. Construye el mapa (el gráfico de profundidad en cadena es exacto salvo por el enrutamiento y el retraso del oráculo; el mapa de calor de CEX es una priori condicionada a una distribución de apalancamiento desconocida y ciega al margen cruzado), y la fragilidad del mapa se reduce a un único cociente: el multiplicador de cascada , densidad de venta forzada sobre profundidad del libro, un número de reproducción subcrítico por debajo de 1 y descontrolado por encima. La señal se divide por fase: los grupos son imanes antes y zonas de reversión después; y la ventaja de reversión existe solo porque el flujo forzado no es informativo y, por tanto, es transitorio, una tendencia documentada que se evapora en cuanto una cascada coincide con noticias reales. Opera el agotamiento, no la caída; respeta ; y nunca confundas un mapa de calor difuso con un libro contable de dónde están enterrados los cuerpos.
Referencias
- Qin, Zhou, Gamito, Jovanovic, Gervais (2021), An Empirical Study of DeFi Liquidations: Incentives, Risks, and Instabilities. arXiv:2106.06389.
- Kyle, A. S. (1985), Continuous Auctions and Insider Trading. Econometrica 53(6) — el coeficiente lineal de impacto en el precio utilizado en el modelo de cascada.
- Cont, R., & Wagalath, L. (2016), Fire Sales Forensics: Measuring Endogenous Risk. Mathematical Finance 26(4) — impacto en el precio de la liquidación forzada y correlación endógena.
- Bacry, E., Mastromatteo, I., Muzy, J.-F. (2015), Hawkes Processes in Finance. Market Microstructure and Liquidity 1(1) — agrupación autoexcitada del flujo de órdenes y liquidaciones.
- Documentación de la API de Binance Futures — flujos de órdenes de liquidación (
!forceOrder@arr,<symbol>@forceOrder), incluida la nota sobre el límite de 1 evento por segundo por símbolo. - Subgrafos de Aave v3 y Compound III en The Graph;
getUserAccountDatade Aave y parámetros de riesgo de las reservas.
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.