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

 
Dr.Trader:

Un pequeño añadido al post anterior. No, no hay deltas. Tendré que probarlo.

De todos modos, intenté buscar una correlación en sus datos. Es más probable que no que sí. Resulta que encontré algo en la mitad de las observaciones tomadas al azar del tren. Empezó a comprobar la otra mitad y no existe la misma correlación. Resulta que, o bien no existe en absoluto, o los datos están construidos de tal manera que no se pueden encontrar buenas dependencias en ellos.

Pero déjame intentarlo de nuevo. Voy a dar mi opinión.

Alexey

 

Sospecho que hay algo que falta en estos datos. Es como tu tarea en el primer post - si eliminas incluso una de esas 6 entradas de la muestra, el resultado se vuelve impredecible. El mercado de divisas depende claramente de su propio precio pasado, de la hora del día, etc. Y este "itd" es exactamente lo que falta en mis datos, y por lo tanto los modelos simplemente no pueden encontrar adecuadamente ninguna regularidad y describir la lógica. Aparentemente, Les no puede probar diferentes combinaciones como "restar lo alto de lo bajo" y tomar lo mejor de ellas, y esas cosas deben añadirse a la propia muestra. Actualmente estoy rehaciendo mi script que guarda los datos de forex en csv, añadir allí una gran cantidad de deltas, además de las distancias a los últimos tops de zigzag, de acuerdo con los consejos. Más adelante publicaré un nuevo archivo de datos para experimentar.

 
SanSanych Fomenko:

Se adjuntan varios artículos que supuestamente resuelven el problema de limpiar el conjunto original de predictores del ruido, y con mucha más calidad. Desgraciadamente no tengo tiempo de probarlo en este momento. ¿Quizás alguien lo pruebe y publique el resultado?

Pude repetir el proceso descrito. Según los resultados, mi conjunto de predictores describe el resultado con un 0,1% de confianza, o algo así... Hay mucha teoría más allá de mis conocimientos, no lo he entendido todo.

He añadido 3 archivos. Sólo tienes que cambiar la ruta del archivo csv allí y puedes ejecutarlo. El resultado requerido debe estar en la última columna del csv, todo lo demás son predictores. No normalice nada de antemano, alimente los datos tal y como son.

1) Regresión por componentes principales 01. Algo de código de la parte introductoria del artículo, me parece que le falta algo, porque tengo errores al ejecutar el código. Debería dar una puntuación a cada entrada, y dibujar un gráfico, aquí, por desgracia, no entiendo a qué y cómo aplicarlo.

2) Regresión por componentes principales 03. Regresión por componentes principales, Pt. 2: Métodos con conocimiento de Y. Me he saltado la primera parte, porque el artículo dice que la primera parte es otro algoritmo más débil.
El código está dividido en dos partes y deben ejecutarse una tras otra para ver el gráfico dibujado en R después de cada parte.

La primera ejecución - es necesario copiar y ejecutar todo desde el archivo hasta el comienzo del segundo paso (el comienzo del segundo paso está resaltado en negrita PASO 2). La consola R mostrará una tabla en la que cuanto más bajo sea el valor de la entrada, mejor será. Valor = 1 = basura. Más gráfico, ahí cuanto más larga sea la línea peor, similar a la tabla.

A continuación, tenemos que ejecutar el código del segundo paso. Al final habrá un gráfico, cuanto más larga sea la línea que se relaciona con la entrada, más fiable es (era viceversa en el paso 1). También hay una variable examplePruneSig en el código que se encarga de tamizar las entradas según el valor psig de la tabla del paso 1. Puede establecer el valor de la variable =1, si quiere ver el valor transformado de la plausibilidad de todas las entradas. Porque es posible que una entrada haya sido mal evaluada en el primer paso, pero que haya mejorado en el segundo. Se recomienda tomar algún valor de umbral o ejemploPruneSig = 1/número de_entradas, pero no hay instrucciones exactas.

El tercer paso es el análisis de componentes principales (prcomp) propiamente dicho. Esto es algo nuevo para mí de nuevo, pero la cuestión es que esta función intenta dar salida a muchos "componentes principales" (PC) (algo así como variables internas, de las que depende el resultado deseado). Cada una de estas variables internas depende de un conjunto diferente de datos de entrada. Entonces la tarea se reduce a encontrar el conjunto mínimo de tales PC que pueda determinar el resultado de forma fiable. Y la muestra resultante de predictores es en sí misma los predictores de aquellos PC que entran en ese conjunto mínimo.
El artículo en sí no resuelve este problema, sólo toma los 2 primeros PC y mira si tiene éxito o no. Pero puede que se me haya escapado algo, así que si entiendes de prcomp, mejor que lo leas tú.
Pero, al final del paso se dibujará un diagrama de los primeros 5 PCs, y las entradas utilizadas por ellos. Cuanto más larga sea la línea en el diagrama, más importante es la entrada.

Cuarta, quinta y sexta etapas: evaluación del resultado en los datos de entrenamiento y de prueba.


3) Regresión por componentes principales 04. Una función de otro paquete que hace lo mismo que en Regresión de Componentes Principales 03. Sin embargo, una ventaja es que tamiza el PC y deja un conjunto mínimo de los que pueden describir el resultado con un 95% de precisión.
Pero no hay ejemplos y gráficos adecuados, supongo que hay que usar algo de Regresión de Componentes Principales 03.


tl;dr:

1) Tamizar los valores ruidosos. Tomamos el archivo "Principal Components Regression 03", ejecutamos sólo el código hasta el segundo paso (sin incluir el segundo). R contendrá una tabla, sólo se tomarán las entradas con valor psig menor que el umbral. Un valor de "1" es ruido y aleatorio. "0" es bueno. Un umbral de (1/número de entradas) es incierto. Este método no ofrece ninguna garantía de que las entradas se hayan muestreado correctamente, sino que simplemente elimina los valores realmente aleatorios y ruidosos.

2) Un enfoque más complejo. Un astuto algoritmo crea unos Componentes Principales que pueden utilizarse para calcular el resultado. PC es un tipo de función que describe algún proceso interno que ocurre en el modelo que se está modelando. Y el resultado del propio modelo es un conjunto de PC's que interactúan. A continuación, tomamos un conjunto mínimo de PC's que describen el resultado con alta precisión, miramos las entradas utilizadas para estos PC's. El archivo "Principal Components Regression 04" nos permite obtener el conjunto mínimo de tales PCs, pero no está claro qué hacer con él más adelante, necesitamos sacar los predictores utilizados.

Aquí está el artículo en sí mismo de nuevo, y el código a él.

http://www.r-bloggers.com/principal-components-regression-pt-2-y-aware-methods/

https://github.com/WinVector/Examples/blob/master/PCR/YAwarePCA.Rmd


Principal Components Regression, Pt. 2: Y-Aware Methods | R-bloggers
Principal Components Regression, Pt. 2: Y-Aware Methods | R-bloggers
  • Nina Zumel
  • www.r-bloggers.com
In our previous note, we discussed some problems that can arise when using standard principal components analysis (specifically, principal components regression) to model the relationship between independent (x) and dependent (y) variables. In this note, we present some dimensionality reduction techniques that alleviate some of those problems...
Archivos adjuntos:
 
Dr.Trader:

Sospecho que hay algo que falta en estos datos. Es como tu tarea en el primer post - si eliminas incluso una de esas 6 entradas de la muestra, el resultado se vuelve impredecible. El mercado de divisas depende claramente de su propio precio pasado, de la hora del día, etc. Y este "itd" es exactamente lo que falta en mis datos, y por lo tanto los modelos simplemente no pueden encontrar adecuadamente ninguna regularidad y describir la lógica. Aparentemente, Les no puede probar diferentes combinaciones como "restar lo alto de lo bajo" y tomar lo mejor de ellas, y esas cosas deben añadirse a la propia muestra. Actualmente estoy rehaciendo mi script que guarda los datos de forex en csv, añadir allí una gran cantidad de deltas, además de las distancias a los últimos tops de zigzag, de acuerdo con los consejos. Más adelante publicaré un nuevo archivo de datos para los experimentos.

Intenté buscar un poco más. Y ha hecho una comprobación de validación. Pero la dependencia encontrada no se confirmó. En definitiva, creo que no hay suficiente información en los datos. Intenta ampliar la lista de entradas, sí.

Y aquí están mis datos de forex: https://drive.google.com/drive/folders/0B_Au3ANgcG7CYnhVNWxvbmFjd3c

dat_train_final es un archivo para el entrenamiento del modelo. Tiene el historial de 5 pares de divisas durante 10 años y todos mis pronósticos.

Many_samples - Necesito cargar en R. Se trata de una lista: en cada elemento hay una muestra de validación, y hay 49 en total. Cualquiera de ellos, o todos, pueden ser validados.

