Berke Özyaşar
Blog

Bot de arbitraje en Polymarket: cuando YES más NO baja de 1 dólar

Arquitectura y riesgos de un bot de arbitraje merge que, cuando el precio total de los tokens YES y NO de Polymarket baja de 1 dólar, compra ambos lados y los fusiona.

·

Polymarket es un mercado de predicción que funciona sobre la red Polygon. Cada mercado tiene una pregunta (por ejemplo, «¿Subirá Bitcoin en los próximos 15 minutos?») y en él se negocian dos tokens de resultado: YES y NO. Soy Berke Özyaşar y he desarrollado bots en Python que rastrean las pequeñas incoherencias que se producen entre los precios de estos mercados y operan de forma automática. En este artículo explico la idea del arbitraje merge en la que se basan los bots de Polymarket, la arquitectura del bot y los riesgos reales del asunto.

La idea básica: 1 YES + 1 NO = 1 USDC

Polymarket usa los contratos inteligentes del Conditional Token Framework (CTF) desarrollado por Gnosis. En esta estructura hay dos operaciones básicas:

  • Split: se deposita 1 USDC como garantía y, a cambio, se reciben 1 token YES y 1 token NO del mismo mercado.
  • Merge: se devuelven al contrato 1 token YES y 1 token NO, y se recupera 1 USDC de garantía.

Se resuelva como se resuelva el mercado, uno de los tokens valdrá 1 dólar y el otro 0. Es decir, un set completo formado por un YES y un NO siempre vale 1 dólar, y eso lo garantiza el contrato. En un mercado eficiente, la suma del mejor precio de venta de YES y del mejor precio de venta de NO debería rondar 1 dólar. Pero, sobre todo en los mercados cripto «Up or Down» de corta duración, de 5 a 15 minutos, los precios se mueven rápido y esa suma a veces baja de 1 dólar.

Un ejemplo: si en un mercado «Down» se vende a 74 centavos y «Up» a 22 centavos, comprar los dos lados cuesta 96 centavos. Al hacer merge de esos dos tokens se recuperan 100 centavos; los 4 centavos de diferencia son el margen bruto antes de comisiones. Da igual hacia dónde vaya el precio.

La estructura híbrida de Polymarket

Para entender cómo funciona el bot hay que conocer las dos capas de Polymarket. Las órdenes se casan fuera de la cadena, en un libro de órdenes central (CLOB); enviar y cancelar órdenes no requiere gas, y las órdenes se firman con el estándar EIP-712. Las operaciones casadas se liquidan en Polygon; operaciones como split, merge y redeem se hacen directamente on-chain. Como garantía se usa USDC.e, y para el gas de las operaciones on-chain, POL.

Esta estructura tiene una consecuencia importante para el arbitraje: la compra de los dos lados se hace fuera de la cadena y el merge, on-chain. Es decir, las dos compras no son una única operación atómica. Volveré a por qué esto es crítico en la sección de riesgos.

La arquitectura del bot

El bot se compone de cuatro piezas principales.

1. Descubrimiento de mercados

A través de la Gamma API de Polymarket se obtienen los mercados cripto «up-or-down» activos. Para cada mercado se guardan el conditionId y los identificadores de los tokens YES/NO. Como los mercados de corta duración se abren y cierran sin parar, esta lista se renueva con regularidad.

2. Escáner

Aproximadamente cada dos segundos, el escáner lee desde la CLOB API el libro de órdenes de ambos tokens, suma los mejores precios de venta y calcula la diferencia respecto a 1 dólar. Aquí lo que importa no es la diferencia bruta, sino el beneficio neto. La comisión taker de Polymarket en los mercados cripto depende del precio: es máxima en torno a los 50 centavos y disminuye a medida que el precio se acerca a los extremos. El escáner calcula por separado la comisión de cada lado según su precio y añade además el coste en gas del merge. Las oportunidades que quedan por debajo de los umbrales de diferencia mínima y beneficio mínimo se descartan. El tamaño de la operación también se limita a la cantidad disponible en el nivel superior del libro de órdenes; una orden más grande movería el precio en su contra.

3. Ejecutor

Cuando se encuentra una oportunidad, se envían las órdenes firmadas de los dos lados de la forma más simultánea posible. En Python uso para ello la librería py-clob-client; la firma de órdenes y las credenciales de la API se gestionan a través de ella.

