POLY-BIAS-48ELON

fade-favorito-48h DRY RUN
Server: --/--/-- --:--:--
Cargando…
 
Loading...

Ciclos recientes

Cargando…

DINERO Ganancia realizada por ventana

P&L cerrado (liquidaciones) de la estrategia fade-favorito-48h. Las posiciones abiertas aportan P&L no realizado, que se muestra aparte. Cualquier liquidación ajena a la estrategia se reporta por separado y no contamina estas cifras.

Cargando…

ROI Retorno compuesto (asume reinversión)

El retorno total del período se convierte en tasa diaria y se extrapola a mensual y anual asumiendo reinversión. Con pocas semanas de historia el anualizado es una extrapolación indicativa, no una promesa.

Curva de capital

P&L realizado acumulado, una marca por liquidación.
Cargando…

P&L por semana

Suma de liquidaciones por semana ISO (lunes a domingo).
Cargando…

Estadísticas de la estrategia

Cargando…

DATOS Exportar datasets

Descargas crudas para análisis offline.

to

REGISTRO Señales generadas

Cada señal que la estrategia produjo — esto se registra siempre, en vivo y en papel. NO son apuestas dry-run. Las que de verdad se ejecutaron aparecen abajo en "Posiciones reales". Si una señal dice Skipped, el motivo explica por qué no se convirtió en orden real (ej. kill switch, spread, cap por evento).

Loading...

Settlement History (Bot)

Loading...

ACCOUNT Live Polymarket Positions

These are real positions from your Polymarket account, not managed by the bot.

Loading...

SCANNER Mercados que ve el bot

Los mercados de conteo de tweets de Elon que el escáner encuentra ahora mismo, con su precio YES y volumen. No se cargan solos: tocá Actualizar.

Tocá Actualizar para cargar los mercados

Edge Canary (banda 50-70c)

Loading...

Detector de quiebre de régimen (CUSUM)

Loading...

Cross-filter: ganancia y ROI del fade simulado

Fade simulado — no son trades ejecutados. Esta grilla corre sobre el universo de snapshots observados (una fila por bracket de Elon por ciclo, haya apostado el bot o no) unido al bracket ganador de cada evento, y simula fadear el favorito en CADA bracket que matchea los filtros, al precio del snapshot, con stake fijo. El P&L de lo realmente operado vive en Resumen y Resultados; acá se responde "¿qué habría pasado si fadeaba todo lo que matchea estos filtros?".
hasta
×

Tildá los valores de cada eje para incluirlos; destildando todos en un eje se bloquea todo (grilla vacía). La grilla 2D combina los dos ejes elegidos arriba; las tablas de abajo son los marginales (cada eje por separado).

Cargando…

Grilla

Cargando…

Curva de calibración del mercado

Mide si el mercado valúa bien en TODOS los deciles, no solo en la banda del fade. Un outcome por (evento, bracket), así que junta ~10x los datos del canario: es lo que permite ver si la calibración se mueve en semanas en vez de años. gap = precio medio menos sí realizado (>0 sobreprecio, el fade tendría edge). Brier del mercado: si sube, se está descalibrando.

Loading...

Calibración de trades ejecutados

Sobre los trades (hipotéticos en dry-run) que pasaron todos los filtros del bot, un conjunto angosto. El cross-filter de arriba usa el universo completo de snapshots.

to
Loading...

By Yes Price Bucket

Hit rate = observed P(Yes resolves). Divergence = actual - expected. Status = confidence in calibration table accuracy.
Loading...

Reglas de trading

Cada regla es una celda del laboratorio hecha ejecutable. paper simula (registra para calibración); live gasta dinero real, y solo si el bot no está en dry-run. El semáforo dice si la regla juntó n≥umbral resoluciones con calibración sostenida para promover a live: el único camino a live es promover una regla en verde.

Loading...
Loading...
Cargando…

Nueva nota

Bitácora libre del bot. La fecha se guarda sola. Los cambios que guardás en Ajustes se registran solos también. Tocá Editar en cualquier nota para ampliarla.

What this bot does

POLY-BIAS-48ELON is a single-strategy Polymarket bot. It bets NO against the FAVORITE of the Elon Musk 48-hour tweet-count markets (Gamma series elon-tweets-48h): the bracket whose YES side is priced between 50% and 70% inside the T-24h window (0.75-1.25 days before resolution).

The edge (regla A1): that favorite is inflated by hype. It trades at ~58% YES but resolves YES only ~35% of the time. Buying NO at the implied 30-50¢ captures the gap: a de-vig edge of about +15.5pp, with a measured spread of 0.6pp. It is the inverse pattern of the old weekly bot, which faded 15-30c longshots.

Why only Elon, only the 48h series, only the T-24h window?

Those are the conditions where the edge was empirically validated (44 clusters full-sample, 18 in holdout, all on healthy books). The weekly family, other posters, other price bands and other windows have either no edge or no evidence. The 48h series uses closed width-24 brackets ("40-64") plus open-ended edges ("<40", "240+"); any other width is another family and is rejected.

The per-event structure gate (de-vig hygiene)

Each 48h event is one-hot: exactly one bracket wins, so the sum S of the YES prices of all its brackets should hover around 1.0. The calibration was validated only on healthy books (S ≤ 1.10). Before evaluating any bracket, the bot computes S per event and refuses to bet on ANY bracket of an event whose S falls outside [0.90, 1.10] or that arrived incomplete.

The edge canary (Salud tab)

The profit is a behavioral mispricing in a ~$2M/event market; professionals can compress it away. Every cycle the bot re-measures the favorite-band bias (mean in-band price vs how often that bracket really won) over ALL scanned brackets, not just the ones it bet. If the 8-week rolling edge compresses below the warning threshold the EDGE badge turns yellow; if it hits zero, confirmed by the 16-week window, it turns red and the bot alerts via Telegram. That is the signal to stop.

Early exit by edge erosion (optional)

By default the bot holds every position to resolution — that's how the edge was validated (it's a statistical edge over many bets, not per-bet timing). But you can enable an early exit via the edge_exit_threshold setting (Settings → Riesgo y límites).

Crucially, erosion is judged against an independent estimate of the true probability — not the price. A price move alone doesn't mean the edge eroded: the true odds can move with it. So each cycle the bot reads Elon's live tweet count for the window from Polymarket's own tweetCount (the exact number that resolves the market), projects his remaining posts as a Poisson process at his observed pace, and computes the current probability the bracket actually hits:

edge_now = (1 − P(bracket hits)) − current NO price
erosion = 1 − edge_now ÷ entry edge

  • 0 — disabled. Hold to resolution (default, validated).
  • 0.5 — exit once half the edge is gone.
  • 1.0 — exit once the edge is fully gone (the model now prices the NO fairly).
  • 1.5 — exit once the model actively favors the bracket hitting (edge gone negative).

This way the bot holds when the price wobbles but Elon's pace is still safely below the bracket, and exits only when his actual pace threatens it. Lower numbers cut losses sooner; higher numbers ride further. When it triggers, the bot sells into the current bid (Fill-And-Kill); no bid to sell into → it holds and logs a warning. Realized P&L from an early exit feeds the same daily/weekly limits and kill switch as a settlement. The analysis is logged every cycle even when disabled, so you can watch it before turning it on.

Dry run vs live

The mode badge in the header shows DRY RUN or LIVE. In dry run, the bot evaluates every market and records hypothetical trades to the Trades tab — no real orders are placed and no real money moves. In live mode, NO orders are submitted to your wallet.

The default settings are a live profile for a $150 bankroll: bets between $5 (the Polymarket minimum that still allows exiting a position) and $20, sized by 1/5-Kelly on your total account value (free USDC + market value of open positions — so bets don't shrink asymptotically as cash gets locked into positions; each order is still capped by the free cash actually available). Three circuit breakers protect the capital: a $30 daily loss limit, a $60 weekly loss limit, and a kill switch that halts all trading at 15% cumulative drawdown (−$22.50). Because brackets in the same 48h event are mutually exclusive, at most one NO bet per event can lose.

Live mode needs POLYMARKET_PRIVATE_KEY and POLYMARKET_FUNDER_ADDRESS as env vars on the host, plus USDC on Polygon. If the wallet balance cannot be fetched, the cycle aborts with an error — the bot never sizes real bets from a fictional balance. Flip DRY_RUN via the Settings tab or as an env var.

The Auto-cycles toggle

The header has an Auto cycles checkbox and a Run Cycle Now button. Auto-cycles are ON by default on every boot; the first cycle after a boot runs one interval later, never immediately. If you switch them off, the choice is saved and survives restarts until you switch them back on. A cycle takes a few minutes; the Trades and Performance tabs update as each one completes.

What each tab shows

  • Resumen: estado operativo (capital para sizing, posiciones abiertas, contadores de riesgo con kill switch y los ciclos recientes). Sin cifras de P&L, eso vive en Resultados.
  • Resultados — la vista económica: ganancia realizada por ventana (24h / 7d / 30d / total), ROI compuesto diario/mensual/anualizado (asume reinversión), curva de capital, P&L por semana, estadísticas por operación (expectancy, drawdown, Sharpe) y los exports de datasets. El anualizado es una extrapolación indicativa con pocas semanas de historia.
  • Operaciones — el registro de señales generadas (siempre, en vivo y en papel), el historial de liquidaciones del bot, las posiciones reales de tu cuenta de Polymarket y el scanner de mercados que ve el bot.
  • Salud — el canario del edge: mide semana a semana el sesgo real de la banda 50-70c. Si la línea cae hacia 0, el negocio se está acabando y el bot avisa solo. Indispensable.
  • Calibración — ¿la estimación de edge del bot calza con la realidad? "Hit rate" es cuántas veces gana YES por bucket de precio. "Divergence" es observado menos esperado. Con 50+ operaciones resueltas es la vista principal de "¿el edge sigue siendo real?".
  • Registro — el log del bot en vivo. Filtrable por nivel.
  • Ajustes — cada perilla editable, agrupada en paneles. Un badge amarillo modificado ↺ marca cualquier valor distinto de su default. Los cambios guardados se registran solos en Notas.

Why a trade gets skipped

Each cycle the bot reports a one-line "Rejections" summary in the logs. The categories you'll see:

  • not_count_bracket: not a tweet/post count market.
  • not_elon: count market but not about Elon.
  • wrong_bracket_width: Elon market but the bracket is neither width-24 nor an open edge ("<40", "240+"); another family.
  • event_structure: the event's YES-price sum S is outside [0.90, 1.10], the event arrived incomplete, or it has no event id. No bracket of that event is bet this cycle.
  • already_traded: the bot already has (or already had) a position on this token, so it is never bought twice. This subsumes the old erosion_reentry_block: a market exited by edge erosion stays recorded, so it is not re-entered either. Skipped markets are not logged as scan rows.
  • no_resolution_date: Elon width-24 bracket but no resolution date, so no rule's timing window can be evaluated.
  • no_rule_fired: passed the identity filters but no active trading rule fired — none matched its price band / timing / volume / spread / S, or one matched but its edge stayed below threshold. The rules live in settings.trading_rules.
  • filter_rejected: historical rows only (2026-07-21, 305 of them). This is the old name of no_rule_fired, renamed when the rule engine landed. Nothing writes it any more; the rows are kept because rewriting history would be worse than a stale label.
  • low_liquidity: the order book was read and its ask depth is below min_liquidity. The book is genuinely thin.
  • book_unavailable: the CLOB fetch for that token failed, so the depth is unknown — the market was skipped without ever being looked at. Distinct from low_liquidity on purpose: reporting a missing datum as "thin" would assert something we did not measure. A burst of these in one cycle means the connection dropped, not that the markets dried up.

Things to know about the dashboard data

  • Every API endpoint requires the BOT_API_KEY. The dashboard asks for it once and stores it in your browser (localStorage). You can also open the dashboard as /?api_key=YOUR_KEY — it saves the key and strips it from the URL.
  • The settings file is data/setting_overrides.json — values you change via the UI persist there across restarts.
  • The resolved-winner history (which bracket won each 48h cycle, the canary's ground truth) lives at data/tweet_count_history.json. The bot refreshes it from Polymarket at most once per 24h.
  • Settings showing the yellow modificado ↺ badge have a non-default override stored; env vars on the host also count as "default" when restoring.