Crear tu propia estrategia de trading es el puente entre jugársela al azar y gestionar un negocio sistemático. El uso de datos históricos (backtesting) te permite cometer todos los errores posibles sobre el papel antes de confiarle tu capital real a un algoritmo.
En este artículo, vamos a desglosar el proceso: desde la búsqueda de la idea hasta ponerla a prueba con un stack tecnológico moderno.
1. Los cimientos: De la idea al algoritmo
Cualquier estrategia empieza con una hipótesis. Es una afirmación clara sobre el comportamiento del mercado. Por ejemplo: "Si el precio de un activo cae un 5% en una hora con un volumen anormal, existe una alta probabilidad de un rebote a corto plazo".
Tipos de estrategias para empezar:
- Mean Reversion (Reversión a la media): Buscar momentos en los que el precio se ha desviado demasiado de su valor promedio.
- Trend Following (Seguimiento de tendencia): Entrar en la operación cuando se confirma la dirección del movimiento (usando medias móviles o ruptura de niveles).
- Arbitraje: Explotar la diferencia de precios de un mismo activo en diferentes plataformas.
- Arbitraje estadístico: Buscar correlaciones entre diferentes activos.
2. Recopilación de datos históricos
La calidad del test depende directamente de la calidad de los datos.
"Basura entra, basura sale" (Garbage in, garbage out).
¿De dónde sacar los datos?
- APIs de exchanges: Binance, Coinbase o Bybit ofrecen acceso a los históricos de velas (OHLCV).
- Servicios especializados: Yahoo Finance (acciones), CoinMetrics (cripto), Glassnode (datos on-chain).
- Datasets listos para usar: Kaggle o repositorios específicos en GitHub.
Tabla: Tipos de datos y sus aplicaciones
| Tipo de dato | Descripción | Para qué sirve |
|---|---|---|
| OHLCV | Open, High, Low, Close, Volume | Análisis técnico clásico, estrategias a medio plazo. |
| Orderbook (L2) | Libro de órdenes, órdenes limitadas | Scalping, HFT, análisis de liquidez. |
| Tick Data | Cada transacción individual | Backtest ultrapreciso, arbitraje. |
| Alternative Data | Redes sociales, noticias, informes | Análisis de sentimiento, enfoque fundamental. |
3. Herramientas para el testeo
Para los novatos, lo ideal son las plataformas visuales; para los pro, programar es el camino.
- TradingView (Pine Script): La forma más rápida de visualizar una idea. El probador de estrategias integrado muestra la rentabilidad directamente en el gráfico.
- Python (Librerías):
- Pandas: Para manipular datos a tu antojo.
- Backtrader o VectorBT: Motores potentes para backtesting.
- ccxt: Para conectar con cientos de exchanges de cripto.
Ejemplo de código simple en Python (VectorBT)
Este código comprueba el cruce de dos medias móviles:
import vectorbt as vbt
import pandas as pd
# Descargamos los datos
data = vbt.YFData.download('BTC-USD', start='2023-01-01')
close = data.get('Close')
# Definimos la estrategia: Media Rápida (10) cruza por encima de la Lenta (50)
fast_ma = vbt.MA.run(close, 10)
slow_ma = vbt.MA.run(close, 50)
entries = fast_ma.ma_crossed_above(slow_ma)
exits = fast_ma.ma_crossed_below(slow_ma)
# Lanzamos el backtest
pf = vbt.Portfolio.from_signals(close, entries, exits, init_cash=1000)
print(pf.total_return())4. Métricas de eficiencia
No te fijes solo en el "Total Profit". Un beneficio enorme puede ir acompañado del riesgo de fundirse la cuenta por completo.
- Drawdown (Caída máxima): La mayor caída del saldo desde un pico hasta un mínimo local. Si el drawdown es del 50%, necesitas un 100% de beneficio solo para volver a estar a cero.
- Sharpe Ratio (Ratio de Sharpe): Indica si la rentabilidad compensa el riesgo que estás asumiendo. Un valor por encima de 1.0 se considera bueno.
- Win Rate: Porcentaje de operaciones ganadoras. Importante: una estrategia con un Win Rate del 30% puede ser muy rentable si su beneficio es mucho mayor que su pérdida (Risk/Reward).
- Profit Factor: Relación entre el beneficio bruto y la pérdida bruta.
5. Trampas ocultas (Lo que no te cuentan)
Aquí es donde la mayoría de los principiantes "queman" sus primeras cuentas reales después de haber tenido éxito en los tests.
Look-ahead Bias (Sesgo de anticipación)
Tu algoritmo utiliza accidentalmente datos del futuro. Por ejemplo, calculas el precio medio del día y decides comprar por la mañana basándote en ese valor. En la vida real, por la mañana no sabes cuál será el precio por la tarde.
Survivorship Bias (Sesgo de supervivencia)
Probar la estrategia solo en las monedas o acciones que están en el top hoy en día. Te olvidas de cientos de proyectos que quebraron y desaparecieron de las listas. Hay que testear con todo el espectro de activos que existían en ese momento.
Deslizamiento y comisiones (Slippage)
En teoría compraste a 100$. En el mercado real, tu orden se ejecutó a 100,5$ por falta de liquidez, y el exchange se llevó un 0,1% de comisión. En una racha de 1000 operaciones, esto convierte una estrategia ganadora en una ruina.
6. Métodos de prueba avanzados: El test de estrés
Una vez que tu backtest inicial suelta una curva de beneficios "bonita", es hora de intentar romperla. No basta con un simple recorrido histórico, porque el mercado es un camaleón que cambia constantemente.
Walk-Forward Analysis (WFA)
Piensa en esto como una prueba "rodante". Divides tus datos en bloques específicos:
- In-Sample (Entrenamiento): Optimizas los parámetros de tu estrategia (como elegir la mejor longitud de una media móvil).
- Out-of-Sample (Prueba): Corres esos mismos parámetros en el siguiente bloque de datos, algo que el algoritmo aún no ha "visto".
Luego, desplazas la ventana hacia adelante. Si la estrategia aguanta en todos estos segmentos "invisibles", es que realmente es robusta.
Simulación de Monte Carlo
Consiste en barajar el orden de tus operaciones miles de veces al azar.
- El objetivo: Averiguar qué probabilidades hay de que una racha de pérdidas (Drawdown) fulmine tu cuenta.
Si de 10,000 simulaciones, en 500 acabas en bancarrota, la estrategia es una bomba de relojería, por muy buenos que parezcan sus beneficios promedio.
7. Optimización vs. "Overfitting" (Sobreajuste)
La trampa más mortal para cualquier investigador es el Overfitting. Ocurre cuando has ajustado tanto los parámetros que el algoritmo se ha "memorizado" el pasado, pero no tiene ni idea de cómo reaccionar ante lo nuevo.
Cómo evitar caer en el sobreajuste:
- Menos es más: Cuantos más indicadores y reglas "si/entonces" metas en el código, más papeletas tienes de estar operando simple ruido de mercado.
- Estabilidad de parámetros: Si tu estrategia funciona con un periodo de 20, pero se va al garete con 19 o 21, es un castillo de naipes. Los resultados deben cambiar suavemente al tocar los ajustes.
- Lógica de fondo: Cada parámetro debe tener una razón económica. "Porque así daba más pasta en el histórico" es el primer paso hacia una llamada de margen.
8. Conceptos "pata negra": MEV y JIT Liquidity en backtesting
Si te mueves en el ecosistema DeFi (Uniswap v3/v4), los métodos estándar de backtesting te van a mentir por la propia naturaleza de la blockchain.
- LVR (Loss Versus Rebalancing): La métrica de oro para proveedores de liquidez. Compara los ingresos por comisiones con la pérdida que sufres cuando los arbitrajistas te "limpian" la liquidez a precios que les convienen a ellos (y a ti no).
- JIT (Just-In-Time) Liquidity: Una estrategia donde meten liquidez en el pool un milisegundo antes de un intercambio grande y la sacan justo después. Esto no lo hueles con velas estándar (OHLCV); necesitas datos basados en eventos (Event-driven data).
9. Checklist práctico: Del código al exchange
| Fase | Acción | Herramienta |
|---|---|---|
| 1. Hipótesis | Definir reglas de entrada/salida y lógica de stop-loss. | Bloc de notas / Obsidian |
| 2. Extracción de datos | Obtener velas históricas o datos de ticks. | API (Binance/CCXT), Python |
| 3. Backtest | Primera ejecución de la estrategia sobre el historial. | Backtrader, Pine Script |
| 4. Optimización | Contar con comisiones (0.1%+) y deslizamiento (slippage). | Parámetros en código |
| 5. Validación | Walk-Forward y Monte Carlo. | Python (scipy, numpy) |
| 6. Paper Trading | Operar en tiempo real con una cuenta virtual. | TradingView / Cuenta Demo |
| 7. Escalado | Lanzamiento con un capital real pequeño. | Claves API (Read/Write) |
10. Ejemplo de código: Contabilizando comisiones y slippage
En el testing profesional, es vital "castigar" a la estrategia. Así es como se ve la lógica esquemáticamente:
# Pseudocódigo de lógica de costes
commission = 0.001 # 0.1% por operación
slippage = 0.0005 # 0.05% de deslizamiento de precio
def execute_trade(price, size, side):
if side == 'buy':
effective_price = price * (1 + slippage)
cost = size * effective_price * (1 + commission)
elif side == 'sell':
effective_price = price * (1 - slippage)
revenue = size * effective_price * (1 - commission)
return effective_price, cost_or_revenue
Regla de oro: Si tu estrategia pasa de ganar dinero a perderlo en cuanto le metes comisiones y slippage realistas, ni se te ocurra intentar "maquillarla". Tírala y busca otra idea. El mercado no perdona a quien ignora los costes de hacer negocio.