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

 
Alexander_K2:

¡Sí! Se me olvidó decirlo.

Los estados se consideran un conjunto de datos que caracterizan a una partícula casi por completo. Es decir, se trata de un conjunto de datos, sencillamente - volumen de muestra, con sus características - curtosis, asimetría, no entropía, etc.

Es decir, con la confianza de R.Feynman es posible afirmar, que habiendo definido correctamente el volumen de la muestra para el par concreto, habiendo calculado en la historia los valores medios característicos de estos coeficientes para esta muestra, es posible predecir, que teniendo en la actualidad el determinado conjunto de parámetros, en un determinado intervalo de tiempo, el sistema pasará a un estado con sus parámetros de estado estacionario.

Esto es lo que espero de este hilo. Si necesitas ayuda para determinar el tamaño adecuado de la muestra, escríbeme e intentaré ayudarte.

Supongamos que existe un proceso autorregresivo, es decir, que los estados presentes dependen de los estados pasados.

¿Cómo seleccionar correctamente una combinación de incrementos con diferentes rezagos para predecir el sistema? ¿Los rezagos deben ser constantes o variar con el tiempo y, en caso afirmativo, cómo determinarlo (salvo la enumeración banal)?

porque si existe tal combinación de incrementos que predice de forma robusta el objetivo, entonces no deberías tener ningún problema para entrenar a NS con ella.

 
Maxim Dmitrievsky:

entonces esta pregunta - digamos que hay un proceso de autoregresión, es decir, dependencia de los estados presentes de los pasados

¿Cómo seleccionar correctamente un conjunto de incrementos con diferentes retardos para predecir el sistema? ¿Los retardos deben ser constantes o cambiar con el tiempo, y si deben cambiar, cómo determinarlo (excepto una enumeración trivial)?

Hay un punto aquí que obviamente causa dificultades.

El conjunto de datos no es local en el tiempo.

Este es un punto crucial.

Es decir, si trabajamos con el tiempo, debemos entender que en un intervalo de tiempo estrictamente definido tratamos con un conjunto de datos diferente. Esta es la piedra angular del escollo. Al tratar de trabajar con la misma muestra de valores específicos, acabamos con una ventana "flotante" de observaciones a lo largo del tiempo.

Yo resuelvo este problema de dos maneras:

1. Trabajar exclusivamente con un conjunto concreto de ticks (volumen de muestra) - es el mismo para un par concreto de una vez por todas. Pero este conjunto se caracteriza por los diferentes tiempos de su formación, y no se pueden hacer previsiones.

2. trabajar exclusivamente con una ventana de tiempo constante. En este caso, por el contrario, tenemos un volumen flotante de muestreo de garrapatas en él. ¿Cómo evitar esta dificultad? La respuesta es introducir "pseudoestados", es decir, rellenar la cantidad de datos en la ventana de observación hasta el tamaño de muestra requerido. Lo hago forzando el trabajo en escala de tiempo exponencial. Es decir, leo los datos en una ventana de tiempo estrictamente definida a través del exponente y no es importante si fue un tick realmente llegado o no. En este caso es posible hacer previsiones . Lo único es que dudo que los intervalos exponenciales sean la solución adecuada. Feynman trabajó con intervalos uniformes.

Si se elige una vía, el problema de la predicción no se puede resolver en principio.

La vía 2 es solucionable, pero no existen esos archivos.

En esto estoy atascado y hasta ahora escribo estúpidamente mis propios archivos. No veo otra manera, por desgracia...

 
Alexander_K2:

2. trabajar exclusivamente con una ventana de tiempo permanente. En este caso, por el contrario, tenemos un volumen de muestra flotante en él. ¿Cómo podemos sortear esta dificultad? La respuesta es introducir los llamados "pseudoestados", es decir, elevar el número de datos en la ventana de observación hasta el tamaño de muestra requerido. Lo hago forzando el trabajo en escala de tiempo exponencial. Es decir, leo los datos en una ventana de tiempo estrictamente definida a través del exponente y no es importante si fue un tick realmente llegado o no. En este caso es posible hacer previsiones . Lo único es que dudo que los intervalos exponenciales sean la solución adecuada. Feynman trabajaba con intervalos uniformes.

De hecho, los intervalos exponenciales son exactamente la solución correcta al problema de la ventana constante, según tengo entendido (debería serlo). Digamos que la muestra de entrenamiento es de 1000 barras (ticks), lo que sea. Por supuesto, con una ventana deslizante los patrones cambian y el NS necesita ser reentrenado. Pero si nuestra muestra contiene una combinación de incrementos cuyo lag aumenta exponencialmente... me pregunto cuántos lags diferentes en total necesitaría el sistema no sólo para salir de la ventana (digamos, lag 1500), sino también para describir todos los estados posibles para la misma ventana, sólo que ahora deslizándose.

Quizá sea una tontería :D pero no es difícil intentarlo. Pero la cuestión es cuándo parar

 
Maxim Dmitrievsky:

En realidad son los intervalos exponenciales como solución al problema de la ventana constante, por lo que entiendo, es la solución correcta (debería serlo). Digamos que la muestra de entrenamiento es de 1000 barras (ticks), lo que sea. Por supuesto, con una ventana deslizante los patrones cambian y el NS necesita ser reentrenado. Pero si nuestra muestra contiene una combinación de incrementos cuyo lag aumenta exponencialmente... me pregunto cuántos lags diferentes en total necesitaría el sistema no sólo para salir de la ventana (digamos, lag 1500), sino también para describir todos los estados posibles para la misma ventana, sólo que ahora deslizándose.

Quizá sea una tontería :D pero no es difícil intentarlo. Pero la cuestión es cuándo parar.

Y hay que parar cuando el sistema pasa de un estado inestable a uno estable.

Por ejemplo, si en un momento dado vemos el aumento de la no entropía (se ha iniciado una tendencia), en un determinado intervalo de tiempo la no entropía volverá a su valor medio característico calculado a partir de la historia.

¿Cómo se determina este intervalo de tiempo de transición? Esa es la verdadera predicción, no hay que engañarse. Eso es lo que espero de las redes neuronales y leo este hilo :)

 
Alexander_K2:

Y es necesario parar cuando el sistema pasa de un estado inestable a uno estable.

Es decir, por ejemplo, si en un momento determinado del tiempo hemos visto un aumento de la no entropía (se ha iniciado una tendencia), al cabo de un determinado intervalo de tiempo la no entropía volverá a su valor medio característico calculado a partir de la historia.

¿Cómo se determina este intervalo de tiempo de transición? Esa es la verdadera predicción, no hay que engañarse. Eso es lo que espero de las redes neuronales y leer este hilo :)

Ah, el problema era bastante trivial - entrenar el modelo en incrementos exponenciales, y construir un gráfico de propagación entre los precios predichos y los actuales, ver cómo se distribuyen las desviaciones de la media (residuos)

lo haré la semana que viene :) sólo hay que sustituir la palabra inentropía por la palabra varianza

 
Maxim Dmitrievsky:

Ah, bueno, la tarea era bastante trivial - entrenar el modelo en incrementos exponenciales, y trazar el diferencial entre los precios predichos y los actuales, ver cómo se distribuyen las desviaciones de la media (residuos)

Lo haré la próxima semana :)

Lo espero con ansias, Maxim. En serio, estoy seguro de que se puede hacer. No te olvides de abrir la señal: seré el primero en apuntarme.

Sólo dos cosas pueden funcionar realmente en el mercado: las redes neuronales y los teóricos. Todo lo demás es basura, engaño y bolsillos vacíos como resultado.

 
Alexander_K2:

Lo espero con ansias, Maxim. En serio, estoy seguro de que se puede hacer. No te olvides de abrir la señal: seré el primero en apuntarme.

Sólo dos cosas pueden funcionar realmente en el mercado: las redes neuronales y un teórico. Todo lo demás es chatarra, chapuzas y bolsillos vacíos como resultado.

Te mostraré el bot como un ejemplo, puedes retocarlo después :D Lo haré como un indicador al principio para que quede claro

 

Siguiendo con esto -https://www.mql5.com/ru/forum/86386/page643#comment_6472393

Dr. Trader:

Encontré otro paquete interesante para filtrar predictores. Se llama FSelector. Ofrece una docena de métodos para cribar predictores, incluida la entropía.


La función para tamizar los predictores random.forest.importance() mostró resultados bastante buenos en algunas pruebas. Es un inconveniente que, en su opinión, todos los predictores sean al menos un poco importantes. pero si se calcula la importancia media, por ejemplo, y se toman sólo los predictores que son importantes por encima de la media, se obtienen muy buenos resultados.

library(FSelector)

load("ALL_cod.RData")
trainTable <- Rat_DF1
PREDICTOR_COLUMNS_SEQ <- 1:27
TARGET_COLUMN_ID      <- 29

targetFormula <- as.simple.formula(colnames(trainTable)[PREDICTOR_COLUMNS_SEQ], colnames(trainTable)[TARGET_COLUMN_ID])

rfImportance <- random.forest.importance(targetFormula, trainTable)
colnames(trainTable)[PREDICTOR_COLUMNS_SEQ][rfImportance[[1]] > mean(rfImportance[[1]])]
 
Dr. Trader:

Tomó sólo eurusd m1 para alrededor de enero de este año, y una ventana de deslizamiento de 1 día.

Lógicamente, si la entropía aumenta, hay que suspender la negociación, y seguir negociando con una entropía baja. Pero aquí tenemos una tendencia a baja entropía por alguna razón, aunque es más fácil operar en plano, es inusual.

(se ha corregido esta errata en el código adjunto, descárgalo de nuevo si ya has tenido tiempo de descargar el código antiguo)

No tiene sentido realizar pruebas yf la cotización inicial, porque a ojo está claro que la serie no es estacionaria.

Y son interesantes (no para mí - siempre lo uso) los gráficos para series temporales log(p/p-1).

¿Qué hay ahí? Y, por supuesto, se necesita una escala en el eje de ordenadas.

 
Dr. Trader:

He encontrado otro paquete interesante para cribar predictores. Se llama FSelector. Ofrece una docena de métodos para cribar predictores, incluida la entropía.


El paquete CORElearn también incluye un amplio e interesante conjunto de herramientas de ayuda.

En mis largos ejercicios sobre este tema no he encontrado nada mejor que las funciones de selección de predictores en caret, especialmente saf.

Pero nada de esto funcionará a menos que la preselección de los predictores se haga sobre la base de un "tiene que hacer" para la variable objetivo.

Permítanme repetirlo de nuevo con un ejemplo de dos clases:

  • parte del predictor debe estar relacionada con una clase y la otra parte con otra clase. La intersección de estas dos partes de los predictores es lo que da el error de clasificación, que no se puede superar.



PS.

Discutió los componentes principales y vio el defecto de que el algoritmo es sin maestro.

Aquí está con el profesor:

sgpls( x, y, K, eta, scale.x=TRUE,
        eps=1 e-5, denom.eps=1 e-20, zero.eps=1 e-5, maxstep=100,
        br=TRUE, ftype='iden' )
Arguments

x       Matrix of predictors.
y       Vector of class indices.
K       Number of hidden components.
eta     Thresholding parameter. eta should be between 0 and 1.
scale.x Scale predictors by dividing each predictor variable by its sample standard deviation?
eps     An effective zero for change in estimates. Default is 1 e-5.
denom.eps       An effective zero for denominators. Default is 1 e-20.
zero.eps        An effective zero for success probabilities. Default is 1 e-5.
maxstep Maximum number of Newton-Raphson iterations. Default is 100.
br      Apply Firth's bias reduction procedure?
ftype   Type of Firth's bias reduction procedure. Alternatives are "iden" (the approximated version) or "hat" (the original version). Default is "iden".

El paquete spls

Razón de la queja: