Trading Bot

Plan de aprendizaje y ejecución progresivo: Freqtrade + FreqAI + Binance

6
Fases
~7
Meses
$200
Capital
1-2h
x dia

Disclaimer brutal - Lee esto primero

  • Con $200 en spot, un 5% mensual consistente = $10/mes. No vas a vivir de esto al inicio.
  • El 70-90% de traders retail pierden dinero. Un bot no te exime.
  • ML en trading NO es magia. La mayoría de modelos ingenuos pierden vs buy-and-hold.
  • Tu ventaja real es el proceso: backtesting riguroso, gestión de riesgo, disciplina.
  • Tiempo estimado hasta operar con dinero real: 7-9 meses (a 1-2h/dia).

Timeline del plan

Fase 0: Fundamentos de Trading

Semanas 1-3 · 20-40 horas · Estudio, no código

Fase 1: Freqtrade + Estrategia Simple

Semanas 4-7 · 30-50 horas · Docker, backtest, EmaCrossRsi

Fase 2: Fundamentos de ML

Semanas 8-12 · 40-60 horas · LightGBM, walk-forward, features

Fase 3: FreqAI Integrado

Semanas 13-18 · 50-70 horas · ML dentro de Freqtrade

Fase 4: Paper Trading

Semanas 19-30 · 25-45 horas + monitoreo · Mínimo 8 semanas (ideal 12)

Fase 5: Trading Real

Semanas 31+ · 15-25 horas + monitoreo · Empezar con $50

Progreso total 0%
Flujo de decision: puedo pasar de fase?
Inicio fase | v Completa checklist técnico + documentación | v Cumple criterios duros? (PF >= 1.10, DD <= 15%, 100+ trades) |\ | Si | v | Pasar a siguiente fase | No | v Descartar idea o iterar solo 1 variable por vez
Si pasa X, haz Y
Si pasa X Haz Y No hagas
PF < 1.10 en validación Volver a Fase 1/3, simplificar y revalidar No pasar a dry-run
Drawdown > 15% Bajar riesgo, stake, max_open_trades y revisar salidas No subir capital
Backtest bueno, dry-run malo Auditar fees, slippage, ejecución y leakage No "ajustar a ojo" cada trade
Modelo predice casi una sola clase Revisar target, balance de labels y features No confiar en accuracy sola
5 perdidas seguidas en live Parar bot y volver a paper con post-mortem No promediar perdidas
Gráficos didácticos rápidos

Equity ideal (estable) vs sobreoptimizada (frágil)

Ideal: crecimiento con retrocesos controlados

Sobreoptimizada: sube mucho y colapsa fuera de muestra

Matriz riesgo vs validación

Riesgo bajo + validación alta
Escalar gradual
Riesgo medio + validación alta
Seguir en dry-run
Riesgo alto + validación alta
Reducir exposición
Riesgo bajo + validación media
Iterar setup
Riesgo medio + validación media
No avanzar de fase
Riesgo alto + validación media
Descartar
Riesgo bajo + validación baja
Rehacer validación
Riesgo medio + validación baja
Descartar
Riesgo alto + validación baja
Parar de inmediato
0

Fundamentos de Trading

Semanas 1-3 · 20-40 horas

Entender como funcionan los mercados crypto, la terminologia, y los mecanismos básicos antes de tocar una sola linea de código.

Tareas
Herramientas
Herramienta Costo Uso
TradingView Gratis Gráficos, análisis visual
Binance Academy Gratis Conceptos de trading y crypto
Investopedia Gratis Definiciones y conceptos financieros
Babypips Gratis Curso estructurado (School of Pipsology)
Como usar esta fase en la practica

Que deberias lograr antes de tocar código

Esta fase existe para que puedas mirar un resultado de backtest o un trade y entender si tiene sentido. Si no sabes que es spread, fee, slippage o drawdown, cualquier numero verde en una pantalla puede enganarte. No necesitas ser trader profesional, pero si necesitas vocabulario basico para no operar a ciegas.

  • Lee esta fase como si fuera un mapa del idioma del trading. No busques memorizar todo; busca poder explicar cada concepto con tus palabras.
  • Cuando veas una palabra desconocida en Fase 1-5, vuelve al glosario de esta fase.
  • Tu primera meta no es ganar dinero; es aprender a diferenciar una idea razonable de una fantasia peligrosa.
Que archivo usar y cuando
progress/tracker.md
Desde el dia 1

Usalo como checklist. Marca solo lo que realmente entiendes. Si marcas sin entender, te estas quitando control de riesgo.

progress/journal.md
Cada sesion

Anota que estudiaste, que no entendiste y que investigaras despues. Este diario te evita repetir errores y te obliga a pensar con evidencia.

plan.md
Al cerrar la fase

Revisa los criterios duros y confirma que no estas acelerando por ansiedad. El plan define cuando avanzar y cuando detenerte.

Ruta de aprendizaje de Fase 0
Entiende como se forma un precioEmpieza por order book, bid, ask y spread. La idea clave: no existe un precio unico perfecto; hay compradores, vendedores y liquidez disponible.
Entiende cuanto cuesta operarCalcula fee de entrada, fee de salida y posible slippage. Una estrategia que gana 0.15% por trade puede perder dinero si el costo total es 0.20%.
Entiende riesgo antes que gananciaDrawdown y perdida consecutiva importan mas que el trade ganador aislado. Un bot puede tener muchos aciertos pequenos y una perdida grande que destruya todo.
Haz 10 trades ficticiosNo busques acertar. Busca practicar el proceso: razon de entrada, razon de salida, resultado y que aprendiste. Esto entrena disciplina.
Escribe tus reglas con palabras simplesEjemplo: "solo compro si hay tendencia, volumen y riesgo definido". Si no puedes escribir la regla, no deberias automatizarla.
Errores comunes y como evitarlos
Saltarte esta fase porque "solo quieres programar"

Es tentador ir directo a Docker y Python, pero el bot no elimina la necesidad de entender mercado. Si no entiendes una comision o un drawdown, puedes optimizar algo que parece rentable pero no lo es.

Como evitarlo: antes de Fase 1, explica en tu journal que pasa si compras con $20, pagas 0.1% al entrar, 0.1% al salir y el precio se mueve solo 0.15% a favor.

Confundir indicador con estrategia

RSI, EMA o MACD son mediciones. Una estrategia completa define entrada, salida, tamano de posicion, stoploss, condiciones para no operar y criterios para apagar el bot.

Como evitarlo: cuando estudies un indicador, responde: que mide, cuando falla y como lo combinaria con gestion de riesgo.

Creer promesas de rentabilidad rapida

En redes vas a ver gente prometiendo 20%, 50% o 100% mensual. Casi siempre es marketing, survivorship bias o riesgo oculto. Con $200, tu objetivo inicial es aprender proceso y ejecucion.

Como evitarlo: compara cualquier promesa con la tabla de retornos realistas. Si parece demasiado bueno, tratalo como senal de alerta.

No documentar lo que aprendes

Si no escribes, no puedes distinguir aprendizaje real de sensacion de avance. En trading, la memoria suele justificar malas decisiones despues de perder.

Como evitarlo: usa `progress/journal.md` incluso para conceptos. Anota dudas como "no entiendo slippage" y vuelve a ellas.

Checkpoint para avanzar
Vocabulario minimoPuedes explicar order book, bid, ask, spread, fee y slippage sin mirar definiciones.
Riesgo basicoPuedes explicar drawdown y por que una perdida grande importa mas que varios trades pequenos ganadores.
Practica manualTienes 10 trades ficticios escritos con razon de entrada y salida.
DisciplinaNo has depositado dinero real todavia.
Glosario de Fase 0
Order bookLista de ordenes de compra y venta pendientes. Muestra liquidez disponible a distintos precios.
BidPrecio maximo que compradores estan dispuestos a pagar en ese momento.
AskPrecio minimo al que vendedores estan dispuestos a vender en ese momento.
SpreadDiferencia entre bid y ask. Es un costo implicito de operar.
SlippageDiferencia entre precio esperado y precio real de ejecucion. Aumenta con baja liquidez o alta volatilidad.
Market orderOrden que compra/vende al mejor precio disponible ahora. Ejecuta rapido, pero puede sufrir slippage.
Limit orderOrden con precio maximo/minimo definido. Controla precio, pero puede no ejecutarse.
OHLCVOpen, High, Low, Close, Volume. Datos básicos de cada vela.
TimeframeDuracion de cada vela: 1m, 5m, 1h, 4h, etc. Cambia el ruido y frecuencia de senales.
FeeComision cobrada por el exchange. En Binance spot suele rondar 0.1% por lado.
DrawdownCaida desde el pico de capital hasta un minimo posterior. Mide dolor/riesgo de una estrategia.
Profit FactorGanancia bruta dividida entre perdida bruta. Mayor a 1 significa que gana mas de lo que pierde, pero no basta solo.
1

