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

 
Renat Fatkhullin:

R es un sistema increíble que personalmente me ha abierto los ojos sobre lo lejos que estábamos en MetaTrader/MQL de las necesidades reales de "hacer cálculos complejos de forma sencilla y en el momento".

Nosotros (los desarrolladores de C++) llevamos en la sangre el enfoque de "puedes hacerlo todo tú y nosotros te damos la base de bajo nivel y la velocidad de los cálculos". Somos fanáticos del rendimiento y somos buenos en ello - MQL5 es genial en 64 bits.

Cuando empecé a trabajar en R me di cuenta de que necesitaba tantas funciones potentes en una línea como fuera posible y poder investigar en general.

Así que hemos dado un giro brusco y hemos empezado a actualizar MetaTrader 5:

  • incluir las bibliotecas matemáticas Alglib y Fuzzy, previamente reescritas, en la entrega estándar, cubiertas con pruebas unitarias
  • desarrolló un análogo de las funciones estadísticas de R, realizó pruebas y las cubrió con tests. el trabajo sigue en curso y la biblioteca se está ampliando
  • desarrolló la primera versión beta de la biblioteca Graphics como un análogo de plot en R. añadió funciones de una sola línea para una salida rápida
  • empezaron a cambiar las interfaces de las ventanas de salida del terminal, para que pudiéramos operar con datos tabulares. Cambiaron la dirección de la salida, añadieron la desactivación de columnas innecesarias, cambiaron el tipo de letra a monoespacio en la ventana de salida del Asesor Experto
  • se ha añadido una potente función ArrayPrint para la impresión automática de matrices, incluidas las estructuras.
  • se han añadido las funciones FileLoad y FileSave para la carga/descarga rápida de matrices en disco.


Por supuesto, estamos al principio del camino, pero el vector correcto de los esfuerzos ya está claro.

¡Tu motivación es grande! Si es exactamente como usted dice, rápidamente morderá el ninja hasta el hueso c multichart))

Sin embargo, IMHO, aquí tenemos que crear algo radicalmente nuevo, es decir, además de lo que escribió, el Sr. Reshetov, se necesita sólo un estudio de investigación, para trabajar con conjuntos de datos arbitrarios, no sólo descargable desde el mercado, porque muchas cosas tienen que tratar muy trivial, ejemplos sintéticos para entender lo que sucede, bueno, usted debe entenderme como un programador programador)) Me gustaría dibujar diferentes gráficos, diagramas de dispersión, mapas de aciertos, distribuciones, etc. En general, sería genial que un conjunto de herramientas de este tipo estuviera disponible directamente desde el MetaEditor, pero, francamente, no tengo ninguna esperanza...

Pero en general, por supuesto, me gusta la tendencia de tus pensamientos))

 
Renat Fatkhullin:

Fue una respuesta educada, sin detalles ni verificación. Y la respuesta no coincidía con Wolfram Alpha y Matlab, lo que es un problema.

No hay necesidad de esquivar: la cuestión de fondo ha sido claramente expuesta.

¿Qué quieres decir con que su respuesta no coincide con la de Wolfram? ¿No coincidió en que la respuesta de la persona no era "cero"? El hombre respondió que no creía que en el punto cero, donde la integral = 0, la densidad tuviera que ser necesariamente cero (le planteé la pregunta así). Lo dijo explícitamente. Y añadió que el valor de la densidad en cualquier punto es irrelevante (leo "irrelevante" como irrelevante para la cuestión que nos ocupa). Esta es una afirmación matemática bastante clara.

En la cuestión que nos ocupa, las matemáticas son importantes.

Tenemos la integral de la función fulana (función de densidad de probabilidad de la distribución gamma). Todo el mundo está acostumbrado a que se le pueda dar a Wolfram una ecuación con parámetros: especifica el área de integración y los parámetros de la función, y la integrará y dará la respuesta. Pero ¿has pensado alguna vez que si tú mismo te sentases a calcular esta integral en un dominio dado, obtendrías 0 en el cero y 1 en todo el dominio, y algún valor [0,1] en alguna subárea. Simplemente resolviendo la ecuación.

El hecho de que el límite de la función de densidad de probabilidad de la distribución gamma se sitúe en algún lugar de la región positiva es una propiedad de dicha función. No tiene nada que ver con lo que se consigue al integrar esa función. Eso es lo que el hombre escribió.

No estoy esquivando las cuestiones de fondo. Voy a reiterar que nuestro punto ha sido confirmado por una persona fuera de nuestro control - lo que la densidad a cero es irrelevante (irrelevante).

 
Zhenya:

¡Tu motivación es grande! Si todo es exactamente como usted dice, rápidamente morderá hasta el hueso ninja c multichart))

Sin embargo, IMHO, aquí tenemos que crear algo radicalmente nuevo, es decir, además de lo que escribió el Sr. Reshetov , se necesita sólo un estudio de investigación, para trabajar con conjuntos de datos arbitrarios, no sólo descargable desde el mercado, porque muchas cosas tienen que tratar muy trivial, ejemplos sintéticos para entender lo que sucede, bueno, usted debe entenderme como un programador programador)) Tendría que dibujar diferentes gráficos, diagramas de dispersión, mapas de aciertos, distribuciones, etc. En general, sería genial que un conjunto de herramientas de este tipo estuviera disponible directamente desde el MetaEditor, pero, francamente, no tengo ninguna esperanza...

Pero en general, por supuesto, me gusta la tendencia de sus pensamientos)))

¿Se refiere a este "disparo" de Reshetov?

"Esta R es una especie de bicicleta podrida con ruedas cuadradas. ¿Qué decir de algunos de sus paquetes, cuando la base, es decir, el núcleo en R está torcido y necesita un serio ajuste con un "archivo de lápiz"? ¿Qué credibilidad pueden tener quienes ni siquiera se han molestado en comprobar la corrección de las funciones básicas en R durante tantos años? ¿Cuál puede ser la "fuerza" en la debilidad de R - la incorrección de los cálculos a través de ella?

Es bueno que MetaQuotes haya abierto los ojos de algunos usuarios al hecho y a las pruebas con el código abierto, para que cada uno pueda comprobarlo de forma independiente y asegurarse, en lugar de hacerlo sin fundamento. No todo el código abierto, por supuesto, porque algunos fanáticos religiosos de la secta destructiva de R seguirán creyendo ciegamente en la "infalibilidad" de los cálculos en su lenguaje y paquetes torcidos, en lugar de recurrir a las pruebas presentadas y a la doble comprobación independiente, en lugar de bichear, defendiendo lo torcido de R como "estándar generalmente aceptado".

Ahora es bastante obvio que sería mejor utilizar la funcionalidad MQL para crear estrategias de negociación, porque el resultado será más correcto, en lugar de tratar de hacerlo a través de la curva y la pendiente R.

Un agradecimiento especial a los desarrolladores de MetaQuotes por el enfoque constructivo, las pruebas y su código fuente, así como por identificar al "rey desnudo: R".

 
Vladimir Perervenko:

¿Es este el "disparo" al que se refiere Reshetov?

No, este es el mensaje:

Yury Reshetov:

R, al igual que muchos otros lenguajes, es mucho más conveniente para el aprendizaje automático que MQL porque tiene una funcionalidad inherente para procesar datos en matrices. La cuestión es que una muestra para el aprendizaje automático suele ser una matriz de datos bidimensional, por lo que necesita un funcional para trabajar con matrices:

  1. Inserción de filas y columnas como matrices de menor dimensión en otra matriz
  2. Sustitución de filas y columnas en una matriz como matrices de menor tamaño
  3. Eliminación de filas y columnas de una matriz (por ejemplo, para eliminar predictores sin importancia o ejemplos con "valores atípicos" evidentes de una muestra)
  4. Dividir matrices en partes, dando lugar a dos o más matrices que son partes de la matriz original (necesario para dividir una muestra en partes de entrenamiento y de prueba, o en más partes, por ejemplo, para Walling Forward).
  5. Barajar aleatoriamente filas y columnas en una matriz con una distribución uniforme (es necesario que ciertos ejemplos de una muestra caigan en diferentes partes, preferiblemente distribuidas uniformemente sobre estas partes).
  6. Varias funciones para el procesamiento de datos por fila o columna (por ejemplo, el cálculo de la media aritmética por fila o por columna, la varianza o la búsqueda del valor máximo o mínimo en una fila para su posterior normalización).
  7. Y así sucesivamente.

Hasta que MQL no haya implementado la mencionada funcionalidad necesaria para el manejo de muestras en arrays, la mayoría de los desarrolladores de algoritmos de aprendizaje automático preferirán otros lenguajes que ya tienen todo esto disponible. O utilizarán el MLP (algoritmo de los años 60) sin pretensiones de la biblioteca AlgLib, donde, si no recuerdo mal, por comodidad las matrices bidimensionales se representan como unidimensionales.

Por supuesto, las funciones para las densidades de las distribuciones aleatorias también son una funcionalidad necesaria. Pero estas funciones no siempre son necesarias en las tareas de aprendizaje automático, y en algunas tareas no se utilizan en absoluto. Pero las operaciones con muestras como matrices multidimensionales son lo que la implementación de los algoritmos de aprendizaje automático siempre necesita para cualquier tarea, a menos que, por supuesto, se trate de una tarea de enseñar a una red a aprender datos obviamente normalizados a partir de CWR triviales.

 
Vladimir Perervenko:

¿Es este el "disparo" al que se refiere Reshetov?

"Esta R está podrida: una bicicleta con ruedas cuadradas. ¿Qué decir de algunos de sus paquetes, cuando la base, es decir, el núcleo en R está torcido y necesita serias mejoras "con un archivo de lápiz"? ¿Qué credibilidad pueden tener quienes ni siquiera se han molestado en comprobar la corrección de las funciones básicas en R durante tantos años? ¿Cuál puede ser la "fuerza" en la debilidad de R - la incorrección de los cálculos a través de ella?

Es bueno que MetaQuotes haya abierto los ojos de algunos usuarios al hecho y a las pruebas con el código abierto, para que cada uno pueda comprobarlo de forma independiente y asegurarse, en lugar de hacerlo sin fundamento. No todo el código abierto, por supuesto, porque algunos fanáticos religiosos de la secta destructiva de R seguirán creyendo ciegamente en la "infalibilidad" de los cálculos en su lenguaje y paquetes torcidos, en lugar de recurrir a las pruebas presentadas y comprobarlas dos veces de forma independiente, en lugar de hacer fanáticamente gilipolleces, defendiendo lo torcido de R como "estándar generalmente aceptado".

Ahora es bastante obvio que sería mejor utilizar la funcionalidad MQL para crear estrategias de negociación, ya que el resultado será más correcto, en lugar de tratar de hacerlo a través de la curva y la pendiente R.

Un agradecimiento especial a los desarrolladores de MetaQuotes por su enfoque constructivo, sus pruebas y sus fuentes, así como por la identificación del "Rey Desnudo - R"! "

¿Ya has borrado tu post sobre el "minky MQL"? Estás frotando tus posts de la misma manera que los personajes radovianos frotan sus Facebooks tras la elección de Trump.

 

Aquí hay un ejemplo de una distribución gamma en Wolfram Alpha por diversión.

Se le da una función, una función de densidad de distribución gamma ligeramente simplificada.

El punto está en el denominador x. El límite de la derecha, como puedes ver, en x->0 Wolfram estima correctamente: inf.

Es decir, en el límite de la derecha la densidad en el cero está en el infinito (esto es exactamente la respuesta a dgamma).

Vamos a integrar esta función en el gran saport:

La integral es 1 (redondeada, por supuesto, porque no se toma toda la sapiencia).

Conclusión, a pesar de que la función va al infinito en el punto extremo, la integral de esta función cuenta bien como debería.

 
Alexey Burnakov:

Aquí hay un ejemplo de la distribución gamma en Wolfram Alpha, sólo por diversión.

La conclusión es que aunque la función llegue al infinito en el punto extremo, la integral de esa función cuenta bien como debería.

Gracias por el ejemplo, tienes razón. Esta integral es convergente.

El extremo en el punto x=0 también puede utilizarse para determinar la densidad y no dará lugar a divergencias.

 
Quantum:

Gracias por el ejemplo, tienes razón. Esa integral es convergente.

Los valores límite en x=0 también pueden utilizarse para determinar la densidad y esto no dará lugar a divergencias.


Gracias. Respeto.

 

Ejemplo de R con paquetes de procesamiento rápido.

library(data.table)

library(ggplot2)


start <- Sys.time()


set.seed(1)

dummy_coef <- 1:9


x <- as.data.table(matrix(rnorm(9000000, 0, 1), ncol = 9))

x[, (paste0('coef', c(1:9))):= lapply(1:9, function(x) rnorm(.N, x, 1))]


print(colMeans(x[, c(10:18), with = F]))


x[, output:= Reduce(`+`, Map(function(x, y) (x * y), .SD[, (1:9), with = FALSE], .SD[, (10:18), with = FALSE])), .SDcols = c(1:18)]


x[, sampling:= sample(1000, nrow(x), replace = T)]


lm_models <- x[, 

{

lm(data = .SD[, c(1:9, 19), with = F], formula = output ~ . -1)$coefficients

}, 

by = sampling]


lm_models[, coefs:= rep(1:9, times = 1000)]


avg_coefs <- lm_models[, mean(V1), by = coefs]

plot(dummy_coef, avg_coefs$V1)


lm_models[, 

  print(shapiro.test(V1)$p.value)

  , by = coefs]


ggplot(data = lm_models, aes(x = V1)) +

geom_histogram(binwidth = 0.05) +

facet_wrap(~ coefs, ncol = 3)


Sys.time() - start

Duración: 5 segundos. Se construyeron 1.000 modelos lineales. Cada uno sobre 1000 observaciones.

[1] 0.8908975

[1] 0.9146406

[1] 0.3111422

[1] 0.02741917

[1] 0.9824953

[1] 0.3194611

[1] 0.606778

[1] 0.08360257

[1] 0.4843107

Todos los coeficientes tienen una distribución normal.

Y ggplot-ic para la visualización.

 

Y otro ejemplo. También se relaciona con la rotación de muestras grandes para la simulación estadística.

########## simulate diffference between mean density with different sample size


library(data.table)

library(ggplot2)


rm(list=ls());gc()


start <- Sys.time()


x <- rnorm(10000000, 0, 1)

y <- rnorm(10000000, 0, 1)


dat <- as.data.table(cbind(x, y))

dat[, (paste0('sampling_', c(100, 1000, 10000))):= lapply(c(100, 1000, 10000), function(x) sample(x, nrow(dat), replace = T))]


dat_melted <- melt(dat, measure.vars = paste0('sampling_', c(100, 1000, 10000)))


critical_t <- dat_melted[, 

   {

    mean(x) - mean(y)

   }

   , by = .(variable, value)]


ggplot(critical_t, aes(x = V1, group = variable, fill = variable)) + 

stat_density(alpha = 0.5)


Sys.time() - start


gc()

Tiempo de ejecución 3,4 segundos.

Se crean muestras con distribución normal centradas en cero:

1.000 por 10.000 pares de valores

10 000 sobre 1 000 pares de valores

100.000 de 100 pares de valores

Se cuenta la diferencia entre las medias (MO == 0) de cada muestra.

Se derivan las densidades de las distribuciones de las medias muestrales para muestras de diferentes tamaños.

Sólo que aquí sampling_100 significa que se necesitan 10.000.000 / 100 para obtener el tamaño de la muestra. Es decir, para muestras más pequeñas, el error estándar es mayor...