L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 3048

 
Aleksey Vyazmikin #:

E il codice-script precedente, che è stato postato un po' prima, ha smesso di funzionare - funzionava prima degli aggiornamenti.

library(patchwork)

È stato installato?

 
Aleksey Vyazmikin #:

In generale aggiornato, anche l'errore non scrive, ma il risultato è lo stesso - tutto su quasi.

eseguito, ho ottenuto la stessa immagine))


Mi sono reso conto dell'errore, lì ho avuto una sbirciatina nel futuro nel bersaglio ... sì ... perdiamo la nostra presa.

Questa riga dovrebbe essere sostituita

dp <- с(diff(close),0)   

da

dp <- tail(c(diff(close),0),nrow(X))


Ho riscritto il codice in modo un po' più leggibile.

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)

funzioni helper

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)
}


 
Maxim Dmitrievsky #:

Ebbene, se non ci sono altri criteri di valutazione, allora attraverso la stabilità dei parametri

si possono anche rappresentare i valori di uscita del TS come segnali nel tempo, misurarne l'entropia e confrontarla con la casualità. Se il TS cattura alcune regolarità che si ripetono con una certa periodicità, si rifletterà.

Per i costruttori di FF personalizzati, potrebbe essere utile.

La misura migliore è il tempo e i test nella vita reale. Qualsiasi TC smetterà di funzionare.

Ho già capito perché non funziona con i nuovi dati e ho anche capito a grandi linee cosa fare.

 
Aleksey Nikolayev #:

La domanda su ONNX da ONNX è nata semplicemente dall'accostamento di due affermazioni che ho incontrato: 1) l'acquisizione del modello può essere rappresentata come una pipeline, 2) la pipeline può essere convertita in formato ONNX.

È chiaro che ciò è difficilmente realizzabile nella pratica. In effetti, vorrei capire cosa impedisce esattamente l'implementazione di una tale possibilità, per rendermi conto dei limiti fondamentali di questa tecnologia nel suo complesso.

Una cosa è se si tratta di limitazioni come l'impossibilità di scrivere su un file e un'altra è se si tratta di limitazioni come la mancanza di supporto per i tipi di dati (i dataframe, per esempio).

Entrambe le affermazioni sono vere. Ottenere un modello comprensivo di preelaborazione è possibile. Purtroppo non in tutti i framework e solo in quelli più semplici. TF/Keras implementa i primi livelli NN che eseguono la preelaborazione. scikit-learn ha la scelta più ricca di pipeline+modello. Si veda scl2onnx.

È bello vedere che i contributori seri si rendono conto che ONNX dovrebbe includere l'intera pipeline a partire dalla preelaborazione. I nuovi dati in produzione devono passare attraverso le stesse fasi di pre-elaborazione dell'addestramento. Altrimenti, i risultati del modello ONNX saranno imprevedibili.

Questa direzione si sta sviluppando rapidamente e credo che questo problema sarà presto risolto. Per ora è bene sperimentare.

Buona fortuna

 
I commenti non pertinenti a questo thread sono stati spostati in "Modo inaccettabile di comunicare".
 
mytarmailS #:

l'ho eseguito, ho ottenuto la stessa immagine ))


Mi sono reso conto del mio errore, ho dato una sbirciatina al futuro in quella di destinazione... già... ho perso il mio tocco.

Questa riga dovrebbe essere sostituita

a


riscrivere leggermente il codice per renderlo più leggibile

funzioni ausiliarie


Provando il codice modificato

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)
}

Ottengo un errore

> 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 #:

Provare il codice modificato

ottengo un errore

Perché le funzioni devono essere prima dichiarate e poi utilizzate...

Stai trollando o cosa?
 
mytarmailS #:
Perché le funzioni devono essere prima dichiarate e poi utilizzate...

Stai trollando o cosa?

Come facevo a saperlo...

Allora questo è l'errore

> D <- make_data(close)
Error in h(simpleError(msg, call)) : 
  ошибка при оценке аргумента '.data' при выборе метода для функции 'embed': argument ".data" is missing, with no default
 
Interessante articolo sulla RL. https://habr.com/ru/articles/349800/
Interessante anche la conversazione nel cometarium tra il creatore di questo thread e un altro membro.
 
mytarmailS #:
Interessante articolo sulla RL. h ttps:// habr.com/ru/articles/349800/
Anche un'interessante conversazione nel cometarium tra il creatore di questa discussione e un altro membro.

Il concetto di RL non è ridondante per i compiti di scambio? Abbiamo l'influenza dell'ambiente sull'agente, ma esiste un'influenza dell'agente sull'ambiente? Probabilmente è possibile introdurre artificialmente questa seconda influenza, ma ha senso?

Due (o tre) idee tratte dall'articolo non sono affatto superflue per noi: la funzione di perdita deve riflettere esattamente ciò di cui abbiamo bisogno e deve essere regolare (e monotona). Nel nostro caso, dovrebbe essere il profitto e dovrebbe dipendere in modo uniforme e monotono dai parametri del modello.

Probabilmente la scorrevolezza di qualche analogo del profitto può essere ottenuta in qualche modo (per esempio, con qualcosa come il kernel smoothing). Ma dubito fortemente della monotonicità.

Motivazione: