Tengo un modelo de clasificación binaria que predice la COMPRA (1) y la VENTA (-1) con una puntuación F1 fuera de muestra del 71% (la precisión es del 65% y la recuperación del 80%). La salida del modelo es una probabilidad de que se produzca una etiqueta de COMPRA, que luego se utiliza en una fórmula de tamaño de apuesta para apostar en efectivo (similar al criterio de Kelly). El modelo también se entrenó teniendo en cuenta la comisión y el deslizamiento conservador.
Ahora que tengo el modelo entrenado, estoy haciendo un backtesting con datos fuera de muestra. Sin embargo, parece que la ejecución está perdiendo dinero a largo plazo. El modelo está funcionando como se esperaba - incluso en los datos de backtest, todavía funciona con una puntuación F1 del 71%, pero parece que la comisión y el deslizamiento están erosionando las ganancias.
¿Existe algún consejo/reglas/literatura que uno deba seguir cuando hace backtesting y simula la ejecución? Me resulta extraño que el modelo funcione tan bien con datos fuera de la muestra y que, sin embargo, pierda dinero; de nuevo, el modelo fue entrenado con estimaciones conservadoras sobre el deslizamiento, más altas de lo que ocurriría en el comercio real.
EDITAR: Como se ha sugerido en los comentarios, voy a ampliar un poco más lo que hace el modelo. Los datos son simples series temporales OHLCV con alguna ingeniería de características aplicada (por ejemplo, valores CDF para la distribución de los retornos, haciendo estacionarios los precios a través del operador backshift, normalizando los datos entre 0 y 1). El método para etiquetar los datos se ha tomado de la obra de López Avances en el aprendizaje automático financiero , en concreto el Etiquetado de triple barrera Primero se calcula el porcentaje de los rendimientos a partir del precio de cierre, y luego se calcula un EWMA de la desviación estándar (std) de estos rendimientos - esto es como una volatilidad implícita. La barrera superior es un múltiplo del EWMA de std de los rendimientos y, de forma similar a la barrera inferior, la tercera barrera vertical es una ventana de tiempo fija posterior (digamos 60 minutos, o 5 días). En cada momento i
calculen los rendimientos entre i
y i + j
. Si este rendimiento alcanza (es mayor o igual) la barrera superior (EWMA superior de std de los rendimientos en i
), se etiqueta BUY (1) en el momento i
. Si la rentabilidad alcanza la barrera inferior (EWMA inferior de la std de las rentabilidades en i
), se etiqueta como VENTA (-1) en el momento i
. Si la rentabilidad no ha alcanzado la barrera superior ni la inferior en el momento en que ha transcurrido el tiempo de la ventana fijada, se etiqueta como VENTA (-1) en el momento i
.
Los datos del backtest se distribuyen de la misma manera que los datos de entrenamiento, como demuestra una prueba de chi-cuadrado y el hecho de que el modelo alcanza puntuaciones F1 similares entre los datos de prueba y los del backtest (ambos fuera de muestra).