Cómo hacer backtesting de estrategias de Polymarket sobre el order book
Un último precio muestreado una vez por hora no te dice si tu orden se habría ejecutado. Aquí te mostramos cómo hacer backtesting de Polymarket contra el libro contra el que realmente habría operado.
Para hacer backtesting de una estrategia de Polymarket de forma correcta debes reproducir el order book histórico contra el que la estrategia habría operado —la escalera completa de bid/ask en cada cambio— y dimensionar los fills contra la liquidez que realmente estaba en reposo allí. Hacer backtesting sobre un último precio o un solo mid sobrestima sistemáticamente tu edge porque oculta el spread y el slippage que paga una orden real.
Por qué los backtests con último precio mienten
La mayoría de los datos de Polymarket disponibles de forma gratuita son el último precio negociado, a menudo muestreado una vez por hora. Eso alcanza para dibujar un gráfico y nada más. Un backtest necesita responder una pregunta más difícil: si mi orden hubiera estado en reposo (o hubiera cruzado el spread) en ese momento, ¿se habría ejecutado, en qué tamaño y a qué precio?
Responder eso requiere el order book —cada bid y ask en reposo con su tamaño—, no un solo número. Una estrategia probada contra el mid asume que siempre se ejecutó al mid con cero slippage, lo cual nunca es cierto. En los mercados cripto de corto plazo, donde los spreads se ensanchan cerca de la liquidación, esa suposición puede convertir una estrategia perdedora en una aparente ganadora.
Paso 1 — Consigue datos de order book con profundidad completa
Parte de datos que registren el libro completo en ambos lados, capturados en cada cambio y no contra un reloj fijo. DepthFeed captura Polymarket orientado a eventos directamente desde el websocket del CLOB, de modo que cada evento de libro y de cambio de precio se registra con la escalera completa de bid/ask —no un muestreo horario o por minuto que se salta la vida de un mercado de cinco minutos.
Obtén los mercados que quieras a través de la API REST: descúbrelos con GET /v3/{coin}/markets y luego trae la profundidad desde /v3/{coin}/markets/{id}/snapshots. Cada snapshot lleva arreglos de precio y tamaño de bid/ask más timestamps de exchange y de recepción en epoch-millis.
Paso 2 — Reconstruye el libro en cada momento
Reproduce los snapshots en orden de timestamp para reconstruir el libro tal como estaba en cualquier instante. Como los datos están orientados a eventos, la reconstrucción es exacta entre eventos —no hay adivinanzas de interpolación. Este es el estado al que reacciona tu estrategia: el mejor bid, el mejor ask, la profundidad detrás de cada uno y el spread.
Paso 3 — Modela los fills contra la profundidad real
Ahora simula la ejecución con honestidad. Una orden marketable recorre el libro: se ejecuta primero contra el mejor nivel, luego contra el siguiente, hasta agotar su tamaño —así que su precio promedio es peor que el touch siempre que consuma más que el nivel superior. Una orden en reposo se une a la cola y solo se ejecuta si el mercado opera a través de su precio con suficiente tamaño detrás.
Dimensionar los fills contra la escalera registrada es justamente el punto: te da un slippage y una probabilidad de fill realistas en lugar de la ficción de que siempre operaste al mid.
Paso 4 — Une el precio del subyacente
Los mercados cripto up/down de Polymarket están impulsados por el movimiento spot del activo subyacente. Cada snapshot de DepthFeed se une a un precio de referencia de Binance de alta frecuencia por timestamp en epoch-millis, así que puedes alinear el estado del libro con el movimiento spot que repreció el contrato —esencial para cualquier estrategia que opere la relación entre el precio cripto y la probabilidad implícita del mercado.
Paso 5 — Pasa a vivo con el mismo código
La API REST histórica y el stream WebSocket en vivo emiten los mismos objetos JSON de snapshot. Eso significa que el loader que escribiste para reproducir la historia lee el feed en vivo sin cambios —no hay reescritura entre la investigación y la producción. Haz el backtest, valida y luego apunta el mismo código a wss://api.depthfeed.com/v3/stream y opera.
Errores comunes
- Usar datos de último precio: oculta el spread y el slippage; infla los retornos del backtest.
- Snapshots de intervalo fijo: un muestreo horario o por minuto se pierde la mayor parte de la vida de un mercado de 5 minutos.
- Ignorar la posición en la cola: asumir que las órdenes en reposo siempre se ejecutan sobrestima las estrategias pasivas.
- Sesgo de anticipación (look-ahead): reacciona solo a datos con un timestamp de recepción igual o anterior al momento de tu decisión.
- Saltarse el subyacente: el edge cripto up/down suele vivir en la relación spot-a-probabilidad.
Key takeaways
- 01Haz backtesting contra el order book, no contra el último precio —la profundidad es lo que determina los fills.
- 02Usa datos orientados a eventos: los muestreos de intervalo fijo se pierden la vida de los mercados de corto plazo.
- 03Modela las órdenes marketable recorriendo el libro y las órdenes en reposo esperando en la cola.
- 04Une el precio cripto subyacente para capturar la relación spot-a-probabilidad.
- 05Elige datos cuya historia y feed en vivo compartan un mismo formato, para que operes el código que probaste.
Un último precio muestreado una vez por hora no te dice si tu orden se habría ejecutado. Aquí te mostramos cómo hacer backtesting de Polymarket contra el libro contra el que realmente habría operado.
Empieza gratis