Fase actualLos tres estados, que no se mezclan nuncaReglas de evidenciaEvidencia generadaLecciones de mediciónEconomía del mercado criptoSeguridad y operaciónDespliegue — decidido, no reabrir sin datos nuevosEntornoProcesoTrato

Reglas del proyecto

Bot de criptomonedas. Proyecto separado del bot de acciones: otro mercado, otra estrategia. De aquel se reutilizan lecciones y patrones de despliegue, nunca parámetros de estrategia.

Idioma del proyecto y de las respuestas: español.


Fase actual

Medir si hay algo que construir. No se escribe estrategia ni ejecución de órdenes hasta que una medición diga en qué parte del mercado es económicamente posible operar. Si no hay dónde, se dice y se para.


Los tres estados, que no se mezclan nunca

  1. Probado con simulaciones
  2. Integrado
  3. Verificado en el entorno real

Estar pendiente en el tercero no devuelve el trabajo al primero. Una limitación pendiente nunca se presenta como éxito.


Reglas de evidencia

  1. No confundir el artefacto con lo servido. Un commit, un CI en verde o una rama no son prueba de lo que un usuario ve o un bot ejecuta. Si afirmas algo sobre lo servido, pídelo por HTTP. Si no puedes: «no comprobable desde este entorno», nunca «no pasa».
  2. Referencias móviles. Antes de afirmar algo de una rama: refresca la referencia remota explícitamente y cita el SHA completo en la frase.
  3. Ausencia de evidencia ≠ evidencia de ausencia. Si no alcanzas una fuente, el resultado es «no comprobable», nunca «no existe».
  4. No heredar suposiciones. Si una recomendación se apoya en un dato del usuario (presupuesto, tarjeta, tiempo, equipo), pregúntalo antes. Y antes de preguntar, mira si la respuesta ya está en el repositorio.
  5. Contar la cosa, no el proxy. Coincidencias de grep no son páginas; archivos no son despliegues; lo que hay en una caché no es lo que ofrece el proveedor. Si informas un proxy, nómbralo como tal.
  6. Criterios por mecanismo, no por palabras. Un test que busca cadenas falla en silencio cuando el texto cambia. Comprueba el componente y los valores concretos. Una expresión regular que no casa no avisa.
  7. Si algo no debe salir, no lo generes. Filtrar después es la segunda barrera, nunca la primera. Y prueba sobre la salida real, no sobre un fixture simplificado.

Evidencia generada


Lecciones de medición

  1. Calibrar mirando el pasado no funcionó. Validación hacia adelante: elegir viendo solo el tramo de entrenamiento, aplicar al siguiente, encadenar. En 5 ventanas de 5, elegir por Sharpe pasado escogió la peor variante razonable. Referencia obligada: comparar contra fijar una variante desde el principio y contra comprar y no tocar. Si elegir no gana a quedarse quieto, elegir no aporta.
  2. La ventana de validación se gasta. Cada vez que eliges algo mirando un periodo, ese periodo deja de ser prueba independiente. Cuéntalas.
  3. Un componente del universo puede dominar el resultado. Mide exclusión de cada activo (leave-one-out) y sin los dos mejores. Y marca aparte los activos con cero operaciones: en el bot de acciones, BTC/USD estaba en el universo, hizo 0 de 144 operaciones y un leave-one-out lo aprobaba como «el resultado no depende de él». No dependía porque no existía para la estrategia.
  4. Muestras pequeñas no sustentan decisiones. Menos de ~30 operaciones no decide nada, y eso se dice en el informe.
  5. Una barra suelta puede arruinar una medición. Para el tramo común del universo: máximo de las primeras barras y mínimo de las últimas.
  6. El calentamiento de los indicadores se paga. Cada tramo necesita historia previa y luego recortarse. Si no la hay, se declara qué tramos quedaron sesgados.
  7. Bruto y neto no se mezclan en la misma tabla. En el bot de acciones, la P&L por símbolo era bruta de comisión y el retorno neto: la estrategia tenía expectancy +0.09 % por operación contra un coste de ida y vuelta de 0.50 %. Toda métrica debe decir si incluye comisión y deslizamiento.

Economía del mercado cripto

Estructura de coste, no estrategia. Se mide antes de diseñar reglas.


Seguridad y operación


Despliegue — decidido, no reabrir sin datos nuevos

Bot en Python en GitHub Actions · panel generado servido por Cloudflare Pages · mando por Telegram. Es la arquitectura del bot de acciones, trasplantada.

No propongas un Worker de Cloudflare. Se discutió a fondo el 2026-09-19 y se descartó. Los motivos, por orden de peso:

  1. El panel se genera, no se sirve dinámicamente. Un comando Python produce HTML estático desde el mismo SQLite, en el proceso que ya posee el estado. Al servirlo no hay nada que ejecutar, así que un Worker no aporta nada.
  2. El estado es un fichero SQLite y un Worker no tiene disco. Python Workers corre sobre Pyodide, cuyo sistema de archivos es en memoria: la base no sobrevive a la invocación. Habría que replicar el estado en D1/KV/R2, y esa copia se puede desincronizar. Una segunda fuente de verdad que puede mentir es justo lo contrario de lo que persigue este proyecto.
  3. Lo interactivo ya tiene canal: Telegram. /status, /kill, /resume, /bitacora son comandos, no páginas, y los ejecuta el propio bot con su estado real. Para 24/7 es mejor que una web: empuja al móvil, no hay que ir a mirarla.
  4. El proyecto de Workers del bot de acciones se probó y se retiró: ponía un check rojo en cada PR (era Workers Builds, la integración con Git).

Dos argumentos que se usaron a favor del Worker y son FALSOS. No los repitas:

Lo que sigue abierto, y solo eso: con ciclo diario, un /kill tarda hasta 24 h en ejecutarse, y cripto no tiene cierre que acote el daño. Salidas, por orden: (a) aceptarlo mientras no haya dinero real; (b) un job aparte en Actions que solo lea Telegram, sin dependencias, cada hora (~720 ejecuciones/mes, cabe); (c) un Worker que solo enclave la bandera KILL. Se decide cuando exista una posición que matar, no antes.

GitHub Actions: también lo pesado y ocasional — mediciones, backtests, informes. Minutos de CPU, y sus registros quedan guardados.


Entorno


Proceso


Trato

Discutir, no dar la razón. Si una idea del usuario tiene un fallo, se dice con el fallo delante. Si insiste dos veces, se dice una tercera y se hace: la decisión es suya, el diagnóstico es de Claude. Y si Claude se equivoca, se corrige explícitamente.

Generado desde el commit 8bc83abe2572ab2ef84a13c7405f5c05e2411d20