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

 
Vizard_:
Yur, hacer una versión normal del programa (o actualizado) para la gente))

1.Que lea archivos estándar de este tipo - cabecera (con comillas y sin ellas), datos, delimitadores, que lea zpt, diff.zpt, tabulación. Ejemplo -

"Date";"V1";"A77";"V23A";"Целевая"
01.01.2000;4.999995E-03;1.499891E-03;-2.000213E-03;-5.000234E-03;1

2.dejar que sólo se utilicen 10 entradas para el modelo, pero hacer que se puedan cargar muchas, entonces
en una pestaña separada, o poner mayúsculas (se seleccionan las entradas), o bien.

3. ¡Sin normalización! (o desactivada), porque si los datos están inicialmente centrados en 0, después de la conversión
x-x.min/....(o lo que tengas) - vuela))

4.Deseche la aleatoriedad (o conmutable), deje que solo divida los datos en dos partes, cuente en orden y emita el % de predicciones exitosas para 1 (para 0 no)

5. Hizo la importancia de los insumos - ¡bien!

6.Que además de esa fórmula que se emite, se emita la completa!, es decir, ahora

double x2 = 2,0 * (v5 + 1,0) / 2,0 - 1,0;
doble decisión = -0,2632437547312642 -0,2634178652535958 * x2
+ 0.05267978803936412

tenemos que -

Nombre objetivo = -0,2632437547312642 -0,2634178652535958 * insertar construcción x2= (2,0 * (v5 + 1,0) / 2,0 - 1,0)
+ 0.05267978803936412

obtenemos -

Nombre objetivo = -0,2632437547312642 -0,2634178652535958 * (2,0 * (v5 + 1,0) / 2,0 - 1,0)
+ 0.05267978803936412

Obtendrás un dispositivo algo utilizable para pruebas rápidas. Entonces todavía se puede insertar etc, simple (no codicioso)
algoritmos, con una elección... De lo contrario, la herramienta es inútil. Mientras se edita el archivo, esto y aquello... Es más fácil usar otra cosa...
¿Dónde está la versión 7?
No... Me gusta, es bastante robusto. Así que 100 puntos, Yura.
 
СанСаныч Фоменко:

Más o menos, pero no hay tiempo ni cerebro suficientes.

Hay que empezar con una variable objetivo y luego seleccionar predictores para ella, y luego volver a comprobarlos con matemáticas, de alguna manera. En fin, es un proceso doloroso y no puedo formalizarlo.

Se me va de la lengua. Sí, lo sé. Estuve despierto toda la noche pensando en ello. Mira, construimos modelos basados en predicados para la salida IDEAL. Obtenemos un 50-60% de generalización en casos raros. Hacer coincidir las entradas con la salida IDEAL no es fácil, si no imposible. Pero, ¿y si la SALIDA NO ES IDEAL? ¿Y si permitimos errores que lleven a una generalización del 100%? Así sabremos de qué son capaces los datos de entrada y si esta salida NECESARIA gana (incluso con errores), tiene derecho a vivir en el futuro. Al principio pensé que necesitaba una doble optimización, del propio modelo y de la variable de salida. Pero luego me di cuenta. Por qué estas fricciones, porque si el modelo está entrenado al 60% de generalización, entonces sustituyendo las fórmulas en el indicador y obteniendo señales en las muestras de entrenamiento y prueba obtendremos el resultado, en el que el sistema funciona al 100%. es decir, si obtenemos señales en las muestras de entrenamiento y prueba y cambiamos la variable de salida de acuerdo con estas señales, obtendremos el propio 100% de entrenamiento. De ahí la conclusión. Habiendo obtenido varios modelos con 50-60% de generalización, elegimos el modelo que ganó (funcionó) en las secciones de entrenamiento y prueba. Dice que en general, las principales señales que ganó (los que trajeron suficiente beneficio) y las señales en las que se fusionó, no eran muy poco rentable (compartir su sonrisa, y volverá a usted más de una vez), lo principal que al final del período que ganamos. Así que es así.......
 
Vizard_:
4.Desechar la aleatoriedad (o deshabilitarla), dejar que sólo se dividan los datos en dos partes, contar en orden y emitir el % de predicciones exitosas para el 1 (no es necesario el 0)

Si se trata de utilizar jPrediction para el mercado de divisas, esto es probablemente lo principal que hay que añadir. Hay muchos modelos que pueden dividir los datos aleatoriamente en dos partes, entrenar en la primera y mostrar buenos resultados también en la segunda. Pero la mayoría de estos modelos serán ineficaces con los nuevos datos. No hay dependencias constantes en Forex, los buenos resultados en una muestra de prueba aleatoria no garantizan buenos resultados en los nuevos datos. La única manera de asegurarse de que un modelo es adecuado para el forex es hacer una prueba de avance:

El modelo debe mostrar una buena capacidad de predicción en los datos marcados en rojo. Ahora en jPrediction tal prueba tiene que ser hecha manualmente reintroduciendo los datos para cada caso de prueba, no es bueno para un trabajo serio.
Y estoy de acuerdo en que es mejor mostrar una puntuación sólo para los datos de prueba que un total de entrenamiento+prueba.
Todas las calificaciones que jPrediction produce ahora son inadecuadas para el forex, y sólo son engañosas.

Por cierto, así es como se hace el roll forward en el paquete caret para R:

http://topepo.github.io/caret/splitting.html(sección División de datos para series temporales)

library(caret)
caretObj <- train(x = trainData[,1:(ncol(trainData)-1)],
                  y = trainData[,ncol(trainData)],
                  trControl = trainControl(method = "timeslice", initialWindow=1000, horizon=300, fixedWindow=TRUE),
                  verbose = TRUE)

El modelo se entrenará con las primeras 1.000 muestras y luego se probará con las muestras 1001-1300. A continuación, pase a 300, entrene 301-1300, pruebe 1301-1600, etc. hasta que se le acaben los ejemplos de entrenamiento

 
Vizard_:
Yur, haz una versión normal del prog (o mejorada) para la gente))))

1.Que lea los archivos estándar de este tipo - cabecera (con o sin comillas), datos, delimitadores que apresure zpt, tchk.zpt, tabulación. Ejemplo -


2.Puede que sólo se utilicen 10 entradas para el modelo, pero que se puedan cargar muchas, entonces
En una pestaña aparte, puedes poner marcadores (seleccionas las entradas) o cualquier otra cosa.

3. ¡Sin normalización! (o desactivada), porque si los datos están inicialmente centrados en 0, después de la conversión
x-x.min/....(o lo que tengas) - vuela))

4.Deseche la aleatoriedad (o conmutable), deje que solo divida los datos en dos partes, cuente en orden y emita el % de predicciones exitosas para 1 (para 0 no)

5. Hizo la importancia de los insumos - ¡bien!

6.Que además de la fórmula que se emite, se emita el ¡completo!, que ahora es


7. ¿Dónde está la versión 7?
  1. La cuestión es que la coma en Excel se utiliza para separar la parte entera de un número de la parte fraccionaria. Si añado más delimitadores, quienes editen las selecciones en diferentes aplicaciones no podrán editarlas sin dar vueltas adicionales en jPrediction. Es decir, de momento todo se hace más o menos compatible con las hojas de cálculo. Por el momento, el analizador sintáctico sólo está implementado para archivos CSV y está adaptado a las hojas de cálculo. Pero jPrediction está construido en OOP y es posible extender la interfaz para otros formatos.
  2. El segundo punto es que jPrediction no tiene ni tendrá nunca ajustes adicionales. El trabajo del usuario en jPrediction consiste en tomar una muestra lista y pulsar F8 para obtener un modelo o un mensaje de "basura dentro, basura fuera" en un tiempo razonable. Si le gusta trastear con los algoritmos de aprendizaje, afinar los programas, diseñar la arquitectura de la red, pero no investigar la actividad en cuanto a la selección de datos de buena calidad para la tarea, deje que utilicen otros paquetes de ML. Ahora hay muchos paquetes de este tipo, y es posible que te pases el resto de tu vida indagando en ellos. El punto principal del aprendizaje automático es que la generalizabilidad del modelo depende sólo de la calidad de los datos de la muestra, no de los algoritmos y sus ajustes. Por lo tanto, debe buscar los problemas en la muestra, no tratar de ajustar algo en jPrediction.
  3. Véase el punto 2. 2.
  4. Ver párr. 2
  5. -
  6. El resultado no es una fórmula, sino un código para portar el modelo a otras aplicaciones. Por el momento se ha implementado el código para portar a aplicaciones Java. Más adelante está previsto portar el código del modelo a MQL. Este código debe ser lo más conciso posible, y no una larga extensión. Por lo tanto, se han eliminado todas las cosas innecesarias, y todo lo que se repite a menudo se coloca por separado.
  7. El sitio web del proyecto está en jprediction.com y también hay una opción de menú "Download" para descargar las últimas versiones.

