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

 
elibrarius:

No creo que sea necesario contar el número de intercambios aquí. Sólo hay que restar el diferencial y la comisión de cada operación. Así es:

no es así, hay que contar de todos modos

 
Vladimir Perervenko:

Sí, el tuyo es más correcto.

No) ¡el tuyo es más correcto!

Porque el acuerdo que se abrió "antes" (la apertura no cayó en nuestro vector)

significa que la comisión se retiró "antes" pero no en el vector actual

pero estos son detalles menores...

 

para los que tienen 2 horas de tiempo


 
mytarmailS:

para los que tienen dos horas de tiempo.


¿De qué se trata?

 
mytarmailS:

para los que tienen 2 horas de tiempo


Atiborrando los cerebros de los jóvenes con sus fantasías esquizoides y sus falsas conclusiones.

 
mytarmailS:

No) ¡el tuyo es más correcto!

porque el acuerdo que se abrió "antes" (la apertura no cayó en nuestro vector)

significa que la comisión se retiró "antes" pero no en el vector actual

pero estos son detalles menores.

Estas son realmente nimiedades excepto por dos cosas. La primera es la velocidad de ejecución:

cnt<-function(x){
    n <- 1:(length(x)-1)
    cnt <- 0
    for(i in n) {if(x[i]!=x[i+1]) {cnt<-cnt+1}}
    return(cnt)
}
cnt1 <- function(x){
    length(rle(c(x))$values)
}

sig <- rep(c(1,1,1,-1,-1,-1), 3000)

bench::workout({
    c <- cnt(sig)
    c1 <- cnt1(sig)
})
# A tibble: 2 x 3
  exprs            process     real
  <bch:expr>      <bch:tm> <bch:tm>
1 c <- cnt(sig)     15.6 ms   9.21 ms
2 c1 <- cnt1(sig)        0   1.15 ms

El segundo es 15 veces más rápido. Y si se trata de una función de aptitud que se llama decenas de miles de veces, perderemos mucho tiempo.

Segundo punto. Todo está bien si tenemos dos condiciones Comprar/Vender/ Pero por regla general, el TS genera tres señales - Comprar/Vender/ Mantener (1, -1, 0). Y entonces la segunda opción no funciona. Y la primera variante con una ligera modificación

sig <- rep(c(1,1,1,-1,-1,-1,0,0,0), 3000)
> length(sig)
[1] 27000
cnt<-function(x){
    n <- 1:(length(x)-1)
    cnt <- 0
    for(i in n) {if(x[i] != x[i+1] & x[i+1] != 0) {cnt<-cnt+1}}
    return(cnt)
}
bench::workout({
    op <- cnt(sig)
    op1 <- cnt1(sig)
})
# A tibble: 2 x 3
  exprs             process     real
  <bch:expr>       <bch:tm> <bch:tm>
1 op <- cnt(sig)     31.2 ms  17.43 ms
2 op1 <- cnt1(sig)        0   3.23 ms
> op
[1] 5999
> op1
[1] 9000

La primera variante mostrará el resultado correcto (aunque lento), y la segunda considerará la salida de la posición como un acuerdo, lo cual es incorrecto.

 
Vladimir Perervenko:

Estas son realmente pequeñas cosas si no se tienen en cuenta dos cosas. La primera es la velocidad de ejecución:

Estoy completamente de acuerdo...

¿Existe alguna forma de entrenar redes o bosques con función de aptitud?
 
mytarmailS:

Estoy completamente de acuerdo...

¿Hay alguna forma de entrenar una red o andamio con una función de aptitud?

La función de aptitud calcula el valor del criterio de optim ización durante el proceso de optimización. No tiene nada que ver con la formación de modelos.

[Eliminado]  

tenemos que cambiar la multiclase catbust en el metaq para añadir "no trading"

la gama de estrategias aumentará

 

He añadido una nueva función de cálculo de saldo y comisión a la función de aptitud...

Creo que el algoritmo intenta ahora minimizar el número de operaciones para ahorrar comisiones... como resultado, menos oficios dan lugar a menos experiencia...

Aquí están los gráficos, se puede ver claramente que cuando hay pocas operaciones, el aprendizaje no funciona...

gris es TRAIN 1500 pips

el negro es el TEST 500 puntos

Este tuvo pocas operaciones, el algo no aprendió nada, es de muy baja frecuencia...


Es divertido conocer los puntos de entrada con 2 días de antelación ))

Pero probablemente sea mejor volver a entrenar todo el tiempo, no sé cómo probarlo todo todavía