Meet Google Drive – One place for all your files
  • accounts.google.com
Google Drive is a free way to keep your files backed up and easy to reach from any phone, tablet, or computer. Start with 15GB of Google storage – free.
 

No puedo ver tus archivos, el enlace es sólo una carpeta vacía.

De todos modos aquí está mi nuevo archivo para el modelo de entrenamiento en eurusd (h1, 5 barras, el objetivo es la subida/bajada del precio para la siguiente barra). Lo analicé siguiendo el artículo mencionado anteriormente principal-components-regression-pt-2-y-aware-methods y resultó que los datos describen de forma fiable menos del 1% de los resultados.
(RData de SanSanych tiene este número más del 10% para Rat_DF1), así que parece que tengo basura de nuevo. Es poco probable entrenar el modelo en este archivo, es más adecuado si uno quiere entrenar para tamizar los predictores.

El archivo contiene 2 ficheros, la condición es entrenar el modelo en el primer fichero (es más conveniente dividirlo en varios trozos para test y validación, por defecto Rattle lo divide en 75%/15%/15%), luego, cuando se seleccionan las entradas y se entrena el modelo, hacer un test físico en el segundo fichero. Si el error es inferior al 45%, tiene la posibilidad de operar con dicho modelo en forex. Puede que no obtenga beneficios, pero puede obtener bonificaciones de los corredores por el número de operaciones y reembolsos. Si el error de clasificación en el segundo archivo es inferior al 40%, ya es una estrategia rentable.

Archivos adjuntos:
 
Dr.Trader:

2) Regresión por componentes principales, Pt. 2: Métodos con conciencia de Y. He omitido la primera parte porque el artículo dice que la primera parte es otro algoritmo más débil.

Según me pareció, tal vez me equivoque, pero la incertidumbre de su resultado se debe a que no entiende la esencia misma del método de componentes principales. Y la esencia es la siguiente.

A partir de los predictores existentes, cree nuevos predictores que tengan algunas propiedades útiles nuevas.

El resultado se presenta en una tabla, con PC1, PC2... en la cabecera, los nombres de las filas de la tabla son los nombres de sus predictores y en las columnas debajo de cada PC hay números - los coeficientes por los que necesita multiplicar su predictor inicial para formar el valor de PC. Es decir, para una barra determinada tomamos los valores de los predictores iniciales, los multiplicamos por los coeficientes y obtenemos el valor del PC, luego la barra siguiente y así sucesivamente. Como resultado, además de sus vectores iniciales, por ejemplo Ask, obtenemos un vector más

Todos los PC de la tabla están ordenados. La primera es la EM que más explica la variabilidad del conjunto original, la segunda es la EM que más explica la variabilidad de lo que queda de la primera EM. Por ejemplo, PC1 = 0,6, PC2 = 0,2, entonces en total PC1+PC2 explican el 0,8 de la variabilidad. Normalmente, para grandes conjuntos de predictores, 5-6 de estos mismos "componentes principales" son suficientes para explicar más del 95% de la variabilidad. Esto es así si la mayoría de los predictores son ruido y hay componentes "principales" reales entre ellos.

He descrito los clásicos "componentes principales". El artículo es interesante para nosotros porque, a diferencia del clásico, calcula la variabilidad con respecto a la variable objetivo. Los umbrales, por otra parte, son necesarios para elegir algo de un conjunto de predictores completamente desesperado. Esto no me parece relevante para nosotros. Es relevante, por ejemplo, para las estadísticas en sociología, donde es muy difícil recoger algo adicional. En nuestro caso, incluso un par de divisas puede utilizarse para construir un enorme número de predictores.

¿Quizás podrías hacer otra tirada (golpe) de estos componentes fundamentales?

PS.

1. No olvidemos que los componentes principales requieren una normalización previa de los datos brutos

2. Los componentes principales resultantes tienen la notable propiedad de ser independientes entre sí.

3. Los componentes principales se pueden predecir.

 

Ahora lo entiendo, gracias por la aclaración. Sólo me enteré de este modelo por el artículo. Pensaba que PC1 y PC2,3,4,... corresponden a conjuntos de predictores diferentes, no a coeficientes. Sí he visto la tabla de coeficientes, ahora he encontrado rápidamente dónde conseguir qué.

El código de PrincipalComponentRegression04.txt parece demasiado complicado. Además, parece que no hay definición de variabilidad conrespecto a la variable objetivo, volví a PrincipalComponentRegression03.txt del archivo que adjunté esta mañana.

Hay que hacer los 5 primeros pasos.

Siguiente,

> model$coefficients

(Intercepción) PC1 PC2

0.02075519 0.40407635 -0.42250678

El resultado de la ejecución debe ser intercept + coef1 * PC1 + coef2 * PC2 + ... + PC restante, si lo hay

Los valores de PC1, PC2. :

> proj

> proyecto

PC1 PC2

X_clean 0,00516309881 0,00477076325

X1_clean 0,00142866076 0,00149863842

X2_clean -0.00008292268 0.00001010802

.....

PC1 = X_clean * 0,00516309881 + X1_clean*0,00142866076 +.

Ahora es un misterio para mí si el postfijo "clean" es una referencia para tomar el valor original de las entradas, X, X1, X2,... antes de las normalizaciones y transformaciones, o no.

Más adelante, tomaré un ejemplo más sencillo y calcularé todos los valores manualmente para comparar si he acertado con las fórmulas o no. Sólo una suposición por ahora )

Pero luego resulta que este método no pretende eliminar predictores, sino que pretende entrenar un modelo que por sí mismo ignore el máximo número de predictores. Lo único que podemos hacer es calcular el coeficiente medio de cada predictor y excluir lo que esté por debajo del umbral.
Este modelo en sí es muy similar a neuroncu, pero sin función de activación y sin desplazamientos en las neuronas de la capa interna. Pero la esencia es la misma.

Un problema más: cuántos componentes del PC hay que llevar. Si obtengo menos del 95% de confianza tengo que volver al paso 3 y cambiar proj <extractProjection(2,princ) de dos a tres, luego realizar los pasos 3,4,5, calcular el error y si es menor del 95% volver al paso 3 y aumentar de nuevo el número de componentes.

Si tuviéramos acceso directo a R en MT5, tendríamos un modelo terminado y listo para operar. Entiendo que este modelo no sufre el problema del reentrenamiento, es muy bueno si lo es. Es decir, se alcanza el nivel de confianza del 10% y eso es bueno.

Casi todo está claro sobre el modelo. Sería muy bueno implementarlo en MT5, para implementar sólo la lógica de la toma de decisiones por coeficientes. No está claro cómo conectar R con MT5. Puedo exportar todos los datos de mt5 a csv y luego procesarlos en R, entrenar el modelo y escribir los coeficientes en otro csv. CSV con los coeficientes leídos del Asesor Experto. Y además será muy malo porque R tiene muchas funciones que normalizan los datos antes de calcular el PC a partir de ellos. Repetir este código para la normalización en MT5 es apenas posible. Tenemos que pensar.

 
Dr.Trader:

Ahora lo entiendo, gracias por la aclaración. Sólo me enteré de este modelo por el artículo. Pensaba que PC1 y PC2,3,4,... corresponden a conjuntos de predictores diferentes, no a coeficientes. Sí he visto la tabla de coeficientes, ahora he encontrado rápidamente dónde conseguir qué.

El código de PrincipalComponentRegression04.txt parece demasiado complicado. Además, parece que no hay definición de variabilidad conrespecto a la variable objetivo, volví a PrincipalComponentRegression03.txt del archivo que adjunté esta mañana.

Hay que hacer los 5 primeros pasos.

Siguiente,

(Intercepción) PC1 PC2

0.02075519 0.40407635 -0.42250678

El resultado de la ejecución debe ser intercept + coef1 * PC1 + coef2 * PC2 + ... + PC restante, si lo hay

Los valores de PC1, PC2. :

> proyecto

PC1 PC2

X_clean 0,00516309881 0,00477076325

X1_clean 0,00142866076 0,00149863842

X2_clean -0.00008292268 0.00001010802

.....

PC1 = X_clean * 0,00516309881 + X1_clean*0,00142866076 +.

Ahora es un misterio para mí si el postfijo "clean" es una referencia para tomar el valor original de las entradas, X, X1, X2,... antes de las normalizaciones y transformaciones, o no.

Más adelante, tomaré un ejemplo más sencillo y calcularé todos los valores manualmente para comparar si he acertado con las fórmulas o no. Sólo una suposición por ahora )

Pero luego resulta que este método no está pensado para filtrar predictores, sino para entrenar un modelo que ignore el máximo número de predictores. Lo único que podemos hacer es calcular el coeficiente medio de cada predictor y excluir todo lo que esté por debajo del umbral.
Este modelo en sí es muy similar a neuroncu, pero sin función de activación y sin desplazamientos en las neuronas de la capa interna. Pero la esencia es la misma.

Un problema más: cuántos componentes del PC hay que llevar. Si obtengo menos del 95% de confianza tengo que volver al paso 3 y cambiar proj <extractProjection(2,princ) de dos a tres, luego realizar los pasos 3,4,5, calcular el error y si es menor del 95% volver al paso 3 y aumentar de nuevo el número de componentes.

Si tuviéramos acceso directo a R en MT5, tendríamos un modelo terminado y listo para operar. Entiendo que este modelo no sufre el problema del reentrenamiento, es muy bueno si lo es. Es decir, obtuvimos la validez del 10% y ya está bien.

Casi todo está claro sobre el modelo. Sería muy bueno implementarlo en MT5, para implementar sólo la lógica de la toma de decisiones por coeficientes. No está claro cómo conectar R con MT5. Puedo exportar todos los datos de mt5 a csv y luego procesarlos en R, entrenar el modelo y escribir los coeficientes en otro csv. CSV con los coeficientes leídos del Asesor Experto. Y además será muy malo porque R tiene muchas funciones que normalizan los datos antes de calcular el PC a partir de ellos. Repetir este código para la normalización en MT5 es apenas posible. Tenemos que pensar.

Por lo que veo, Regresión de Componentes Principales, Pt. 2: Métodos con Y

Desde la visión superficial del texto, entiendo que el afán es que el escalado se base en la función objetivo. En el PCA normal, la función objetivo no se tiene en cuenta en absoluto. Por ello, se supone que los primeros componentes son los más importantes para explicar la función objetivo, ¡en lugar de explicar la variabilidad de todo el conjunto de predictores!


Otro problema es la cantidad de componentes del PC que hay que tomar

Esta es la razón de todo el alboroto. Intuitivamente, no hay umbrales. Si los 5 primeros componentes no explican más del 95% de la variabilidad, debemos buscar un nuevo conjunto de predictores. Aunque puede que me equivoque.

Sobre el modelo casi todo está claro. Sería muy bueno implementarlo en MT5.

Todo funciona bien en MT4. Existe una biblioteca Pascal con código fuente. No lo he probado, pero para mí si MT4 es capaz de apelar a la librería en pascal, entonces MT5 debería hacerlo también.

La apelación a R es así.

1. OnInit establece la conexión con R. Si hay datos especiales preparados, se carga el área de trabajo. Aparte de esto, se carga el código en R dispuesto en una o varias funciones. El número de cadenas en cada función es, por supuesto, arbitrario: lo determina la lógica.

2. El cuerpo del Asesor Experto o del indicador llama a estas funciones.

Si tenemos en cuenta que R tiene los gráficos más ricos no vinculados a la ventana del terminal, tenemos grandes oportunidades para visualizar los datos en paralelo al terminal.

 
SanSanych Fomenko:
Aquí estoy leyendo, .... y no puede entender cuál es la variable objetivo primero desde un punto de vista formal: un número real (regresión) o un valor nominal (clasificación). Además, si estamos discutiendo la medida en que los predictores influyen en la variable objetivo, es una buena idea conocer el significado sustantivo de esta misma variable objetivo.

Paradójicamente, la clasificación es lo mismo que la regresión.

Sólo en el caso de la regresión el resultado es real, mientras que en la clasificación es probabilístico.

Y el objetivo para la regresión es una curva continua, mientras que para la clasificación son impulsos (0, 1) o (-1,+1).

Esta salida se traduce en la clase apropiada (ifelse(y > 0,5, 1, 0).

 
Dr.Trader:

No puedo ver tus archivos, el enlace sólo muestra una carpeta vacía.


esto es formación: https://drive.google.com/file/d/0B_Au3ANgcG7CN2tTUHBkdEdpVEU/view?usp=sharing

esto es la validación: https: //drive.google.com/file/d/0B_Au3ANgcG7CZmFWclFOd0RqNFk/view?usp=sharing

la validación debe ser manejada así load(validation_file)

cada elemento de la lista contiene una muestra de validación única, con observaciones independientes. Las muestras de validación casi no se solapan, ya que las observaciones en ellas se toman de puntos temporales aleatorios. Cada muestra de validación puede tratarse como una estimación puntual del comercio.

Esto se hace para no simular que las operaciones se producen a cada minuto. Las operaciones se modelan aproximadamente cada 12 horas.

Razón de la queja: