Compara Kalshi y Polymarket de forma segura
Comparar Kalshi y Polymarket empieza por el contrato. Dos listados pueden describir el mismo evento en términos simples mientras pagan sobre resultados, ventanas de observación, fuentes de datos o límites distintos. Poner sus precios uno junto al otro antes de revisar esos términos crea una comparación que parece precisa entre dos afirmaciones distintas.
Dino empareja los listados relacionados en un objeto Market y mantiene las diferencias de resolución asociadas a ese objeto. Este tutorial usa el SDK de Python para inspeccionar un par y calcular una diferencia de precio solo después de revisar las comprobaciones de contrato.
Obtén un Market emparejado y su detalle
Crea una clave de API gratuita e instala el cliente. Luego solicita una familia de mercados abiertos. Este ejemplo usa clima porque sus diferencias de estación y bucket son fáciles de ver en la divulgación:
export DINO_API_KEY=sk_live_...
pip install dino-markets
from dino_markets import Dino
client = Dino()
catalog = client.markets(
category="weather",
market_type="weather_high",
status="open,live",
limit=20,
)
summary = next(
(
market
for market in catalog["markets"]
if market["coverage"]["kalshi"]
and market["coverage"]["polymarket"]
),
None,
)
if summary is None:
raise SystemExit("No two-venue weather comparison is available right now.")
market = client.market(summary["id"])
El resultado de la lista entrega un id estable de Dino más los precios retrasados actuales. client.market(id) agrega contexto normalizado, identidades de cada plataforma, profundidad de mercado y divulgación de resolución para una comparación completa.
Convierte la divulgación en una lista de comprobación
La siguiente función deja visibles cuatro comprobaciones antes de cualquier cálculo de precio:
def comparison_checks(market):
settlement = market.get("settlement") or {}
risks = settlement.get("risks") or []
served_blocking = [
risk
for risk in risks
if risk.get("severity") == "high"
]
fully_priced = bool(market["outcomes"]) and all(
outcome.get("kalshi") is not None
and outcome.get("polymarket") is not None
for outcome in market["outcomes"]
)
return {
"entity_match_served": market["match"] == "high_confidence",
"full_price_coverage": fully_priced,
"settlement_parity": settlement.get("parity") is True,
"served_blocking_risks": served_blocking,
}
checks = comparison_checks(market)
print(checks)
match responde la pregunta de identidad: Dino tiene evidencia suficiente de que los listados representan el mismo evento o la misma afirmación subyacente como para mostrarlos juntos. La cobertura completa de precio responde si cada resultado se puede comparar entre ambas plataformas. La paridad de resolución y la lista de riesgos entregada muestran si los resultados emparejados pagan bajo términos compatibles, sujeto a la divulgación de cancelación de abajo.
Un Market puede ser una comparación válida entre plataformas mientras lleva una advertencia de resolución. En ese caso su signal permanece en spread, y la advertencia debe ir junto a los precios. Una Opportunity confirmada tiene una puerta más alta y viene del recurso separado /v2/arbitrage.
Lee el contrato por capas
Usa los campos de detalle del Market como un orden fijo de revisión:
| Comprobación | Campo | Qué verificar |
|---|---|---|
| Identidad | match, title, contexto de categoría | Ambos listados de plataforma se refieren al mismo evento o afirmación. |
| Resultados | outcomes[].key, outcomes[].name | Los buckets cubren los mismos resultados del mundo real. |
| Cobertura | coverage, precios de resultado | Ambas plataformas tienen un precio real donde la comparación lo necesite. |
| Resolución | settlement.parity, settlement.risks[], settlement.kalshi_text, settlement.poly_text | Las fuentes de resolución y los límites de corte son compatibles o están divulgados. Lee el texto de reglas de cada plataforma para conocer la redacción de cancelación. |
El settlement.risks[] entregado omite deliberadamente los eventos internos cancel_*. Lee kalshi_text y poly_text para conocer los términos de cancelación de cada plataforma. Dino calcula settlement.parity y signal a partir del conjunto completo de riesgos internos, antes de filtrar esos eventos de la lista pública de riesgos.
Los mercados de clima muestran por qué importa cada capa. Dos contratos de máxima diaria pueden nombrar la misma ciudad mientras resuelven desde estaciones meteorológicas distintas. Sus rangos de temperatura también pueden estar desfasados por un grado. Dino mantiene los buckets reales de cada plataforma y reporta los solapamientos en lugar de inventar un precio combinado.
Los mercados de umbral de cripto exponen un problema de límite distinto. Una plataforma puede resolver "en o por encima de" un strike, mientras la otra usa "por encima de". Una diferencia de precio justo en el umbral se refiere entonces a contratos con conjuntos ganadores distintos, incluso cuando ambos títulos mencionan el mismo activo y número.
Calcula las diferencias de precio al final
Una vez que se revisó la divulgación, calcula la diferencia observada para cada resultado con precio completo:
for outcome in market["outcomes"]:
kalshi = outcome.get("kalshi")
polymarket = outcome.get("polymarket")
if kalshi is None or polymarket is None:
continue
gap_pts = abs(kalshi - polymarket) * 100
print(
outcome["name"],
f"Kalshi {kalshi:.2f}",
f"Polymarket {polymarket:.2f}",
f"gap {gap_pts:.1f} pts",
)
El resultado es un spread entre plataformas en el timestamp priced_at del Market. Indica qué tan separados están los dos precios observados. La ejecución requiere datos actuales del libro de órdenes, tamaño disponible, comisiones y términos de resolución compatibles. Son datos para desarrolladores, no asesoramiento financiero ni de trading.
Usa Cómo Dino empareja mercados para conocer las puertas de identidad y activación, y la referencia del objeto Market para cada campo usado arriba. Los tableros en vivo muestran la misma divulgación en una vista legible para humanos.
Más del blog
Monitorea Kalshi y Polymarket con Python
Crea un monitor en Python para mercados emparejados de Kalshi y Polymarket, y luego extiende el snapshot REST retrasado con actualizaciones en tiempo real.
Kalshi + Polymarket MCP para Claude y Cursor
Conecta Claude o Cursor al servidor MCP de Kalshi y Polymarket de Dino, e inspecciona mercados emparejados con contexto de resolución.
El capital institucional llegó a los mercados de predicción. Las materias primas son la prueba
ICE y Tradeweb respaldan a Polymarket y Kalshi. La liquidez de materias primas mostrará si la infraestructura institucional se convierte en flujo.