Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

botpoly

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.

Filosofía

  • 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.

Estructura

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

Setup

cp .env.example .env        # rellena claves
npm install
npm run typecheck

Cómo configurar un mercado: slug (recomendado) o IDs fijos

Cada bot tiene dos modos de configuración en .env:

  1. Por slug (recomendado)POLY_BTC5M_SLUG, POLY_BTC15M_SLUG, POLY_MARKET_SLUG. El resolver consulta https://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).
  2. Por token IDs fijosPOLY_BTC5M_YES/NO etc. 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
}

Nota sobre BTC 5min / 15min

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:

  1. Entra a polymarket.com y localiza el evento (suele aparecer en categorías "Crypto" o "Markets ending soon").
  2. Copia el slug del evento desde la URL.
  3. Pégalo en POLY_BTC5M_SLUG / POLY_BTC15M_SLUG.
  4. El resolver hará el resto en cada ciclo: detecta cuando el mercado actual cierra y refresca al siguiente.

Ejecución

# 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:btc15m

Primer arranque

  1. POLY_PK = wallet dedicada en Polygon con USDC y MATIC para gas.
  2. Primer run con DRY_RUN=true: el cliente deriva tus credenciales L2 vía createOrDeriveApiKey. Copia las creds al .env (POLY_CLOB_API_KEY/SECRET/PASSPHRASE) para no firmar L1 cada vez.
  3. Llena los token IDs YES/NO del mercado objetivo.
  4. Verifica los logs en dry-run; cuando todo se vea sano, DRY_RUN=false.

Backtesting (sin Claude, sin wallet)

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 --lookback

Mé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.

Aviso

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.

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages