Tutorial de Bot de Polymarket · Capítulo 11 de 32
Cómo funcionan los mercados multiresultado NegRisk en Polymarket: mecánica de suman-1, el flag negRisk en órdenes CLOB, por qué los tramos YES entre mercados NegRisk no son intercambiables y mejores prácticas de ejecución.
Qué cubre este capítulo
Los mercados NegRisk son el mecanismo de Polymarket para eventos multiresultado mutuamente excluyentes - los candidatos de la elección de 2024, el ganador de la Premier League, llaves de torneos. La mayoría de los bots fallan al manejarlos correctamente en el primer intento porque la colocación de órdenes requiere un flag que se omite silenciosamente si falta. Este capítulo cubre la mecánica y la ruta de código de producción.
- Qué significa NegRisk (tramos Yes mutuamente excluyentes)
- Por qué los totales YES se mantienen cerca de 1 USD
- El parámetro neg_risk en la colocación de órdenes
- Cobertura entre tramos NegRisk
- Cuándo funciona el arb de NegRisk (y cuándo no)
- Casos límite de resolución
- Código: colocar una orden NegRisk
Qué significa NegRisk (tramos Yes mutuamente excluyentes)
NegRisk (abreviatura de "negative risk") es el mecanismo de Polymarket para eventos con múltiples resultados mutuamente excluyentes - solo uno puede resolver YES. La Elección Presidencial de 2024 fue un evento con NegRisk: una posición Trump-YES y una posición Harris-YES no pueden ambas pagar.
Por debajo: un solo evento NegRisk tiene un question_id padre y N mercados hijos, cada uno con su propio YES/NO. El exchange impone suman-1 entre los tramos YES al resolver - exactamente uno resuelve 1.0 y los demás 0.0.
Desde la perspectiva de un bot, el tramo YES de cada resultado se negocia como su propio token, con su propio libro y precio. El flag negRisk en la colocación de órdenes (abajo) enruta la operación al contrato de exchange específico de NegRisk; si falta, se envía al exchange CTF estándar y la liquidación falla silenciosamente.
Por qué los totales YES se mantienen cerca de 1 USD
Los arbitrajistas mantienen de forma continua la suma de los precios YES en todos los tramos NegRisk en ≈ 1.0. Si Trump-YES está en 0.55 y Harris-YES en 0.40 y no hay otros candidatos competitivos, el 0.05 faltante es aproximadamente la probabilidad implícita de "cualquier otro resultado". Cuando el tramo faltante excede la probabilidad implícita de la cola, existe una oportunidad de arb: comprar todos los tramos YES proporcionalmente, sumar menos de 1.0 y asegurar la diferencia.
En la práctica, el arb es competitivo - el descuento visible suele ser de 1-2 centavos en eventos líquidos y desaparece en minutos desde la apertura. El arb también está limitado por liquidez: puedes asegurar $1k de descuento, pero no $20k.
La mayoría de los bots no están haciendo arb de NegRisk; operan tramos individuales y solo necesitan respetar el flag negRisk para que la ejecución sea correcta.
El parámetro neg_risk en la colocación de órdenes
En los SDKs CLOB v2, la colocación de órdenes toma un objeto de flags con un booleano negRisk. El valor debe coincidir con el tipo de mercado:
// Node (CLOB v2)
await client.createAndPostOrder(
{ tokenID, price: 0.45, size: 10, side: Side.BUY },
{ tickSize: '0.01', negRisk: true }, // <-- TRUE for NegRisk
OrderType.FOK
);
El flag también es un parámetro en la firma de la op daemon que usan la mayoría de los bots de producción:
{ op: 'buy', tokenID, price, size, neg_risk: true, order_type: 'FOK' }
Fuente de verdad: market.negRisk desde la Gamma API. Léelo siempre; nunca lo hardcodees. Un mercado BTC-up/down es negRisk: false (binario); un mercado ganador de torneo es negRisk: true (multiresultado). Cruzar los cables envía órdenes al exchange equivocado y produce fallas de transferencia al momento del settlement.
Cobertura entre tramos NegRisk
Si tienes Trump-YES a 0.50 y quieres cubrirte contra una caída de Trump, existen dos opciones dentro de NegRisk.
Comprar un tramo NO competidor (por ejemplo Harris-NO a 0.45). Esto paga si Harris pierde, lo que incluye que Trump gane. Es asimétrico - paga si Trump gana, pero no vale nada si Trump pierde contra un tercer candidato.
Comprar todos los tramos YES competidores en proporción. Si tu portafolio está completamente balanceado entre los tramos NegRisk, tu exposición queda cubierta: exactamente uno pagará. Esta es la posición de efectivo sintético.
El instrumento de cobertura que NO funciona como se espera: un tramo NO de tu mercado existente. Trump-NO está correlacionado con los otros tramos YES pero no perfectamente - si la resolución es "Other", tanto tu Trump-YES como tu Trump-NO van a 0. Los tramos NegRisk no son binarios puros.
Cuándo funciona el arb de NegRisk (y cuándo no)
El arb de NegRisk de "sumar menos de 1.0" funciona cuando se cumplen tres condiciones.
- Todos los tramos son líquidos: cada tramo que necesitas comprar tiene al menos $1k de profundidad al precio que necesitas. El arb requiere golpear múltiples libros simultáneamente; un tramo ilíquido rompe toda la operación.
- Spread lo suficientemente ajustado: el spread-tax acumulado en todos los tramos debe ser menor que el descuento. Cinco tramos con spread de 0.5c cada uno cuestan 2.5c; si el descuento es 1.5c, el arb es negativo.
- Puedes mantener hasta la resolución: el arb de NegRisk es arb de settlement. Recibes el payout cuando se resuelve el evento padre; si eso es dentro de 6 meses, tu capital queda bloqueado.
Para el 95% de los bots, el arb de NegRisk no es la estrategia. Las estrategias restantes operan tramos individuales y el flag negRisk existe solo para asegurar que la orden se enrute correctamente.
Casos límite de resolución
Dos casos límite a tener en cuenta al mantener posiciones NegRisk hasta la resolución.
Resultados "ninguna de las anteriores": algunos eventos NegRisk incluyen un tramo explícito "Other" o "None of the above". Si la respuesta real no coincide con ningún tramo nombrado, este es el ganador. Los bots que no modelan el tramo Other explícito a veces lo tratan como un caso degenerado y pierden el payout.
Resoluciones disputadas: la resolución de NegRisk pasa por UMA como cualquier otro mercado. Si se disputa, el mercado puede quedar sin resolver durante 24-72 horas. Durante esta ventana, el front-end puede mostrar "resolved" mientras los payouts on-chain todavía no están definidos. Leer payoutNumerators en el contrato CTF es la única forma segura de confirmarlo.
Código: colocar una orden NegRisk
Ejemplo completo en Node colocando una compra de un tramo YES de NegRisk.
import { ClobClient, Side, OrderType } from "@polymarket/clob-client-v2";
import { Wallet } from "ethers";
const c = new ClobClient({
host: "https://clob.polymarket.com", chain: 137,
signer: new Wallet(process.env.PRIVATE_KEY),
creds: { key: K, secret: S, passphrase: P },
signatureType: 2,
funderAddress: process.env.POLY_FUNDER,
});
// market.negRisk === true (verified via Gamma earlier)
const resp = await c.createAndPostOrder(
{ tokenID: "<YES_TOKEN_ID>", price: 0.42, size: 25, side: Side.BUY },
{ tickSize: "0.01", negRisk: true },
OrderType.FOK
);
console.log(resp.status, resp.orderID);
El bug más común para los builders nuevos: omitir negRisk: true en un mercado NegRisk. La orden es aceptada por el CLOB pero el settlement falla. Siempre lee market.negRisk desde Gamma y pásalo; nunca dependas de adivinarlo por el título de la pregunta.










