L'apprentissage automatique dans la négociation : théorie, modèles, pratique et algo-trading - page 401

 
elibrarius:
J'espère que cela n'a pas été compilé manuellement ? C'était en quelque sorte des cycles ? Manuellement, cela aurait pris des heures...


En boucle, oui.

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 peu hors sujet, mais est-il possible de faire tourner java sur la GPU ????.
 
Mihail Marchukajtes:
Un peu hors sujet mais quand même, est-il possible de faire tourner java sur GPU ????.

Je poserais une question plus large, qui est capable de tout réécrire sur mql5 sur GPU :)
 
Maxim Dmitrievsky:

Je poserais une question plus large, qui est capable de tout réécrire sur mql5 sur GPU :)

Juste dans le processus de réécriture, quelque chose peut être manqué ou faire des erreurs, sinon j'aurais besoin de l'exécuter sur GPU, au moins, et puis un co-processeur pourrait être attaché. Vous pouvez également combiner la puissance du processeur via le réseau Internet. La tâche n'est donc pas triviale. Augmentez le nombre de cœurs à environ 20-30 et construisez le modèle..... juste ....
 
Mihail Marchukajtes:

C'est seulement au cours du processus de réécriture que vous pouvez manquer quelque chose ou faire des erreurs, sinon vous devez l'exécuter sur un GPU, au moins, et là vous pouvez déjà attacher un coprocesseur. Vous pouvez également combiner la puissance du processeur via le réseau Internet. La tâche n'est donc pas triviale. Augmentez le nombre de cœurs à environ 20-30 et construisez le modèle..... juste ....


Le problème, c'est que vous voudrez tôt ou tard disposer d'une telle bibliothèque pour la MT, car elle vous ouvrira davantage de possibilités, comme l'auto-formation, moins de méli-mélo, moins de maux de tête. Ou au moins comme un dll.

Et pour celui-ci, en Java, il suffit de louer un serveur multi-core pour une heure et de faire tout ce dont vous avez besoin, car l'allocation aux threads y est déjà implémentée... donc si cela vaut la peine, un travail supplémentaire...

Personnellement, même si je ne le réécrirais pas, je contribuerais financièrement à sa réalisation (pour la version mql5).

 
Maxim Dmitrievsky:


Le problème, c'est que vous voudrez tôt ou tard disposer d'une telle bibliothèque pour la MT, car elle vous ouvrira davantage de possibilités, comme l'auto-formation, moins de méli-mélo, moins de maux de tête. Ou au moins comme un dll.

Et pour ce qui est de java, il suffit de louer un serveur multi-core pour une heure et de faire tout ce dont vous avez besoin, car les distributions de threads y sont déjà implémentées... alors, cela vaut-il la peine, un travail supplémentaire ?


J'ai envisagé une fois l'option de la location pour cette affaire, mais mes mains n'y sont jamais arrivées, mais nous verrons.....
 
Maxim Dmitrievsky:

Reshetov :

VS Forêt de décision à deux classes et régression logistique :

Reshetov l'emporte haut la main.

Une sorte de fan-club de Reshetov... (rires pour l'amour de Dieu)) Vous devriez également prendre un point chacun pour l'achat et la vente et 1000 jetons...

En fait, c'est un ajustement parfait. Pour une telle étape d'échantillonnage, les échantillons d'entraînement ne sont pas nécessaires pendant 3 mois mais pendant 5 ans minimum, 3 mois même pour l'ultra-HFT n'est pas suffisant quand vous avez un million de points par jour. Et il n'y a pas besoin de réinventer la roue, un simple XGB avec le bon ensemble de caractéristiques donne un résultat quasi-optimal.

 
Aliosha:

Une sorte de fan-club de Reshetov... (rires pour l'amour de Dieu)) Vous devriez également prendre un point chacun pour l'achat et la vente et 1000 fonctions...

En fait, c'est un ajustement parfait. Pour une telle étape d'échantillonnage, les échantillons d'entraînement ne sont pas nécessaires pendant 3 mois mais pendant 5 ans minimum, 3 mois même pour l'ultra-HFT n'est pas suffisant quand vous avez un million de points par jour. Et il n'est pas nécessaire de réinventer la roue, un XGB banal avec le bon ensemble de caractéristiques donne des résultats quasi-optimaux.


Nah, nous ne sommes pas des fans, nous cherchons juste l'optimum ) Pour 3 mois pour xft c'est plus que suffisant. Qu'est-ce qu'un XGB trivial ? Seul un bayésien naïf le sait :)

Même s'ils correspondent, d'autres modèles ne peuvent pas le faire non plus, peu importe comment je les ai présentés.

 
Dr. Trader:

Il est préférable de définir l'importance des prédicteurs de la manière suivante

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

Si je comprends bien, les prédicteurs ayant une forte corrélation entre eux sont éliminés.
Je le fais un peu différemment - je compte la matrice de corrélation complète et ensuite, en commençant par la première, je vérifie la corrélation avec celle-ci, si elle est supérieure à 0,9 (le paramètre est réglable), je l'abandonne. La méthode a été décrite dans des articles sur le MO.

Vous semblez avoir beaucoup de prédicteurs non sélectionnés... Il semble que votre fonction élimine au niveau de 0.5


 
Maxim Dmitrievsky:


Nan, on n'est pas des fans, on cherche juste l'optimum ) En 3 mois pour le hft c'est plus que suffisant. Qu'est-ce qu'un XGB banal ? Seul un bayésien naïf le sait :)

Même si l'ajustement, d'autres modèles ne peuvent pas le faire non plus, comme je n'ai pas les tordre

XGB - https://en.wikipedia.org/wiki/Xgboost - l'arme de fusion de l'apprentissage automatique. "Banal" car c'est le plus populaire.

3 mois pour l'hft n'est pas tout à fait suffisant, pour un cycle complet de simulation, car le modèle doit être testé sur différents marchés, des changements de mode, des toits flash et différents cygnes, les tests de stress synthétiques ne peuvent pas faire cela comme le marché réel. Le modèle final n'utilisera pour l'essentiel que les données de la semaine précédente, mais pour le configurer, vous devrez l'exécuter sur des échantillons de 1 à 3 ans pour vous assurer qu'il ne se plante pas partout. En 3 mois, les données peuvent être entraînées et si les spécialistes des données connaissent leur métier, le modèle s'avérera être une faucheuse d'argent régulière, mais un jour, peut-être dans 3 mois, peut-être dans 6 mois, tout peut s'interrompre brusquement, pour une raison "inconnue", ou plutôt connue, car le modèle n'a pas été confronté à une telle méta-condition de marché et est devenu non pertinent.