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

 
Maxim Dmitrievsky:
Bene, si possono prendere incrementi di 5-15 e sarà buono come

Mat aspettativa oltre i 30 punti solo su incrementi, dove possiamo osservarlo? Allenarsi sul campione 2014-2018 e lavorare nel 2020 - dov'è questo negli incrementi?

Maxim Dmitrievsky:
Oppure eliminare tutti i predittori per correlazione prima (secondi di tempo) e poi prendere i rimanenti 5-15 (se si ottiene che molti da forza)

Ecco come l'econometria fa risparmiare tempo.

Vuoi provare a fare meglio di quello che hai? Vi darò un campione - non è grande.

 
Maxim Dmitrievsky:

Ho pensato alle strategie di morte...

E se prevedessi le caratteristiche del mercato per un lungo periodo in avanti? Poi ricostruire una serie con le caratteristiche previste e imparare da essa, e poi negoziare il mercato con questo modello... hai provato a pensare in questa direzione?


Per esempio per prevedere lo spettro del mercato...

Come "non possiamo conoscere il futuro, ma possiamo immaginarlo".
 
Aleksey Vyazmikin:

Così, ho fatto la fase uno della mia ricerca

Quanta potenza è andata in....

 
mytarmailS:

Quanta energia è andata in....

È un regalo a tutti gli scettici.

 
Maxim Dmitrievsky:

O setacciare tutti i predittori per correlazione prima (secondi di tempo) e poi prendere i rimanenti 5-15 (se si può ottenere così tanti)

Ma controllerò la tua idea - non è difficile per me. Quindi quale coefficiente di correlazione dovrei prendere? E come selezionare 5-15 tra i predittori rimanenti - scrivere specificamente - forse come misurarli lì e sistemarli?

 
mytarmailS:

Quanta potenza è andata via....

Invece di contare i soldi degli altri, potresti darmi un suggerimento su R?

Ecco uno script che dovrebbe calcolare la correlazione e rimuovere le colonne correlate.

library('caret')

df1 = read.csv("F:\\FX\\Открытие Брокер_Demo\\MQL5\\Files\\Proboy_236_TP_4_SL_4\\Si\\Setup\\train.csv", header = TRUE, sep = ";",dec = ".")

df1 <- df1[, ! colnames(df1)  %in% 
           c("Target_100_Buy",
             "Target_100_Sell",
             "Target_P",
             "Time",
             "Target_100")  ] # удаляем не нужные колонки
print (df1)
df2 = cor(df1)
hc = findCorrelation(df2, cutoff=0.3) # putt any value as a "cutoff" 
hc = sort(hc)
reduced_Data = df1[,-c(hc)]
print (reduced_Data)
write.table(reduced_Data, file = "F:\\FX\\Открытие Брокер_Demo\\MQL5\\Files\\Proboy_236_TP_4_SL_4\\Si\\Setup\\outfile_03.csv",
            append = FALSE, quote = FALSE, sep=";",
            eol = "\n", na = "NA", dec = ".", row.names = FALSE,
            col.names = TRUE, qmethod = c("escape", "double"),
            fileEncoding = "")

E ci sono due domande:

1. Come fare l'esecuzione di questo codice in un ciclo for, cioè ho bisogno di aumentare il coefficiente e cambiare il nome del file per salvare con l'indice del coefficiente, o in un'altra directory generata nel ciclo.

2. Sto rimuovendo le colonne ausiliarie per il calcolo, come faccio a copiarle nella tabella che appare (df2) dopo aver rimosso le colonne correlate.

Grazie per la vostra risposta.

 
Aleksey Vyazmikin:

Invece di contare i soldi degli altri, potresti darmi qualche consiglio su R?

Ho fatto uno script che dovrebbe calcolare la correlazione e rimuovere le colonne correlate.

E ci sono due domande:

1. Come faccio a far eseguire questo codice in un ciclo for, cioè ho bisogno di aumentare il coefficiente e cambiare il nome del file da salvare con l'indice del coefficiente, o in un'altra directory generata nel ciclo.

2. Sto rimuovendo le colonne ausiliarie per il calcolo, come faccio a copiarle nella tabella che appare (df2) dopo aver rimosso le colonne correlate.

Grazie per la vostra risposta.

risposta alla domanda (2)

library('caret')
#df1 загруженная дата
df1 <- as.data.frame(matrix(nrow = 100,ncol = 10,data = sample(1:10,1000,replace = T)))
# head(df1)

not <- c("V1","V2","V3") #  имена переменных которые нам НЕ нужны для корреляции

df2 <-  cor(     df1[, ! colnames(df1)  %in%  not]      )  
# head(df2)

not.need <- findCorrelation(df2, cutoff=0.1) # putt any value as a "cutoff" 
not.need.nms <- colnames(df2[,not.need])  # получаем имена переменных что не прошли коррел тест
# head(not.need.nms)

# получаем изначальную  df1 только без признаков что не прошли отбор
reduced_Data <- df1[, ! colnames(df1)  %in%  not.need.nms]
# head(reduced_Data)


ora puoi scrivere una funzione che faccia la stessa cosa ma in modo più ordinato

get.findCorrelation <- function(data , not.used.colums , cor.coef){
library('caret')
df2 <-  cor(     data[, ! colnames(data)  %in%  not.used.colums])  
not.need <- findCorrelation(df2, cutoff=cor.coef) 
not.need.nms <- colnames(df2[,not.need])  # получаем имена переменных что не прошли коррел тест
reduced_Data <- data[, ! colnames(data)  %in%  not.need.nms]
return(reduced_Data)}

gf <- get.findCorrelation(data = df1 , 
                          not.used.colums = c("V1","V2","V3"),
                          cor.coef = 0.1)

un file è alimentato all'ingresso

data = df1
specificare le colonne che non saranno utilizzate per l'analisi Corel

not.used.colums = c("V1","V2","V3")

bene, e sintonizzando korel dalla funzione findCorrelation

cor.coef = 0.1
l'output è df1 ma senza caratteristiche spazzatura
 

Ora la risposta alla prima domanda

way <- "F:\\FX\\Открытие Брокер_Demo\\MQL5\\Files\\Proboy_236_TP_4_SL_4\\Si\\Setup\\"

cor.test.range <- seq(from = 0.1,to = 0.7,by = 0.1)  #  диапазон перебора в коеф корр

for(i in 1:length(cor.test.range)){
  
  reduced_Data <- get.findCorrelation(data = df1 , 
                      not.used.colums = c("V1","V2","V3"),
                      cor.coef = cor.test.range[i] )
  
  file.name <- paste0("test.with.cor_" , cor.test.range[i] , ".csv")
  final.way <- paste0(way , file.name)
  
  
  write.csv2(x = reduced_Data,file = final.way,row.names = F)  #  возможно это лучше
  
  #  write.table(reduced_Data, file = final.way,
  #              append = FALSE, quote = FALSE, sep=";",
  #              eol = "\n", na = "NA", dec = ".", row.names = FALSE,
  #              col.names = TRUE, qmethod = c("escape", "double"),
  #              fileEncoding = "")
}
 
Aleksey Vyazmikin:

Ho poi fatto un allenamento a tabella quantica a sintonia fissa su un campione di treno - 60% test - 20% esame - 20% con

Non ti sembra che tu stia sintonizzando il tuo modello sul campione di prova di maggior successo?
Io stesso ho colpito alcune volte delle trame di prova di successo e ho pensato - ecco il Graal))). E dopo aver spostato i siti in avanti o indietro per alcuni mesi - tutto è diventato chiaro e il modello era sbagliato e i predittori erano sbagliati, e ho perso soldi su quei siti.

Sono passato completamente all'analisi dei modelli sulla valutazione incrociata o sulla valutazione a termine. Al massimo ho visto il 50%.
Doc ha menzionato anche la convalida incrociata in uno dei suoi ultimi post.

 
YURY_PROFIT:

Maxim, il programmatore con cui ho combattuto qui, ha un machine learning Expert Advisor su backtest - solo fuoco, su test in avanti è durato anche per un mese e mezzo con statistiche decentemente profittevoli, ora si sta scaricando senza nemmeno mettere in pausa))

YURY_PROFIT:

Vi prego di fornirmi un esempio di EA di apprendimento automatico che ha lavorato in profitto sul mercato reale per almeno 3 mesi senza riqualificazione

Allora qual è il problema della riqualificazione continua? Cos'è questa condizione di vuoto"senza riqualificazione"? Se lavoro un giorno sul forex, è già un graal, e posso riqualificarmi ad ogni tick, è una questione di tecnica.