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.
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.
Descargas crudas para análisis offline.
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).
These are real positions from your Polymarket account, not managed by the 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.
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).
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.
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.
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.
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.
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.
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.
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 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.
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
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.
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 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.
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.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.data/setting_overrides.json — values you change via the UI persist there across restarts.data/tweet_count_history.json. The bot refreshes it from Polymarket at most once per 24h.