Tutorial de Bot de Polymarket · Capítulo 16 de 32
Arbitraje estadístico en Polymarket: pares entre mercados cruzados (eventos correlacionados), spreads Polymarket-vs-Kalshi, reversión a la media y cómo dimensionar posiciones de stat-arb cuando los mercados finalmente se resuelven.
Qué cubre este capítulo
El arbitraje estadístico en Polymarket aprovecha las malas valuaciones transitorias entre mercados correlacionados: el mismo evento en Polymarket vs Kalshi, o mercados relacionados dentro de Polymarket. Los edge son pequeños (1-3 centavos típicamente) y operacionalmente frágiles. Este capítulo es honesto sobre lo que funciona, lo que no, y el riesgo de ejecución en múltiples patas que arruina la mayoría de los intentos.
El arbitraje estadístico entre mercados explota inconsistencias transitorias de precio entre Polymarket y Kalshi, Polymarket y Manifold, o entre mercados correlacionados dentro de Polymarket. Los edge son pequeños (1-3 centavos típicamente) y requieren ejecución rápida en ambas patas. Este capítulo es el playbook honesto, incluyendo la complejidad operativa que arruina la mayoría de los intentos.
- Qué significa stat-arb en mercados de predicción
- Ejemplos de spreads Polymarket-vs-Kalshi
- Pares dentro de Polymarket (eventos correlacionados)
- Reversión a la media vs continuación de tendencia
- Dimensionamiento para mercados que se resuelven (no perpetuos)
- Riesgo: divergencia pasada la resolución
- Código: monitor de pares y trigger por umbral
Qué significa stat-arb en mercados de predicción
El arbitraje estadístico en mercados de predicción significa operar el spread entre dos mercados que deberían cotizar de manera consistente. Hay tres variantes comunes en Polymarket.
- Entre venues: el mismo evento en Polymarket y Kalshi (o Manifold, PredictIt). El precio debería converger; en la práctica, se desvía 2-5 centavos.
- Par del mismo evento: padre vs suma de patas en mercados multi-outcome de NegRisk. La invariante suma-a-1 permite arbitraje cuando las patas suman menos de 1.0.
- Par de eventos correlacionados: dos mercados sobre resultados relacionados (por ejemplo, "Trump presidente el 1 de enero" vs "Trump presidente el 1 de marzo"). Deberían cotizar dentro de 2-3 centavos entre sí.
Los edge son pequeños. La complejidad operativa es real. La mayoría de los intentos mueren en la ejecución, no en la teoría.
Ejemplos de spread Polymarket-vs-Kalshi
Por observación en 2025-26, Polymarket y Kalshi listan los mismos eventos importantes de EE. UU., pero cotizan de forma consistente con una diferencia de 1-4 centavos. La brecha existe por razones estructurales que necesitas modelar en cualquier arbitraje.
Factores estructurales:
- Asimetría de comisiones: Kalshi cobra 4-7% sobre las operaciones ganadoras (varía según el mercado); Polymarket cobra 0 de fee como taker. La matemática del arbitraje debe descontar el mordisco de Kalshi.
- Prima por riesgo de settlement: cuando la resolución de un mercado es ambigua, el UMA de un venue puede resolver distinto a los árbitros del otro. El mercado pone eso en precio.
- Población de traders: Polymarket tiende a ser más joven y más nativo cripto; Kalshi tiende a ser más profesional / hedge. Discrepan sistemáticamente sobre los mismos eventos.
El arbitraje funciona cuando la brecha supera la prima estructural más las comisiones. Un spread de 5 centavos en un mercado donde la prima estructural es 1c y las comisiones combinadas son 1c representa un edge real de 3c.
Pares dentro de Polymarket (eventos correlacionados)
Dentro de Polymarket, los pares de eventos correlacionados son más fáciles de arbitrar que entre venues. Misma estructura de comisiones, misma wallet, ejecución atómica viable.
Ejemplos que de forma consistente cotizan de manera inconsistente:
- Trump presidente en la fecha A vs Trump presidente en la fecha B (donde B es posterior a A por < 90 días).
- ¿Bitcoin llegará a $100k para el 31 de julio vs $100k para el 31 de agosto?
- Patas Yes vs No del mismo mercado binario (la suma debería = 1.0; a veces se desvía hasta 1.04 en books ilíquidos).
El arbitraje Yes+No=1 es el más limpio: lee ambas patas del mismo mercado, dispara FOK en ambas si la suma cae por debajo de 0.97 (permitiendo el spread tax). El capital requerido es aproximadamente equivalente en cada pata; la ejecución es atómica cuando ambos fills regresan en la misma respuesta.
Reversión a la media vs continuación de tendencia
Dos regímenes de stat-arb. Reversión a la media: el par se separó por una razón de ruido; apuestas a la convergencia. Continuación de tendencia: el par empezó a divergirse porque llegó información nueva; apuestas a una divergencia mayor.
La parte difícil es distinguirlos. Heurística: si la divergencia ocurrió con volumen visible (una ballena barrió un lado del book), es noticia; solo fadea si tienes un modelo. Si se desvió lentamente con bajo volumen, es ruido; tradea reversión con confianza.
Para builders nuevos: opera solo reversión a la media, en pares donde la divergencia sea < 1 desviación estándar del drift histórico. La continuación de tendencia requiere un modelo que capte la noticia; sin uno, estás operando contra flujo informado.
Dimensionamiento para mercados que se resuelven (no perpetuos)
Los mercados de predicción se resuelven. Los pares cripto no. Esto cambia la matemática.
Una posición de pair-arb en Polymarket tiene un payout schedule fijo: cuando ambos mercados se resuelven, la diferencia entre el spread predicho y el spread real queda bloqueada. No hay rollover, ni holding infinito.
Implicación para el sizing: el máximo que puedes mantener está limitado por el tiempo hasta la resolución, porque el capital queda inmovilizado hasta entonces. Un par que se resuelve en 6 meses puede darte 3c por share, pero no puedes poner más capital a trabajar mientras tanto si ambos mercados ya están completamente dimensionados.
El marco correcto: el stat-arb en Polymarket es una serie de trades de tiempo acotado, no una estrategia continua. Compara PnL por unidad de capital inmovilizado por día, no PnL bruto.
Riesgo: divergencia pasada la resolución
El peor resultado de stat-arb es que tu predicción-de-convergencia esté equivocada porque la premisa subyacente era incorrecta. Ejemplos:
- Vendiste en corto "Trump presidente el 1 de abril" esperando que convergiera hacia "Trump presidente el 1 de marzo" - pero el mercado de fecha 1 resuelve YES y el de fecha 2 resuelve NO por un impeachment en marzo. Tu tesis de que "el spread debería quedar plano" estaba mal.
- Hiciste arbitraje entre Polymarket y Kalshi sobre el mismo ganador de las Finales de la NBA. Polymarket resuelve al equipo que ganó la serie oficial; Kalshi resuelve bajo una definición ligeramente distinta que incluye de forma diferente los desempates en overtime. Ambos resuelven YES según sus términos, pero en direcciones opuestas.
Lee con cuidado los criterios de resolución de cada mercado. El arbitraje cross-venue está a una resolución mal emparejada de una pérdida total en ambas patas.
Código: monitor de pares y trigger por umbral
Referencia: monitorear dos tokens correlacionados, disparar arbitraje cuando el spread cruza el umbral.
def pairs_monitor(token_a, token_b, threshold_cents=3, size=10):
"""Buy A and Sell B when (1 - ask_A) + bid_B > 1 + threshold."""
while True:
book_a = fetch_book(token_a)
book_b = fetch_book(token_b)
if not (book_a.best_ask and book_b.best_bid):
time.sleep(2); continue
# implied: cost of buying A at ask + value of selling B at bid
edge = (1 - book_a.best_ask) + book_b.best_bid - 1
if edge > threshold_cents / 100:
print(f"ARB edge={edge:.3f}; firing")
r_a = fok_buy(token_a, price=book_a.best_ask, size=size)
if r_a.status != "matched": continue
r_b = fok_sell(token_b, price=book_b.best_bid, size=size)
if r_b.status != "matched":
# leg A filled, B failed -- unhedged, exit A
fok_sell(token_a, price=book_a.best_bid, size=size)
time.sleep(3)
El cleanup-on-partial-fill es crítico. Sin eso, una ejecución parcial deja al bot expuesto direccionalmente, que es exactamente lo opuesto al propósito del stat-arb.





