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

 
Vladimir Perervenko:


PS. Y paralelizar el cálculo de lm(). Este es el momento adecuado para hacerlo.

Gracias.

He visto cómo paralelizar una operación en un bucle mediante foreach %dopar%. No sé cómo engancharlo en un bucle oculto en DT. No sé si puede ser más rápido o no.

 
Alexey Burnakov:

Gracias.

He visto cómo paralelizar una operación en un bucle mediante foreach %dopar%. No sé cómo se puede unir a un bucle oculto en DT. Y no sé si sería más rápido.

Lo que quería decir era esta parte del código.

lm_models <-    x[,
{
        lapply(c(1:20), function(x) summary(lm(data = .SD[, c(1:x, 21), with = F],    formula = V21 ~ . -1))$'fstatistic'[[1]])
}
, by = sampling
]

Foreach() en lugar de lapply

 

Hay algo que no funciona en los gráficos que tardan varias decenas de segundos en construirse.

Echa un vistazo a este paquete ("nhstplot"). Es rápido de dibujar y creo que es bastante bueno.

> plotftest(f = 4, dfnum = 3, dfdenom = 5, title = "Fisher's F test")

 
Vladimir Perervenko:

Hay algo que no funciona en los gráficos que tardan varias decenas de segundos en construirse.

Echa un vistazo a este paquete ("nhstplot"). Es rápido de dibujar y creo que es bastante bueno.

> plotftest(f = 4, dfnum = 3, dfdenom = 5, title = "Fisher's F test")

Le echaré un vistazo. Pero ¿dónde está la semitransparencia aquí, dónde están los cientos de objetos superpuestos? Pruébalo en condiciones difíciles y entonces entenderemos si es más rápido o no.
 
Vladimir Perervenko:

Ahh. Lo probaré, gracias. Resulta que el bucle lapply será sustituido por un bucle paralelo. Y todo gira en un bucle DT con 1000 iteraciones.

O hay otra forma de saltarse estas 1000 iteraciones a través de foreach.

 
Alexey Burnakov:
Le echaré un vistazo, por supuesto. Pero ¿dónde está la semitransparencia aquí, dónde están los cientos de objetos superpuestos? Haz la prueba en condiciones difíciles y entonces entenderemos si es más rápido o no.

Con una tarjeta gráfica OpenGL se puede conseguir un dibujo rápido y semitransparente. En R hay una librería rgl para esto, es más para 3d, pero si puedes hacer proyección ortogonal, y dibujar líneas, será justo lo que necesitas. No lo pude averiguar de inmediato, hay que leer la documentación.

Lo tengo:

Es bastante fácil dibujar líneas semitransparentes, sólo necesitas una tabla con coordenadas X e Y. También se podría añadir una tercera columna Z para conseguir la tridimensionalidad.

library(rgl)
for(i in 1:1000){
    lines3d(cbind(1:1000, cumsum(rnorm(1000))), col="blue", alpha=0.1)
}

Pero de todos modos resultó ser lento. A juzgar por procesexplorer - el vídeo es utilizado por el 5% solamente, mientras que un procesador lógico es el 100%. Creo que R es demasiado lento en la alimentación de datos en OpenGL, mucho más lento de lo que puede recibir. De alguna manera salió así.

Sólo por desorden :) hazlo, maximiza la ventana a pantalla completa, y gira la "figura" con el botón izquierdo del ratón.

library(rgl)
for(i in 1:100){
    lines3d(cbind(cumsum(rnorm(100)), cumsum(rnorm(100)), cumsum(rnorm(100))), alpha=0.2)
}
 
Podrías hacer esto. Quita cien líneas al azar. Y las distribuciones estarían llenas. Sería mucho más rápido
 

Por fin he hecho el primer intento de la idea del cluster que anuncié antes, es una prueba, sólo para ver qué pasa, los predictores son simples

serie móvil de 5 valores OHLC + volumen + volatil 6 predictores de 5 valores cada uno

aprendizaje de la historia 100 000 bares

cada predictor se normalizó, por supuesto) y luego se agrupó en 100 clusters, perdón por la tontería

El objetivo fue creado de la nada (en este momento me acabo de sentar), simplemente tomé la inversión en esta forma: El objetivo es un extremo superior a las 4 velas anteriores y superior a las 10 velas siguientes.

Empecé a buscar patrones repetitivos...

Lo mejor que he encontrado con esos no predictores es el siguiente patrón

open high low close volum volat target_avg target_count
91      30  41    91    100   0.4        9

in(open high low close volum) son los números de grupos que caracterizan este patrón

target_avg - es la probabilidad de que mi inversión se active en este patrón. No pude encontrar ningún patrón con un 80-90% de probabilidad de activación según estos predictores

target_count - elnúmero de veces que el patrón fue capturado en el historial, no he encontrado ningún patrón significativo, que fuera capturado 30-50 veces usando estos predictores

Lo mejor que he encontrado con estos predictores es un patrón, en el que la inversión (objetivo) se activa el 40% de las veces y sólo hay 9 observaciones (número de patrones)

Así que es tal vez la única pieza de información útil, el requerido "NO BLOW", que puede ser extraído de este conjunto de predictores y explica sólo una razón para la inversión y aún eso es el 40% de ella y diferentes razones para diferentes inversiones y definitivamente no hay 10 o 30 de ellos imho.

Y ahora piensa en cómo el algoritmo MO puede explicar todos los movimientos del mercado con esos predictores, es imposible, porque los predictores sólo pueden explicar el 2% y el resto es ruido...

además, no hay control de la recurrencia estadística, es decir, la IR puede tomar una decisión basada en una o dos observaciones, y eso es cierto de hecho en la gran mayoría de los casos, por debajo del 95% de los casos

En fin, divago... vamos a seguir en un patrón, después de haber estimado la calidad de las entradas en una nueva muestra voy a decir así, que lejos no el Mercedes, pero si se trata de un Zaporozhets matado entonces este enfoque un nueve sólo de una fábrica

La calidad de las entradas es mucho mejor, más clara, menos errores...

y lo otro es que el patrón completo es...

open high low close volum volat
91   6    30  41    91    100

cuando ejecuté el reconocimiento en los nuevos datos de 50 000 velas el algoritmo no pudo encontrar ningún patrón de este tipo, simplemente no apareció ))

Tuve que recortar el patrón y dejar sólo los precios

open high low close volum volat
91   6    30  41    91    100

Ya he encontrado unos 20 de estos patrones

aquí están las entradas en el patrón, no he elegido nada "ala mejor de las entradas" acaba de tomar fotos como es en la secuencia en la que se hicieron las ofertas, no todas las ofertas, por supuesto, sólo los primeros, para que pueda evaluar

й

el eqiti es bonito, aunque el riesgo es mayor de lo previsto

к

recuerde, es sólo un patrón, y sólo pantalones cortos

Si alguien necesita el código, lo posteo, aunque lo dudo, ya está muy claro
 

214 páginas es mucho para estudiar/aprender. Cada uno de ellos trata de algo diferente y no siempre es fácil de entender).

¿Es posible resumir todas estas páginas en un solo post, aunque no sea muy corto? Tipo: objetivo fijado, métodos de solución, resultados, conclusiones.

Permítanme decir de entrada que mi modelo de mercado es un proceso aleatorio (movimiento browniano), o más bien la suma de varios (pueden ser muchos) de estos movimientos con retroalimentación. Y predecir algo o buscar patrones que no sean estadísticos es un ejercicio absolutamente inútil. Es decir, no existe ningún predictor significativo, al menos a efectos especulativos.

 
código, por supuesto. es interesante.