Si a alguien no le gusta mucho algo en jPrediction, el proyecto está abierto con código abierto bajo licencia GNU GPL y hacer forks de él, cambiar y modificar algo allí, no sólo no está prohibido, sino que hasta cierto punto es bienvenido.

 
Dr.Trader:

Si se trata de utilizar jPrediction para el mercado de divisas, esto es probablemente lo principal que hay que añadir. Hay muchos modelos que pueden dividir los datos aleatoriamente en dos partes, entrenar en la primera y mostrar buenos resultados también en la segunda. Pero la mayoría de estos modelos serán ineficaces con los nuevos datos. No hay dependencias constantes en Forex, los buenos resultados en una muestra de prueba aleatoria no garantizan buenos resultados en los nuevos datos. La única manera de asegurarse de que un modelo es adecuado para el forex es hacer una prueba de avance:

El modelo debe mostrar una buena capacidad de predicción en los datos marcados en rojo. Ahora en jPrediction tal prueba tiene que ser hecha manualmente reintroduciendo los datos para cada caso de prueba, no es bueno para un trabajo serio.
Y estoy de acuerdo en que es mejor mostrar una puntuación sólo para los datos de prueba que un total de entrenamiento+prueba.
Todas las calificaciones que jPrediction da ahora son inadecuadas para el forex, y sólo son engañosas.

Por cierto, así es como se hace el roll forward en el paquete caret para R:

http://topepo.github.io/caret/splitting.html(sección División de datos para series temporales)

El modelo se entrenará con las primeras 1.000 muestras y luego se probará con las muestras 1001-1300. A continuación, pase a 300, entrene a 301-1300, pruebe a 1301-1600, etc. hasta que se agoten los ejemplos de entrenamiento.

Información estupenda. Gracias.
 
Dr.Trader:

Todas las estimaciones que da ahora jPrediction son inadecuadas para el mercado de divisas, y sólo son engañosas.

Se trata de acusaciones sin fundamento, es decir, lo que comúnmente se conoce como patrañas. Para demostrar la eficacia de Walk Forward, proporcione resultados comparativos de los modelos derivados en jPrediction y de los modelos derivados después de Walk Forward, de tal manera que puedan ser cotejados para ver si son "malos". Si estos resultados confirman sus palabras, entonces tendría sentido sustituir el algoritmo de prueba actualmente implementado en jPrediction por Walk Forward.

Me he encontrado en repetidas ocasiones con que ideas aparentemente "obvias", tras ser aplicadas y probadas por la experiencia, resultan ser "vacías". Sólo una parte muy pequeña de las ideas es efectiva y a menudo sólo después de una edición adicional con un "archivo". Esto se debe a que faltan los detalles de las ideas. Y el diablo está en esos mismos detalles.

Linus Torvald (creador del núcleo Linux) no se cansa de repetir: "Tarde o temprano la teoría se encuentra con la práctica". Y la práctica es siempre el criterio de la verdad. Siempre".

Un problema adicional de Walk Forward es que tenemos muchos modelos en cada etapa. ¿Cuál de estos modelos debería mantenerse como modelo de trabajo y según qué criterios debería seleccionarse?

 
Yury Reshetov:

