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

 
Dr.Trader:

Utilizo indicadores estándar como base para crear predictores. Yo mismo sigo experimentando con él, probando ideas de este hilo del foro.

Lo estoy haciendo durante las últimas semanas, ahora el mejor resultado es el siguiente: (una gran cantidad de cálculos, estoy tratando de utilizar D1 marco de tiempo para una mejor velocidad, entonces voy a utilizar más pequeño marco de tiempo)

1) exportar de mt5 a csv: ohlc, tiempo, indicadores, todo para las últimas 10 barras. Recientemente he comenzado a tomar el tiempo sólo de la barra más reciente, creo que el tiempo de las otras barras es calculable y por lo tanto no aporta ninguna información nueva. Salen a la luz varios centenares de predictores "primarios". El resultado requerido del aprendizaje es "1" o "0" - subida o bajada del precio en la siguiente barra. Mi método con zigzags no es estable y complejo, ahora estoy mejor trabajando con precios cercanos. Cuando trabaje el algoritmo completo para el entrenamiento del modelo desde cero, puede que empiece a trabajar en zigzags y en la predicción de la tendencia.

2) En R estoy haciendo diferentes operaciones matemáticas con los datos disponibles - suma, deltas, min, max, etc. Ya salen más de mil predictores.

3) Obviamente, después del segundo paso hay más basura de la necesaria. Lo estoy filtrando por el método del artículo sobre componentes básicoshttp://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/, SanSanych escribió sobre ello anteriormente. No estoy enseñando el modelo PCR en sí mismo y me he conformado con la función de preselección de predictores por ahora:

srcTable es una tabla con predictores, la última columna debe ser el resultado de entrenamiento requerido.pruneSig es mejor dejar -1.

Como resultado, la función devolverá una lista con los nombres de las columnas de la tabla que contienen alguna información útil. O una lista vacía si no se encuentra nada útil. Este método se menciona en el artículo como poco significativo, pero resulta ser bastante adecuado, tamiza muy bien la basura. Además, la lista de resultados se ordenará por relevancia, de más a menos útil.

4) Si la función devuelve una lista vacía - vuelvo a ejecutar el segundo paso, generando de nuevo diferentes combinaciones matemáticas sobre los datos disponibles, y luego el tercer paso para cribar. Tengo que repetir esto 3-4 veces. El volumen de datos crece con cada repetición, por lo que es mejor limitar de alguna manera el volumen de nuevos datos generados. Podemos cambiar esta función para la criba, de manera que si la lista sale vacía, devuelva uno o dos mejores resultados y genere nuevos predictores sólo a partir de ellos.

5) A continuación, según el artículo, debemos entrenar el modelo del componente principal. Tengo problemas con él - hasta ahora el mejor r-cuadrado para el modelo entrenado es 0,1, no es suficiente, el artículo dice que necesito al menos 0,95. Pero puedo entrenar algún otro modelo de R en los predictores obtenidos y dará un mejor resultado. Tengo más experiencia con la neurona, el mejor resultado en fronttest con ella sale con un error de alrededor del 37%. Se supone que el modelo PCE es más estable, sin necesidad de reentrenamiento, etc., pero hasta ahora no puedo conseguir ningún predictor para él.


Enhorabuena, gracias por publicar el resultado.

Espero que este post tuyo sea apreciado -has, si no resuelto el problema básico del comercio, es sin exagerar.

Todo lo demás vendrá con él.

Enhorabuena de nuevo, ¡buena suerte!

 
Dr.Trader:

Utilizo indicadores estándar como base para crear predictores. Todavía estoy experimentando con él yo mismo, probando ideas de este hilo del foro.

He estado haciendo esto durante las últimas semanas, ahora el mejor resultado es el siguiente: (un montón de cálculos, estoy estudiando este enfoque en general en el marco de tiempo D1 para ser más rápido, entonces voy a pasar a plazos más pequeños)

1) exportar desde mt5 a csv: ohlc, tiempo, indicadores, todo para las últimas 10 barras. Recientemente empecé a tomar el tiempo sólo de la barra más reciente, creo que el tiempo de otras barras se calcula, y por lo tanto no lleva nueva información. La salida son varios cientos de predictores "primarios". El resultado de aprendizaje requerido es "1" o "0" - subida o bajada del precio para la siguiente barra. Me estoy volviendo inestable y complicado con los zigzags, ahora me va mejor con los precios de cierre. Cuando elabore el algoritmo completo para entrenar el modelo desde cero, podré trabajar con zigzags y predicción de tendencias.

2) Realizo varias operaciones matemáticas con los datos mensuales disponibles en R: sumas, deltas, mínimos, máximos, etc. Ya tengo más de mil predictores.

3) Obviamente, después del segundo paso hay más basura de la necesaria. La cribo usando el método del artículo sobre los componentes principales de http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/, SanSanych escribió sobre ello aquí antes. No entreno el modelo PCR en si mismo, hasta ahora me he conformado con esta función para pre-seleccionar predictores:

srcTable - tabla con predictores, la última columna debe ser el resultado de entrenamiento requerido. pruneSig debe dejarse en -1.

Como resultado, la función devolverá una lista con los nombres de las columnas de la tabla que contengan alguna información útil. O una lista vacía si no se encuentra nada útil. Este método se indica en el artículo como poco significativo, pero resulta ser bastante adecuado, filtra muy bien la basura. Además, la lista con los resultados se ordenará por importancia, de más útil a menos útil.

4) Si la función devuelve una lista vacía, vuelvo a ejecutar el segundo paso, generando de nuevo diferentes combinaciones matemáticas sobre los datos disponibles, y luego el tercer paso para la criba. Así tengo que repetirlo 3-4 veces. El volumen de datos crece con cada repetición, por lo que es mejor limitar de alguna manera el volumen de nuevos datos generados. Puede cambiar esta función para el cribado, de forma que si la lista está vacía, devuelva uno o dos mejores resultados, y genere nuevos predictores sólo a partir de ellos.

5) A continuación, según el artículo, tenemos que entrenar el propio modelo de componentes principales. Tengo problemas con esto, hasta ahora el mejor r-cuadrado para el modelo entrenado = 0,1, esto no es suficiente, el artículo dice que es necesario al menos 0,95. Pero, es posible entrenar algún otro modelo desde R sobre los predictores obtenidos, y el resultado será mejor. Yo tengo más experiencia con neuronka, el mejor resultado en el fronttest con ella sale con un error de alrededor del 37%. El modelo PCE debería ser más estable, sin reentrenamientos, etc., pero aún no encuentro predictores para él.

Si tienes un error del 30% en el fronttest, ya es bastante rentable el modelo, haz un Expert Advisor para mt5 y compruébalo en el probador de estrategias.

Sigue así. Mejorarás con el tiempo.
 
Dr.Trader:
He empezado a ver este curso y se centra mucho en el framework Pandas en Python. Las primeras lecciones parecen más un tutorial sobre el marco de trabajo que sobre el análisis de datos. Pero el tutorial parece adecuado, sin el típico "soy un gurú del Forex, te abriré los ojos y ganarás millones" como en muchos otros entrenamientos inútiles, da esperanzas de que cuenten cosas adecuadas hasta el final. Pero hay que tener en cuenta que este curso está diseñado para operar en bolsa, no en Forex, no sé si los procesos de aprendizaje de los modelos en estos dos ámbitos son similares.
El principio es el mismo. Hay algunos matices en el comercio. Por ejemplo, no hay muchos terminales que se acerquen a la realidad y que permitan hacer pruebas de intercambio (deslizamiento, ejecución parcial, retrasos). Pero los hay. Pero MT5 no les pertenece, según tengo entendido.
 
Dr.Trader:

Utilizo indicadores estándar como base para crear predictores.

...

2) Hago diferentes operaciones matemáticas con los datos disponibles en R - suma, deltas, min, max, etc. Ya salen más de mil predictores.

3) Obviamente, después del segundo paso hay más basura de la necesaria. Lo tamizo utilizando el método descrito en el artículo sobre componentes básicoshttp://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/, SanSanych escribió sobre ello anteriormente.

...

Como resultado, la función devolverá una lista con los nombres de las columnas de la tabla que contienen alguna información útil. O una lista vacía si no se encuentra nada útil. Este método se menciona en el artículo como poco significativo, pero resulta ser bastante adecuado, tamiza muy bien la basura. Además, la lista con los resultados se ordenará por relevancia, de más a menos útil.

Uno no puede evitar la sensación de que el cálculo es totalmente al azar. Los predictores no son más que basura. Puede que haya un diamante entre ellos, ¡porque la Vida podría surgir de la "sopa"!

Resulta que este enfoque es una optimización inteligente de la computación. Cuando no hay fuerza bruta, sino algoritmos más inteligentes. Pero la entrada sigue siendo la misma basura.

Resulta que si tuviéramos una máquina de computación tan potente que pudiera realizar cualquier cálculo en un segundo, no necesitaríamos ningún tipo de entrenamiento. Pero, al mismo tiempo, no veríamos ningún cambio cualitativo en la recepción de un TS rentable. Tristemente.

 
Alexey Volchanskiy:

