Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 2802

 
Aleksey Vyazmikin #:

Uma vez você criou um script que decidi usar novamente.

Não consigo entender onde encontrar o erro e como corrigi-lo. Talvez você saiba, já que usa essas bibliotecas/pacotes?

Tudo funcionou bem em uma amostra binária.

O erro diz que valores indefinidos (NA) apareceram na matriz de correlação e a função findCorrelation não pode usá-la. Abra o pacote e leia a descrição da função.

Os scripts são confusos e um mar de resultados intermediários desnecessários. Abaixo está o script corrigido

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

Explicações em ordem:

1. Não é necessário carregar o pacote "caret" no escopo global. Ele é muito pesado, puxando muitas dependências e dados. Você só precisa de uma função dele. Você a importa diretamente para a função get.findCor.

O pacote tidyft é um pacote de manipulação de dataframe muito rápido. Use-o.

 

Para controle, testei no meu kit usando esse script. Resultado:

# 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

Ele conta por um tempo bastante longo (12,9 min). Mas o quadro também não é pequeno. É claro que precisamos paralelizá-lo e procurar uma função cor mais rápida.

Dos 21 preditores iniciais com diferentes limites, selecionamos diferentes números de preditores.

Mas esse não é o caminho a seguir.

Boa sorte

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

Você não prestou atenção à variabilidade do sd

Vou prestar atenção da próxima vez, vou contar o sd do sd do sd do sd do sd %)

 

A vinculação do deslocamento da janela de recursos a algum indicador (por exemplo, std) não produziu nada

quanto maior o valor, maior o múltiplo do deslocamento desse valor.

ou vice-versa. Tentei os dois.

Há também uma variante de expansão e estreitamento (+ deslocamento?), mas ainda não tentei.

Só consigo ver uma enumeração dessas variantes dentro da estrutura dos fractais.

 
Vladimir Perervenko #:

1. Não é necessário carregar o pacote "caret" no escopo global. Ele é muito pesado, puxando muitas dependências e dados. Você só precisa de uma função dele. Você a importa diretamente para a função get.findCor.

Uau, é oco

Vladimir Perervenko #:

Vladimir, você sabe se existe um pacote para backtest que mantém um registro de transações e tudo mais (bem, não é para ser primitivo), exceto para os lentos "quantstrat" e "SIT"?

 
Maxim Dmitrievsky #:

A vinculação do deslocamento da janela de recursos a algum indicador (por exemplo, std) não produziu nada

quanto maior o valor, maior o múltiplo do deslocamento desse valor.

ou vice-versa. Tentei os dois.

Há também uma opção de expansão e estreitamento (+ deslocamento?), mas ainda não tentei.

Só consigo ver uma superação de tais variantes dentro da estrutura de fractais

Com certeza.

Tudo precisa ser recalculado a cada etapa.

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

Com certeza.

Tudo precisa ser recalculado em cada etapa.

Acho mais fácil percorrer as formas de recalcular rótulos e recursos em um grande conjunto de dados do que treinar novamente cada barra, pois ficarei preso por muito tempo.

E, com o retreinamento frequente, você determina algum padrão geral, se o observar globalmente. A menos que esse design esteja sendo usado, é claro.
 
Maxim Dmitrievsky #:

Para mim, é mais fácil analisar maneiras de recalcular rótulos versus chips em um grande conjunto de dados do que treinar novamente cada barra, pois eu ficaria preso por muito tempo

Concordo plenamente, esse é o motivo pelo qual não posso mudar para o EA.

Mas é uma questão de princípio. Mudei para o esquema "ensinar a cada etapa" por causa do olhar oculto à frente, que surge devido à preparação de todo o conjunto de dados. Tenho exatamente esse problema e não consegui encontrar preditores que gerem o efeito de "olhar para frente".

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

Concordo plenamente, esse é o motivo pelo qual ele não vai para a EA.

Mas é uma questão de princípio. Mudei para o esquema de "ensinar em cada etapa" por causa do fato de que a observação oculta à frente surge devido à preparação de todo o conjunto de dados. Tenho exatamente esse problema e não consegui encontrar preditores que gerem o efeito de "olhar para frente".

Faça um intervalo entre a seção de treinamento e o teste. Pelo menos dois dias. As últimas barras têm o mesmo futuro que a primeira incógnita.
O gráfico Embargo é mais ou menos assim chamado.
Uma vez que o treinamento foi reduzido para 1 dia e o teste para 1 dia. E observou a previsão da marcação com alguns dias de antecedência. Ou seja, ele viu o que acontecerá com as novas barras. Os resultados foram muito bons.
Com o aumento do intervalo de treinamento para até uma semana, o resultado também foi superior a 50/50. Bem, quanto mais - pior, as linhas com marcação foram adicionadas às linhas sem marcação e estragaram tudo))))
.


Em geral, esse gráfico de embargo não deve ser menos do que um "peek-ahead" para o professor.

 
mytarmailS #:

Uau, isso é uma coisa oca

Vladimir, você sabe se existe um pacote para backtest que mantém um registro das transações e tudo mais (bem, não para ser primitivo), exceto para os lentos "quantstrat" e "SIT".

Eu não sei. Não conheço

Razão: