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

 
mytarmailS:

en el marco de una conversación personal

su opción

versión simple

como puede ver los valores son bastante diferentes, puede comprobarlo usted mismo


En mi modelo.

por lo tanto, sólo una columna, pero no importa realmente.

===================UPD

Hombre, son diferentes cada vez que se ejecuta umap_tranform, no debería ser

No estaba prestando atención. Ha pasado mucho tiempo...

 
mytarmailS:

en el marco de una conversación personal

su opción

versión simple

como puede ver los valores son bastante diferentes, puede comprobarlo usted mismo


En mi modelo.

por lo tanto, sólo una columna, pero no importa realmente.

===================UPD

Hombre, son diferentes cada vez que se ejecuta umap_tranform, no debería ser así

Por lo general, la semilla (del RNG incorporado) se establece en algún valor para la repetibilidad. Si no, se utiliza el azar. Este paquete también puede tener un Seed - compruébalo.
 
elibrarius:
Por lo general, para la repetibilidad se ajusta la Semilla (del HSS incorporado) a algún valor. Si no, se utiliza el azar. Tal vez este paquete también tenga Seed - compruébalo.

Creo que sí, pero la cuestión es que sin RMS debería ser siempre la misma, en el paquete analógico "umap" el resultado es siempre el mismo

 
Aleksey Vyazmikin:

para ti, con la única esperanza de que aprendas el r-ku)

install.packages("TTR","uwot")

clos <- d$X.CLOSE.

get.ind <- function(x,n=5){
  
  all_to.all_colums <- function(x,names){
    cb <- combn(ncol(x),2)
    res <- matrix(ncol = 0,nrow = nrow(x))
    for(i in 1:ncol(cb)){
      j1 <- cb[1,i]
      j2 <- cb[2,i]
      
      res <- cbind(res,   x[,j1] - x[,j2]  )
      colnames(res) <- paste0(names, 1:ncol(res))
    }
    return(res)}
  
  library(TTR)
  aroon  <- aroon(x,n)
  BBands <- BBands(x,n)            ;   BBands <- all_to.all_colums( BBands, names = "BBands")
  CCI    <- CCI(x,n)
  CMO    <- CMO(x,n)
  DEMA   <- diff(c(0,DEMA(x,n)))
  Donchian <- DonchianChannel(x,n) ;   Donchian <- all_to.all_colums( Donchian, names = "Donchian")
  MACD   <- MACD(x,n)
  moment <- momentum(x,n)
  PBands <- PBands(x,n)            ;   PBands <- all_to.all_colums( PBands, names = "PBands")
  RSI    <- RSI(x,n)
  SAR    <- diff(c(0,SAR(cbind(x,x,n))))   
  SMA    <- diff(c(0,SMA(x,n)))
  stoch  <- stoch(x,n)
  TDI    <- TDI(x,n)
  VHF    <- VHF(x,n)
  WPR    <- WPR(x,n)
  
  ind <- cbind.data.frame(aroon,BBands,CCI,CMO,DEMA,Donchian,
                          MACD,moment,PBands,
                          RSI,SAR,SMA,stoch,TDI,VHF,WPR)
  return(ind)
}
get.target <- function(x, change){
  zz <- TTR::ZigZag(x,change = change,percent = F)
  zz <- c(diff(zz),0) ; zz[zz>=0] <- 1 ; zz[zz<0] <- -1
  return(zz)
}

X <- get.ind(clos)
Y <- as.factor(get.target(clos,change = 0.001))


library(uwot)

train.idx <- 100:8000
test.idx <- 8001:10000

UM <- umap(X = X[train.idx,],
           y = Y[train.idx], 
            approx_pow = TRUE, 
            n_components = 3, 
            ret_model = TRUE,
            n_threads = 4 L, 
            scale = T)

predict.train <- umap_transform(X = X[train.idx,], 
                                model = UM, n_threads = 4 L, 
                                verbose = TRUE)

predict.test <- umap_transform(X = X[test.idx,], 
                                model = UM, n_threads = 4 L, 
                                verbose = TRUE)



library(car)

scatter3d(x = predict.train[,1], 
          y = predict.train[,2], 
          z = predict.train[,3],
          groups = Y[train.idx],
          grid = F, 
          surface = F,
          ellipsoid = F,
          bg.col = "black",surface.col = c(2,3))

hay dos funciones

get.ind

и

get.target

el primero crea un conjunto de indicadores de fecha, el segundo el objetivo del zigzag

todo lo que necesitas hacer es cargar los datos con un precio de cierre de 10k y escribirlo en la variable clos

y obtener su umap con el objetivo


https://github.com/jlmelville/uwot
 
mytarmailS:

para ti, con la única esperanza de que aprendas el p)

hay dos funciones

и

el primero crea un conjunto de indicadores de fecha, el segundo crea un objetivo de zigzag

todo lo que necesitas hacer es cargar los datos con un precio de cierre de 10k y escribirlo en la variable clos

y obtener su umap con el objetivo


https://github.com/jlmelville/uwot

Encantado de conocerte, ¡gracias!

Me gustaría que hubiera más comentarios :)

La cuestión es cómo sincronizar los predictores del archivo con el objetivo resultante.

 
Aleksey Vyazmikin:

Encantado de conocerte, ¡gracias!

Me gustaría que hubiera más comentarios :)

La cuestión es cómo sincronizar los predictores del archivo con el objetivo.

Bueno, como el objetivo se construye usando el precio, ya está sincronizado, y si los predictores se construyen usando la misma escena, significa que también lo están)

O no entiendo la pregunta.


Intenté nombrar las variables para que fueran comprensibles sin comentarios

 

Una pregunta de un empollón.


Hay tres variables A, B, C. Se escribe a mano algún tipo de condición de ellos. Por ejemplo.

(A > B) && (A - B < C) && (A + 3 * C > 2 * B)


Quiero reproducir esta condición automáticamente. No necesito encontrarlo, porque ya lo sé. Pero necesito tener, por ejemplo, docenas de coeficientes de peso cuya combinación pueda alcanzar esta condición con alta probabilidad, cuando establezco A, B, C allí (polinomio o HC - no lo sé, porque sé cero) y obtener la condición original.


Me interesa saber qué tipo y cuántas ponderaciones de entrada tiene la función requerida, para que esas condiciones originales puedan ser reproducidas a través de las ponderaciones...

 

Así que, cómo se formaron los árboles en racimos, te lo cuento y te lo muestro.

Obtenemos el siguiente modelo de reconocimiento de clases

El historial tiene una precisión bastante exacta de 0,9196756, es decir, la lógica del grupo es bastante reproducible.

Luego entrené un modelo para cada grupo

Grupo 1

Grupo 2

Grupo 3

Grupo 4

Todas las agrupaciones tienen una precisión de 0,53 aproximadamente.

Y este es el aspecto del modelo sin dividir en grupos

La precisión de 0,5293815 es casi la misma que la de los grupos.

Si comparamos los modelos para los clusters y un modelo de árbol con toda la muestra, vemos que los árboles de clusters tienen más hojas con información generalizada de la muestra con el objetivo 1 y -1, lo cual es teóricamente bueno.

Veamos qué muestran las pruebas: primero veamos el periodo de formación

Modelo sin partición de clústeres:

Modelo con partición en clusters:

Vemos que la precisión es mejor con el modelo sin clustering, pero comercia más con el modelo en clusters, lo que permite un mejor rendimiento financiero.

Ahora veamos la muestra fuera de la formación.

Y aquí están nuestros grupos:

Y el modelo sin racimos:

La situación aquí parece ser la inversa: muchas operaciones tuvieron un efecto perjudicial cuando el mercado empezó a convulsionarse a partir de abril.

Decidí mirar las hojas de los modelos de cluster individualmente, si no hubiera habido cluster, en un histograma descendente:


Un total de 6 hojas no rentables (cero objetivo eliminado - es una prohibición de entrada), resulta que no estamos en el grupo correcto?

 
mytarmailS:

Bueno, como el objetivo se basa en el precio, ya está sincronizado, y si los predictores se basan en la misma escena, también)

O no entiendo la pregunta.


Intenté nombrar las variables para que fueran comprensibles sin comentarios

¿Cómo tomar un conjunto de datos con predictores y precio de cierre y cargarlo con la especificación de una columna con precio de cierre en lugar de utilizar la variante de generación de indicadores en R?

Según entiendo, como el objetivo es ZZ tops, entonces hay que filtrar parte de la muestra con predictores, aquí, y entonces para alimentar los predictores hay que filtrar también la tabla con predictores, ¿o qué?

 
fxsaber:

Una pregunta de un empollón.


Hay tres variables A, B, C. Se escribe a mano algún tipo de condición de ellos. Por ejemplo.


Quiero reproducir esta condición automáticamente. No necesito encontrarlo, porque ya lo sé. Pero necesito tener, por ejemplo, docenas de coeficientes de peso cuya combinación pueda alcanzar esta condición con alta probabilidad, cuando establezco A, B, C allí (polinomio o HC - no lo sé, porque sé cero) y obtener la condición original.


Me interesa saber qué tipo y cuántas ponderaciones de entrada tiene la función requerida, para que esas condiciones originales puedan ser reproducidas a través de las ponderaciones...

alternativamente

(A > B) && (A - B < C) && (A + 3 * C > 2 * B)

La entrada de NS son los valores A,B,C n veces (digamos, 1000), la salida son respuestas de su fórmula para estos valores como 0;1. Pruébalo. Y ver el error de clasificación y lo bien que el modelo reproduce la condición.

si quieres ver exactamente qué tipo e interpretarlo, puedes hacerlo a través de los árboles.

Variante 2 (si la primera no funcionó bien) - A, B, A-B, C, A+3*C, 2B - variables, todas las mismas que en la primera variante para poner en el árbol. Y puedes ver su estructura como en las fotos de Alexey de arriba