¿Qué hace PolyClaw?
Skill de Polymarket con capacidad de trading para OpenClaw. Explora mercados, gestiona carteras, ejecuta operaciones y realiza seguimiento de posiciones.
Características
- Exploración de mercados - Busca y navega por los mercados de predicción de Polymarket
- Gestión de cartera - Configuración de cartera mediante variables de entorno
- Trading - Compra posiciones YES/NO mediante ejecución split + CLOB
- Seguimiento de posiciones - Registra precios de entrada, precios actuales y P&L
- Descubrimiento de coberturas - Descubrimiento de carteras de cobertura mediante inferencia lógica con LLM
Inicio rápido
Primero, instala las dependencias (desde el directorio de la skill):
cd {baseDir}
uv sync
Configuración inicial (requerida para trading)
Antes de tu primera operación, configura las aprobaciones de los contratos de Polymarket (una sola vez, cuesta ~0.01 POL en gas):
uv run python scripts/polyclaw.py wallet approve
Esto envía 6 transacciones de aprobación a Polygon. Solo necesitas hacerlo una vez por cartera.
Explorar mercados
# Mercados populares por volumen
uv run python scripts/polyclaw.py markets trending
# Buscar mercados
uv run python scripts/polyclaw.py markets search "elección"
# Detalles de un mercado (devuelve JSON completo con todos los campos)
uv run python scripts/polyclaw.py market <market_id>
Opciones de salida:
- Por defecto, la salida es una tabla formateada (ideal para mostrar)
- Usa la bandera
--fullpara el texto completo de la pregunta sin truncar - Usa la bandera
--jsonmediantescripts/markets.py --json trendingpara salida JSON estructurada
Gestión de cartera
# Ver estado de la cartera (dirección, saldos)
uv run python scripts/polyclaw.py wallet status
# Configurar aprobaciones de contratos (una sola vez)
uv run python scripts/polyclaw.py wallet approve
La cartera se configura mediante la variable de entorno POLYCLAW_PRIVATE_KEY.
Trading
# Comprar posición YES por $50
uv run python scripts/polyclaw.py buy <market_id> YES 50
# Comprar posición NO por $25
uv run python scripts/polyclaw.py buy <market_id> NO 25
Posiciones
# Listar todas las posiciones con P&L
uv run python scripts/polyclaw.py positions
Descubrimiento de coberturas
Encuentra carteras de cobertura: pares de posiciones de mercado que se cubren entre sí mediante lógica contrapositiva.
# Escanear mercados populares en busca de coberturas
uv run python scripts/polyclaw.py hedge scan
# Escanear mercados que coincidan con una consulta
uv run python scripts/polyclaw.py hedge scan --query "elección"
# Analizar mercados específicos para relaciones de cobertura
uv run python scripts/polyclaw.py hedge analyze <market_id_1> <market_id_2>
Opciones de salida:
- Por defecto, la salida es una tabla formateada que muestra Nivel, Cobertura, Costo, Objetivo y Cubierta
- Usa la bandera
--jsonpara salida JSON estructurada - Usa
--min-coverage 0.90para filtrar por cobertura mínima (por defecto 0.85) - Usa
--tier 1para filtrar por nivel (1=mejor, por defecto 2)
Niveles de cobertura:
- Nivel 1 (ALTO): >=95% de cobertura — oportunidades casi de arbitraje
- Nivel 2 (BUENO): 90-95% — coberturas sólidas
- Nivel 3 (MODERADO): 85-90% — decente pero con riesgo notable
- Nivel 4 (BAJO): <85% — especulativo (filtrado por defecto)
Modelo LLM: Usa nvidia/nemotron-nano-9b-v2:free mediante OpenRouter. La elección del modelo importa: algunos modelos encuentran correlaciones falsas mientras que otros (como DeepSeek R1) tienen problemas de formato de salida. Sobrescribe con --model <model_id> si es necesario.
Seguridad
Para el MVP, la clave privada se almacena en una variable de entorno por simplicidad y compatibilidad con Claude Code.
Advertencia de seguridad: Mantén solo cantidades pequeñas en esta cartera. Retira regularmente a una cartera segura.
Variables de entorno
| Variable | Requerida | Descripción |
|---|---|---|
CHAINSTACK_NODE | Sí (trading) | URL RPC de Polygon |
OPENROUTER_API_KEY | Sí (cobertura) | Clave API de OpenRouter para el descubrimiento de coberturas con LLM |
POLYCLAW_PRIVATE_KEY | Sí (trading) | Clave privada EVM (hex, con o sin prefijo 0x) |
HTTPS_PROXY | Recomendada | Proxy residencial rotativo para CLOB (ej. IPRoyal) |
CLOB_MAX_RETRIES | No | Máximo de reintentos CLOB con rotación de IP (por defecto: 5) |
POLY_BUILDER_CODE | No | Código de builder en bytes32 para atribución (desde polymarket.com/settings?tab=builder). Se adjunta a cada orden cuando está configurado. |
Advertencia de seguridad: Mantén solo cantidades pequeñas en esta cartera. Retira regularmente a una cartera segura. La clave privada en una variable de entorno es conveniente para la automatización pero menos segura que el almacenamiento cifrado.
Flujo de trading
- Dividir posición - pUSD se divide en tokens YES + NO mediante el contrato CTF
- Vender no deseado - El lado no deseado se vende a través del libro de órdenes CLOB (V2)
- Resultado - Mantienes la posición deseada, recuperando el costo parcial de la venta del lado no deseado
Ejemplo: Comprar YES a $0.70
- Dividir $100 pUSD → 100 tokens YES + 100 tokens NO
- Vender 100 tokens NO a ~$0.30 → recuperar ~$27 pUSD
- Costo neto: ~$73 por 100 tokens YES (entrada: $0.73)
Si solo tienes USDC.e, envuélvelo 1:1 en pUSD mediante la función wrap() del Collateral Onramp antes de operar.
Contratos de Polymarket (Polygon Mainnet, CLOB V2)
- pUSD (colateral):
0xC011a7E12a19f7B1f670d46F03B03f3342E82DFB - USDC.e (entrada de onramp):
0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174 - Collateral Onramp:
0x93070a847efEf7F70739046A929D47a521F5B8ee - CTF (Conditional Tokens):
0x4D97DCd97eC945f40cF65F87097ACe5EA0476045 - CTF Exchange (V2):
0xE111180000d2663C0091e4f400237545B87B996B - Neg Risk CTF Exchange (V2):
0xe2222d279d744050d28e00520010520000310F59
Dependencias
Instala con uv (desde el directorio de la skill):
cd {baseDir}
uv sync
Limitaciones
- El trading requiere configuración de aprobación de cartera (una sola vez)
- Las ventas mediante CLOB pueden fallar si la liquidez es insuficiente
Bloqueo de Cloudflare en CLOB
La API CLOB de Polymarket utiliza protección Cloudflare que bloquea solicitudes POST de muchas IPs, incluidas IPs de centros de datos y algunos ISP residenciales. Esto afecta el paso de "vender tokens no deseados".
Solución: Proxy residencial con lógica de reintentos
La configuración recomendada utiliza un proxy residencial rotativo (ej. IPRoyal, BrightData). El cliente CLOB reintenta automáticamente con nuevas IPs hasta que una funciona:
export HTTPS_PROXY="http://user:[email protected]:12321"
export CLOB_MAX_RETRIES=10 # Por defecto es 5
Con esta configuración, las órdenes CLOB suelen tener éxito en 5-10 reintentos mientras el proxy rota IPs hasta encontrar una no bloqueada.
Soluciones alternativas:
- Usar
--skip-sell— Conserva ambos tokens YES y NO, véndelos manualmente en polymarket.com - Sin proxy — La división sigue funcionando; solo la venta CLOB se ve afectada
Si CLOB falla después de todos los reintentos, tu división aún tuvo éxito. La salida te indica cuántos tokens vender manualmente.
Solución de problemas
"No hay cartera disponible"
Configura la variable de entorno POLYCLAW_PRIVATE_KEY:
export POLYCLAW_PRIVATE_KEY="0x..."
"pUSD insuficiente"
Verifica el saldo con uv run python scripts/polyclaw.py wallet status. Las operaciones requieren pUSD (USD de Polymarket). Si tienes USDC.e, envuélvelo 1:1 mediante el Collateral Onramp (0x9307...B8ee) — la interfaz de polymarket.com lo hace automáticamente; los usuarios de API lo envuelven manualmente.
"La orden CLOB falló"
La venta CLOB puede fallar debido a:
- Liquidez insuficiente al precio de venta
- IP bloqueada por Cloudflare (prueba con proxy)
Tu división aún tuvo éxito: tienes los tokens, solo que no pudiste vender el lado no deseado.
"Aprobaciones no configuradas"
La primera operación requiere aprobaciones de contratos. Ejecuta:
uv run python scripts/polyclaw.py wallet approve
Licencia
Apache 2.0