Anatomía del Spread: ¿De dónde sale el desajuste?
El mercado es ineficiente. Sobretodo cuando hay FOMO extremo o pánico generalizado. En los CEXs (Binance, Bybit, OKX), el precio lo mueven los market makers y los order books. Ahí todo se decide por la presión del libro de órdenes en cuestión de segundos. En los DEXs, en cambio, el precio se rige por las reglas de los AMM (Automated Market Makers) y está totalmente atado a la fórmula matemática del pool (como la de producto constante $x \times y = k$).
Si una ballena empieza a dumpear un token a mercado en un CEX, el precio se desploma al instante. ¿Y en el DEX? En el DEX no pasa nada hasta que llega el primer arbitrajista o un usuario de a pie. Ese delay temporal entre la actualización del order book en el CEX y el cambio en la proporción de tokens dentro del pool del DEX es, literalmente, lo que nos da de comer.
Pero ojo a un detalle del que casi nadie habla en las comunidades: el spread suele ser un espejismo. Ves una diferencia del 3%, te calientas, le metes un ape-in y resulta que el pool está fantasma. No hay un duro de liquidez. Metes el Swap, el precio se te va en contra por completo y, en vez de profit, te comes una pérdida tremenda. A esto se le llama Price Impact (Impacto de Precio).
Mapa de riesgos: Lo que te va a quemar la cuenta
Antes de ponerte a tirar código y configurar scanners, grábate a fuego este checklist de amenazas. El arbitraje es un juego de velocidad con valor esperado negativo (Negative EV) si no sabes calcular los costes ocultos que hay detrás.
| Tipo de Coste / Riesgo | Dónde está la trampa | Cómo mitigarlo |
|---|---|---|
| CEX Withdrawal Lag | Que el exchange te congele los retiros durante 5 o 10 minutos. En ese tiempo, el spread ya habrá desaparecido. | Tener liquidez lista en ambos lados. Operar mediante "volúmenes cruzados" (Hedging) sin mover tokens físicamente entre exchanges. |
| Price Impact | Poca liquidez en el pool del DEX. Una orden grande te mueve el precio una barbaridad. | Calcular la profundidad del pool. El tamaño de tu posición no debería superar el 1-2% del TVL total del pool. |
| Gas & MEV | En redes EVM (Ethereum, BSC, Arbitrum), los bots te cazan la transacción en la mempool y te pasan por delante metiéndote un Front-running. | Utilizar Flashbots RPC (para Mainnet) o endpoints de RPC privados protegidos para no exponer tu transacción en la mempool pública. |
| CEX Fees | Comisión de Maker/Taker + el fee fijo de la red por retirar el token. | Hacer volumen en el CEX para subir de nivel VIP y rascar mejores fees. En EXMON, por ejemplo, las comisiones de Maker/Taker son cero, lo que es una mina de oro para estos ciclos. |
Algoritmo de búsqueda manual y automatización
Buscar oportunidades 100% a mano en pleno 2026 es de masoquistas. Pero tienes la obligación de entender cómo funcionan los engranajes por detrás.
La estrategia es de primero de crypto. Te vas a CoinMarketCap o CoinGecko. Filtras por tokens de baja capitalización (shitcoins, pero que tengan algo de vida y volumen medio). Te metes en la pestaña de "Markets" ("Mercados") y buscas las discrepancias. Si ves diferencia entre un Gate.io de turno y un pool de Uniswap/PancakeSwap en Arbitrum o Base (donde el gas cuesta céntimos), ahí es donde hay que empezar a rascar.
Checklist paso a paso para validación manual:
- Revisar el estado de los depósitos y retiros del token en el CEX. Si los retiros están cerrados, el spread es falso. Pasa de largo.
- Verificar la red (Network). El token en el CEX tiene que estar exactamente en la misma red donde corre el pool del DEX. Usar bridges te va a quitar tiempo y a comer el margen.
- Evaluar el slippage (deslizamiento). Simula en la interfaz del DEX el volumen exacto que quieres comprar o vender. Mira el Price Impact final. Si se merienda el spread, la oportunidad está muerta.
Script de monitoreo: Calculando el spread como un pro
Basta de teoría, vamos al código. Necesitamos un script que consulte el precio del CEX (vía CCXT) y extraiga el precio del pool directamente del smart contract del DEX (vía Web3.py), puenteando por completo los front-ends lentos.
Aquí tienes un script listo y funcional para conectar Bybit (CEX) con un pool de Uniswap v2 en Arbitrum (DEX). Código directo para producción.
Python
import time
from web3 import Web3
import ccxt
# Conexión al nodo. Usa RPCs privadas y rápidas, las públicas suelen dar lag
RPC_URL = "https://arb1.alpharc.io/v1/your-api-key" # cambia esto por tu RPC activa
w3 = Web3(Web3.HTTPProvider(RPC_URL))
if not w3.is_connected():
raise Exception("El nodo está caído, revísalo")
# Inicializamos el exchange mediante CCXT
exchange = ccxt.bybit({
'enableRateLimit': True,
})
# Dirección del pool de Uniswap V2 (o Sushi) en Arbitrum para el ejemplo (WETH/USDC)
# Aquí puedes meter cualquier shitcoin siempre que tengas el address del pool del par
POOL_ADDRESS = "0x905dfCD56492171426f30a7d11d68E1da87ab64B"
# ABI del pool V2. Solo nos hace falta la función getReserves, lo demás es paja
POOL_ABI = [
{
"constant": True,
"inputs": [],
"name": "getReserves",
"outputs": [
{"name": "_reserve0", "type": "uint112"},
{"name": "_reserve1", "type": "uint112"},
{"name": "_blockTimestampLast", "type": "uint32"}
],
"payable": False,
"stateMutability": "view",
"type": "function"
}
]
pool_contract = w3.eth.contract(address=w3.to_checksum_address(POOL_ADDRESS), abi=POOL_ABI)
def get_dex_price():
# Consultamos las reservas directamente al contrato
reserves = pool_contract.functions.getReserves().call()
# El pool contiene token0 y token1. Supongamos: token0 = USDC (6 decimales), token1 = WETH (18 decimales)
# Ojo: comprueba siempre directamente en el contrato cuál es el token cero y cuál el uno
reserve_usdc = reserves[0] / 10**6
reserve_weth = reserves[1] / 10**18
# Precio de WETH en USDC según la fórmula del pool
price_dex = reserve_usdc / reserve_weth
return price_dex
def get_cex_price():
# Consultamos el order book de spot en Bybit
orderbook = exchange.fetch_order_book('ETH/USDC')
bid = orderbook['bids'][0][0] if len(orderbook['bids']) > 0 else 0
ask = orderbook['asks'][0][0] if len(orderbook['asks']) > 0 else 0
return bid, ask
def monitor():
print("Arrancando el monitor de ineficiencias de mercado...")
while True:
try:
dex_p = get_dex_price()
cex_bid, cex_ask = get_cex_price()
if dex_p == 0 or cex_bid == 0:
continue
# Escenario 1: Más barato en DEX, más caro en CEX. Compramos en DEX, dumpeamos en CEX.
spread_to_cex = ((cex_bid - dex_p) / dex_p) * 100
# Escenario 2: Más barato en CEX, más caro en DEX. Compramos en CEX, dumpeamos en DEX.
spread_to_dex = ((dex_p - cex_ask) / cex_ask) * 100
if spread_to_cex > 0.5: # Umbral del 0.5% para cubrir comisiones y gas gastado
print(f"[!] ¡Señal! DEX más BARATO. DEX: {dex_p:.2f} | CEX Bid: {cex_bid:.2f} | Spread: {spread_to_cex:.2f}%")
if spread_to_dex > 0.5:
print(f"[!] ¡Señal! CEX más BARATO. CEX Ask: {cex_ask:.2f} | DEX: {dex_p:.2f} | Spread: {spread_to_dex:.2f}%")
time.sleep(2) # No le hagas spam al nodo ni al exchange para evitar baneos de IP
except Exception as e:
print(f"Error detectado en el loop: {e}")
time.sleep(5)
if __name__ == "__main__":
monitor()Táctica Avanzada: Volúmenes Cruzados (Hedging)
Mover tokens físicamente de una wallet a otra es del siglo pasado. Para cuando la transacción confirma on-chain y el exchange te procesa el depósito (pidiéndote entre 15 y 30 confirmaciones de red), el mercado ya se ha movido. El spread se evapora. Los pros explotan la ineficiencia de otra manera.
Nosotros dejamos los balances precargados en ambas plataformas de antemano.
Ejemplo: Tienes $1000 y 1 ETH de saldo en el CEX. Y tienes exactamente lo mismo en tu MetaMask en la red de Arbitrum.
El script salta: en el DEX el precio de ETH ha caído a $2900, mientras que en el CEX aguanta a $2950.
Tu jugada: En la misma milésima de segundo, ejecutas las órdenes en las dos puntas. Haces el Swap en el DEX (compras ETH con stables a $2900) y vendes 1 ETH en el CEX a $2950. En el mismo instante. El valor total de tus activos netos ha subido la delta del spread. Cero necesidad de transfers entre exchanges. Los saldos simplemente se han redistribuido internamente y el beneficio queda blindado en stablecoins. Luego, cuando el mercado esté tranquilo, ya harás el rebalanceo de cuentas mediante una transferencia normal.
Y lo más crítico de todo: cuidado con el "toxic flow" (flujo tóxico). Si el precio en el CEX está cayendo a plomo como un yunque, ni se te ocurra ir a pescar ese activo en el DEX a mano. El spread va a parecer gigantesco y super tentador, pero es simplemente porque el pool aún no ha tenido tiempo de recalcular su fórmula matemática. Vas a intentar coger un cuchillo que cae y, a los 5 segundos, los bots de arbitraje van a pasar por encima del pool reventándolo aún más abajo, dejándote atrapado con un montón de tokens devaluados que pierden valor a cada segundo.
Sniping de pools v3: Cómo no quedar liquidado con la liquidez concentrada
Si todavía creés que Uniswap v2 es la cúspide de la evolución, te quedaste varado en 2021. Hoy en día, la posta del volumen y los mejores spreads están en Uniswap v3 y sus forks (PancakeSwap v3, QuickSwap v3). Acá la mecánica de los AMM cambia de raíz. A diferencia de v2, donde la liquidez se desparrama desde cero hasta el infinito, en v3 la liquidez se concentra en rangos de precio específicos: los ticks.
¿Qué significa esto para nosotros? Un Price Impact demoledor apenas el precio saca la cabeza del rango con liquidez.
Si en un CEX meten un pump y en la pool v3 la liquidez del tick actual se agota, el precio dentro del DEX mete un salto cuántico (un tremendo squeeze). Vos ves un spread del 15%, le mandás un ape in ciego a la pool, pero el contrato te ejecuta la transacción al peor precio posible porque en ese rango tan estrecho directamente no había órdenes.
Fórmula de liquidez de Uniswap v2: x * y = k (Cambio de precio suavizado)
Fórmula de Uniswap v3: (x + L / √P_b) * (y + L * √P_a) = L^2 (Cambio escalonado por ticks)Para calcular a mano el spread real en una pool v3, no te alcanza con mirar las reservas. Tenés que scrapear y parsear el slot0 del smart contract de la pool.
Checklist para revisar una pool v3 antes de entrar:
- Pulleamos el sqrtPriceX96 desde la función slot0. Este es el precio actual formateado en la codificación nativa del contrato.
- Monitoreamos el tick actual.
- Chequeamos el depth de la liquidez (liquidity) en el tick跟. Si está rozando el cero, el spread es puro humo y te van a empomar una posición con el peor precio de entrada.
Envío de transacciones: Cómo primerear a los bots de MEV en la curva
Suponete que enganchaste un spread hermoso en Ethereum o Base. Mandás la transacción usando MetaMask normal. ¿Qué pasa ahí? Tu tx cae de cabeza al mempool (la fila pública). Los bots de MEV (Maximum Extractable Value) escanean el mempool 24/7. Te fichan la tx, ven que deja $100 netos de profit, y te clonan la misma transacción calcada pero pagando 1 gwei más de gas price.
El validador de la blockchain procesa primero la de ellos. El bot te sopla el spread en la cara. Tu transacción se ejecuta atrás, pero ya entra en pérdida o tira un revert (se cancela), quemándote el gas de arriba. Te acaban de meter un front-running de manual. Una patada ahí abajo, pero así se juega acá.
Cómo cubrirse:
- Usá un RPC privado. Olvidate por completo de las configs por defecto de la wallet. Para Ethereum Mainnet, clavale el RPC de Flashbots (https://rpc.flashbots.net). En redes como BNB Chain o Polygon, buscate nodos privados especializados (como MEV-Share o MevBlocker). Tu transacción viaja directo a los validadores sin pasar por el mempool público. Los bots ni la ven venir.
- Seteá un Slippage Tolerance ultra ajustado. En las opciones del DEX, poné la tolerancia de deslizamiento en 0.5% máximo para pares líquidos, y estiralo a 1-1.5% como mucho para shitcoins. Si un bot te quiere correr el precio, la tx se va directo a revert y salvás el grueso del capital (más allá de perder dos mangos de gas).
Caso práctico: Desarmando un loop real
Vamos a ver cómo se cierra un loop perfecto, sin dar vueltas. Token X (un activo cualquiera de un juego descentralizado).
- Monitoreo: En Bybit el precio del token se desploma de $1.00 a $0.90 por el dump masivo de un seed investor. El libro de órdenes de compra (el bid) está cargadísimo.
- Análisis del DEX: En PancakeSwap (red BNB Chain) el precio viene con lag y todavía aguanta en $0.98. La pool de liquidez tiene $200,000.
- Cálculo del size: Queremos pasar un volumen de $2,000. Revisamos el Price Impact en PancakeSwap. Al reventar $2,000 contra la pool, el precio se mueve apenas un 0.3%. O sea, promediamos la venta en unos $0.977.
Los números del loop:
- Compra en Bybit: $2,000 / $0.90 = 2222.2 Tokens X.
- Comisión del CEX (Taker 0.1%): nos descuentan 2.2 tokens. Quedan 2220.
- Retiro a la wallet: La fee de red es fija y se lleva 10 Tokens X. Nos caen 2210 tokens netos a la wallet.
- Venta en el DEX: 2210 * $0.977 = $2159.17.
- Menos el gas del Swap en el DEX: aprox. ~$0.15 (en la red BNB).
- Profit neto: $159.02 metiendo un solo loop que llevó 3 minutos.
Los market makers de Bybit arbitraron el precio con el DEX más o menos 4 minutos después de nuestro trade. La ventana se cerró. El que pestañea, pierde.
El arsenal de herramientas de un spread farmer pro
Si no tenés ganas de picar todo el software de cero, este es el tech stack base que manejamos nosotros y la mayoría de los equipos medianos:
- DeXito / Dexscreener / GeckoTerminal — Para cazar anomalías visualmente en el mercado. Tené siempre abierta la pestaña de "Arbitrage" en estas plataformas analíticas.
- DeBank / Arkham — Para stalkear las wallets de los mejores arbitradores. ¿Encontraste una dirección que no para de imprimir en el mempool? Metela de una a la watchlist y hacele ingeniería inversa para ver de qué pools está sacando leche.
- Tenderly — Simulador de transacciones clave. Si vas a mover mucho size y estás con el culo en la mano por miedo a que falle el smart contract, corré la tx primero en Tenderly. Te canta exactamente cuánto gas vas a quemar y si la lógica pasa en vivo.
Operar esto a mano se puede, pero tu peor enemigo va a ser un parpadeo de colgado. Le erraste de red, no calculaste la fee de retiro del CEX o le diste al swap sin mirar el slippage, y tu profit se lo regalas en bandeja a los validadores de la red. Hay que ser pragmáticos: calculá los costos hasta el microcentavo y no te dejes llevar por la codicia.