9 min de lectura
De una idea a una regla: cómo se convierte una intuición de mercado en algo testeable
El proceso completo, paso a paso, para pasar de una frase vaga que se te ocurre mirando un gráfico a una especificación que un ordenador puede ejecutar sin preguntarte nada.
- método
- backtesting
Todas las estrategias empiezan igual: mirando un gráfico y pensando "esto pasa muchas veces". El problema es que entre ese pensamiento y algo que se pueda probar hay un trecho que casi nadie explica.
Este es el proceso que sigo. Son siete pasos y el orden importa.
Paso 0: la intuición no es el enemigo
Hay una idea que circula mucho: que ser sistemático consiste en no tener intuiciones. Es falso. Las intuiciones son la materia prima. Lo que no puedes hacer es operar con ellas sin pasarlas por el filtro.
Así que apunta la intuición tal cual te sale, con sus palabras vagas y todo. Ejemplo real de mi cuaderno:
"Cuando un mercado abre con un hueco grande a la baja y en la primera hora recupera casi todo, el día suele acabar arriba."
Está llena de agujeros. Perfecto. Ese es el punto de partida.
Paso 1: escribe la frase completa, con las cuatro partes
Una regla de trading solo está completa si contesta a cuatro preguntas. Si falta una, no hay estrategia, hay media idea.
- Universo
- Sobre qué instrumentos se aplica y en qué marco temporal.
- Entrada
- Qué tiene que pasar exactamente para abrir posición.
- Salida
- Cuándo se cierra, gane o pierda.
- Tamaño
- Cuánto se arriesga en cada operación.
La mayoría de la gente que empieza dedica el noventa por ciento del esfuerzo a la entrada. Es la parte menos importante de las cuatro.
Paso 2: define el universo antes que nada
El universo es el conjunto de instrumentos sobre el que se aplica la regla, y el marco temporal es la duración de cada vela o barra de precio con la que trabajas.
Esto se decide primero por un motivo práctico: condiciona todo lo demás. Una regla sobre velas de un minuto en un índice y la misma regla sobre velas diarias en cuarenta acciones son dos estrategias distintas, con datos distintos, costes distintos y problemas distintos.
Y hay una trampa que conviene evitar desde el principio: elegir el universo mirando dónde ya sabes que la idea funciona. Si eliges los tres valores en los que recuerdas haber visto el patrón, ya has metido el resultado dentro de la pregunta.
Paso 3: convierte cada palabra vaga en un número
Este es el paso que duele. Coge la frase original y subraya cada palabra que no sea un número. En la mía: "hueco grande", "primera hora", "recupera casi todo", "suele acabar arriba".
Ahora hay que traducirlas. Y aquí hay dos formas de hacerlo, una buena y una mala.
La mala: probar cuarenta valores para cada una y quedarse con la combinación que mejor sale. Eso no es definir, es buscar. En la guía sobre por qué mienten los backtests explico exactamente cómo eso te destroza el resultado.
La buena: elegir un valor razonable antes de mirar nada, y justificarlo con algo que no sea el propio resultado. Por ejemplo:
- "Hueco grande" lo defino como que la apertura esté a más de una desviación típica de los últimos veinte días respecto al cierre anterior. Justificación: quiero que "grande" signifique inusual para ese instrumento en concreto, no una cantidad fija que en un mercado es enorme y en otro es ruido.
- "Primera hora" lo defino literalmente como los primeros sesenta minutos de sesión. Justificación: es el tramo con más volumen y no tengo motivo para trocearlo más.
- "Recupera casi todo" lo defino como cerrar la primera hora por encima del ochenta por ciento del hueco. Justificación: quiero que el ochenta y el noventa se comporten parecido; si el resultado cambia mucho entre esos dos valores, es que la regla no es robusta y quiero enterarme.
Fíjate en esa última justificación, porque es un truco que uso siempre: elige el parámetro pensando en si los valores vecinos deberían dar resultados parecidos. Si tu estrategia solo funciona con el valor 14 y se cae con el 13 y el 15, no has encontrado nada.
Paso 4: define la salida antes que la entrada
Sé que suena al revés. Lo hago así a propósito.
La salida es la que determina el riesgo, la duración de la operación, cuántas operaciones vas a tener al año y, en la práctica, casi todo el comportamiento del sistema. La entrada solo decide cuándo empieza el reloj.
Además, definir la salida primero te obliga a contestar la pregunta incómoda: ¿en qué momento admito que esta operación estaba equivocada? Si no tienes una respuesta numérica a eso, no tienes una estrategia.
Tres salidas posibles, y las tres tienen que estar escritas:
- Salida por objetivo: la operación fue como esperabas.
- Salida por invalidación: pasó algo que contradice la premisa. No es lo mismo que perder una cantidad; es que la razón por la que entraste ha dejado de ser cierta.
- Salida por tiempo: la premisa no se ha cumplido ni se ha roto, simplemente no ha pasado nada. Esta es la que más se olvida y la que evita tener el capital atrapado durante semanas.
Paso 5: escribe el pseudocódigo y léelo en voz alta
Antes de abrir el editor, escribe la regla como pasos numerados. En castellano. Y luego léela en voz alta.
Es un método tonto y funciona. Al leerlo aparecen los huecos: qué pasa si hay dos señales el mismo día, qué pasa si el mercado abre a mitad de sesión, qué pasa si la posición sigue abierta cuando llega una nueva señal.
Cuando el pseudocódigo no tenga huecos, ya se puede programar:
# Especificación completa: universo, entrada, salida y tamaño.
UMBRAL_HUECO = 1.0 # desviaciones típicas de 20 días
RECUPERACION = 0.80 # fracción del hueco recuperada en la primera hora
DIAS_MAXIMOS = 1 # salida por tiempo: se cierra al final del día
RIESGO_POR_OPERACION = 0.005 # fracción del capital en riesgo
def senal(dia, hist):
hueco = (dia.apertura - hist.cierre_anterior) / hist.desv_20
if hueco > -UMBRAL_HUECO:
return None # el hueco no es lo bastante inusual
recuperado = (dia.cierre_h1 - dia.apertura) / (hist.cierre_anterior - dia.apertura)
if recuperado < RECUPERACION:
return None # no ha recuperado lo suficiente
invalidacion = dia.minimo_h1 # premisa rota si pierde el mínimo de la hora
return Orden(
lado="largo",
entrada=dia.cierre_h1,
invalidacion=invalidacion,
salida_por_tiempo=DIAS_MAXIMOS,
tamano=RIESGO_POR_OPERACION,
)Veinte líneas. Casi siempre son veinte líneas. Lo largo es todo lo demás.
Paso 6: la prueba del compañero
Dale la especificación a otra persona que sepa programar y pídele que la implemente sin hablar contigo. Si lo que le sale se parece a lo tuyo, la regla está bien definida. Si te tiene que preguntar cinco cosas, tienes cinco agujeros.
Si no tienes a nadie a mano, sirve una versión más barata: guarda la especificación dos semanas, no la mires, y vuelve a implementarla de cero. Los agujeros aparecen igual, porque tú de aquí a dos semanas eres bastante parecido a otra persona.
Paso 7: qué mirar en el primer test, y qué no
El primer resultado no sirve para decidir si la estrategia es buena. Sirve para comprobar que has programado lo que creías.
Lo que miro:
- Número de operaciones. Si son menos de cien en todo el histórico, cualquier conclusión es ruido. Y si son diez mil en un año, probablemente los costes se comen la idea antes de empezar.
- Distribución de la duración. Si esperaba operaciones de un día y me salen de tres semanas, algo he programado mal.
- Las cinco mejores y las cinco peores operaciones, una por una, en el gráfico. Este paso es innegociable. La mitad de los errores de programación se ven aquí a simple vista: una entrada en un día festivo, una salida a un precio que no existió, una operación que aporta ella sola una parte enorme del resultado.
- Qué pasa si muevo cada parámetro un poco. No para elegir el mejor, sino para ver si el resultado cambia de forma suave o a saltos. A saltos, mal.
Lo que no miro todavía: el resultado acumulado. Es la cifra más seductora y la menos informativa en esta fase.
Cuándo tirar la idea
Antes de empezar, escribe en qué caso vas a descartarla. Por ejemplo: si genera menos de cien operaciones, o si el resultado depende de una sola operación enorme, o si cambiar un parámetro un diez por ciento le da la vuelta al signo.
Escribirlo antes es la única forma de que se cumpla. Después de tres días programando, todos encontramos motivos para darle una oportunidad más a nuestra idea. Yo también.
Y no pasa nada por tirarla. Cada idea descartada en el ordenador es una idea que no te ha costado dinero. Ese es literalmente el propósito de todo este proceso.
Contenido educativo. Nada de lo que leas aquí es una recomendación de inversión.
