← Volver a la pagina principal

Modulo 03 — Backtesting honesto paso a paso

Objetivo del modulo

Montar tu propio motor de backtest en Python, entendiendo cada linea, para que dejes de depender de "cajas negras" y puedas verificar CUALQUIER estrategia por tu cuenta — incluida esta misma herramienta.

Los 4 bloques de un backtest honesto

Bloque 1: Datos reales, nunca simulados

import ccxt
exchange = ccxt.binance({"enableRateLimit": True})
velas = exchange.fetch_ohlcv("BTC/USDT", timeframe="1d", limit=1000)

ccxt te da acceso PUBLICO (sin API key, sin cuenta) a datos historicos de decenas de exchanges. Para bolsa/acciones, la alternativa gratuita es yfinance. Regla de oro: si no puedes verificar de donde salen los datos, no confíes en el backtest.

Bloque 2: La señal (cuando comprar/vender)

Una señal es una columna de 0s y 1s (fuera/dentro del mercado). Ejemplo con cruce de EMAs:

df["ema_rapida"] = df["close"].ewm(span=12, adjust=False).mean()
df["ema_lenta"] = df["close"].ewm(span=26, adjust=False).mean()
df["signal"] = (df["ema_rapida"] > df["ema_lenta"]).astype(int)

Bloque 3: La ejecucion (aqui es donde la mayoria mete la pata)

df["posicion"] = df["signal"].shift(1).fillna(0)
df["retorno_estrategia"] = df["posicion"] * df["retorno_activo"] - comision_si_hay_cambio

Bloque 4: Las metricas (lo que de verdad importa)

Codigo de referencia

Todo esto esta implementado y comentado en el repositorio de la herramienta: - engine/estrategias.py — las señales - engine/backtest.py — ejecucion + metricas + logica del veredicto - engine/run_veredicto.py — orquestacion end-to-end

Puedes clonarlo, leerlo linea a linea y modificarlo para tus propias ideas. Es deliberadamente simple (sin apalancamiento, sin cortos, sin slippage complejo) porque el objetivo es que lo entiendas al 100%, no que sea la herramienta institucional mas sofisticada del mundo.

Ejercicio del modulo

Añade una cuarta estrategia preset al motor (por ejemplo, Bandas de Bollinger) siguiendo el mismo patron que estrategia_rsi_reversion o estrategia_cruce_ema, y corre el Gauntlet completo para ver donde queda rankeada.


Anterior: 02 — De la idea al codigo con IA. · Siguiente: 04 — Leer las metricas como un profesional.