4. Merge o mantener hasta la resolución

Cuando los dos lados se han ejecutado, se llama con web3.py a mergePositions() del contrato CTF y el USDC.e vuelve a la cartera. Como alternativa, la posición puede mantenerse hasta que se resuelva el mercado; así se ahorra el gas del merge, pero el capital queda bloqueado durante ese tiempo. En una estrategia que opera con frecuencia, recuperar el capital de inmediato suele tener más sentido.

Segunda estrategia: Dump & Hedge

En el arbitraje merge puro, las oportunidades se cierran rápido. Por eso el bot incluye también una segunda estrategia llamada «Dump & Hedge»:

  • Cuando el precio de un lado cae de golpe (10 centavos o más), se compra ese lado.
  • Cuando el coste total, junto con el otro lado, baja a 95 centavos o menos, se compra también el otro lado y se completa el set.
  • Si esta condición no se da dentro de un plazo determinado, se compra el lado contrario aunque sea con pérdidas, para no quedarse con un solo lado (cobertura stop-loss temporizada).

Esta estrategia captura más oportunidades, pero por definición mantiene durante un tiempo una posición abierta de un solo lado; es decir, tiene más riesgo que el arbitraje puro.

Infraestructura

  • Lenguaje y librerías: Python, py-clob-client y web3.py. Polymarket también tiene SDK en TypeScript y Rust; se pueden considerar cuando la latencia es más crítica.
  • RPC: Los endpoints RPC públicos de Polygon pueden ser lentos e inestables; usar un proveedor de RPC de pago influye directamente en la latencia.
  • Monitorización: Los resultados del escaneo, las órdenes enviadas, el estado de ejecución y los merges se siguen en paneles de Grafana. En mi opinión, poner en marcha un bot sin ver lo que hace es un riesgo en sí mismo.
  • Parada de emergencia: Un kill switch que detiene todas las operaciones con un solo comando ante cualquier imprevisto.

Riesgos: no existe el «arbitraje sin riesgo»

Sobre el papel, el arbitraje merge parece independiente del resultado, pero en la práctica tiene riesgos serios:

  • Riesgo de un solo lado: Después de ejecutarse el primer lado, el precio del segundo puede cambiar o la orden puede no ejecutarse nunca. En ese caso te queda una posición de un solo lado convertida en una apuesta direccional.
  • Erosión por comisiones: Si la comisión taker más el gas superan la diferencia, en lugar de beneficio hay pérdida. Como la comisión depende del precio, hay que rehacer el cálculo en cada oportunidad.
  • Deslizamiento y liquidez: El libro de órdenes puede tener poca profundidad. El precio que ves y el precio en el momento en que llega la orden pueden no ser el mismo.
  • Competencia: Hay otros bots rastreando las mismas oportunidades; pueden cerrarse en muy poco tiempo.
  • Límites de frecuencia: Delante de las API está Cloudflare; hacer peticiones con demasiada frecuencia puede provocar un bloqueo. La lógica de reintentos y la frecuencia de peticiones deben ajustarse a ello.
  • Sin entorno de pruebas: Polymarket no tiene una red de pruebas; cada operación se hace con dinero real. Por eso hay que probar cada nueva versión con importes muy pequeños.
  • Restricciones de acceso: Polymarket restringe el acceso desde algunos países; tienes que comprobar las normas del lugar donde te encuentras y las condiciones de uso de la plataforma.

Este artículo no es una recomendación de inversión. Un bot de arbitraje está diseñado para aprovechar oportunidades en determinadas condiciones; también es posible que pierda dinero por las comisiones, el deslizamiento y la liquidez.

Si estás pensando en tu propio bot

Si tienes una idea de bot para Polymarket o mercados similares, primero hay que traducir la estrategia a reglas claras y después avanzar con importes pequeños y una buena infraestructura de monitorización. Explico cómo trabajo en este tipo de proyectos en la página de bots de trading; puedes contactarme desde allí o desde la página de contacto.

Más artículos

Publiquemos tu app juntos.

Cuéntame en pocas frases lo que quieres hacer. Respondo el mismo día.

↑ ↓ para navegar, Enter para abrir, Esc para cerrar