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

 
Aleksey Vyazmikin #:

Una volta hai realizzato uno script che ho deciso di riutilizzare.

L'ho eseguito su un campione e dà un errore - non riesco a capire dove trovare l'errore e come risolverlo - forse tu lo sai, visto che usi queste librerie/pacchetti?

Tutto ha funzionato bene su un campione binario.

L'errore dice che nella matrice di correlazione sono comparsi valori non definiti (NA) e la funzione findCorrelation non può utilizzarli. Aprite il pacchetto e leggete la descrizione della funzione.

Gli script sono disordinati e un mare di risultati intermedi non necessari. di seguito lo script corretto

#=====================================================================
 require(tidyft)
#--get  df1------------------------------------------------------------
way <-         "D:\\FX\\MT5_CB\\MQL5\\Files\\Po_Vektoru_TP_0_SL_0\\EURUSD_0\\Setup"
df1 = read.csv(paste0(way, "train.csv"), header = TRUE, sep = ";",dec = ".")
#df1 = fread(paste0(way, "train1.csv"))
#fst::write_fst(df1, "train1.fst")
#-----archiv--------------------------------
 ft <- as_fst(df1) #
 rm(df1)


#---constanti--------------------------------------------
 cor.test.range <- seq(from = 0.1,to = 0.9,by = 0.1)  #  диапазон перебора в коеф корр
not.used.colums = c("Target_100_Buy","Target_100_Sell","Target_P","Time","Target_100")

ft %>% select_fst(cols = not.used.colums, negate = TRUE)-> dt
#--function--------------------------------------------
 get.findCor<- function(data , cor.coef = cor.test.range){
    import::here(.from = caret, findCor = findCorrelation)
    data %>%
        cor(method = "kendall", use = "pairwise" ) %>%
        findCor(cutoff = cor.coef, exact = FALSE, names = TRUE)->nms
        if(nms!= 0)
        select_dt(data, cols = nms, negate = TRUE)
}
#----Calculate--------------------------------------------------------------
for(i in seq_len(length(cor.test.range))){
    get.findCor(dt, cor.coef = cor.test.range[i])-> dt.n
    paste0("train2_" , cor.test.range[i]*10 , ".csv") %>%
        paste0(way , .) %>% fwrite(dt.n, .)
    rm(dt.n)
}

Spiegazioni in ordine:

1. Non è necessario caricare il pacchetto "caret" nell'ambito globale. È molto pesante e assorbe molte dipendenze e dati. È necessaria solo una funzione. Si importa direttamente nella funzione get.findCor.

Il pacchetto tidyft è un pacchetto di manipolazione dei dataframe molto veloce. Utilizzatelo.

 

Per controllo, ho eseguito un test sul mio kit utilizzando questo script. Risultato:

# patch <- "C:/RData/Project/FEDOT/"
# df1 <- fread(paste0(patch, "DF_train_M5.csv"))
# object.size(df1) #780184 bytes
# dim(df1) #[1] 4030   25
# ft <- as_fst(df1)#
# rm(df1)
#ft %>% select_fst(cols = c(1:3,25), negate = TRUE)-> dt
#dim(dt) [1] 4030   21
bench::workout({
    for(i in seq_len(length(cor.test.range))){
        get.findCor(dt, cor.coef = cor.test.range[i])-> dt.n
        paste0("train2_" , cor.test.range[i]*10 , ".csv") %>%
            paste0(patch , .) %>% fwrite(dt.n, .)
        rm(dt.n)
    }
})->t1 #(12.9  m)
setwd(patch)
dim(fread("train2_1.csv"))
#[1] 4030    3
dim(fread("train2_2.csv"))
#[1] 4030    6
dim(fread("train2_3.csv"))
#[1] 4030   10
dim(fread("train2_4.csv"))
#[1] 4030   13
dim(fread("train2_5.csv"))
#[1] 4030   16
dim(fread("train2_6.csv"))
#[1] 4030   17
dim(fread("train2_7.csv"))
#[1] 4030   18
dim(fread("train2_8.csv"))
#[1] 4030   18
dim(fread("train2_9.csv"))
#[1] 4030   18

Il conteggio è piuttosto lungo (12,9 minuti). Ma anche il frame non è piccolo. Ovviamente dobbiamo parallelizzarlo, cercando una funzione cor più veloce.

