Bots en TypeScript con Claude (Anthropic API) como motor de decisión, ejecutando órdenes en Polymarket (CLOB v2).
Tres bots, mismo pipeline, distintos mercados:
polymarket— mercado binario manual (el que tú decidas en.env).btc5m— mercado BTC corto plazo 5 min en Polymarket.btc15m— mercado BTC corto plazo 15 min en Polymarket.
- Claude no toca claves. Recibe snapshot + histórico 30 min del YES + features técnicas y devuelve JSON validado con Zod.
- Pre-filtro duro: solo se llama a Claude si hay setup (momentum ≥ umbral o spread en P10). Ahorra API y evita trades en mercados planos.
- Límites duros antes de ejecutar: tamaño, confianza, pérdida diaria, spread máximo,
DRY_RUN. - Una factory (
makePolymarketStrategy) parametrizada por mercado.
src/
config/env.ts # carga y valida .env con Zod
core/ # logger (pino), clock (loop+shutdown), risk, types
llm/ # Anthropic SDK + decisión estructurada
exchanges/polymarket/ # CLOB v2 client, market data, ejecución
strategies/
polymarket.strategy.ts # makePolymarketStrategy(MarketConfig)
bots/
polymarketBot.ts # market binario manual
btc5mBot.ts # BTC 5min en Polymarket
btc15mBot.ts # BTC 15min en Polymarket
index.ts # CLI
cp .env.example .env # rellena claves
npm install
npm run typecheckCada bot tiene dos modos de configuración en .env:
- Por slug (recomendado) —
POLY_BTC5M_SLUG,POLY_BTC15M_SLUG,POLY_MARKET_SLUG. El resolver consultahttps://gamma-api.polymarket.com/events/slug/{slug}y, dentro del evento, escoge el mercado activo con cierre más próximo. Refresca automáticamente cuando el mercado actual está a punto de resolver (los mercados rolling rotan token IDs). - Por token IDs fijos —
POLY_BTC5M_YES/NOetc. Pensado para mercados de larga duración o pruebas puntuales.
El slug se obtiene de la URL de polymarket.com (https://polymarket.com/event/<slug> o https://polymarket.com/market/<slug>). Puedes verificar que un slug es válido antes de pegarlo al .env:
npx tsx scripts/test-resolver.ts <slug>Salida típica:
{
"yesTokenId": "111128191...",
"noTokenId": "99807503...",
"marketSlug": "microstrategy-sells-any-bitcoin-by-december-31-2026",
"eventSlug": "microstrategy-sell-any-bitcoin-in-2025",
"endsAt": 1782878400000
}Los mercados de "BTC up/down en 5 / 15 minutos" son series rolling muy cortas. El listado y el slug exacto varían según la oferta vigente de Polymarket. Pasos:
- Entra a polymarket.com y localiza el evento (suele aparecer en categorías "Crypto" o "Markets ending soon").
- Copia el slug del evento desde la URL.
- Pégalo en
POLY_BTC5M_SLUG/POLY_BTC15M_SLUG. - El resolver hará el resto en cada ciclo: detecta cuando el mercado actual cierra y refresca al siguiente.
# Mercado binario manual (DRY_RUN=true no envía órdenes reales)
npm run bot:polymarket
# BTC corto plazo en Polymarket
npm run bot:btc5m
npm run bot:btc15mPOLY_PK= wallet dedicada en Polygon con USDC y MATIC para gas.- Primer run con
DRY_RUN=true: el cliente deriva tus credenciales L2 víacreateOrDeriveApiKey. Copia las creds al.env(POLY_CLOB_API_KEY/SECRET/PASSPHRASE) para no firmar L1 cada vez. - Llena los token IDs YES/NO del mercado objetivo.
- Verifica los logs en dry-run; cuando todo se vea sano,
DRY_RUN=false.
Replay walk-forward sobre histórico CLOB. Usa el mismo pre-filtro que producción y una señal rule-based (momentum) para estimar PnL sin pagar API.
# Por token YES
npm run backtest -- --token <YES_TOKEN_ID> --days 14 --step 60
# Por slug de evento (resuelve mercado activo hoy; para histórico largo usa --token)
npm run backtest -- --slug microstrategy-sell-any-bitcoin-in-2025 --days 7
# Opciones: --days --step --hold --size --feeBps --spread --lookbackMétricas: win rate, PnL total, drawdown, % de pasos que pasan pre-filtro (ahorro API estimado).
Limitación: no replica decisiones de Claude; sirve para calibrar pre-filtro y ver si el mercado tiene movimiento operable antes de arriesgar capital.
Trading automático con capital real implica riesgo de pérdida total. Revisa los Términos de Polymarket y la legislación de tu jurisdicción. Este código es una base de ingeniería, no consejo financiero.