Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 115

 
Anton Zverev:
Siempre leo este tipo de temas (no sólo en este foro) en los que se intentan construir complejas teorías de trading.
Algoritmos genéticos, redes neuronales, fórmulas enrevesadas que sólo entiende el autor, etc.

Y siempre veo que esos sistemas no funcionan en el mercado. El control va a cero o a menos.
Pero en el siguiente hilo alguien gana usando un Expert Advisor en dos resbalones. Y ganan buen dinero.

La pregunta es: ¿tiene todo esto sentido?
Porque, según mi experiencia, cuanto más sencillo y claro es el sistema, más rentable es.

¿Es usted por casualidad un empleado de una casa de bolsa a la antigua usanza?

Creo que tu "método secreto" es comerciar con mashki (al azar) y doblar cuando pierdes, ¿no?)

Tengo que vivir a comisión, señores...

 
Dr.Trader:

Crear un comité, y hacer pruebas:

Hay un problema en que las clases originales son de tipo factorial, y el resultado en la matriz se convierte en los números ordinales del factor correspondiente. Así que al final la comparación pasa por as.numberic().

Para que todo funcione correctamente con los factores, necesitamos crear predictionMatrix como data.frame, pero después de eso mi función rbind dio varnings, necesito cambiar algo más, no entendí que está mal ahí.

Algunas reflexiones sobre el código:

1. No es necesario utilizar la construcción for() a menos que sea absolutamente necesario. Existe una magnífica alternativa a foreach() que, además de la alta velocidad de ejecución, permite paralelizar los cálculos entre los núcleos accesibles.

2) El conjunto de modelos tiene sentido y da resultados sólo si los modelos tienen diferencias significativas. Dos variantes: un conjunto de datos - diferentes modelos (RF, DT, SVM); un modelo - diferentes conjuntos de datos. Un ejemplo de este último caso es el siguiente

#----------------------------------------------------------------------
require(ranger)
require(foreach)
require(magrittr)
data("iris")
totalModels = 50
res <- list()
Acc <- c()
res <- foreach(i = seq_len(totalModels),
               .packages = c("ranger", "magrittr")) %do% {
          id <- rminer::holdout(y = iris$Species, ratio = 2/3)
          x.test <- iris[id$ts, -ncol(iris)]
          y.test <- iris[id$ts, ncol(iris)]
          model <- ranger(Species~., data = iris[id$tr, ], 
                          write.forest = TRUE)
          pred <- predict(model, x.test)$predictions
          acc <- sum(pred == y.test) / length(y.test)
          list(Acc = acc, mod = model) 
        }
for (i in 1:totalModels) {Acc[i] <- res[[i]]$Acc}
Acc
 [1] 0.9803922 0.9607843 0.9803922 0.9607843
 [5] 0.9607843 0.9215686 1.0000000 0.9411765
 [9] 0.9019608 0.9607843 0.9803922 0.9607843
[13] 0.9803922 0.9215686 0.9607843 0.9215686
[17] 0.9803922 0.8823529 0.9411765 0.9803922
[21] 0.9607843 0.9215686 0.9607843 0.9411765
[25] 0.9411765 0.9607843 0.9411765 0.9607843
[29] 0.8823529 0.9019608 1.0000000 0.9411765
[33] 0.9215686 0.9803922 1.0000000 0.9607843
[37] 0.9411765 0.9803922 0.9607843 0.9215686
[41] 0.9411765 0.9607843 0.9411765 1.0000000
[45] 0.9607843 0.9411765 0.9215686 0.9411765
[49] 0.9803922 0.9607843

Elige los modelos con mejor rendimiento y trabaja con ellos a partir de ahí.

Buena suerte

 
Vladimir Perervenko:

Algunas reflexiones sobre el código:

1. No es necesario utilizar for() a menos que sea absolutamente necesario. Existe una magnífica alternativa a foreach() que, además de una alta velocidad de ejecución, permite paralelizar los cálculos entre los núcleos disponibles.

2) El conjunto de modelos tiene sentido y da resultados sólo si los modelos tienen diferencias significativas. Dos variantes: un conjunto de datos - diferentes modelos (RF, DT, SVM); un modelo - diferentes conjuntos de datos. Un ejemplo de esta última opción es el siguiente

Elige los modelos con mejores prestaciones y trabaja con ellos.

Buena suerte

Me gustaría verte más a menudo. No desaparezca.
 
Vladimir Perervenko:


Luego elegimos el modelo con los mejores indicadores y trabajamos con ellos.


Aquí es donde radica el problema.

¿Cuál es el mejor rendimiento en función de qué datos?

Por qué lo pregunto, porque Vkontas está tratando de averiguar cómo elegir un modelo (entre muchos modelos) utilizando datos de entrenamiento y de prueba. Pero aquí lo tienen tan sencillo: tomamos los mejores indicadores y trabajamos con ellos.

 
Alexey Burnakov:

Aquí es donde radica el problema.

¿Cuál es el mejor rendimiento en función de qué datos?

Por qué lo pregunto, porque Vkontas está tratando de averiguar cómo elegir un modelo (entre muchos modelos) utilizando datos de entrenamiento y de prueba. Pero aquí lo tienen tan sencillo: tomamos los mejores indicadores y trabajamos con ellos.

