Resumen: lo importante en una página
Esta página existe para que cualquiera (tú dentro de dos meses, o alguien que revise el proyecto) entienda el bot en cinco minutos sin leer el plan entero. Todo lo que dice aquí tiene su detalle en las otras páginas: Plan, Estrategia, Runbook, Mejoras.
Qué es y qué no es
- Es un bot que compra y vende acciones de EE. UU. en una cuenta paper de Alpaca: dinero simulado, 100 000 USD de partida. Nunca ha tocado dinero real y no lo hará sin cumplir la checklist de la Fase 6 del Plan.
- Su trabajo en esta etapa es validar la operación (que cada pieza haga lo que dice, cada día, sin intervención), no ganar dinero. La estrategia es deliberadamente simple.
- No lee noticias, no usa inteligencia artificial para decidir, no opera opciones ni cripto (el módulo cripto se probó con backtest y se descartó).
Cómo decide
- Una decisión por símbolo y por día, con el cierre del día anterior. Universo: 10 símbolos (SPY, QQQ, AAPL, MSFT, NVDA, AMZN, GOOGL, META, JPM, XOM).
- Compra cuando la media de 20 días cruza sobre la de 50 (o lo hizo en los últimos 5 días), el precio está sobre la media de 200 y hay volumen normal. Máximo 5 posiciones, 10 % del capital cada una, arriesgando 1 % por operación.
- Al comprar manda un bracket a Alpaca: la orden de compra con su stop (2 × ATR por debajo) y su take-profit (3 × ATR por encima) ya colocados en el bróker. Por eso el stop sobrevive aunque el bot esté apagado.
- Vende si la media de 20 cruza bajo la de 50, si toca el stop o el objetivo, o a los 40 días.
Cuándo corre y por qué tiene horario
| Momento (Lima) | Momento (Nueva York) | Qué hace |
|---|---|---|
| 8:35 (verano) / 9:35 (invierno), lunes a viernes | 9:35 | El ciclo: evalúa los 10 símbolos y manda órdenes si hay señal |
| cada hora hasta el cierre | 10:05 … 15:05 | Sync: lee en Alpaca qué se ejecutó (fills, stops, objetivos) |
| 15:05 (verano) / 16:05 (invierno) | 16:05 | Cierre: foto de la cuenta, resumen del día por Telegram, copia de seguridad |
Por qué no corre más horas ni fines de semana:
- La bolsa de EE. UU. abre de 9:30 a 16:00 hora de Nueva York, de lunes a viernes, salvo festivos. Fuera de eso no hay precios nuevos ni órdenes que ejecutar.
- La estrategia usa barras diarias: decide una vez al día con el cierre y ejecuta en la apertura siguiente. Mirar cada minuto no cambiaría ninguna decisión.
- El stop y el objetivo viven en Alpaca. No hace falta un proceso vigilando: el sync horario solo se entera de lo que Alpaca ya hizo.
- "Más horas" significaba cripto 24/7. Se probó con datos reales y perdió dinero mientras BTC subía un 81 %; se descartó.
- El bot corre gratis en GitHub Actions (2 000 minutos al mes). El horario actual gasta unos 350; un proceso continuo no cabría sin pagar.
Lima está en UTC−5 todo el año; Nueva York cambia con el horario de verano, por eso el ciclo cae a las 8:35 o a las 9:35 según la época. El bot siempre usa el reloj de Alpaca, nunca uno local.
Dónde ver cada cosa
- Mientras corre: GitHub → Actions → Bot → el job en curso → paso "Job". Una línea por símbolo en el momento en que se decide.
- En segundos: Telegram. Cada ciclo manda órdenes, rechazos y la bitácora completa. Comandos:
/status,/bitacora 20,/resumen,/kill,/resume,/nota,/mejora,/watch. - Al minuto: el panel (https://trading-bot-9jt.pages.dev), publicado 1–2 minutos después de cada job y recargado solo cada minuto. La barra superior dice qué modo, qué rama y qué commit operan, cuándo fue el último ciclo y en qué día de la observación vamos.
Cómo leer una línea de la bitácora
AAPL HOLD · sin tendencia alcista: SMA20 bajo SMA50; SMA20=316.72 SMA50=317.99 → no hubo señal:
la media de 20 está por debajo de la de 50. Estado no_signal.
NVDA HOLD · cruce antiguo: SMA20 sobre SMA50 desde hace más de 5 barras (no se persigue el precio)
→ tampoco hay señal: la tendencia ya existía; el cruce fue hace semanas y la regla solo entra en
los 5 días siguientes al cruce. Estado no_signal.
NVDA BUY ✅ x12 @ 181.20 · SMA20 cruzó sobre SMA50, precio > SMA200, volumen OK → señal de
compra aprobada por riesgo: 12 acciones a ~181,20 con bracket. Estado approved.
XOM BUY ⛔ · máximo de posiciones abiertas alcanzado (5/5) → hubo señal, pero una regla la
vetó. Estado rejected; la regla va siempre en el motivo.
Qué significa un día sin señales
Es lo normal. La estrategia da unas 25 señales al año sobre 10 símbolos: una cada dos semanas. Un
HOLD tiene dos motivos posibles: cruce antiguo (la media de 20 ya está sobre la de 50 desde hace
más de 5 días; entrar ahora sería perseguir el precio) o sin tendencia (la media de 20 está por
debajo de la de 50). En la columna Resultado aparece no_signal: la estrategia no vio nada, así que
el riesgo no tuvo nada que evaluar. Solo rejected significa "hubo señal y una regla la vetó". Y en
DRY_RUN, aunque hubiera señal, no se envía ninguna orden.
Los números honestos (backtest con las mismas reglas que el bot)
| Ventana | Resultado | Drawdown | Sharpe | Ops | SPY |
|---|---|---|---|---|---|
| Fuera de muestra 2023 → 2026 | +11.1 % | −3.6 % | 0.93 | 92 | +101 % |
| Sin NVDA ni GOOGL | +3.1 % | −4.0 % | 0.34 | 75 | +101 % |
| Dentro de muestra 2020-07 → 2022-12 | +1.2 % | −5.1 % | 0.24 | 27 | +18 % |
Lectura: pierde mucho menos que el índice, pero gana mucho menos; dos acciones ponen la mayor parte del resultado; la muestra de entrenamiento es tan pequeña que no vale para decidir nada. Los datos gratuitos empiezan en julio de 2020. La ventana 2023 → 2026 se usó para elegir el modo de salida, así que la única validación limpia que queda es la observación en paper con reglas congeladas.
Reglas de riesgo
| Regla | Valor | Qué pasa |
|---|---|---|
| Tamaño por posición | 10 % del capital | Tope de cada compra |
| Riesgo por operación | 1 % del capital | Define cuántas acciones, según la distancia al stop |
| Posiciones abiertas | 5 (cuenta las que están en vuelo) | La sexta compra se rechaza |
| Pérdida diaria | −2 % | Kill switch hasta el día siguiente; las ventas siguen |
| Drawdown desde el máximo | −10 % | Kill switch manual: sin compras hasta que revises y mandes /resume (que fija el pico en la equity actual) |
| Hueco de apertura | 3 % | Si el precio se alejó de la señal, no se entra |
| Posición sin stop en Alpaca | — | Aviso y, en el siguiente ciclo, el bot la cierra (a menos que repongas el stop antes) |
| Kill switch manual | /kill |
Sin compras; /resume lo quita |
Qué puede cambiar durante la observación (definición de "congelada")
- Reinicia los 60 días: cualquier cambio en
strategy/,risk/,execution/,portfolio/o en los parámetros de tamaño y riesgo deconfig.py. Da igual lo pequeño que sea. - No reinicia: panel (
web/), avisos (notify/), informes, fiabilidad, comandos, docs, workflows y tests. Son operación y lectura, no decisión. - La fecha y el commit congelado quedan en el journal (nota
observacion) y en la barra del panel. Lo nuevo (filtro de régimen, S&P 500) vive en ramas y solo produce backtests hasta diciembre.
Cosas que ya están cubiertas y conviene saber
- Dos jobs nunca corren a la vez (grupo de concurrencia compartido; probado).
- El backtest aplica el mismo filtro de hueco del 3 % y el mismo desplazamiento de stop que el bot.
- Una orden aceptada por Alpaca cuya respuesta se perdió no se duplica ni se trata como desconocida: el id es el mismo cada vez y el sync la adopta.
- Cada incidente o simulacro se anota en
docs/INCIDENTS.mdcon formato fijo; el informe mensual los cuenta.
Observación y dinero real
- DRY_RUN (ahora): el bot decide y registra pero no manda órdenes. Tres ciclos: 11, 12 y 14 de septiembre de 2026.
- PAPER (desde el 15): manda órdenes reales a la cuenta simulada. Empiezan solos los 60 días
hábiles de observación y la rama
releasequeda congelada: nada cambia salvo arreglos de operación. - Dinero real solo si: 3 a 6 meses de paper con el mismo código, resultado ≥ 0 tras costos, drawdown < 10 %, sin NVDA ni GOOGL el resultado sigue ≥ 0, cero incidentes el último mes, Alpaca acepta cuenta real desde Perú, un contador ha explicado los impuestos, y capital que se pueda perder por completo (1 500–2 000 USD). Checklist con fechas en el Plan, Fase 6.
- Descartado: cripto, trailing stop como salida por defecto, filtro de noticias, Hugging Face y Oracle como servidores. Probado y en espera: filtro de régimen (SPY bajo su media de 200).
Glosario
- Paper: cuenta simulada con dinero ficticio, mismas reglas de mercado.
- Bracket: orden de compra que lleva pegados un stop y un objetivo; los tres viven en el bróker.
- Stop / take-profit: precio al que se vende con pérdida limitada / con ganancia fijada.
- ATR: rango medio diario del precio; mide cuánto se mueve una acción.
- Drawdown: caída desde el máximo anterior de la cuenta.
- Sharpe: rendimiento por unidad de riesgo; por encima de 1 es bueno, por debajo de 0,5 flojo.
- Dentro / fuera de muestra (IS / OOS): datos usados para ajustar / datos no usados para ajustar.
- Exposición: porcentaje del tiempo con dinero invertido.
- Expectancy: ganancia media por operación cerrada.
- Régimen: mercado alcista o bajista según SPY frente a su media de 200 días.
- Kill switch: freno: sin compras nuevas hasta que se levante.
- PDT: regla de EE. UU. que limita las compras y ventas en el mismo día en cuentas pequeñas.
Fuente: docs/RESUMEN.md · modificado hace 0 min. Se lee del disco en cada carga: git pull lo actualiza sin reiniciar.