Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 401

 
elibrarius:
Ich hoffe, das wurde nicht manuell kompiliert? War es irgendwie in Zyklen? Manuell hätte das Stunden gedauert...


In einer Schleife, ja.

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)
 
Ein wenig off-topic, aber ist es möglich, Java auf einem GPU????
 
Mihail Marchukajtes:
Ein wenig off topic und doch, ist es möglich, Java auf GPU???? laufen

Ich würde eine umfassendere Frage stellen, wer in der Lage ist, alles auf mql5 auf GPU neu zu schreiben :)
 
Maxim Dmitrievsky:

Ich würde eine umfassendere Frage stellen, wer in der Lage ist, alles auf mql5 auf GPU neu zu schreiben :)

Gerade im Prozess des Umschreibens kann etwas übersehen werden oder Fehler machen, sonst müsste ich es zumindest auf der GPU laufen lassen, und dann könnte ein Co-Prozessor angeschlossen werden. Oder kombinieren Sie die Prozessorleistung über das Internetnetz. Die Aufgabe ist also nicht trivial. Erhöhen Sie die Anzahl der Kerne auf etwa 20-30 und bauen Sie das Modell.... nur ....
 
Mihail Marchukajtes:

Gerade beim Umschreiben kann man etwas übersehen oder Fehler machen, sonst muss man es zumindest auf einer GPU laufen lassen, und dort kann man schon einen Co-Prozessor anbringen. Oder kombinieren Sie die Prozessorleistung über das Internetnetz. Die Aufgabe ist also nicht trivial. Erhöhen Sie die Anzahl der Kerne auf etwa 20-30 und bauen Sie das Modell.... nur ....


Das Problem ist, dass Sie eine solche Bibliothek für MT früher oder später trotzdem brauchen werden, da sie mehr Möglichkeiten wie automatisches Training, weniger Durcheinander und weniger Kopfschmerzen bietet. Oder zumindest als dll.

Und für diese in Java können Sie einfach mieten einen Multi-Core-Server für eine Stunde und tun alles, was Sie brauchen, weil die Zuordnung zu Threads ist bereits dort implementiert ... so, ob es sich lohnt, zusätzliche Arbeit

Ich persönlich würde, auch wenn ich es nicht neu schreiben würde, Geld dafür spenden (für die mql5-Version).

 
Maxim Dmitrievsky:


Das Problem ist, dass man eine solche Bibliothek für MT früher oder später trotzdem haben möchte, da sie mehr Möglichkeiten wie automatisches Training, weniger Durcheinander und weniger Kopfschmerzen bietet. Oder zumindest als dll.

Und für diese auf Java können Sie einfach mieten einen Multi-Core-Server für eine Stunde und tun alles, was Sie brauchen, weil Thread-Verteilungen sind bereits dort implementiert ... so, ist es wert, zusätzliche Arbeit


Ich habe einmal die Option in Betracht gezogen, diesen Fall zu mieten, aber meine Hände haben es nie geschafft, aber wir werden sehen....
 
Maxim Dmitrievsky:

Reschetow:

VS Zweiklassen-Entscheidungswald und logistische Regression:

Reshetov gewinnt diesen Kampf mit einem Erdrutschsieg.

Eine Art Reshetov-Fanclub... (lacht um Gottes willen)) Sie sollten auch je einen Punkt für Kauf und Verkauf und 1000 Chips nehmen...

Eigentlich ist es eine saubere Sache. Für einen solchen Sampling-Schritt werden nicht 3 Monate, sondern mindestens 5 Jahre lang Trainingsstichproben benötigt. 3 Monate reichen selbst für Ultra-HFT nicht aus, wenn man eine Million Punkte pro Tag hat. Und es ist nicht nötig, das Rad neu zu erfinden, denn eine einfache XGB mit den richtigen Merkmalen führt zu einem quasi-optimalen Ergebnis.

 
Aljoscha:

Eine Art Reshetov-Fanclub... (lacht um Gottes willen)) Sie sollten auch je einen Punkt für Kaufen und Verkaufen und 1000 Funktionen nehmen...

Eigentlich ist es eine saubere Sache. Für einen solchen Sampling-Schritt werden nicht 3 Monate, sondern mindestens 5 Jahre lang Trainingsstichproben benötigt. 3 Monate reichen selbst für Ultra-HFT nicht aus, wenn man eine Million Punkte pro Tag hat. Und es ist nicht nötig, das Rad neu zu erfinden, banale XGB mit den richtigen Merkmalen führt zu quasi-optimalen Ergebnissen.


Nee, wir sind keine Fans, wir suchen nur nach dem Optimum ) Denn 3 Monate für xft sind mehr als genug. Was ist triviales XGB? das wissen nur naive Bayesianer :)

Selbst wenn sie passen, können andere Modelle das auch nicht, egal wie ich sie gedreht habe.

 
Dr. Trader:

Es ist besser, die Bedeutung der Prädiktoren wie folgt zu definieren

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

Soweit ich weiß, werden Prädiktoren mit hoher Korrelation zwischen ihnen herausgefiltert.
Ich mache es ein wenig anders - ich zähle die gesamte Korrelationsmatrix und überprüfe dann, beginnend mit der ersten, die Korrelation zu ihr. Wenn sie höher als 0,9 ist (der Parameter ist einstellbar), lasse ich sie fallen. Die Methode wurde in Artikeln über MO beschrieben.

Sie scheinen eine Menge Prädiktoren nicht ausgewählt zu haben... Es scheint, dass Ihre Funktion auf der Ebene von 0,5 % eliminiert


 
Maxim Dmitrievsky:


Nee, wir sind keine Fans, wir suchen nur nach dem Optimum ) In 3 Monaten für hft ist mehr als genug. Was ist banal XGB? wissen nur naive Bayesianer :)

Auch wenn die passen, andere Modelle können es auch nicht tun, da ich sie nicht verdrehen konnte

XGB - https://en.wikipedia.org/wiki/Xgboost - die Fusionswaffe des maschinellen Lernens. "Banal", weil es das beliebteste ist.

3 Monate reichen für einen vollständigen Simulationszyklus nicht ganz aus, da das Modell auf verschiedenen Märkten, bei Modusverschiebungen, Blitzdächern und verschiedenen Schwänen getestet werden muss; synthetische Stresstests können das nicht leisten wie der echte Markt. Das endgültige Modell wird größtenteils nicht mehr als die Daten der Vorwoche verwenden, aber um es zu konfigurieren, müssen Sie es mit Stichproben von 1-3 Jahren laufen lassen, um sicherzustellen, dass es nicht überall Mist baut. In 3 Monaten können die Daten trainiert werden, und wenn die Datenwissenschaftler sich auskennen, wird es sich als regelmäßiger Geldmäher erweisen, aber eines Tages, vielleicht in 3 Monaten, vielleicht in einem halben Jahr, kann alles abrupt zusammenbrechen, aus "unbekanntem" Grund, oder eher bekannt, da das Modell nicht mit solchen Meta-Marktbedingungen konfrontiert wurde und irrelevant wurde.