Freqtrade + Estrategia sin ML

Semanas 4-7 · 30-50 horas

Tener Freqtrade corriendo en Docker, entender su arquitectura, y crear/backtestear la estrategia 📄 EmaCrossRsi.py

Archivos del proyecto
docker-compose.yml
Orquestacion Docker: Freqtrade + FreqUI en puerto 8080
config/config-backtest.json
Pares whitelist actuales (BTC, ETH, SOL, XRP), wallet $200, stake fijo, fee explicito, formato feather
strategies/EmaCrossRsi.py
EMA 20/50 cross + RSI filter + trailing stop + ROI escalonado
scripts/download_data.ps1
Descarga datos OHLCV de pares principales en 1h y 4h; acepta Days o Timerange
scripts/backtest.ps1
Ejecuta backtest con TRAIN, VALIDATION y FINAL-TEST usando --enable-protections
Tareas
Como funciona la estrategia EmaCrossRsi
python# ENTRADA (compra): EMA rapida cruza POR ENCIMA de EMA lenta Y RSI < 70 (dataframe["ema_fast"] > dataframe["ema_slow"]) # EMA 20 > EMA 50 & (dataframe["ema_fast"].shift(1) <= dataframe["ema_slow"].shift(1)) # Cruce reciente & (dataframe["rsi"] < 70) # No sobrecompra & (dataframe["volume"] > dataframe["volume_mean_20"] * 0.5) # Hay volumen # SALIDA (venta): EMA cruza abajo O RSI en sobrecompra extrema (dataframe["ema_fast"] < dataframe["ema_slow"]) # Tendencia bajista | (dataframe["rsi"] > 80) # RSI sobrecompra # Proteccion: stoploss = -5%, trailing stop, ROI escalonado (8%/4%/2%)
Herramientas
Herramienta Costo Uso
Freqtrade Gratis Framework de trading bot (open source)
Docker Desktop Gratis Ejecucion aislada
Freqtrade Docs Gratis Documentación oficial
FreqUI (incluido) Gratis Dashboard web en localhost:8080
Como usar esta fase en la practica

Objetivo real de Fase 1

No estas intentando crear una estrategia ganadora todavia. Estas aprendiendo a correr Freqtrade, descargar datos, entender una estrategia simple y evaluar resultados sin enganarte. `EmaCrossRsi.py` es una baseline: una referencia para comparar, no una promesa de rentabilidad.

  • Si algo falla en Docker o config, arreglalo aqui antes de tocar ML. FreqAI depende de que esta base funcione.
  • Si el backtest sale muy bueno, sospecha primero. Resultados exagerados suelen indicar sobreoptimizacion, periodo favorable o pocos trades.
  • Tu foco debe estar en reproducibilidad: que puedas correr el mismo comando y obtener un resultado rastreable.
Que archivo usar y cuando
docker-compose.yml
Inicio de fase

Define como se ejecuta Freqtrade dentro de Docker. Tocalo solo si necesitas cambiar config/strategy por defecto o puertos.

config/config-backtest.json
Antes de backtestear

Controla stake, pares, fee, exchange y formato de datos. Aqui verificas que el backtest se parezca al capital real esperado.

scripts/download_data.ps1
Antes de cualquier backtest

Descarga velas historicas. Si no hay datos o son insuficientes, el backtest no vale.

strategies/EmaCrossRsi.py
Al aprender estrategia

Lee `populate_indicators`, `populate_entry_trend` y `populate_exit_trend`. Eso te ensena donde se calculan indicadores y donde se definen senales.

scripts/backtest.ps1
Para evaluar

Corre train, validation y final-test. No uses solo un periodo porque puedes ajustar sin darte cuenta al pasado.

progress/tracker.md
Al cerrar la fase

Registra PF, drawdown, numero de trades y si realmente entiendes el resultado.

Ruta de ejecucion recomendada
Inicializa entornoEjecuta `docker compose run --rm freqtrade create-userdir --userdir /freqtrade/user_data`. Esto crea estructura interna para datos, logs y resultados.
Descarga datosEjecuta `./scripts/download_data.ps1`. Revisa que aparezcan archivos en `user_data/data/binance/`. Sin datos no hay backtest confiable.
Lee la estrategia antes de correrlaAbre `strategies/EmaCrossRsi.py`. Entiende que columnas agrega y bajo que condiciones pone `enter_long=1` o `exit_long=1`.
Corre backtest completoEjecuta `./scripts/backtest.ps1`. Mira train, validation y final-test. El resultado importante no es el mejor periodo, sino la consistencia.
Documenta numerosAnota Profit Factor, drawdown, trades, win rate y comentarios en `progress/tracker.md`. Si no esta documentado, no cuenta.
En que poner foco al leer EmaCrossRsi.py
Parte Que significa Por que importa
`timeframe = "1h"` Cada vela representa 1 hora. Define frecuencia de senales. Timeframes bajos tienen mas ruido y costos.
`stoploss = -0.05` Si el trade cae 5%, se cierra. Limita perdida por trade, aunque puede ejecutarse peor si hay gaps/slippage.
`minimal_roi` Objetivos de ganancia por tiempo. Define cuando tomar ganancias aunque no haya senal de salida.
`populate_indicators` Calcula EMA, RSI, ATR, volumen. Sin estas columnas no existen condiciones de entrada/salida.
`populate_entry_trend` Marca compras. Aqui se decide cuando el bot puede abrir un trade.
`populate_exit_trend` Marca ventas. Aqui se decide cuando salir por senal, aparte de stoploss/ROI.
Errores comunes y como evitarlos
Creer que un backtest positivo ya valida una estrategia

Un backtest es una simulacion historica. Puede estar bien hecho y aun asi fallar en vivo porque el mercado cambio, porque hubo sobreoptimizacion o porque las condiciones de ejecucion real difieren.

Como evitarlo: exige validation/final-test, minimo 100 trades historicos y dry-run posterior. Nunca saltes de backtest a live.

Mirar solo Profit Factor

PF alto con pocos trades puede ser casualidad. PF alto con drawdown enorme puede ser psicologicamente imposible de operar. PF alto en un solo par puede ser curve fitting.

Como evitarlo: mira PF junto con drawdown, numero de trades, pares, periodo, win rate y expectativa por trade.

Optimizar parametros demasiado pronto

Hyperopt o cambios manuales pueden encontrar combinaciones que funcionaron por casualidad en el pasado. Eso no significa que exista una ventaja real.

Como evitarlo: cambia una cosa por vez, documenta hipotesis antes de probar y protege un final-test que no toques.

No entender stake y capital

`stake_amount` define cuanto usa el bot por trade. Si backtest usaba unlimited y dry-run usa 20 USDT, estas comparando cosas distintas.

Como evitarlo: usa stake fijo parecido al capital real esperado y revisa que backtest/dry-run/live sean comparables.

Checkpoint para avanzar
InfraestructuraDocker corre y Freqtrade ejecuta comandos sin errores.
DatosDescargaste datos suficientes para los pares y timeframes definidos.
CódigoPuedes explicar que hace cada metodo principal de `EmaCrossRsi.py`.
ValidaciónTienes resultados train, validation y final-test documentados.
RiesgoDrawdown <= 15% y muestra historica con 100+ trades antes de confiar.
Glosario de Fase 1
FreqtradeFramework open-source para crear, backtestear y ejecutar bots de trading.
StrategyClase Python que define indicadores, entradas, salidas y reglas de riesgo.
BacktestSimulacion de una estrategia usando datos historicos.
TrainPeriodo usado para explorar o ajustar una idea.
ValidationPeriodo posterior usado para ver si la idea generaliza mejor.
Final-testPeriodo intocable. Solo se mira al final para decidir si descartar o seguir.
EMAMedia movil exponencial. Da mas peso a precios recientes para estimar tendencia.
RSIIndicador de momentum que intenta medir sobrecompra/sobreventa.
ATRIndicador de rango/volatilidad. Aqui se usa para evitar volatilidad extrema.
Stake amountCantidad que el bot arriesga/usa por trade.
enter_tag / exit_tagTexto guardado para saber por que entro o salio un trade.
OverfittingAjustar tanto al pasado que la estrategia deja de funcionar en datos nuevos.
2

Fundamentos de ML

Semanas 8-12 · 40-60 horas

Aprender Machine Learning suficiente para usarlo con criterio. No necesitas un master, pero si entender que hace y que NO hace.