Un colega me ha enviado un enlace a un curso sobre aprendizaje automático, ¿te gustaría echarle un vistazo? Es gratis, pero está en Python por alguna razón ((

https://www.udacity.com/course/machine-learning-for-trading--ud501

Todo se muestra mejoraquí.

Buena suerte

 
Anton Zverev:

No puedo evitar la sensación de que el cálculo se basa TOTALMENTE en el azar. Los predictores son todos basura. Tal vez haya un diamante entre ellos; después de todo, ¡la vida podría nacer de la "sopa"!

.... Eso es triste.

Estás absolutamente equivocado.

Permítanme explicarlo con un ejemplo.

Toma un kodobase. Todo lo que hay en él es basura, o hay algo que vale la pena. Lo más probable es que haya, después de todo, la experiencia de tantas personas.

Ahora vamos a suponer con certeza que vamos a operar con tendencias. ¿Cuál de los indicadores disponibles en el kodobase será útil para el comercio de tendencia? ¿Debemos juzgar por el nombre o de forma intuitiva? ¿Y cuántos podemos seleccionar prácticamente para probar? 10, 20, 100? Creo que 100 es a través de un probador para la vida, teniendo en cuenta de la combinación.

Pero lo más importante no es sólo el número de indicadores a probar. Lo principal es que el Asesor Experto funcione en el futuro. Y el Asesor Experto funcionará en el futuro sólo en un caso - si no está reentrenado (no sobreentrenado). El principal problema en la construcción de sistemas mecánicos de trading es el problema del sobreentrenamiento (overfitting). ¿Ha conseguido mucha gente superar este problema?

Creo queel Dr.Trader no construyó sus predictores a partir de una antorcha, sino que tuvo alguna idea - en este momento la idea de generar tantos predictores no es interesante.

Lo interesante es algo totalmente distinto.

Lo que es interesante es lo que no se ha tenido en cuenta.

Entre sus miles de predictores,Dr.Trader puede seleccionar aquellos que no causarán sobreentrenamiento (overfitting) de los Asesores Expertos.

No sólo sabe cómo seleccionar predictores que no causen el desarrollo de EAs sobreajustados, sino que también ha mostrado el código que lo hace.

 
SanSanych Fomenko:

Estás completamente equivocado.

Me explico con un ejemplo.

Toma un kodobase. Todo lo que hay en él es basura, o hay algo que vale la pena. Lo más probable es que lo haya, después de la experiencia de tanta gente.

¡Basura, por supuesto! Bueno, toma toda la kodobase como predictores...

De entre sus miles de predictores,Dr.Trader puede seleccionar aquellos que no causarán sobreentrenamiento (overfitting) de los Asesores Expertos.

No sólo sabe cómo seleccionar predictores que no provoquen el desarrollo de EAs sobreajustados, sino que también expuso el código que lo hace.

Y resultó que no se encontró ni una sola gema, y mucho menos un diamante, entre el enorme montón de basura. Te digo que es una posibilidad remota.

¿O es que alguien aquí es capaz de fundamentar que tal o cual indicador no es una basura? ¿Y mostrar en números la importancia relativa de este predictor?

 

Sí, estoy de acuerdo en que hay mucha acción aleatoria. Pero no puedes tomar un solo indicador y hacer un EA basado en él, rápidamente irás cuesta abajo con él. Los indicadores no son 100% basura, pero por sí solos no proporcionan suficiente información para predecir el movimiento de los precios. Pero mi investigación demostró que se puede mejorar el poder predictivo de los indicadores combinándolos, es decir, se puede hacer un diamante de la basura. El problema es que hay miles de combinaciones posibles y sólo decenas de ellas son útiles y no sé qué indicadores son inicialmente mejores que otros. Hasta ahora este problema se ha resuelto como he escrito antes, con fuerza bruta y largos cálculos. A medida que pase el tiempo obtendré estadísticas sobre qué indicadores entran más a menudo en los predictores finales y podré trabajar sólo con ellos, todo irá más rápido.

He empezado a hacer un Asesor Experto basado en los predictores obtenidos, el resultado será realmente visible en el probador. Dicen que incluso con un 60% de barras predichas correctamente, usted seguirá perdiendo dinero, ya que el precio recorrió menos distancia con las barras predichas correctamente que con las incorrectas. Si es así, deberías hacer tu propia función de fitness para entrenar a las neuronas y estimar no el porcentaje de barras sino la rentabilidad del modelo.

 
Dr.Trader:

Sí, estoy de acuerdo en que mucha de la acción es aleatoria. Pero no puedes tomar un solo indicador y usarlo para crear un Asesor Experto, perderás rápidamente con él. Los indicadores no son 100% basura, pero por sí solos no dan suficiente información para predecir el movimiento del precio. Pero mi investigación demostró que se puede mejorar el poder predictivo de los indicadores combinándolos, es decir, se puede hacer un diamante de la basura. El problema es que hay miles de combinaciones posibles y sólo decenas de ellas son útiles y no sé qué indicadores son inicialmente mejores que otros. Hasta ahora este problema se ha resuelto como he escrito antes, con fuerza bruta y largos cálculos. A medida que pase el tiempo formaré algunas estadísticas sobre los indicadores que llegan a los predictores finales más a menudo, podré trabajar sólo con ellos y todo irá mucho más rápido.

Quieres encontrar correlaciones en un solo BP. Y quieres encontrar interrelaciones que deben estar presentes en todo momento en esa BP.

Estas dos circunstancias (en negrita) parecen, cuando menos, extrañas.

Los métodos de aprendizaje automático han aprendido a reconocer objetos (un perro, una naranja, etc.) a partir de imágenes. Es decir, han aprendido a reconocer cosas que los humanos o ciertos tipos de animales pueden reconocer. Cuando una persona o un animal ve un precio BP, no es consciente de nada. Es decir, no son capaces de hacer comparaciones en sus NS. Sin embargo, cuando un hombre observa varias BP a la vez, ve similitudes incluso a simple vista. Y estas similitudes, efectivamente, se hacen realidad. Por lo tanto, es la conciencia de un objeto sobre la que es lógico poner las técnicas de aprendizaje automático.

Primero nos damos cuenta nosotros mismos y luego probamos los algoritmos. Creo que sabes lo que quiero decir.

Hubo un tiempo en el que el EURGBP durante la noche era muy bueno (rentable). Su NS no lo habría reconocido. Los beneficios fueron tomados por aquellos que entendieron las razones de la inclinación nocturna. Y luego aplicaron algoritmos a estas piezas de la historia del EURGBP para encontrar la fecha en que se volvió repentinamente empinada. Para no estropear el estado con los datos que había antes de la inclinación. Empezaron a investigar. Y muchos ganaron buen dinero con ello - sólo hay que leer los foros.

Ahora imagina que el ORO/Plata es genial ahora. No existe tal par, pero se puede comerciar con él. Pero te has limitado a una sola BP. Y es lógico que se busquen interconexiones entre las diferentes BP. En este caso, pueden aparecer pares como ORO/Plata. Y los intervalos de la semana, el día o la noche, etc., también juegan un papel importante. El comportamiento de la gente depende de la hora del día y del día de la semana. Son datos conscientes, así que ahí es donde hay que escarbar, en mi opinión.

 
Anton Zverev:

Quieres encontrar correlaciones en un solo BP. Y quieres encontrar interrelaciones que deben estar presentes en todo momento en esa BP.

...

Primero nos damos cuenta nosotros mismos y luego probamos los algoritmos. Creo que sabes lo que quiero decir.

...

Pero te limitaste a una sola BP. Y es lógico que se busquen interconexiones entre las diferentes BP. En este caso, puedes conseguir estos "ORO/Plata". Además, los intervalos de la semana, el día o la noche, etc., también juegan un papel importante. El comportamiento de la gente depende de la hora del día y del día de la semana. Se trata de datos conscientes, por lo que hay que indagar en ellos, según mi opinión.

Hasta ahora, estamos tratando de encontrar la dependencia del "futuro" condicional del "pasado" en la misma línea de tiempo. Pero eso no significa que no vayamos a intentar hacerlo para una combinación de series.

Sobre el reconocimiento. Para las naranjas su razonamiento es aplicable. Incluso puede que un experto distinga varias variedades de naranja.

En el caso de la PA financiera, es necesario distinguir un patrón, es decir, el comportamiento monótono de la PA durante todo el intervalo de tiempo disponible. Sí, a veces parece que hay algo a la vista. Pero este conocimiento es muy vago, y los parámetros de dependencia no están definidos con precisión en absoluto. Aquí no se puede prescindir de la ayuda del ordenador. Aunque no estoy afirmando que no haya ninguna persona que pueda encontrar la adicción a ojo y codificarla.

Estoy de acuerdo con el Dr.Trader en tratar de reunir mucha basura y luego extraer de ella aportaciones valiosas. El valor de esas entradas se comprueba entrenando el modelo y validándolo. Si no es ruido, habrá un plus de validación. Ese es todo el curso del aprendizaje automático. )

He probado esas entradas en bruto:

> names(sampleA)

  [1] "lag_diff_2"        "lag_diff_3"        "lag_diff_4"        "lag_diff_6"        "lag_diff_8"        "lag_diff_11"       "lag_diff_16"     

  [8] "lag_diff_23"       "lag_diff_32"       "lag_diff_45"       "lag_diff_64"       "lag_diff_91"       "lag_diff_128"      "lag_diff_181"    

 [15] "lag_diff_256"      "lag_diff_362"      "lag_diff_512"      "lag_diff_724"      "lag_mean_diff_2"   "lag_mean_diff_3"   "lag_mean_diff_4" 

 [22] "lag_mean_diff_6"   "lag_mean_diff_8"   "lag_mean_diff_11"  "lag_mean_diff_16"  "lag_mean_diff_23"  "lag_mean_diff_32"  "lag_mean_diff_45"

 [29] "lag_mean_diff_64"  "lag_mean_diff_91"  "lag_mean_diff_128" "lag_mean_diff_181" "lag_mean_diff_256" "lag_mean_diff_362" "lag_mean_diff_512"

[36] "lag_mean_diff_724" "lag_max_diff_2"    "lag_max_diff_3"    "lag_max_diff_4"    "lag_max_diff_6"    "lag_max_diff_8"    "lag_max_diff_11" 

 [43] "lag_max_diff_16"   "lag_max_diff_23"   "lag_max_diff_32"   "lag_max_diff_45"   "lag_max_diff_64"   "lag_max_diff_91"   "lag_max_diff_128"

 [50] "lag_max_diff_181"  "lag_max_diff_256"  "lag_max_diff_362"  "lag_max_diff_512"  "lag_max_diff_724"  "lag_min_diff_2"    "lag_min_diff_3"  

 [57] "lag_min_diff_4"    "lag_min_diff_6"    "lag_min_diff_8"    "lag_min_diff_11"   "lag_min_diff_16"   "lag_min_diff_23"   "lag_min_diff_32" 

 [64] "lag_min_diff_45"   "lag_min_diff_64"   "lag_min_diff_91"   "lag_min_diff_128"  "lag_min_diff_181"  "lag_min_diff_256"  "lag_min_diff_362"

 [71] "lag_min_diff_512"  "lag_min_diff_724"  "lag_sd_2"          "lag_sd_3"          "lag_sd_4"          "lag_sd_6"          "lag_sd_8"        

 [78] "lag_sd_11"         "lag_sd_16"         "lag_sd_23"         "lag_sd_32"         "lag_sd_45"         "lag_sd_64"         "lag_sd_91"       

 [85] "lag_sd_128"        "lag_sd_181"        "lag_sd_256"        "lag_sd_362"        "lag_sd_512"        "lag_sd_724"        "lag_range_2"     

 [92] "lag_range_3"       "lag_range_4"       "lag_range_6"       "lag_range_8"       "lag_range_11"      "lag_range_16"      "lag_range_23"    

 [99] "lag_range_32"      "lag_range_45"      "lag_range_64"      "lag_range_91"      "lag_range_128"     "lag_range_181"     "lag_range_256"   

[106] "lag_range_362"     "lag_range_512"     "lag_range_724"     "symbol"            "month"             "day"               "week_day"        

[113] "hour"              "minute"            "future_lag_2"      "future_lag_3"      "future_lag_4"      "future_lag_6"      "future_lag_8"    

[120] "future_lag_11"     "future_lag_16"     "future_lag_23"     "future_lag_32"     "future_lag_45"     "future_lag_64"     "future_lag_91"   

[127] "future_lag_128"    "future_lag_181"    "future_lag_256"    "future_lag_362"    "future_lag_512"    "future_lag_724"

Hay tiempo y todo tipo de métricas para el movimiento de los precios. Entonces también los tamicé. Aquí, echa un vistazo a lo que tengo.

Esta es la parte del Asesor Experto que toma las señales de la máquina entrenada en R. Allí se muestran las entradas seleccionadas. Y en primer lugar, por cierto, es la hora en que se abre una operación. Es decir, ¡el tiempo es importante!

Esta es una prueba del Asesor Experto en toda la historia desde 1999.02 hasta 2016.06:

Está un poco torcido, pero la máquina sigue aprendiendo NO el ruido, sino las dependencias de las entradas indicadas.

Por lo tanto, estamos en el lado positivo. Al menos, mejoramos los resultados de los experimentos.

Archivos adjuntos: