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

 
Maxim Dmitrievsky #:

Pues bien, si no hay otros criterios de evaluación, a través de la estabilidad de los parámetros

también se pueden representar los valores de salida de la ST como señales en el tiempo y medir su entropía y compararla con la aleatoriedad. Si la ST capta algunas regularidades que se repiten con cierta periodicidad, se reflejará.

Para los constructores de FFs a medida, puede ser útil.

La mejor medida es el tiempo y las pruebas en la vida real. Cualquier TC dejará de funcionar.

Ya he entendido por qué no funciona con datos nuevos, e incluso entiendo a grandes rasgos lo que hay que hacer.

 
Aleksey Nikolayev #:

La pregunta sobre ONNX a partir de ONNX surgió simplemente de la yuxtaposición de dos afirmaciones que he encontrado: 1) la adquisición de modelos puede representarse como un pipeline, 2) el pipeline puede convertirse a formato ONNX.

Está claro que esto es difícilmente posible en la práctica. De hecho, me gustaría entender qué es exactamente lo que impide la aplicación de tal posibilidad, para darme cuenta de las limitaciones fundamentales de esta tecnología en su conjunto.

Una cosa son limitaciones como la imposibilidad de escribir en un fichero y otra la falta de soporte para tipos de datos (dataframes, por ejemplo).

Ambas afirmaciones son ciertas. Obtener un modelo incluyendo el preprocesamiento es posible. Desafortunadamente no en todos los frameworks y sólo en los más simples. TF/Keras implementan las primeras capas NN realizando preprocesamiento. scikit-learn tiene la opción más rica de pipeline+model. Ver scl2onnx.

Es bueno ver que los colaboradores serios se dan cuenta de que ONNX debe incluir todo el pipeline empezando por el preprocesamiento. Los nuevos datos en producción deben pasar por los mismos pasos de preprocesamiento que en el entrenamiento. De lo contrario, los resultados del modelo ONNX serán impredecibles.

Esta dirección se está desarrollando rápidamente y creo que este problema se resolverá pronto. Por ahora es mejor que experimentes.

Suerte

 
Los comentarios no relevantes para este hilo se han movido a "Forma inaceptable de comunicarse".
 
mytarmailS #:

lo corrí, obtuve la misma imagen ))


Me di cuenta de mi error, tuve un vistazo al futuro en el objetivo ... sip ... perdiendo mi toque.

Esta línea debe ser reemplazado

a


reescribir ligeramente el código para que sea más legible

funciones auxiliares


Probando el código modificado

close <- cumsum(rnorm(10000,sd = 0.00001))+100
par(mar=c(2,2,2,2))  ; plot(close,t="l")


D <- make_data(close)
tr <- 1:500
R <- make_rules(y = D$Y[tr] , x = D$X[tr,])
#  head(R)
buy_rules <- R$condition[ R$pred==1 ]



plot(x = 1:2000,y = rep(NA,2000), ylim = c(-0.001,0.001)) 
for(i in 1:length(buy_rules)){
  cum_profit <- cumsum( D$diff_price[  eval(str2expression(buy_rules[i]))  ] )
  lines(cum_profit,col=8,lwd=1)}
for(i in 1:length(buy_rules)){
  cum_profit <- cumsum( D$diff_price[  eval(str2expression(buy_rules[i]))  ] )
  
  if(length(cum_profit)>30){
    ccor <- cor(cum_profit, 1:length(cum_profit))
    if(ccor>=0.95)  lines(cum_profit,col=i,lwd=2)
  }
}
abline(h = 0,col=2,lty=2)
gc(T,T)

make_rules <- function(y, x){
  library(inTrees)  # ?inTrees::getRuleMetric()
  library(RRF)
  rf <- RRF(x = x,y = y,ntree=100)
  rule <- getRuleMetric(unique(extractRules(RF2List(rf),x)),x,y)
  rule <- data.frame(rule,stringsAsFactors = F)
  for(i in c(1,2,3,5)) rule[,i] <- as.numeric(rule[,i])
  return(rule)}
make_data <- function(close){
  sw <- embed(x = close,dimension = 10)[,10:1] #  make slide window data
  X <- t(apply(sw,1,scale)) #  normalase data
  
  dp <- tail(c(diff(close),0),nrow(X)) #  diff prices
  Y <- as.factor( ifelse(dp>=0,1,-1) ) #  target for classification
  res <- list(Y=Y,X=X,diff_price=dp)
  return(res)
}

Obtengo un error

> D <- make_data(close)
Error in make_data(close) : could not find function "make_data"
> source('~/.active-rstudio-document', echo=TRUE)

> close <- cumsum(rnorm(10000,sd = 0.00001))+100

> par(mar=c(2,2,2,2))  ; plot(close,t="l")

> D <- make_data(close)
Error in make_data(close) : could not find function "make_data"
> source('~/.active-rstudio-document', echo=TRUE)

> close <- cumsum(rnorm(10000,sd = 0.00001))+100

> par(mar=c(2,2,2,2))  ; plot(close,t="l")

> D <- make_data(close)
Error in make_data(close) : could not find function "make_data"
> 
 
Aleksey Vyazmikin #:

Probando el código modificado

Obtengo un error

Porque las funciones deben ser declaradas primero y luego usadas...

¿Es usted trolling o qué?
 
mytarmailS #:
Porque primero hay que declarar las funciones y luego utilizarlas...

¿Estás trolleando o algo así?

Cómo iba a saberlo...

Entonces este es el error

> D <- make_data(close)
Error in h(simpleError(msg, call)) : 
  ошибка при оценке аргумента '.data' при выборе метода для функции 'embed': argument ".data" is missing, with no default
 
Interesante artículo sobre RL. https://habr.com/ru/articles/349800/
También una interesante conversación en el cometario entre el creador de ESTE hilo y otro miembro.
 
mytarmailS #:
Interesante artículo sobre RL. h ttps:// habr.com/ru/articles/349800/
También una interesante conversación en el cometario entre el creador de ESTE hilo y otro miembro.

¿No es redundante el concepto de RL para las tareas comerciales? Tenemos la influencia del entorno sobre el agente, pero ¿existe una influencia del agente sobre el entorno? Probablemente sea posible introducir esta segunda influencia artificialmente, pero ¿tiene sentido?

Dos (o tres) ideas del artículo no son en absoluto superfluas para nosotros: la función de pérdida debe reflejar exactamente lo que necesitamos y debe ser suave (y monótona). En nuestro caso, debe ser el beneficio y debe depender suave y monótonamente de los parámetros del modelo.

La suavidad de algún análogo del beneficio, probablemente, puede lograrse de alguna manera (por ejemplo, mediante algo como el suavizado del núcleo). Pero dudo mucho de la monotonicidad.

 
Aleksey Nikolayev #:

¿No es redundante el concepto de RL para las tareas comerciales? Tenemos la influencia del entorno sobre el agente, pero ¿existe una influencia del agente sobre el entorno? Es posible introducir esta segunda influencia artificialmente, pero ¿tiene sentido?

Dos (o tres) ideas del artículo no son en absoluto superfluas para nosotros: la función de pérdida debe reflejar exactamente lo que necesitamos y debe ser suave (y monótona). En nuestro caso, debe ser el beneficio y debe depender suave y monótonamente de los parámetros del modelo.

La suavidad de algún análogo del beneficio, probablemente, puede lograrse de alguna manera (por ejemplo, mediante algo como el suavizado del núcleo). Pero dudo mucho de la monotonicidad.

La base del resultado financiero de la negociación es el movimiento de los precios, un proceso aleatorio no estacionario.

¿Estamos intentando convertir un proceso aleatorio no estacionario en uno suave y monótono mediante algunos trucos? ¿Quizá estemos andando con pies de plomo? Sobre todo si tenemos en cuenta que un error de clasificación inferior al 20%(!) fuera del conjunto de entrenamiento es extremadamente difícil de conseguir. ¿Quizá deberíamos empezar por trabajar en la reducción del error de clasificación?

 

Lea el artículo.

¿De qué nos sirve este artículo?

Es completamente dudoso.

Y la razón es la siguiente.

No recuerdo ninguna publicación sobre IA (MO) que prediga el futuro. Enseñan a un modelo a escribir letras manuscritas. Luego intentan reconocer estas letras manuscritas. Pero al modelo PRINCIPALMENTE no se le enseña a predecir qué letra se escribirá a continuación.

Ese es el problema que tenemos.

Estamos intentando utilizar el MO (el mismo trabajo que hicimos con las combinaciones de velas) para encontrar algunos patrones en los predictores que den la predicción correcta. Pero no hay garantía de que los patrones encontrados den predicciones correctas en el futuro. Los patrones "correctos" darán un error y los patrones "incorrectos" predecirán lo correcto. La razón está en los propios algoritmos de clasificación, que dan la VERACIDAD de una clase, no su valor. Utilizamos la regularización más primitiva de 0,5 para dividir en clases. Y si durante el entrenamiento la probabilidad de un patrón "correcto" = 0,5000001, ¿por qué tomamos esta probabilidad como valor de la clase?

Para salir de dudas, nos ponemos a cultivar un huerto, ¡pero los valores de los predictores, entre los que buscamos patrones, NO son estacionarios o pseudoestacionarios, y tienen una relación remota con el precio!