Dai 21 predittori iniziali con soglie diverse abbiamo selezionato un numero diverso di predittori.

Ma questa non è la strada da seguire.

Buona fortuna

 
СанСаныч Фоменко #:

Non avete prestato attenzione alla variabilità di sd

Presterò attenzione la prossima volta, conterò la sd dalla sd dalla sd dalla sd %)

 

Legare l'offset della finestra delle caratteristiche a un qualche indicatore (ad esempio std) non ha dato alcun risultato

più grande è il valore, più grande è l'offset multiplo di questo valore.

o viceversa. Ho provato entrambi.

Esiste anche una variante di espansione-riduzione (+ offset?), ma non l'ho ancora provata.

Vedo solo un'enumerazione di tali varianti nell'ambito dei frattali.

 
Vladimir Perervenko #:

1. Non è necessario caricare il pacchetto "caret" nell'ambito globale. È molto pesante, con molte dipendenze e dati. È necessaria solo una funzione. La si importa direttamente nella funzione get.findCor.

Wow, è vuoto

Vladimir Perervenko #:

Vladimir, sai se esiste un pacchetto per il backtest che tenga un log delle transazioni e tutto il resto (beh, non per essere primitivi), tranne che per i lenti "quantstrat" e "SIT".

 
Maxim Dmitrievsky #:

Legare l'offset della finestra delle caratteristiche a qualche indicatore (ad esempio, std) non ha prodotto alcun risultato

più grande è il valore, più grande è l'offset multiplo di questo valore.

o viceversa. Ho provato entrambi.

Esiste anche un'opzione di espansione-riduzione (+ offset?), ma non l'ho ancora provata.

Vedo solo un superamento di tali varianti nell'ambito dei frattali.

Assolutamente.

Tutto deve essere ricalcolato a ogni passo.

 
СанСаныч Фоменко #:

Assolutamente sì.

Tutto deve essere ricalcolato a ogni passo.

Trovo più facile ricalcolare le etichette e le caratteristiche su un set di dati di grandi dimensioni piuttosto che riqualificare ogni barra, perché rimarrei bloccato per molto tempo.

E con la riqualificazione frequente si determina un modello generale, se lo si guarda globalmente. A meno che non si tratti di un progetto di versamento, ovviamente.
 
Maxim Dmitrievsky #:

Per me è più facile esaminare i modi per ricalcolare le etichette rispetto ai chip su un set di dati di grandi dimensioni che riqualificare ogni barra, sarei bloccato per molto tempo.

Sono assolutamente d'accordo, questo è il motivo per cui non posso passare a EA.

Ma è una questione di principio. Sono passato allo schema "teach every step" a causa dei problemi nascosti che si presentano a causa della preparazione dell'intero dataset. Ho questo esatto problema e non sono riuscito a trovare predittori che generino l'effetto "looking ahead".

 
СанСаныч Фоменко #:

Totalmente d'accordo, questo è il motivo per cui non riesce a passare a EA.

Ma è un problema di principio. Sono passato allo schema "insegna ad ogni passo" a causa del problema del "peeking ahead" nascosto che si presenta a causa della preparazione dell'intero set di dati. Ho questo stesso problema e non sono riuscito a trovare predittori che generino l'effetto "guardare avanti".

Fate passare un po' di tempo tra la sezione di allenamento e il test. Almeno un paio di giorni. Le ultime barre hanno lo stesso futuro della prima incognita.
Il grafico Embargo è una sorta di chiamata.
Una volta l'allenamento si è ridotto a 1 giorno e il test a 1 giorno. E ha osservato le previsioni per il markup con qualche giorno di anticipo. Cioè ha visto quello che sarà per le nuove barre. I risultati sono stati molto buoni.
Con l'aumento dell'intervallo di allenamento fino a una settimana, il risultato è stato anche superiore a 50/50. Ebbene, più - peggio è, le linee con sbirciata sono state aggiunte alle linee senza sbirciata e hanno rovinato tutto ))))
.


In generale, questa trama di embargo non dovrebbe essere inferiore al peek-ahead per l'insegnante.

 
mytarmailS #:

Wow, è una cosa vuota

Vladimir, sai se esiste un pacchetto per il backtest che tenga un log delle transazioni e tutto il resto (beh, non per essere primitivi), tranne che per i lenti "quantstrat" e "SIT".

Non lo so. Non ho mai incontrato