Mi Modelo Aprendió a Operar Gratis
Uno de mis primeros modelos encontró operaciones que parecían fiablemente, casi aburridamente rentables — un goteo constante de pequeñas ganancias, ese tipo de consistencia que te hace pensar que por fin has encontrado algo real.
Había encontrado algo. Había encontrado un mundo donde operar es gratis. En ese mundo, el modelo era genuinamente bueno. El problema es que yo, y todos los demás, tenemos que operar en uno distinto — y en el momento en que hice que operar costara lo que realmente cuesta, la mayor parte de ese precioso beneficio simplemente se evaporó.
La ventaja que vivía en un mundo sin costes
La firma de la estrategia eran muchas victorias pequeñas y frecuentes. Individualmente, cada captura era diminuta; juntas, sumaban una curva suave y alentadora. Recuerdo estar calladamente orgulloso de ella. No parecía una casualidad. Parecía una disciplina.
Lo que no había tenido en cuenta era que cada una de esas pequeñas victorias se estaba midiendo en un entorno donde el acto de operar no tenía coste — donde podías entrar y salir tan a menudo como quisieras y nunca pagar por el privilegio.
La suposición que nunca noté que estaba haciendo
Aquí está el fallo silencioso. Cuando generé los datos de los que el modelo aprendió, traté cada operación como si fuera gratis. Sin comisión por transaccionar. Sin slippage — sin brecha entre el precio que imaginaba y el precio que realmente obtendría. Así que una operación que capturaba el más mínimo destello favorable se registraba como una victoria, incluso cuando ese destello era más pequeño que lo que habría costado, en el mundo real, hacer la operación en absoluto.
No le estaba mintiendo al modelo a propósito. Simplemente había construido toda su comprensión de “una buena operación” sobre una suposición — que operar es gratis — que generalmente es poco realista en cualquier lugar donde el dinero realmente cambia de manos.
Los costes no encogen los rendimientos; cambian el veredicto
El instinto es pensar en los costes como un impuesto fijo: haz el análisis, luego resta algún peaje fijo al final. Esa intuición es lo que hace que este error sea tan fácil de cometer, y está equivocada de una manera importante.
Un coste no solo hace que una operación ganadora gane un poco menos. Puede cambiar si una operación fue ganadora en absoluto. Un movimiento que es rentable antes de costes puede ser una pérdida después de ellos. Y si tus etiquetas — tu propia definición de qué operaciones fueron buenas — se calculan como si los costes no existieran, entonces no solo estás exagerando el rendimiento. Estás etiquetando mal a algunos perdedores como ganadores, y luego enseñándole a un modelo a salir a buscar más de ellos.
Por qué esto es peor de lo que suena
La parte cruel es el efecto de selección. Las pruebas sin fricción pueden favorecer desproporcionadamente a las estrategias de alta rotación — las que operan constantemente, cosechando una multitud de ventajas diminutas. Ese es también, precisamente, el perfil que los costes del mundo real castigan con más dureza, porque cada una de esas muchas operaciones paga el peaje.
Así que un backtest sin costes no exagera todas las estrategias por igual. Tiende a enamorarse más de exactamente las estrategias que los costes herirán más rápido. Sales a buscar una ventaja, y tu simulación excesivamente generosa te entrega algo frágil ante los costes, envuelto en la curva más atractiva que puede producir.
La solución: meter el coste en la definición de “bueno”
La reparación fue dejar de tratar el coste como una ocurrencia tardía y moverlo a la verdad sobre la que el modelo se entrenaba. Incorporé el coste de ida y vuelta de operar — comisiones y una estimación del slippage, aun sabiendo que esto todavía no capturaría todos los costes del mundo real — en la etiqueta misma, de modo que una operación solo contara como buena si seguía siendo rentable después de pagar por existir. Un movimiento que no podía superar esa barra fue etiquetado por lo que realmente era: no valía la pena hacerlo.
El rendimiento aparente del modelo cayó, a veces de forma pronunciada. Esa caída no era una regresión. Era la fantasía drenándose de aquel primer prototipo, dejando atrás una señal de entrenamiento que estaba al menos menos desconectada de un mercado que te cobra por participar.
Un backtest es un mundo que construyes
La lección que subyace a esta es más grande que las comisiones. Cada backtest es un pequeño universo simulado, y solo es tan honesto como las reglas que eliges poner en él. Deja fuera los costes y no has construido una prueba neutral — has construido un mundo más amable que el real, y cualquier modelo que aprenda a prosperar allí ha aprendido a prosperar sobre una generosidad que no existe fuera de tu simulación.
La primera lección del mercado a una nueva estrategia es casi siempre alguna versión de la misma: que es más caro actuar de lo que suponías. Puedes o bien enseñarle a tu modelo esa lección por adelantado, en la seguridad de una simulación, o dejar que el mercado se la enseñe más tarde, con dinero real, a precio completo. Yo preferiría pagar por la lección en el aula más barata.
Una estrategia que solo es rentable cuando operar es gratis no es realmente una estrategia. Es un descubrimiento por el que olvidaste cobrarte a ti mismo por hacerlo.
— Sin señales, sin rendimientos, esto no es asesoramiento de inversión.