El conjunto inicial se divide en estratificado de entrenamiento/prueba. En el tren entrenamos y en la prueba probamos respectivamente. ¿No está claro en el código?

Buena suerte

 
SanSanych Fomenko:
Me gustaría verte más a menudo. No desaparezcas.
Lamentablemente, sólo tengo tiempo para navegar por el sitio de vez en cuando. Tengo mucho trabajo que hacer.
 
Vladimir Perervenko:

El conjunto inicial se divide en estratificado de entrenamiento/prueba. En el tren entrenamos en la prueba respectivamente probamos. ¿Realmente no está claro en el código?

Buena suerte,

Probaré con rminer::holdout, gracias por el ejemplo. Según mi experiencia, si eliges un modelo y sus parámetros para obtener el mejor resultado en una muestra de prueba, finalmente el modelo te dará un resultado realmente bueno en la muestra de prueba. Pero el resultado suele ser muy bajo en los datos nuevos. Me refiero específicamente a los datos de Forex, en otros ámbitos es un enfoque bastante normal. No espero que rminer::holdout forex cambie nada drásticamente.
 
Dr.Trader:
Probaré con rminer::holdout, gracias por el ejemplo. Por lo general, según la experiencia, si elegimos un modelo y sus parámetros para obtener el mejor resultado en una muestra de prueba, el modelo acabará dando un resultado realmente bueno en la muestra de prueba. Pero el resultado suele ser muy bajo en los datos nuevos. Me refiero específicamente a los datos de Forex, en otras áreas es un enfoque bastante normal. No espero que rminer::holdout forex cambie nada drásticamente.
Eso es lo que estoy diciendo. Y no lo consiguió.

En forex, una buena prueba no significa un buen rendimiento fuera de la muestra. Por eso la gente está luchando. Pero aquí es así: nos quedamos con los mejores resultados (y con el ajuste maestro). De buena manera )
 
Dr.Trader:
entonces el modelo acabará mostrando un resultado realmente bueno en la muestra de prueba. Pero el resultado suele ser muy bajo en los datos nuevos. Me refiero concretamente a los datos de Forex,
Alexey Burnakov:
En forex, una buena prueba no significa un buen rendimiento fuera de la muestra. Por eso la gente está luchando.

El mercado camina en contra de sus propias estadísticas, esta es una teoría que he confirmado con la práctica, es la única teoría que conozco que responde a todo, desde por qué el modelo no funciona con nuevos datos hasta por qué todo el mundo pierde dinero en el mercado en primer lugar...

¿por qué te resulta tan difícil aceptarlo?

¿los viejos conocimientos y hábitos son tan poco favorables a la nueva información?

¿por qué concentrarse tanto en el modelo cuando la diferencia de rendimiento entre los modelos está entre el 0,5% y el 5%?

ningún modelo puede ayudar porque todo depende de los datos

1

He publicado esta foto más de una vez, pero sin embargo.....

Fíjate bien, esta es la diferencia entre los pronósticos acumulados de compra y venta de dos redes cum(buy.signal) - cum(sell.signal), idealmente si nuestro modelo es bueno entonces el gráfico azul debería correlacionarse con el precio, significa que la red entiende bien los datos y reacciona adecuadamente a ellos, de hecho lo que vemos????????

No se puede decir que el modelo no entienda los datos, aunque la correlación sea inversa pero la estructura sea idéntica, pero el mercado se mueve en contra de las previsiones y de las estadísticas que la red aprendió en el pasado...

Ahora dígame, ¿qué modelo puede manejarlo? ¿Qué validación cruzada puede ayudar aquí? cualquier entrenamiento del modelo seguido de datos fuera de muestra (nuevos datos) no sería más que un ajuste de un modelo que funciona bien en datos fuera de muestra y nada más... Y se ve todo el tiempo cuando uno mismo entrena modelos que en datos nuevos el modelo siempre falla, ¿no lo ves ? ¡Te doy la respuesta de por qué sucede!

 

¿Se trata del gráfico con los datos sobre los que se realizó el entrenamiento propiamente dicho, o es sólo una prueba sobre los nuevos datos? Si se dibuja un gráfico para ambos periodos de tiempo a la vez, tanto para el entrenamiento como para la prueba, entonces en la primera parte (entrenamiento) de los datos habrá una superposición completa del gráfico azul y gris, y cuando los nuevos datos comiencen habrá un cambio brusco a la correlación inversa?

Si fuera tan sencillo, bastaría con entrenar cualquier modelo, y sólo invertir sus predicciones. Eso no funciona, por desgracia.
Enseñar un modelo que da un 0% de precisión en los datos nuevos es tan difícil como conseguir un 100% de precisión. El lanzamiento por defecto de una moneda, por ejemplo, tiene una precisión del 50%, y salirse con la suya con unas decenas de porcentaje en cualquier dirección es igualmente difícil. El problema no es que los modelos den resultados opuestos, sino que algunas barras darán resultados correctos, otras darán resultados erróneos, y todo esto es aleatorio y no hay forma de filtrar sólo los resultados correctos.

¿Y por qué se resta la previsión S de la previsión B? ¿Tal vez deberías hacer lo contrario, S-B? Entonces, la correlación también sería correcta de repente.

Razón de la queja: