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

 
elibrario:
Spero che questo non sia stato compilato manualmente? Era in qualche modo a cicli? Manualmente, ci sarebbero volute ore...


In un ciclo, sì.

N_INPUTS <- 10

outputfile <- "rnn_10.mq5"

cat("double RNN(\n",paste(" double p",1:N_INPUTS, sep="", collapse = ",\n"),"){\n", sep="", file = outputfile)
cat("   double probability = \n", file = outputfile, append = TRUE)
i <- 0
while(i < 2^N_INPUTS){
  binary <- tail(rev(as.integer(intToBits(i))), N_INPUTS)
  cat("      ", file = outputfile, append = TRUE)
  for(j in 1:N_INPUTS){
    cat("(", file = outputfile, append = TRUE)
    if(binary[j] == 0){
      cat("1.0 - ", file = outputfile, append = TRUE)
    }
    cat("p",j,") * ", sep="", file = outputfile, append = TRUE)
  }
  cat("x", i, sep="", file = outputfile, append = TRUE)
  if(i!=(2^N_INPUTS-1)){
    cat(" +", file = outputfile, append = TRUE)
  }else{
    cat(";", file = outputfile, append = TRUE)
  }
  cat("\n", file = outputfile, append = TRUE)
  i <- i+1
}
cat("\n    probability=probability/100.0;\n", file = outputfile, append = TRUE)
cat("\n    return(probability);\n", file = outputfile, append = TRUE)
cat("}", file = outputfile, append = TRUE)
 
Un po' fuori tema, ma è possibile eseguire java su una GPU????
 
Mihail Marchukajtes:
Un po' fuori tema e comunque, è possibile eseguire java su GPU????

Vorrei fare una domanda più ampia, chi è in grado di riscrivere tutto su mql5 su GPU :)
 
Maxim Dmitrievsky:

Vorrei fare una domanda più ampia, chi è in grado di riscrivere tutto su mql5 su GPU :)

Proprio nel processo di riscrittura qualcosa può sfuggire o fare errori, altrimenti avrei bisogno di eseguirlo su GPU, almeno, e poi qualche co-processore potrebbe essere allegato. O combinare la potenza del processore tramite la rete Internet. Quindi, il compito non è banale. Aumentare il numero di core a circa 20-30 e costruire il modello.... solo ....
 
Mihail Marchukajtes:

Proprio nel processo di riscrittura si può perdere qualcosa o fare errori, altrimenti bisogna eseguirlo su una GPU, almeno, e lì si può già attaccare qualche co-processore. O combinare la potenza del processore tramite la rete Internet. Quindi, il compito non è banale. Aumentare il numero di core a circa 20-30 e costruire il modello.... solo ....


Il problema è che prima o poi vorrete comunque una libreria di questo tipo per la MT, dato che aprirà più possibilità come l'auto-training, meno confusione, meno mal di testa. O almeno come dll.

E per questo in Java puoi semplicemente affittare un server multi-core per un'ora e fare tutto ciò di cui hai bisogno, perché l'assegnazione ai thread è già implementata lì... quindi se ne vale la pena, lavoro extra

Personalmente, anche se non lo riscriverei, contribuirei con dei soldi per questo (per la versione mql5).

 
Maxim Dmitrievsky:


Il problema è che prima o poi vorrete comunque una libreria di questo tipo per la MT, dato che aprirà più possibilità come l'auto-formazione, meno confusione, meno mal di testa. O almeno come dll.

E per questo su java puoi semplicemente affittare un server multi-core per un'ora e fare tutto ciò di cui hai bisogno, perché le distribuzioni di thread sono già implementate lì... quindi, ne vale la pena, lavoro extra


Una volta ho considerato l'opzione del noleggio per questo caso, ma le mie mani non sono mai arrivate a farlo, ma vedremo....
 
Maxim Dmitrievsky:

Reshetov:

VS foresta decisionale a due classi e regressione logistica:

Reshetov vince questo con una valanga di voti.

Una specie di fanclub di Reshetov... (ride per l'amor di Dio)) Dovresti anche prendere un punto ciascuno per comprare e vendere e 1000 gettoni...

A dire il vero, è un montaggio pulito. Per un tale passo di campionamento, i campioni di formazione sono necessari non per 3 mesi ma per 5 anni minimo, 3 mesi anche per l'ultra-HFT non sono sufficienti quando si hanno un milione di punti al giorno. E non c'è bisogno di reinventare la ruota, il semplice XGB con il giusto set di caratteristiche dà un risultato quasi ottimale.

 
Aliosha:

Una specie di fanclub di Reshetov... (ride per l'amor di Dio)) Dovresti anche prendere un punto ciascuno per la compravendita e 1000 caratteristiche...

A dire il vero, è un montaggio pulito. Per un tale passo di campionamento, i campioni di formazione sono necessari non per 3 mesi ma per 5 anni minimo, 3 mesi anche per l'ultra-HFT non sono sufficienti quando si hanno un milione di punti al giorno. E non c'è bisogno di reinventare la ruota, il banale XGB con il giusto set di caratteristiche dà risultati quasi ottimali.


Nah, non siamo fan, stiamo solo cercando l'optimum ) Per 3 mesi per xft è più che sufficiente. Cos'è il banale XGB? solo i bayesiani ingenui lo sanno :)

Anche se si adattano, anche altri modelli non possono farlo, non importa come li ho filati

 
Ildottor Trader:

È meglio definire l'importanza dei predittori come segue

library(vtreat)

sourceTable <- read.table("BuySell.csv", sep=";", header = TRUE, stringsAsFactors = FALSE)

#Эта  строка кода относится только к конкретно этому файлу.
 этом csv первая колонка и первая строка специально заполнены для конкретной модели, и тут не нужны. Удалить.
#для  обычных csv файлов такую команду выполнять не нужно.
sourceTable <- sourceTable[-1,-1]

#число колонок
sourceTable_ncol <- ncol(sourceTable)

#Оценка  для классификации, только для двух классов.
#Outcometarget  должен быть равен значению одного из классов.
#На  выбор или эта функция designTreatmentsC, или designTreatmentsN, или designTreatmentsZ (ниже, закоменчены)
#Взаимная  корреляция предкиторов учитывается только в designTreatmentsC, и у повторяющихся или похожих предикторов оценка будет понижаться
set.seed(0)
treats <- designTreatmentsC(dframe = sourceTable,
                            varlist = colnames(sourceTable)[-sourceTable_ncol],
                            outcomename = colnames(sourceTable)[sourceTable_ncol],
                            outcometarget = 1,
                            verbose = FALSE
)

# #оценка  для регрессии или если больше двух классов
#  sourceTable[,sourceTable_ncol] <- as.numeric(sourceTable[,sourceTable_ncol])
#  set.seed(0)
#  treats <- designTreatmentsN(dframe = sourceTable,
#                              varlist = colnames(sourceTable)[-sourceTable_ncol],
#                              outcomename = colnames(sourceTable)[sourceTable_ncol],
#                              verbose = FALSE
# )

# #Оценка  предикторов без учёта цели.
#  set.seed(0)
#  treats <- designTreatmentsZ(dframe = sourceTable,
#                              varlist = colnames(sourceTable)[-sourceTable_ncol],
#                              verbose = FALSE
# )
# 




#табличка  только с названием колонки и её оценкой важности
resultTable <- treats$scoreFrame[,c("varName", "sig")]

#сортировка
 resultTable <- resultTable[order(resultTable$sig),]

#согласно  общему правилу, оценка предиктора (sig) должна быть меньше 1/<общее число предикторов>
#чем  оценка меньше, тем лучше
resultTable$testPassed <- resultTable$sig < 1/(sourceTable_ncol-1)

#для  создания модели и прогноза лучше использовать только те предкторы у которых testPassed == TRUE
resultTable

Da quanto ho capito, i predittori con un'alta correlazione tra di loro vengono scartati.
Io lo faccio un po' diversamente - conto la matrice di correlazione completa e poi a partire dal 1° controllo la correlazione con esso, se è superiore a 0,9 (il parametro è regolabile) lo lascio cadere. Il metodo è stato descritto in articoli su MO.

Sembra che tu abbia molti predittori non selezionati... Sembra che la vostra funzione elimini al livello di 0,5


 
Maxim Dmitrievsky:


Nah, non siamo fan, stiamo solo cercando l'optimum ) In 3 mesi per hft è più che sufficiente. Cos'è il banale XGB? solo i bayesiani ingenui lo sanno :)

Anche se la misura, altri modelli non può fare anche, come ho fatto non torcere loro

XGB - https://en.wikipedia.org/wiki/Xgboost - l'arma di fusione dell'apprendimento automatico. "Banale" perché è il più popolare.

3 mesi per l'hft non sono sufficienti per un ciclo completo di simulazione, poiché il modello deve essere testato su diversi mercati, cambi di modalità, tetti lampo e diversi cigni, lo stress test sintetico non può farlo come il mercato reale. Il modello finale, per la maggior parte, non userà più dei dati della settimana precedente, ma per configurarlo sarà necessario eseguirlo su campioni di 1-3 anni per assicurarsi che non faccia casini ovunque. In 3 mesi i dati possono essere addestrati e se i datascientist sanno il fatto loro, risulterà essere un regolare falciatore di denaro, ma un giorno, forse in 3 mesi forse in mezzo anno, tutto può rompersi bruscamente, per una ragione "sconosciuta", o meglio conosciuta, poiché il modello non ha affrontato tale condizione di meta mercato ed è diventato irrilevante.