Se trata de afirmaciones sin fundamento, es decir, lo que comúnmente se conoce como patrañas. Para demostrar la eficacia del Walk Forward, facilite estudios comparativos de los modelos jPrediction y de los modelos post-Walk Forward, de modo que puedan ser cotejados en cuanto a su "maldad". Si estos resultados confirman sus palabras, entonces tendría sentido sustituir el algoritmo de prueba actualmente implementado en jPrediction por Walk Forward.

Me he encontrado repetidamente con que ideas aparentemente "obvias", una vez puestas en práctica y probadas por la experiencia, resultan ser "vacías". Sólo una proporción muy pequeña de ideas son efectivas, y a menudo sólo después de una revisión posterior del "expediente". Esto se debe a que faltan los detalles de las ideas. Y el diablo está en esos mismos detalles.

Linus Torvald (creador del núcleo Linux) no se cansa de repetir: "La teoría se encuentra con la práctica tarde o temprano". Y la práctica siempre resulta ser el criterio de la verdad. Siempre".

Un problema adicional de Walk Forward es que tenemos muchos modelos en cada etapa. ¿Cuál de estos modelos debe mantenerse como modelo de trabajo y con qué criterio debe seleccionarse?

No hay necesidad de discutir. Estamos trabajando en un tema de investigación muy complejo. Hay muchas suposiciones. Y estas suposiciones conducen a un sobreaprendizaje y a un sobremuestreo.

Dos reglas simples: engaña al mercado, no te engañes a ti mismo.

Walk Forward es, por supuesto, un buen método. Pero los principales parámetros son la profundidad del aprendizaje y la duración de la prueba. Al mismo tiempo (!!!) si estos parámetros se ajustan de tal manera que el resultado en la posición de avance sea mejor, ¡sobreentrenaremos la marcha hacia adelante! Es decir, en un trozo grande hacemos repetidamente la optimización Walk Forward. En otro trozo no solapado probamos los mejores parámetros de Walk Forward en "entrenamiento" y ejecutamos otro lobo completo hacia adelante, pero lo hacemos una vez. Si el resultado es bueno, entonces el modelo está captando las dependencias. Si el resultado es malo, entonces simplemente hemos reentrenado Walk Forward en un modelo no tan bueno.

Existe el mismo problema con las pruebas únicas en una muestra retrasada. Ahora estoy trabajando en ello: liberar mis resultados del sobreentrenamiento. Los resultados de la validación cruzada deben correlacionarse con la muestra diferida para la prueba final. Dicho esto, la selección del mejor modelo por validación cruzada dará los mejores resultados aproximados fuera de la muestra. De lo contrario, si no hay correlación o ésta es negativa, tenemos un modelo inadecuado para el mercado de divisas que hay que cambiar.

 
Yury Reshetov:

Se trata de acusaciones sin fundamento, es decir, lo que en el lenguaje común se denomina "bullshit". Para demostrar la eficacia de Walk Forward, presente los resultados de los estudios comparativos de los modelos jPrediction y de los modelos post-Walk Forward de forma que se puedan cotejar para comprobar su "piedad". Si estos resultados confirman sus palabras, entonces tendría sentido sustituir el algoritmo de prueba actualmente implementado en jPrediction por Walk Forward.

Me he encontrado repetidamente con que ideas aparentemente "obvias", una vez puestas en práctica y probadas por la experiencia, resultan ser "vacías". Sólo una proporción muy pequeña de ideas son efectivas, y a menudo sólo después de una nueva revisión "de archivo". Esto se debe a que faltan los detalles de las ideas. Y el diablo está en estos detalles.

Linus Torvald (creador del núcleo Linux) no se cansa de repetir: "La teoría se encuentra con la práctica tarde o temprano". Y la práctica siempre resulta ser el criterio de la verdad. Siempre".

Un problema adicional de Walk Forward es que tenemos muchos modelos en cada etapa. ¿Cuál de estos modelos debe mantenerse como modelo de trabajo y con qué criterio debe seleccionarse?

Con todos mis respetos, Reshetov, son los autores de las bicicletas los que deben demostrar su lugar bajo el sol, incluida su terminología como "generalizabilidad". La conveniencia de la posición delDr. Trader radica precisamente en el hecho de que todas las pruebas necesarias, tanto de la teoría como de la verificación práctica por parte de millones de usuarios de las ideas que expresa, se han realizado antes que él, a menudo hace muchos años. Él, en cambio, se limita a dar ejemplos concretos de uso. Y la corrección del puesto que se discute es evidente tanto a nivel intuitivo como teórico.
 
Alexey Burnakov:

No vale la pena pelear por ello.

Estoy de acuerdo. Pero esto requiere minimizar el número de acusaciones sin fundamento en el hilo. La mejor opción es dar los resultados de los estudios comparativos con la posibilidad de una doble comprobación.

Alexey Burnakov:

Estamos trabajando en una investigación muy compleja.

Algunos trabajan y otros se dedican a hacer el ridículo sin pruebas (no señalemos con el dedo).

Alexey Burnakov:

No vale la pena luchar.

Estoy de acuerdo.

AlexeyBurnakov:

Hay muchas suposiciones aquí. Y estas suposiciones conducen a un exceso de educación y a una caída en picado fuera de la muestra.

No se pueden poner suposiciones en el pan y meterlas en el bolsillo. Así que todo debería comprobarse empíricamente, en lugar de hacer suposiciones no probadas, para no pisar el rastrillo del sobreentrenamiento y la caída en picado fuera de la muestra.


AlexeyBurnakov:

Walk Forward es, por supuesto, un buen método. Pero los principales parámetros son la profundidad del aprendizaje y la duración de la prueba. Al mismo tiempo (!!!) si abordamos estos parámetros de tal manera que el resultado en la vía de avance sea mejor, ¡sobreentrenaremos la vía de avance! Es decir, en un trozo grande hacemos repetidamente la optimización Walk Forward. En otro trozo no solapado, probamos los mejores parámetros de Walk Forward en "entrenamiento" y lo ejecutamos una vez más. Si el resultado es bueno, el modelo recoge las dependencias. Si el resultado es malo, entonces simplemente hemos reentrenado Walk Forward en un modelo no tan bueno.

Existe el mismo problema con las pruebas únicas en una muestra retrasada. Ahora estoy trabajando en ello: liberar mis resultados del sobreentrenamiento. Los resultados de la validación cruzada deben correlacionarse con la muestra diferida para la prueba final. Dicho esto, la selección del mejor modelo por validación cruzada dará los mejores resultados aproximados fuera de la muestra. De lo contrario, si no hay correlación o es negativa, tenemos un modelo inadecuado para el mercado de divisas que hay que cambiar.

La conclusión es que todos los métodos tienen ventajas y desventajas. Las suposiciones exageran los méritos y no tienen en cuenta los inconvenientes.

Un punto aún más importante es que ningún método permite seleccionar los modelos según el mejor criterio de calidad, y todos los métodos seleccionan según el principio de rechazo, filtrando sólo los que no son aptos a sabiendas. Ningún método en ML puede calcular la idoneidad potencial de lo que queda después del rechazo.

Especialmente en entornos no estacionarios. Es posible seleccionar los modelos aparentemente más adecuados en términos de generalizabilidad, pero mañana algún jefe del Banco Central en una reunión se tira un pedo y todos los modelos se irán al garete.

 
Yury Reshetov:


La cuestión es que todos los métodos tienen ventajas e inconvenientes. Las suposiciones exageran los méritos y desprecian los deméritos.

Un punto aún más importante es que ningún método selecciona los modelos según el criterio de mejor calidad, y todos los métodos seleccionan según el principio de rechazo, filtrando sólo lo que se sabe que es inadecuado. Ningún método en ML puede calcular el valor potencial de lo que queda después del rechazo.

Más aún en entornos no estacionarios. Parece posible seleccionar los modelos más adecuados en términos de generalizabilidad, pero mañana algún jefe del Banco Central se tirará un pedo y todos los modelos se irán al garete.

Así es. Sólo experimentalmente. Se puede entender si la selección de un modelo (en el entrenamiento + prueba) fue mejor o no aplicando este modelo fuera de la muestra. Puede hacerlo para diferentes modelos. Cuando la selección de un buen modelo en la muestra da un buen resultado fuera de ella, significa que el modelo es adecuado para el problema elegido.
Razón de la queja: