Durante años, la industria de los hedge funds ha vendido su operativa bajo un halo de secretismo casi esotérico. Fórmulas inaccesibles, servidores pegados a los parqués de las bolsas y doctores en física teórica cobrando comisiones del 2% de gestión y 20% de éxito por lo que juran que es magia pura: el codiciado alpha.

Hace unos meses cayó en mis manos el manuscrito de un paper que dinamita esa mística: 151 Trading Strategies, firmado por Zura Kakushadze (físico teórico y ex-director en Wall Street) y Juan Andrés Serur (profesor y estratega cuantitativo). El documento es una auténtica enciclopedia: más de 360 páginas y 550 fórmulas matemáticas que catalogan, sin pelos en la lengua y con descripciones algorítmicas directas, las 151 estrategias más utilizadas en los mercados modernos. Cubren desde opciones y acciones hasta materias primas, divisas, renta fija, derivados climáticos y criptoactivos.

La intrahistoria de la publicación es digna de mención. El texto iba a ser un libro comercial con la editorial Palgrave Macmillan. Los autores sufrieron el desinterés absoluto del equipo editorial, que pretendía que ellos diseñaran la portada, introdujo más de 100 erratas tipográficas en las fórmulas LaTeX y filtró partes privadas del manuscrito. Cansados del maltrato habitual de las grandes editoriales académicas, Kakushadze y Serur rompieron el contrato y colgaron el PDF íntegro en SSRN con una dedicatoria lapidaria: Innovate. Disrupt. Spread the knowledge.

Como apuntaba Jim Kyung-Soo Liew en el prólogo: al publicar la receta exacta de la salsa, han dejado claro que casi todo lo que venden los hedge funds como alpha exclusivo no es más que beta sistemática empaquetada. Se acabó el misterio.

Las cuatro piezas que mueven cualquier estrategia

Cuando ves un documento con 550 ecuaciones diferenciales, regresiones matriciales y optimizaciones cuadráticas, es fácil intimidarse. Pero si quitas el envoltorio matemático y vas al fondo económico, descubres que casi todas las estrategias del documento descansan sobre cuatro motores fundamentales:

  1. Inercia o Momentum: Comprar lo que sube con fuerza y vender (o ponerse corto de) lo que se hunde. El mercado tarda semanas o meses en digerir cambios de expectativas y beneficios corporativos, generando tendencias persistentes.
  2. Reversión a la media (Mean Reversion): Todo lo que se estira en exceso a corto plazo tiende a volver a su centro. En escalas de días o intradía, los pánicos o euforias desmedidas provocan sobrerreacciones temporales de liquidez que se corrigen.
  3. Acarreo (Carry): Cobrar una prima fija por mantener un activo o financiarlo frente a otro. Se ve con claridad en los tipos de interés de divisas (comprar divisas de alto rendimiento financiándose en divisas baratas) o en la estructura temporal de los futuros (contango y backwardation).
  4. Valor relativo y arbitraje estadístico: Cruzar dos activos relacionados económicamente o cointegrados (dos empresas del mismo sector, un ETF contra su cesta de futuros o tramos de crédito) y apostar a que el diferencial de precios anormal volverá a cerrarse.

Si entiendes estos cuatro engranajes, dejas de ver los algoritmos como cajas negras y empiezas a verlos como tuberías que conectan flujos de oferta y demanda descompensados.

Aterrizando a tierra: Reversión a la media con Internal Bar Strength (IBS)

Para comprobar que esto no es humo académico, vayamos a una de las estrategias descritas en la Sección 4.4 del paper (página 64): la reversión a la media en ETFs de renta variable utilizando el Internal Bar Strength (IBS).

Muchas personas intentan hacer trading técnico dibujando líneas subjetivas en gráficos. Los modelos cuantitativos desechan esa subjetividad y buscan métricas medibles y testeables. El IBS es un indicador aritmético exacto calculado a partir de la barra diaria:

$$IBS = \frac{\text{Cierre} - \text{Mínimo}}{\text{Máximo} - \text{Mínimo}}$$

Donde:

  • Cierre: Precio al que termina la sesión.
  • Mínimo: Precio más bajo registrado en el día.
  • Máximo: Precio más alto alcanzado en la jornada.

El resultado siempre es un número entre 0 y 1:

  • IBS = 0: El activo cerró pegado a sus mínimos absolutos de la sesión.
  • IBS = 1: El activo cerró en sus máximos diarios.
  • IBS = 0,5: El cierre se quedó exactamente a mitad de camino del rango recorrido.

Un ejemplo numérico rápido: supongamos que un ETF marca un mínimo de 98 € y un máximo de 102 € (un rango de 4 €). Si termina la sesión en 98,50 €:

$$IBS = \frac{98,50 - 98}{102 - 98} = \frac{0,50}{4} = 0,125$$

El valor resultante (0,125) indica que el precio ha cerrado en el 12,5% inferior de su rango, muy por debajo del umbral de sobreventa.

¿Cuál es la intuición empírica detrás? En índices amplios y líquidos como el S&P 500 (negociado mediante el ETF SPY), una jornada en la que el precio cierra aplastado contra sus mínimos del día suele indicar ventas forzadas al cierre por ajustes institucionales o pánico intradía. En mercados con sesgo alcista a largo plazo, esa sobrerreacción puntual ofrece una probabilidad estadística alta de rebote en las sesiones inmediatamente posteriores.

La regla de trading es directa:

  • Entrada larga: Comprar al cierre si IBS < 0,2 (la sesión cerró en el 20% inferior de su rango).
  • Salida: Vender al cierre cuando IBS > 0,8 (el precio recuperó el 80% superior de su rango diario).

Implementación real en Python con control de fricción

En finanzas cuantitativas, un backtest que ignore comisiones y deslizamientos (slippage) no vale ni el papel en el que se imprime. En el Apéndice A del paper, Kakushadze y Serur modelan los costes de ejecución asumiendo un peaje lineal de 10 puntos básicos (0,10% por operación).

Veamos cómo escribir este sistema de forma vectorial usando Python y Pandas:

import numpy as np
import pandas as pd

def backtest_ibs_strategy(df, fee_bps=10):
    """
    df debe contener las columnas: 'open', 'high', 'low', 'close'
    fee_bps: coste por transacción en puntos básicos (10 bps = 0.001)
    """
    data = df.copy()

    # 1. Cálculo del Internal Bar Strength (IBS)
    rango = data['high'] - data['low']
    # Evitar divisiones por cero en días sin movimiento
    rango = rango.replace(0, np.nan)
    data['ibs'] = (data['close'] - data['low']) / rango

    # 2. Generación de señales de entrada y salida
    data['signal'] = 0
    data.loc[data['ibs'] < 0.2, 'signal'] = 1   # Señal de compra
    data.loc[data['ibs'] > 0.8, 'signal'] = -1  # Señal de cierre

    # Mantenimiento de posición (1 = comprado, 0 = fuera)
    position = 0
    positions = []

    for sig in data['signal']:
        if sig == 1:
            position = 1
        elif sig == -1:
            position = 0
        positions.append(position)

    data['position'] = positions

    # 3. Retornos diarios y retardo de ejecución
    # Para evitar sesgo retrospectivo (lookahead bias), la posición calculada
    # al cierre de hoy solo aprovecha el retorno de mañana (delay-1)
    data['market_return'] = data['close'].pct_change()
    data['strategy_return'] = data['position'].shift(1) * data['market_return']

    # 4. Fricción: comisiones y deslizamiento en cada cambio de posición
    trades = data['position'].diff().abs()
    cost_per_dollar = fee_bps / 10000.0
    data['friction'] = trades * cost_per_dollar

    data['net_return'] = data['strategy_return'] - data['friction']

    # Métricas de rendimiento
    total_pnl = (1 + data['net_return'].dropna()).prod() - 1
    sharpe = np.sqrt(252) * (data['net_return'].mean() / data['net_return'].std())

    print(f"Retorno acumulado neto: {total_pnl * 100:.2f}%")
    print(f"Ratio de Sharpe anualizado: {sharpe:.2f}")

    return data

El detalle crítico de este código está en data['position'].shift(1). Si ejecutas la compra en el mismo instante en que calculas el cierre sin desplazar la serie, estás cometiendo lo que en el paper denominan trampa in-sample: asumir que puedes comprar a un precio que requirió que la jornada entera terminara para ser conocido.

Las trampas donde cae la mayoría

Tener 151 recetas no te convierte en chef de tres estrellas. La mayoría de traders particulares e ingenieros que intentan pasar de la teoría al mercado real fracasan por los mismos tres fallos metodológicos:

El espejismo del 'Delay-0'

En backtesting informático es facilísimo meter la pata. Si tu señal usa el precio de cierre de hoy a las 17:30 y asumes que compraste a ese mismo precio de cierre, tu simulación es irreal. En el mercado real tienes que mandar órdenes tipo Market-On-Close (MOC) minutos antes de la campana, o esperar a la apertura de la sesión siguiente (lo que en el paper etiquetan como delay-1). En cuanto pasas del mundo teórico de cálculo instantáneo al retardo real de un día, muchos beneficios se reducen a la mitad.

El veneno de las micro-comisiones

El código del paper lo ilustra con crudeza: si una estrategia hace cientos de rotaciones al año buscando bordes de 15 o 20 puntos básicos, un broker que te cobre 5 o 10 puntos básicos entre horquilla bid-ask y corretaje devora la totalidad de tus ganancias. El mercado no te gana por predecir mejor, te gana por desgaste de fricción.

Sobreajuste y algoritmos oscuros

En la sección 3.17 y 18.2, el documento analiza métodos de Machine Learning: redes neuronales (ANN) y K-Vecinos más cercanos (KNN). El veredicto de los autores en la página 92 es categórico: que un modelo sea matemáticamente rebuscado no significa que sea mejor (fancy does not equal better).

Si ajustas un modelo con decenas de hiperparámetros sobre datos pasados, memorizará el ruido en lugar de la señal. Cuando lo pongas a operar con dinero real fuera de muestra (out-of-sample), se romperá en pedazos. Como vimos en su momento al analizar la arquitectura interna de Bitcoin, los diseños más fiables suelen ser aquellos que apuestan por mecanismos sencillos, transparentes y directamente verificables frente a construcciones innecesariamente complejas.

El valor de 151 Trading Strategies no reside en darte un botón automático para imprimir dinero mañana. Su verdadero mérito es actuar como un baño de realidad: desmonta el teatro de la industria, pone las fórmulas matemáticas sobre la mesa y te da las herramientas estadísticas necesarias para que construyas y audites tus propios modelos con rigor técnico.