Archivos del proyecto
notebooks/ml_fundamentals.ipynb
Notebook guiado: features, LightGBM, walk-forward, P&L simulado. 7 secciones completas.
Tareas
Que hay en el notebook
contenido1. Cargar datos OHLCV (reales o sinteticos) 2. Feature Engineering: retornos, EMAs, RSI, volatilidad, volumen relativo 3. Definir target: "sube >1% en 4 velas?" 4. Walk-Forward Split con TimeSeriesSplit (NUNCA random) 5. Entrenar LightGBM y evaluar por fold 6. Feature Importance: que features importan realmente 7. Simulacion P&L: convertir predicciones en ganancias/perdidas
Como usar esta fase en la practica

Objetivo real de Fase 2

Machine Learning no es una caja magica que predice precios. En este proyecto, ML sirve para aprender a transformar datos en features, definir un target, entrenar un modelo y evaluar si agrega valor. Lo mas importante no es lograr accuracy alta: es evitar errores de validación que te hagan creer que tienes una ventaja cuando no la tienes.

  • Si no entiendes que es train/test temporal, no pases a FreqAI.
  • Si el modelo acierta 52%, eso no significa automaticamente que gane dinero. Debes mirar fees, slippage, numero de trades y expectativa.
  • El notebook es educativo; la validación operativa real se hace despues con Freqtrade.
Que archivo usar y cuando
notebooks/ml_fundamentals.ipynb
Durante toda la fase

Es el laboratorio para aprender features, target, entrenamiento y metricas. No lo uses para decidir live; usalo para entender conceptos.

user_data/data/binance/*.feather
Antes de entrenar

Son datos reales descargados por Freqtrade. Siempre prioriza datos reales sobre sinteticos.

progress/journal.md
Cada experimento

Anota feature usada, target elegido, resultado, duda y conclusion. En ML, sin registro, los experimentos se vuelven ruido.

strategies/FreqaiLightgbm.py
Despues del notebook

No lo modifiques aun. Solo miralo para reconocer conceptos: features `%`, target `&`, pipeline FreqAI.

Ruta de aprendizaje de ML para este proyecto
Carga datos realesEjecuta el notebook y confirma si carga `BTC_USDT-1h.feather`. Si cae en datos sinteticos, entiende que eso solo sirve para practicar código.
Crea features simplesFeatures son columnas que describen el mercado: retornos, ratios de EMA, RSI, volatilidad, volumen relativo. Evita empezar con 200 columnas.
Define target entendibleEjemplo: "el precio sube mas de 1% en 4 velas". Si no entiendes que estas intentando predecir, no puedes evaluar el modelo.
Separa tiempo correctamenteEntrena con pasado y evalua con futuro. Nunca mezcles filas aleatoriamente porque en trading eso filtra informacion del futuro.
Evalua trading, no solo MLAccuracy, precision y recall ayudan, pero lo que importa para trading es profit factor, drawdown, trades y expectativa por trade.
Que mirar dentro del notebook
Seccion Que aprender Senal de que entendiste
Carga de datos Diferencia entre datos reales y sinteticos. Sabes ubicar archivos `.feather` y sabes por que sintetico no valida trading.
Feature engineering Convertir OHLCV en variables que el modelo pueda usar. Puedes explicar por que retorno/ratio generaliza mejor que precio absoluto.
Target Definir que intenta predecir el modelo. Puedes explicar horizonte, umbral y distribucion de clases.
Walk-forward Validación temporal sin mezclar futuro. Puedes dibujar train -> test en orden cronologico.
Metricas Diferencia entre metrica ML y metrica de trading. No dices "accuracy 55% = rentable" sin revisar P&L.
Errores comunes y como evitarlos
Look-ahead bias

Ocurre cuando el modelo ve informacion del futuro aunque no parezca obvio. Ejemplo: usar una columna calculada con datos futuros, normalizar usando todo el dataset o mezclar aleatoriamente filas temporales.

Como evitarlo: toda transformacion debe poder calcularse con informacion disponible hasta ese momento. Usa splits temporales y revisa `shift(-n)` solo para targets, nunca para features.

Random split en series temporales

En datos normales a veces se mezclan filas al azar. En trading eso es peligroso porque el modelo entrena con informacion de periodos posteriores y evalua en periodos anteriores.

Como evitarlo: usa walk-forward o TimeSeriesSplit. Siempre piensa: entreno con pasado, pruebo en futuro.

Usar accuracy como unica verdad

Un modelo puede acertar muchas veces movimientos pequenos y perder mucho en pocos movimientos grandes. Accuracy no incluye comisiones, slippage ni tamano de perdida.

Como evitarlo: mira profit factor, max drawdown, numero de trades, retorno promedio por trade y expectativa.

Target desbalanceado

Si tu target positivo ocurre solo 3% del tiempo, un modelo que siempre predice "no" puede verse bien en accuracy pero no sirve para operar.

Como evitarlo: revisa `value_counts(normalize=True)` del target y pregunta si ambas clases tienen suficiente representacion.

Checkpoint para avanzar
Datos realesEjecutaste notebook con datos descargados por Freqtrade, no solo sinteticos.
Target claroPuedes explicar que significa clase 1 y clase 0.
Validación temporalEntiendes por que random split no aplica aqui.
Metricas de tradingPuedes leer PF, DD y expectativa sin depender solo de accuracy.
Glosario de Fase 2
Machine LearningConjunto de tecnicas donde un modelo aprende patrones desde datos en lugar de reglas escritas a mano.
FeatureColumna de entrada para el modelo. Ejemplo: retorno 4h, RSI, volatilidad.
Target / LabelLo que el modelo intenta predecir. En este caso puede ser si el precio sube mas de cierto umbral.
Train setDatos usados para entrenar el modelo.
Test setDatos usados para evaluar el modelo despues de entrenar.
Walk-forwardValidación que respeta el tiempo: entrenar con pasado, probar con futuro, avanzar ventana y repetir.
AccuracyPorcentaje de predicciones correctas. Util pero insuficiente en trading.
PrecisionDe las veces que el modelo dijo "si", cuantas fueron correctas.
RecallDe los casos positivos reales, cuantos encontro el modelo.
LightGBMModelo de arboles muy usado para datos tabulares. Rapido y potente, pero puede sobreajustar.
OverfittingCuando el modelo aprende ruido del pasado y falla en datos nuevos.
Class imbalanceCuando una clase aparece mucho mas que otra. Puede hacer que metricas se vean mejor de lo que son.
3

FreqAI - ML Integrado

Semanas 13-18 · 50-70 horas

Integrar modelos ML en Freqtrade usando FreqAI. Pipeline completo: features → training → prediction → signal.

Archivos del proyecto
strategies/FreqaiLightgbm.py
Estrategia ML clasificador: features %, target &s-up_or_down, do_predict y filtro técnico
config/config-backtest-freqai.json
Config FreqAI: train=90 dias, retrain cada 7 dias, SVM outliers, LightGBM params
scripts/backtest_freqai.ps1
Ejecuta backtest con FreqAI (30-60 min). Usa LightGBMClassifier.
Tareas
Pipeline FreqAI en tu estrategia
pipelineFreqaiLightgbm.py: feature_engineering_expand_all() → features tecnicas x periodos/timeframes/shifts feature_engineering_expand_basic() → features basicas no periodicas (retorno, volumen, vela verde) feature_engineering_standard() → features temporales no expandidas (hora, dia) set_freqai_targets() → target clasificador &s-up_or_down: up/down config-backtest-freqai.json: train_period_days: 90 → Entrena con 90 dias de datos backtest_period_days: 7 → Valida cada 7 dias live_retrain_hours: 168 → Re-entrena cada 7 dias en vivo DI_threshold: 0.9 → Filtra datos muy diferentes al training use_SVM_to_remove_outliers → Limpia outliers antes de entrenar
Flujo FreqAI (de datos a trade)
Datos OHLCV crudos -> features (%) por timeframe y periodo -> target (&) bien definido -> entrenamiento del modelo -> prediccion (do_predict + score) -> filtro técnico de estrategia -> señal final -> orden ejecutada -> journal (entry_tag/exit_tag + resultado)
Ejemplos visuales de errores frecuentes
Error Como se ve Que hacer
Overfitting Train PF alto, final-test mediocre Reducir parametros, agregar final-test intocable
Look-ahead bias Resultados irreales y demasiado estables Revisar features/targets para evitar uso de futuro
Demasiadas features Importancia dispersa, ruido alto, poca mejora Empezar con set pequeno y agregar solo si mejora
Backtest bueno, dry-run malo Divergencia de P&L y drawdown Auditar fees, slippage, latencia y calidad de datos
Como usar esta fase en la practica

Objetivo real de Fase 3

Aqui conviertes lo aprendido en Fase 2 en una estrategia Freqtrade con FreqAI. La meta no es "usar ML porque suena avanzado". La meta es demostrar que ML mejora algo medible frente a la baseline: menos drawdown, mejor profit factor, menos trades malos o mejor expectativa.

  • FreqAI debe ser tratado como una capa de validación adicional, no como piloto automatico.
  • Si el modelo no supera la baseline, no pasa nada: se documenta y se descarta o se usa solo como filtro.
  • Cada cambio en features, target o config debe tener nuevo `identifier` para no mezclar modelos viejos con experimentos nuevos.
Que archivo usar y cuando
strategies/FreqaiLightgbm.py
Centro de la fase

Define features `%`, target `&`, setup técnico y como ML confirma entradas/salidas. Leelo metodo por metodo.

config/config-backtest-freqai.json
Antes de correr ML

Controla ventanas de entrenamiento, timeframes, pares correlacionados, periodos de indicadores, identifier y parametros del modelo.

scripts/backtest_freqai.ps1
Para comparar

Corre FreqAI y baseline en el mismo timerange. Genera resumen para que no aceptes ML sin evidencia.

user_data/models/
Despues de correr

Carpeta donde FreqAI guarda modelos. Si cambias experimento y no cambias identifier, puedes mezclar modelos.

progress/reports/
Runtime-generated

Se crea al correr `scripts/backtest_freqai.ps1` y guarda resumen ML vs baseline. No falta si aun no corriste el script.

Ruta de ejecucion recomendada
Revisa version y documentación FreqAIFreqAI cambia con el tiempo. Antes de confiar, verifica que los nombres de columnas y hooks usados coinciden con tu version instalada.
Descarga datos extraFreqAI necesita datos previos para entrenar ventanas. Si backtesteas 2024, necesitas datos antes de 2024 para cubrir `train_period_days` y `startup_candle_count`.
Define un experimento pequenoNo cambies 10 cosas a la vez. Ejemplo: identifier `lightgbm_v2_rsi_ema_target1p_4h`. Asi sabes que probaste.
Corre comparacion automaticaEjecuta `./scripts/backtest_freqai.ps1`. Si ML no mejora algo frente a `EmaCrossRsi`, no hay razon para agregar complejidad.
Documenta por que gana o pierdeSi ML reduce trades malos pero baja retorno, podria ser util como filtro. Si mejora solo en train y cae en final-test, descartalo.
En que poner foco al leer FreqaiLightgbm.py
Metodo / concepto Que hace Como interpretarlo
`feature_engineering_expand_all` Crea features para varios periodos. FreqAI multiplica estas features por timeframes, periodos y shifts. Pocas columnas pueden crecer rapido.
`feature_engineering_expand_basic` Crea features sin periodo, como retorno actual o cambio de volumen. Se expande por timeframe/shift; no pongas aqui hora/dia si no quieres expansion innecesaria.
`feature_engineering_standard` Crea features que no se autoexpanden, como hora y dia. Es el lugar recomendado para features temporales simples.
`set_freqai_targets` Define que el modelo intenta predecir. Es una de las decisiones mas importantes. Target mal definido = modelo inutil.
`self.freqai.start` Activa pipeline de FreqAI. Entrena o carga modelo, genera predicciones y columnas auxiliares.
`do_predict` Indica si FreqAI considera confiable predecir. Si FreqAI dice no predecir, la estrategia deberia no operar.
`enter_tag` Etiqueta motivo de entrada. Te permite auditar si entro por setup técnico + ML o por otra razon.
Errores comunes y como evitarlos
Agregar demasiadas features demasiado pronto

FreqAI expande features por periodos, timeframes, shifts y pares correlacionados. Lo que parece 6 features puede convertirse en decenas o cientos. Mas features pueden aumentar ruido y sobreajuste.

Como evitarlo: empieza pequeno, mide mejora real y elimina features que no aportan. Si una feature no puedes explicarla, no la uses en live.

No comparar contra baseline

Si ML no supera una estrategia simple, la complejidad extra no se justifica. ML puede hacer el sistema mas fragil, mas lento y mas dificil de auditar.

Como evitarlo: usa `scripts/backtest_freqai.ps1`, revisa el resumen y exige mejora concreta: PF, DD, expectativa o calidad de trades.

Target mal balanceado

Si el target positivo casi nunca ocurre, el modelo puede aprender a decir siempre "no". Si ocurre casi siempre, puede decir siempre "si". Ambos casos pueden dar metricas enganadoras.

Como evitarlo: revisa distribucion de labels antes de confiar. Si una clase domina demasiado, ajusta horizonte o umbral.

Reutilizar identifier sin querer

FreqAI usa `identifier` para guardar y reutilizar modelos. Si cambias features pero mantienes el mismo identifier, puedes mezclar resultados y perder trazabilidad.

Como evitarlo: cambia identifier por cada experimento importante o limpia modelos antiguos conscientemente.

Creer que ML debe decidir todo

Un modelo puede predecir subida en condiciones tecnicas malas. En trading, muchas predicciones estadisticas pequenas se destruyen con costos y ruido.

Como evitarlo: usa ML como filtro sobre una condicion tecnica clara. Eso reduce trades absurdos y mejora auditabilidad.

Checkpoint para avanzar
PipelinePuedes explicar datos -> features -> target -> modelo -> prediccion -> trade.
IdentifierCada experimento importante tiene identificador distinto.
ComparacionFreqAI fue comparado contra baseline en el mismo periodo.
LabelsRevisaste distribucion de clases y no hay degeneracion extrema.
DecisionSabes si ML mejora algo o si debe descartarse.
Glosario de Fase 3
FreqAIModulo de Freqtrade para integrar entrenamiento e inferencia ML dentro del bot.
IdentifierNombre del experimento/modelo usado por FreqAI para guardar y reutilizar artefactos.
Feature `%`Columna que FreqAI usa como entrada del modelo. Debe empezar con `%`.
Target `&`Columna que FreqAI intenta predecir. Debe empezar con `&`.
InferenceMomento en que el modelo ya entrenado genera predicciones.
RetrainReentrenar el modelo con datos recientes para adaptarse al mercado.
DI thresholdFiltro de disimilitud. Ayuda a detectar datos actuales muy distintos al entrenamiento.
OutlierDato raro o extremo que puede distorsionar el entrenamiento.
BaselineEstrategia simple de referencia contra la que comparas ML.
Feature importanceMedida aproximada de cuanto usa el modelo cada feature.
Probability thresholdUmbral minimo de confianza antes de aceptar una prediccion.
Modelo degeneradoModelo que predice casi siempre lo mismo y parece funcionar por metrica enganosa.
4

Paper Trading

Semanas 19-30 · 8-12 semanas obligatorias

No negociable: NO poner dinero real hasta completar esta fase. Minimo 8 semanas de dry-run (ideal 12) con datos de mercado reales.

Archivos del proyecto
config/config-dryrun.json
dry_run: true, wallet $200, stake $20/trade, API server en :8080, max 3 trades
scripts/dryrun.ps1
Inicia paper trading. FreqUI en http://localhost:8080
progress/journal.md
Diario de trading con plantilla para cada trade y sesion
Tareas
Errores comunes
Paper trading solo 1-4 semanas

Para FreqAI es poco. Usa 8 semanas minimo (ideal 12) para ver degradacion del modelo.

Ignorar divergencias backtest vs paper

Si backtest = +10% y paper = -5%, hay bug o overfitting. No racionalices, investiga.

No tener reglas de apagado

Define kill switch antes de live: DD mensual >5%, 5 perdidas seguidas o errores repetidos de API.

Bloques de accion (si X entonces Y)
Evento Accion inmediata Accion siguiente
Dry-run DD supera 10% Bajar stake y max_open_trades Revisar salidas y filtros
Dry-run DD supera 15% Parar bot Volver a backtest y validar nuevamente
Diferencia paper vs backtest > 30% Congelar cambios Auditar fees/slippage/data leakage
5 losses seguidas Parar 24h Analizar regimen y señales de entrada
Como usar esta fase en la practica

Objetivo real de Fase 4

Paper trading no es un tramite. Es la primera vez que el bot vive con mercado real, latencia real, velas nuevas, API, logs, FreqUI, alertas y comportamiento continuo. Aunque no usa dinero real, si revela problemas que el backtest no muestra.

  • No cambies la estrategia durante el periodo de evaluacion. Si la cambias, reinicia el conteo porque ya no estas midiendo lo mismo.
  • El objetivo es comparar expectativa del backtest contra comportamiento en tiempo real. No busques "salvar" cada trade malo.
  • Documenta fallos técnicos tambien: reinicios, errores de API, problemas de Telegram, desconexiones o trades que no entiendes.
Que archivo usar y cuando
config/config-dryrun.json
Antes de iniciar

Define wallet ficticio, stake, pares, protecciones, API server y Telegram. Debe parecerse lo mas posible al futuro live.

scripts/dryrun.ps1
Para arrancar el bot

Ejecuta Freqtrade en dry-run y lanza warnings si Telegram o credenciales parecen mal configuradas.

progress/journal.md
Diario / por trade

Registra trades, entry_tag, exit_tag, spread estimado, fee, slippage y condicion de mercado.

progress/tracker.md
Cada semana

Actualiza semanas completadas, trades, win rate, P&L y drawdown. Esto decide si puedes avanzar.

FreqUI
Monitoreo

Dashboard en `http://localhost:8080`. Revisa trades abiertos, logs, estado del bot y operaciones recientes.

Rutina semanal recomendada
Dia 1: arranque controladoInicia con `./scripts/dryrun.ps1`, abre FreqUI y confirma que el bot esta vivo, conectado y sin errores repetidos.
Diario: revisar sin intervenirMira estado, trades y alertas. No cambies parametros por un trade malo. Solo documenta.
Cada trade cerradoRegistra par, entrada, salida, P&L, entry_tag, exit_tag y si la razon coincide con lo esperado.
Cierre semanalCalcula trades, P&L, DD, win rate y divergencia contra backtest. Escribe conclusion: continuar, observar o pausar.
Semana 8/12: decisionSi no hay suficientes trades o hay divergencia fuerte, no avances. Extiende dry-run o vuelve a Fase 3.
Que mirar en config-dryrun.json
Campo Que controla Recomendacion
`dry_run` Garantiza que no usa dinero real. Debe estar en `true` durante toda Fase 4.
`dry_run_wallet` Capital ficticio. Usa monto parecido a tu capital real planeado.
`stake_amount` Monto por trade. Debe ser conservador y comparable con backtest.
`max_open_trades` Trades simultaneos maximos. Con poco capital, mantener bajo para no sobreexponer.
`strategy.protections` Reglas de pausa automatica definidas dentro de la estrategia. Probarlas en dry-run y backtest con `--enable-protections` antes de live.
`telegram` Alertas externas. Idealmente activo para corridas prolongadas.
Errores comunes y como evitarlos
Tratar dry-run como demo sin importancia

Dry-run es donde validas si el bot puede vivir fuera del backtest. Si no lo tomas en serio, pasaras a live con problemas no detectados.

Como evitarlo: define horario de revision, documenta cada semana y no avances sin 8 semanas minimo.

Cambiar estrategia durante la prueba

Si cambias parametros despues de cada perdida, ya no estas evaluando una estrategia. Estas persiguiendo ruido emocional.

Como evitarlo: congela estrategia al inicio. Si detectas un bug grave, paras, corriges y reinicias periodo de evaluacion.

No comparar contra backtest

Dry-run puede ganar o perder por condiciones de mercado recientes. Lo importante es si su comportamiento se parece al esperado: frecuencia, DD, tipo de trades y reaccion ante volatilidad.

Como evitarlo: cada semana compara contra backtest en rango similar y anota divergencias.

No tener alertas

Un bot puede quedar corriendo con errores, desconexion o comportamiento raro mientras no estas mirando. En live esto puede costar dinero.

Como evitarlo: configura Telegram y verifica que recibes startup, warning, entry y exit.

Checkpoint para avanzar
Tiempo8 semanas minimo completadas, ideal 12 si usas FreqAI.
Muestra50 trades minimo, ideal 100+ para evaluar con menos ruido.
RiesgoDrawdown maximo no supera 15% y no rompe reglas de apagado.
ConsistenciaDry-run no difiere demasiado del backtest.
OperativaTelegram, FreqUI, logs y journal funcionan sin friccion.
Glosario de Fase 4
Dry-runModo de Freqtrade que simula trading con dinero ficticio en mercado real.
Paper tradingOperacion simulada sin dinero real. Sirve para validar ejecucion y comportamiento.
FreqUIInterfaz web de Freqtrade para ver estado del bot, trades y logs.
ProtectionsReglas que pausan operaciones bajo condiciones de riesgo, como drawdown o pares malos.
CooldownPeriodProteccion que espera un tiempo despues de operar antes de volver a entrar.
StoplossGuardProteccion que pausa si hay demasiados stoploss en una ventana.
MaxDrawdownProteccion que pausa si el drawdown supera un limite.
LowProfitPairsProteccion que pausa pares que vienen teniendo mal rendimiento.
DivergenciaCuando dry-run se comporta muy distinto al backtest esperado.
Kill switchRegla definida de antemano para apagar el bot sin debatir emocionalmente.
5

Trading Real

Semanas 31+ · Micro-capital

DINERO REAL

  • Empieza con $50 o $100, NO con todo el capital. Si funciona varias semanas con DD controlado, evalua escalar.
  • API keys solo con permisos de trading, NUNCA de retiro.
  • Si el drawdown mensual supera 5%, PARAR y regresar a Fase 3 o 4.
Archivos del proyecto
config/config-live.example.json
Template: copiar como config-live.json y agregar API keys. Incluye bloque FreqAI opcional, Telegram y arranque en stopped. Las protecciones viven en la estrategia.
scripts/live.ps1
Requiere escribir I_ACCEPT_REAL_MONEY_RISK y valida placeholders, Telegram e initial_state.
Tareas
Comandos
powershell# 1. Copiar template de config copy config\config-live.example.json config\config-live.json # 2. Editar config-live.json: agregar API keys, cambiar passwords # 3. Iniciar trading real (requiere confirmacion) .\scripts\live.ps1 # 4. Configurar alertas Telegram (obligatorio para live en este plan) # Editar "telegram" block en config-live.json
Objetivo real de esta fase

Capital real esperado

  • Empieza con $50 o $100. El objetivo es validar ejecucion real, no maximizar ganancias.
  • No pases a $200 hasta demostrar estabilidad real y DD mensual menor a 5%.
  • Si live rompe las metricas del dry-run, vuelve a Fase 4.
Como usar esta fase en la practica

Objetivo real de Fase 5

Live no es "ahora si a ganar". Live es una prueba de ejecucion real con riesgo controlado. Aqui aparecen diferencias que dry-run no puede simular perfecto: fill real, micro-slippage, latencia, estado de API, errores del exchange y presion emocional porque el dinero ya es real.

  • El primer objetivo es no romper el sistema, no maximizar retorno.
  • Si live difiere fuerte de dry-run, paras y vuelves a Fase 4.
  • Si rompes una regla de apagado, no negocies contigo mismo: apaga el bot.
Que archivo usar y cuando
config/config-live.example.json
Antes de live

Plantilla segura. Copiala como `config-live.json` y completa API keys, Telegram, password y secretos.

config/config-live.json
Archivo real local

No se sube a Git. Contiene secretos. Debe tener `initial_state: stopped` y API sin permisos de retiro.

scripts/live.ps1
Unico arranque live

Ejecuta validaciónes estrictas antes de iniciar. Si falla, no intentes saltarlo: corrige configuracion.

progress/journal.md
Cada trade real

Registra trade real con mas detalle que en dry-run: fee, slippage, spread, tag, modelo y estado emocional si aplica.

progress/tracker.md
Cada semana live

Decide si continuar, pausar o escalar. No escales por intuicion.

Ruta segura para iniciar live
Verifica que cumpliste Fase 48-12 semanas, 50+ trades, drawdown controlado, Telegram activo, divergencia aceptable contra backtest.
Crea config-live.jsonCopia el example. Nunca edites el example con secretos reales. `config-live.json` esta ignorado por Git.
Configura API sin retiroEn Binance, la API debe permitir trading spot, pero nunca retiros. Si una API puede retirar, es demasiado peligrosa.
Activa TelegramDebes recibir alertas de startup, warning, entry y exit. Si no recibes alertas, no inicies live.
Ejecuta live.ps1El script debe pasar validaciónes y pedir `I_ACCEPT_REAL_MONEY_RISK`. Si falla por placeholder, corrige.
Arranca en stopped`initial_state` debe estar en `stopped` para que puedas revisar FreqUI antes de permitir operaciones.
Que mirar en config-live.json
Campo Que controla Regla
`dry_run` Define si opera ficticio o real. En live sera `false`; por eso todo lo demas debe estar validado.
`exchange.key/secret` Credenciales Binance. Sin permisos de retiro. Idealmente API dedicada solo para este bot.
`stake_amount` Capital por trade. Empieza pequeno. No uses todo el capital por operacion.
`tradable_balance_ratio` Porcentaje del balance disponible para operar. Mantener conservador para no comprometer todo.
`initial_state` Si el bot arranca operando o detenido. Debe estar `stopped` para control manual inicial.
`telegram.enabled` Alertas. Debe estar `true` antes de live.
`strategy.protections` Guardrails automaticos definidos dentro de la estrategia. Deben haber sido probados en dry-run y backtest con `--enable-protections`.
Errores comunes y como evitarlos
Empezar con todo el capital

El primer live puede revelar fallos de ejecucion, configuracion o comportamiento. Si empiezas con todo, un error pequeno se vuelve caro.

Como evitarlo: usa $50-$100, stake bajo y max_open_trades limitado. Escalar es una decision posterior, no inicial.

Operar sin Telegram

Si algo falla y no te enteras, pierdes control. En live necesitas alertas de entradas, salidas, warnings y estado.

Como evitarlo: antes de live, confirma que Telegram envia mensajes reales. `scripts/live.ps1` bloquea si no esta activo.

Ignorar initial_state

Si el bot arranca operando inmediatamente, puedes entrar al mercado antes de revisar FreqUI o confirmar que todo esta correcto.

Como evitarlo: mantener `initial_state: stopped`, abrir FreqUI, revisar config y arrancar manualmente cuando estes listo.

No respetar kill switch

El mayor riesgo en live es justificar excepciones: "solo una vez mas", "seguro se recupera". Eso convierte un sistema en una apuesta emocional.

Como evitarlo: escribe tus reglas de apagado antes de iniciar. Si se cumplen, apaga sin debatir.

Reglas de apagado recomendadas
Evento Accion Motivo
Drawdown mensual > 5% Parar live Con capital pequeno, la prioridad es preservar y aprender.
5 perdidas consecutivas Pausar y revisar regimen Puede indicar mercado incompatible o bug de senal.
Errores repetidos de API/exchange Parar hasta resolver Un bot con ejecucion inestable no debe operar dinero real.
Live difiere fuerte de dry-run Volver a Fase 4 La hipotesis de ejecucion real no se esta cumpliendo.
Modelo predice casi siempre igual Parar estrategia ML Puede haber degeneracion del modelo o target mal calibrado.
Checkpoint para operar y escalar
Seguridad APIAPI sin retiro, secretos fuera de Git y password cambiado.
AlertasTelegram activo y probado antes de operar.
CapitalInicio con $50-$100 y stake conservador.
Control`initial_state` en stopped y FreqUI revisado antes de arrancar.
EscaladoSolo subir capital tras semanas reales estables y journal completo.
Glosario de Fase 5
Live tradingOperacion con dinero real en el exchange.
API keyCredencial que permite al bot comunicarse con Binance.
SecretParte privada de la API. Nunca debe subirse a Git ni compartirse.
Permiso de retiroPermiso para sacar fondos. Debe estar desactivado siempre para bots.
Initial stateEstado inicial del bot al arrancar. `stopped` significa que no opera hasta activarlo.
Tradable balance ratioPorcentaje del balance que el bot puede usar para operar.
Micro-capitalMonto pequeno usado para validar ejecucion real antes de escalar.
Slippage realDiferencia real entre precio esperado y ejecutado en live.
LatencyTiempo entre senal, envio de orden y ejecucion.
Escalar capitalAumentar dinero operado solo despues de evidencia estable.

Retornos realistas (% mensual)

Se brutalmente honesto contigo mismo al leer esto.

Escenario Retorno mensual Contexto
Malo pero comun -5% a -15% La mayoria de bots retail. Overfitting o mal risk management.
Breakeven -2% a +2% Despues de comisiones. Muchos bots "rentables" en backtest terminan aqui.
Decente +2% a +5% Consistente en 6+ meses. Esto ya es MUY bueno para retail.
Muy bueno +5% a +10% Posible en periodos de alta volatilidad. No esperes esto cada mes.
Fantasia +20%+ mensual Si alguien te lo promete, es estafa o survivorship bias.

Con $200 USD y +3% mensual:

Ganas ~$6/mes. No es para vivir de esto al inicio. Es para aprender, validar, y escalar con mas capital si demuestras que funciona.

Tu ventaja como ingeniero en sistemas

Lo que puedes hacer tu que el "trader promedio" no puede.

01

Infraestructura robusta

Docker, CI/CD, monitoring, logging. Tu bot no se cae sin que te enteres. Health checks y alertas automatizadas.

02

Pipeline de datos propio

Scraping on-chain, sentiment de redes sociales, datos de exchanges. Freqtrade permite features custom.

03

Testing riguroso

Unit tests para estrategia, integration tests para pipeline, validación estadistica automatizada.

04

Feature engineering creativo

Funding rates, open interest, liquidation maps, on-chain metrics via APIs que la mayoria no usa.

05

Versionamiento

Git para estrategias, MLflow para rastrear experimentos. Reproducibilidad total de resultados.

06

Multi-strategy

Correr multiples estrategias en paralelo, diversificar, medir correlacion entre ellas.

Seniales de alerta

Como saber si estas fallando sin darte cuenta.

Criticas - PARAR y reevaluar

  • Tu backtest da >30% mensual. Casi seguro overfitting.
  • Tu estrategia solo funciona en un par o un periodo. Es curve-fitted.
  • Resultados de paper trading son muy diferentes al backtest. Bug o lookahead bias.
  • Estas "ajustando" la estrategia cada vez que pierde. Optimizacion emocional.
  • Llevas mas de 8 semanas sin completar una fase. Replantea el scope.
  • Tu modelo predice casi siempre la misma clase. Senal de degeneracion o mal target.

Precaucion

  • No estas documentando nada. Sin registros no puedes evaluar progreso.
  • Agregando complejidad sin mejorar metricas. Mas features, mismo sharpe. Simplifica.
  • Solo pruebas en BTC/USDT. Valida en 3-5 pares minimo.
  • Ignoras comisiones o slippage. Con micro-capital se comen tus ganancias.
  • Comparandote con gente en Twitter que "hace 50% mensual". Survivorship bias.

Vas bien si...

  • Backtest y paper trading convergen (diferencia menor a 30%)
  • Sharpe ratio > 1.0 en datos de validación
  • Drawdown maximo menor a 20%
  • Puedes explicar cada componente de tu pipeline
  • Llevas un diario y articulas que aprendiste cada semana

Estructura del proyecto

Todos los archivos que ya tienes listos.

trading-plan/ ARCHIVOS_CLAVE.md # Orden sugerido de lectura README.md # Guia rapida de uso .gitignore # Excluye API keys y datos docker-compose.yml # Freqtrade + FreqUI en Docker plan.md # Plan completo en markdown guia.html # Esta guia interactiva config/ config-backtest.json # Backtest estrategia simple (pares whitelist) config-backtest-freqai.json # Backtest ML con FreqAI + LightGBM config-dryrun.json # Paper trading + FreqUI en :8080 config-live.example.json # Template para trading real strategies/ EmaCrossRsi.py # Fase 1: EMA 20/50 + RSI + trailing FreqaiLightgbm.py # Fase 3: FreqAI + LightGBM classifier notebooks/ ml_fundamentals.ipynb # Fase 2: ML desde cero (7 secciones) scripts/ download_data.ps1 # Descarga datos con Days o Timerange backtest.ps1 # Backtest train/validation/final-test backtest_freqai.ps1 # Backtest FreqAI (30-60 min) dryrun.ps1 # Paper trading 24/7 live.ps1 # Trading real (pide confirmacion) progress/ tracker.md # Checklist por fase con tablas journal.md # Diario de trading reports/ # runtime-generated por backtest_freqai.ps1 user_data/ # runtime-generated por Freqtrade
Matriz fase -> archivo -> comando -> salida esperada
Fase Archivo clave Comando / accion Salida esperada
0 `progress/journal.md` Registrar conceptos y 10 trades ficticios Notas claras de aprendizaje, errores y dudas pendientes
1 `scripts/download_data.ps1` `./scripts/download_data.ps1` Datos `.feather` en `user_data/data/binance/`
1 `scripts/backtest.ps1` `./scripts/backtest.ps1` Resultados train/validation/final-test en `user_data/backtest_results/`
1 `strategies/EmaCrossRsi.py` Leer indicadores, entradas y salidas Entiendes por que el bot compra/vende baseline
2 `notebooks/ml_fundamentals.ipynb` Ejecutar notebook con datos reales Features, target, walk-forward y metricas entendidas
3 `strategies/FreqaiLightgbm.py` Revisar features `%`, target `&s-up_or_down` y `do_predict` Entiendes pipeline FreqAI clasificador
3 `scripts/backtest_freqai.ps1` `./scripts/backtest_freqai.ps1` Comparacion ML vs baseline en train/validation/final-test + reporte
4 `scripts/dryrun.ps1` `./scripts/dryrun.ps1` Bot dry-run local en FreqUI `http://localhost:8080`
4 `progress/journal.md` Registrar cada trade y resumen semanal Evidencia para decidir si pasar o no a live
5 `config/config-live.example.json` Copiar a `config-live.json` y completar secretos Config live local, ignorada por Git, sin placeholders
5 `scripts/live.ps1` `./scripts/live.ps1` Primero `show-config` OK, luego confirmacion de riesgo y bot local
Flujo real del proyecto

Diagrama operativo

Este diagrama resume el camino real: aprender, validar baseline, aprender ML, comparar FreqAI, dry-run prolongado y recien despues live con micro-capital.

flowchart LR
A[FASE 0 Fundamentos] --> B[FASE 1 download_data.ps1]
B --> C[backtest.ps1 train/validation/final-test]
C --> D[FASE 2 ml_fundamentals.ipynb]
D --> E[FASE 3 FreqaiLightgbm.py]
E --> F[backtest_freqai.ps1 ML vs baseline]
F --> G[FASE 4 dryrun.ps1 8-12 semanas]
G --> H[FASE 5 live.ps1 con show-config + confirmacion]
Guia rapida de comandos
powershell# FASE 1: Setup inicial docker compose run --rm freqtrade create-userdir --userdir /freqtrade/user_data .\scripts\download_data.ps1 .\scripts\backtest.ps1 # FASE 3: Backtest con ML .\scripts\backtest_freqai.ps1 # FASE 4: Paper trading .\scripts\dryrun.ps1 # Abrir http://localhost:8080 (usar credenciales de config-dryrun.json) # FASE 5: Trading real copy config\config-live.example.json config\config-live.json # Editar config-live.json con API keys .\scripts\live.ps1
Manual maestro: que archivo usar para cada situacion

Como leer esta tabla

Si no sabes donde tocar algo, empieza aqui. La idea es que no tengas que adivinar si debes cambiar un script, una config o una estrategia. En general: los archivos `config/` cambian comportamiento, los archivos `strategies/` cambian la logica de trading, los archivos `scripts/` ejecutan procesos y los archivos `progress/` documentan decisiones.

Quiero hacer... Archivo principal Que mirar Precaucion
Descargar datos historicos `scripts/download_data.ps1` `Pairs`, `Timeframes`, `Days`, `Timerange` Para FreqAI descarga datos extra antes del periodo objetivo.
Cambiar pares del backtest `config/config-backtest.json` `exchange.pair_whitelist` No pruebes solo un par y no ignores blacklist.
Cambiar monto por trade en backtest `config/config-backtest.json` `stake_amount`, `dry_run_wallet` Debe parecerse al capital real esperado.
Entender por que compra la baseline `strategies/EmaCrossRsi.py` `populate_entry_trend` No cambies parametros sin anotar hipotesis.
Entender por que vende la baseline `strategies/EmaCrossRsi.py` `populate_exit_trend`, `minimal_roi`, `stoploss` Una salida puede venir de senal, ROI, trailing o stoploss.
Probar baseline `scripts/backtest.ps1` Train, validation, final-test No decidas con un solo periodo.
Aprender ML desde cero `notebooks/ml_fundamentals.ipynb` Features, target, walk-forward, metricas El notebook educa; no reemplaza backtest real.
Cambiar features ML `strategies/FreqaiLightgbm.py` `feature_engineering_*` Cambia tambien `identifier` en config.
Cambiar target ML `strategies/FreqaiLightgbm.py` `set_freqai_targets` Revisa distribucion de labels.
Cambiar ventanas FreqAI `config/config-backtest-freqai.json` `train_period_days`, `backtest_period_days` Descarga datos suficientes antes del timerange.
Comparar ML vs baseline `scripts/backtest_freqai.ps1` Archivos exportados y `progress/reports/` ML debe mejorar algo medible.
Iniciar paper trading `scripts/dryrun.ps1` Warnings de Telegram/API y FreqUI No modifiques estrategia durante la prueba.
Cambiar configuracion dry-run `config/config-dryrun.json` `stake_amount`, `telegram`, `freqai`; protecciones en la estrategia Debe probar lo que luego usaras en live.
Registrar trades `progress/journal.md` Entry tag, exit tag, fee, slippage, regimen Sin journal no hay aprendizaje verificable.
Decidir si avanzo `progress/tracker.md` Checklist, metricas, semanas, DD Si no cumple checklist, no avances.
Preparar live `config/config-live.example.json` Copiar a `config-live.json` y completar secretos Nunca subas `config-live.json`.
Iniciar live `scripts/live.ps1` Validaciónes y confirmacion estricta Si falla una validación, no la saltes.
Runbook: comando, resultado esperado y que hacer si falla
Comando Resultado esperado Si falla
`docker compose run --rm freqtrade create-userdir --userdir /freqtrade/user_data` Crea carpetas internas en `user_data/`. Verifica Docker Desktop abierto y que estas en la raiz del proyecto.
`./scripts/download_data.ps1` Descarga `.feather` en `user_data/data/binance/`. Revisa conexion, Docker y pares validos de Binance.
`./scripts/backtest.ps1` Genera resultados train/validation/final-test. Revisa que existan datos para todos los pares y timeranges.
`./scripts/backtest_freqai.ps1` Corre FreqAI + baseline y genera reporte. Revisa datos extra, identifier, config FreqAI y version de Freqtrade.
`./scripts/dryrun.ps1` Bot en dry-run con FreqUI en localhost:8080. Revisa credenciales API server, puerto 8080 y config-dryrun.
`./scripts/live.ps1` Solo inicia si config-live pasa validaciónes y confirmas riesgo. Corrige placeholders, Telegram, initial_state o API keys. No fuerces live.
Como interpretar resultados sin enganarte
Profit Factor alto
Bueno, pero insuficiente

PF > 1.10 es minimo, pero revisa trades, drawdown, pares y estabilidad. PF 3 con 8 trades no significa mucho.

Drawdown bajo
Importante

Un drawdown bajo ayuda a sobrevivir emocional y financieramente. Si DD supera 15%, no avances sin redisenar.

Muchos trades
Necesario

Mas trades no siempre es mejor, pero una muestra pequena no permite confiar. Busca 100+ historicos para backtest serio.

Win rate alto
Puede enganar

Ganar muchas veces poco y perder pocas veces mucho puede destruir la cuenta. Mira expectativa, no solo aciertos.

ML mejora retorno
Revisar con cuidado

Pregunta si tambien mejora DD, PF o calidad de trades. Si solo mejora train, puede ser overfitting.

Dry-run diferente
Alerta

Puede indicar sobreoptimizacion, costos mal modelados, bug o mercado diferente. No racionalices; investiga.

Reglas de oro del proyecto

Estas reglas valen mas que cualquier resultado aislado

  • No pasar a live desde backtest. Siempre dry-run prolongado.
  • No cambiar muchas variables a la vez. Si cambias todo, no sabes que funciono.
  • No usar ML si no mejora contra baseline o si no puedes explicar que hace.
  • No operar sin Telegram activo en live.
  • No confiar en resultados con pocos trades.
  • No usar API con permisos de retiro.
  • No escalar capital para recuperar perdidas.
  • No ignorar drawdown. Sobrevivir importa mas que acertar.
  • No tocar `config-live.json` como si fuera un config cualquiera: contiene secretos y dinero real.
  • No usar futures en esta ruta. Primero 6-12 meses rentables y auditables en spot.
Manual de lectura por archivo

README.md

Usalo para orientarte rapido. Si vuelves al proyecto despues de varios dias, empieza por aqui.

  • Lee requisitos previos.
  • Revisa el inicio rapido.
  • Lee la seccion de NO ejecutar live.
  • Confirma en que fase estas.

plan.md

Usalo para entender el por que de cada fase y los criterios para avanzar.

  • Lee el disclaimer antes de tomar decisiones de riesgo.
  • Revisa criterios duros de descarte.
  • Ubica fase actual y metas de salida.
  • Si dudas si avanzar, vuelve a este archivo.

config/config-backtest.json

Usalo para simular la estrategia baseline sin ML.

  • Revisa `stake_amount` para que no sea unlimited.
  • Revisa `fee` para incluir costo de exchange.
  • Revisa `pair_whitelist` para saber que pares se prueban.
  • No metas API keys aqui; backtest no las necesita.

config/config-backtest-freqai.json

Usalo para backtesting de FreqAI.

  • Revisa `identifier` antes de cada experimento nuevo.
  • Revisa `train_period_days` para entender cuanta historia usa el modelo.
  • Revisa `backtest_period_days` para saber cada cuanto valida.
  • Revisa `include_timeframes` porque multiplica features.
  • Revisa `include_corr_pairlist` porque agrega informacion de otros pares.

config/config-dryrun.json

Usalo para paper trading.

  • Debe tener `dry_run: true`.
  • Debe tener protecciones activas.
  • Debe tener API server con password cambiado.
  • Telegram puede iniciar desactivado, pero para prueba prolongada deberia activarse.
  • Debe parecerse al live que planeas usar despues.

config/config-live.example.json

Usalo como plantilla, no como archivo final con secretos.

  • Copialo como `config-live.json`.
  • Completa API keys reales solo en `config-live.json`.
  • Confirma que `initial_state` sea `stopped`.
  • Confirma que Telegram este activo.
  • Confirma que las protecciones son iguales o mas estrictas que dry-run.

strategies/EmaCrossRsi.py

Usalo para aprender como Freqtrade piensa una estrategia.

  • `populate_indicators` responde: que datos calculo.
  • `populate_entry_trend` responde: cuando compro.
  • `populate_exit_trend` responde: cuando vendo.
  • `enter_tag` y `exit_tag` responden: por que paso.
  • No confundas esta baseline con una estrategia lista para live.

strategies/FreqaiLightgbm.py

Usalo para entender ML dentro de Freqtrade.

  • Features `%` son entradas del modelo.
  • Target `&` es lo que el modelo intenta predecir.
  • `self.freqai.start` conecta estrategia con FreqAI.
  • El setup técnico evita que ML opere solo.
  • Si no entiendes el target, no modifiques esta estrategia.

scripts/download_data.ps1

Usalo cada vez que necesites datos nuevos o un timerange distinto.

  • Usa `-Days` si quieres una cantidad simple de dias.
  • Usa `-Timerange` si quieres controlar fechas exactas.
  • Para FreqAI, descarga historia previa adicional.
  • Si falla, revisa Docker y conectividad.

scripts/backtest.ps1

Usalo para probar estrategias sin ML.

  • Corre train.
  • Corre validation.
  • Corre final-test.
  • Exporta archivos con timestamp.
  • Si final-test falla, no racionalices: vuelve a diseno.

scripts/backtest_freqai.ps1

Usalo para probar ML contra baseline.

  • Primero corre FreqAI.
  • Luego corre baseline.
  • Genera resumen en `progress/reports/`.
  • Si ML no mejora nada, no lo lleves a dry-run.

scripts/dryrun.ps1

Usalo para iniciar paper trading.

  • Lee warnings antes de dejarlo corriendo.
  • Abre FreqUI despues de iniciar.
  • No cambies estrategia durante la medicion.
  • Documenta cada semana.

scripts/live.ps1

Usalo solo cuando el checklist de live este completo.

  • Valida placeholders.
  • Valida Telegram.
  • Valida initial_state.
  • Pide confirmacion estricta.
  • Si bloquea, el bloqueo es intencional.

progress/tracker.md

Usalo como control de avance.

  • Marca solo tareas terminadas de verdad.
  • Registra metricas por fase.
  • Usalo para decidir si avanzas o repites.
  • No lo llenes despues de memoria; actualizalo durante el proceso.

progress/journal.md

Usalo como caja negra del proyecto.

  • Registra que hiciste.
  • Registra que aprendiste.
  • Registra errores.
  • Registra trades con tags y contexto.
  • Si algo sale mal, este archivo debe ayudarte a reconstruir que paso.
Manual de preguntas antes de tocar un archivo
Pregunta Si la respuesta es no Archivo relacionado
Se que fase estoy ejecutando? Lee `plan.md` y esta guia antes de tocar código. `plan.md`
Se que metrica quiero mejorar? No optimices. Define hipotesis primero. `progress/journal.md`
Se que archivo controla este comportamiento? Vuelve al manual maestro de archivos. `guia.html`
Tengo datos suficientes? Descarga mas historia antes de backtestear. `scripts/download_data.ps1`
Estoy comparando contra baseline? No aceptes el resultado ML todavia. `scripts/backtest_freqai.ps1`
Estoy cambiando solo una variable? Divide el experimento. No cambies todo junto. `progress/journal.md`
El cambio afecta dinero real? Si afecta live, no lo hagas sin dry-run previo. `config/config-live.json`
Se como revertir mentalmente la decision? Documenta antes de ejecutar. `progress/journal.md`
Mini manual de investigacion
Cuando una palabra no se entiende Busca primero en el glosario de la fase. Si no aparece, anotala en `journal.md` y busca documentación oficial o una definicion financiera basica.
Cuando un resultado parece demasiado bueno Asume primero que hay overfitting, pocos trades, bug de datos o periodo favorable. Verifica antes de emocionarte.
Cuando un script falla No cambies la estrategia. Primero confirma Docker, ruta, config, datos y mensajes de error.
Cuando ML falla No agregues features sin pensar. Revisa target, labels, datos, identifier y comparacion contra baseline.
Cuando dry-run difiere No ajustes emocionalmente. Congela, audita comisiones, slippage, frecuencia de trades, horarios y logs.
Cuando live genera ansiedad Baja capital, reduce frecuencia o vuelve a dry-run. Si el sistema no se puede operar emocionalmente, no es operable.
Indicadores de que debes parar y estudiar mas
No puedes explicar el trade
Parar

Si no sabes por que entro o salio, revisa `enter_tag`, `exit_tag` y estrategia antes de seguir.

No sabes que cambio hiciste
Parar

Si no hay registro en journal, vuelve a documentar antes de continuar.

Solo miras P&L
Parar

Debes mirar PF, DD, trades, expectativa, divergencia y regimen.

Quieres recuperar perdidas
Parar

Eso es decision emocional, no proceso sistematico.

No tienes alertas
Parar live

Sin alertas, no hay control operativo suficiente.

El modelo predice siempre igual
Parar ML

Revisa labels, target y datos antes de seguir.

Glosario global de archivos
ConfigArchivo JSON que dice al bot como operar: pares, stake, exchange, protecciones y servicios.
StrategyArchivo Python con la logica: indicadores, entrada, salida, tags y reglas de senal.
ScriptArchivo PowerShell que ejecuta una tarea repetible como descargar datos o correr backtest.
NotebookDocumento interactivo para aprender, experimentar y visualizar conceptos ML.
user_dataCarpeta donde Freqtrade guarda datos, modelos, logs y resultados generados.
Backtest resultsResultados exportados de simulaciones historicas.
Model artifactsArchivos de modelos entrenados por FreqAI.
JournalDiario de decisiones, trades y aprendizajes. Es parte del sistema, no decoracion.
TrackerChecklist para evitar avanzar por emocion en vez de evidencia.
Example configPlantilla segura que se copia y adapta. No deberia contener secretos reales.
Glosario global de metricas y decisiones
P&L Profit and Loss. Ganancia o perdida de una operacion o periodo.
Equity curve Curva que muestra como cambia el capital a lo largo del tiempo.
Expectativa Resultado promedio esperado por trade considerando ganancias, perdidas y frecuencia.
Win rate Porcentaje de trades ganadores. No basta si las perdidas son mas grandes que las ganancias.
Sharpe ratio Metrica que relaciona retorno con volatilidad. Ayuda a comparar calidad de retorno.
Max drawdown Peor caida desde pico a valle. Mide cuanto puede doler una estrategia.
Sample size Tamano de muestra. Pocos trades hacen que los resultados sean poco confiables.
Regimen de mercado Condicion general: tendencia alcista, bajista, lateral, alta o baja volatilidad.
Riesgo operativo Riesgo de fallos de API, servidor, conexion, configuracion o alertas.
Riesgo de modelo Riesgo de que el modelo ML aprenda ruido, se degrade o prediga mal fuera de muestra.
Out-of-sample Datos que no fueron usados para ajustar la estrategia. Son clave para validar.
Walk-forward Validación que avanza en el tiempo: entrenar con pasado, probar con futuro y repetir.
Curve fitting Ajustar una estrategia al pasado hasta que parece buena, pero falla en datos nuevos.
Baseline Punto de comparacion simple. Si algo complejo no supera baseline, no justifica complejidad.
Post-mortem Análisis despues de un fallo para entender causa, impacto y accion correctiva.
Algo Trading Bot · Freqtrade + FreqAI · Binance Spot · Plan progresivo