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

 
Maxim Kuznetsov #:

Cela fonctionne-t-il ?

Nous allons commencer par quelque chose de plus simple : un agent en 2D qui a 9 yeux pointant vers des angles différents et chaque œil détecte 3 valeurs le long de sa direction (jusqu'à une certaine distance de visibilité maximale) : la distance par rapport à un mur, la distance par rapport à un objet vert ou la distance par rapport à un objet rouge. L'agent navigue en utilisant l'une des 5 actions qui lui font prendre des angles différents. Les objets rouges sont des pommes et l'agent est récompensé lorsqu'il les mange. Les objets verts sont des poisons et l'agent reçoit une récompense négative pour les avoir mangés. L'entraînement prend quelques dizaines de minutes avec les paramètres actuels".

vous pouvez cliquer sur démarrer l'apprentissage... puis sur arrêter l'apprentissage.....

le cafard est censé courir et préférer les points rouges pour éviter les points verts...

En réalité : après avoir arrêté d'apprendre, elle suit plus ou moins le dernier modèle de mouvement et ne fait pas la différence entre le rouge et le vert. Ou alors j'ai un cafard exceptionnellement stupide :-)

parce qu'il ne faut pas appuyer sur stop learning avant que l' apprentissage ne soit terminé .

 
mytarmailS #:

parce qu'on n'arrête pas d'apprendre avant que l' apprentissage ne soit terminé .

Hourra ! ça a marché... 3 heures d'apprentissage, j'avais presque oublié.

Maintenant le cafard court comme il devrait (presque) essayer d'éviter les verts et manger les rouges.

Apparemment, il se trouve qu'un "feeler" de moins a été formé :-) En d'autres termes, si un vert de pénalité se trouve d'un certain côté, il sera mangé immédiatement. Inversement, les rouges se trouvant sur une certaine traversée sont évités

Mais il s'agit probablement d'un système ogrich.

 
Aleksey Nikolayev #:

Cela ne fonctionne que dans le cas de caractéristiques indépendantes, et comme elles sont comptées au même prix, ce n'est pas possible. Dans le cas de la dépendance, c'est beaucoup plus compliqué - nous pouvons prendre l'exemple des copules, où les distributions univariées sont toujours les mêmes uniformes, mais où les distributions bivariées peuvent être très différentes.

Il existe peut-être une solution sur le même R, mais il suffit de la chercher ?

Aleksey Nikolayev #:

Nous devrons ajouter (à la quantité déjà considérable d'énumérations) l'énumération par types d'éléments et, bien sûr, par paramètres d'éléments.

Néanmoins, il me semble qu'il y a un grain rationnel dans votre approche, il y a matière à réflexion.

Oui, apparemment je suis mauvais pour prédire les résultats sans expérimentation, donc il vaut mieux tester et souvent être déçu que de construire des calculs logiques à plusieurs étapes dans lesquels une erreur peut se glisser à l'une des étapes.

Même si vous apprenez à diviser un échantillon en sous-échantillons, la question suivante est de savoir comment classer correctement l'échantillon actuel et lui appliquer le modèle nécessaire.

 
mytarmailS #:
Peut-être qu'au lieu de critères statistiques d'homogénéité de l'échantillon, il suffit d'observer l'évolution de l'importance des caractéristiques du modèle dans la dynamique (dans une fenêtre glissante).

S'il y a une forte divergence entre l'état actuel et l'état précédent, cela signifie que nous sommes déjà dans un autre échantillon....

Pour :
1. il n'est pas nécessaire de programmer les stat. Tests, tout est prêt dans la boîte
2. Il prend en compte non seulement le changement de temps d'échantillonnage, mais aussi le changement de cible, ce qui, à mon avis, n'est pas moins important.

A quel moment observer, au moment de la formation ? Et comment suggérez-vous d'observer en dynamique, comment mettre en œuvre ?

J'ai un script qui montre l'activation des feuilles du modèle en dynamique, c'est-à-dire que vous pouvez voir quelles feuilles sont déclenchées. Peut-être devrions-nous calculer la fréquence moyenne de leur activation sur le segment d'entraînement, et ensuite regarder les déviations sur les segments de test ? De cette manière, nous pouvons au moins essayer de surveiller la diminution de l'efficacité du modèle, en théorie.

 
Aleksey Vyazmikin #:

A quel moment regarder, au moment de la formation ? Et comment proposez-vous de regarder en dynamique, comment réaliser ?

J'ai un script qui montre dynamiquement l'activation des feuilles du modèle, c'est-à-dire que l'on peut voir quelles feuilles sont activées. Peut-être devrions-nous alors calculer la fréquence moyenne de leur activation sur le segment d'entraînement, et ensuite regarder les déviations sur les segments de test ? De cette manière, nous pouvons au moins essayer de surveiller la diminution de l'efficacité du modèle, en théorie.

Il ne sert à rien de regarder l'ancien modèle, il ne capture pas les changements dans le marché....

Je propose de mettre en œuvre ce qui a été suggéré))))))
Dans une fenêtre glissante, réentraîner le modèle et observer l'importance des signes, ou simplement prendre un déterminant des bons signes et l'observer dans une fenêtre glissante. fenêtre


Voici un exemple sur un échantillon généré aléatoirement de 5 caractéristiques et 1 cible binaire.

sélecteur de forêts et de fiches

X <- matrix(rnorm(1000),ncol = 5)
Y <- as.factor(sample(0:1,nrow(X),replace = T))

head(X)
head(Y)

#install.packages("randomForest")
library(randomForest)
rf_imp_mat <- matrix(ncol = ncol(X),nrow = nrow(X))
for(i in 30:nrow(X)){
  ii <- (i-29):i
  rf <- randomForest(Y[ii]~.,X[ii,],ntree=100)
  rf_imp_mat[i,] <- importance(rf)[,1]
}

#install.packages("FSelectorRcpp")
library(FSelectorRcpp)
fs_imp_mat <- matrix(ncol = ncol(X),nrow = nrow(X))
for(i in 30:nrow(X)){
  ii <- (i-29):i
  infg <- information_gain(y = Y[ii],x = as.data.frame(X[ii,]))
  fs_imp_mat[i,] <-  infg$importance
}

par(mfrow=c(1,2))
matplot(rf_imp_mat , t="l",lty=1,main="rf_var_imp")
matplot(fs_imp_mat , t="l",lty=1,main="fs_var_imp")


En R-ka, il n'est bien sûr pas d'usage d'écrire en cycles si ce n'est pas nécessaire, mais ce style déroute les nouveaux venus, et les intermédiaires comme moi aussi....

mais vous pouvez écrire comme ceci, le code est 3 fois moins long, et le résultat est le même.

X <- matrix(rnorm(1000),ncol = 5)
Y <- as.factor(sample(0:1,nrow(X),replace = T))
idx <- embed(1:nrow(X),dimension = 30)[,30:1]

library(randomForest)
rf_imp_mat <- t(apply(idx,1,function(i) importance(randomForest(Y[i]~.,X[i,]))[,1]))
library(FSelectorRcpp)
fs_imp_mat <- t(apply(idx,1,function(i) information_gain(y=Y[i],x=as.data.frame(X[i,]))$importance))

par(mfrow=c(1,2))
matplot(rf_imp_mat , t="l",lty=1,main="rf_var_imp")
matplot(fs_imp_mat , t="l",lty=1,main="fs_var_imp")


Il y a aussi différents sélecteurs pour tous les goûts, probablement 5% de ce qui est disponible dans R-ka.

GitHub - FrancisArgnR/R-FeatureSelection-Packages: Brief guide to feature selection packages in R
GitHub - FrancisArgnR/R-FeatureSelection-Packages: Brief guide to feature selection packages in R
  • FrancisArgnR
  • github.com
Feature selection or variable selection in machine learning is the process of selecting a subset of relevant features (variables or predictors) for use in model construction. Packages FSinR Boruta caret spFSR varSelRF CORElearn FSelector
 

ou regarder les fenêtres sur deux ou trois devises, et négocier avec un retard dans la troisième.

Par exemple, regarder la deuxième moitié de la journée EUR,CHF vers USD CAD et ouvrir tôt le matin JPY (AUD,NZD)... de sorte que le système apprenne à déterminer la tendance de l'USD et ait le temps d'acheter avant que "ce ne soit pas pourri".

Je crains simplement qu'en une seule citation "tous les chemins ont été parcourus" et qu'il est impossible d'en sortir des poissons avec les méthodes disponibles.

 
Pour inventer quelque chose, il faut définir l'objet de la recherche, puis déterminer ses propriétés, ce ne sera pas comme un singe et des lunettes.
 
Maxim Dmitrievsky #:
Pour inventer quelque chose il faut définir l'objet de la recherche, puis définir ses propriétés, alors ce ne sera pas comme un singe et des lunettes

Il est trop tôt pour définir l'objet de la recherche et ses propriétés, le forum n'a que 6 ans. Ne soyez pas si méchant !

 
Evgeny Dyuka #:

Il est trop tôt pour définir l'objet de la recherche et ses propriétés, le forum n'a que 6 ans. Ne soyez pas si méchant !

Si vous commencez à étudier les cotations en tant que série chronologique, vous remarquerez peut-être certaines particularités que l'on ne retrouve pas dans d'autres séries chronologiques. Il existe peut-être des modèles dans ces caractéristiques. Et oui, tout ne peut pas être extrait par autorégression et classification directement en utilisant les caractéristiques de décalage, mais avec un peu d'ingéniosité, vous pouvez le faire.
 
Maxim Kuznetsov #:

(J'espère qu'ils ne vous tireront pas dessus pour le lien CodeBase : https://www.mql5.com/ru/code/36558

peut s'avérer utile pour prédire les signes - vous êtes invités à prédire :-) l'indicateur ne fait qu'afficher (et résumer) les signes "noirs/blancs".

Je vais montrer les signes des barres ici, ce n'est pas dommage.

Je vais fouiller dans mes modestes archives de développements et les poster.

C'est intéressant, bien sûr, je ne le conteste pas, mais il y a là aussi de la non-stationnarité.

c'est pour cela que c'est prédit avec une probabilité d'un peu moins d'un.

mais en gros, si c'est à la hausse maintenant, la prochaine barre sera à la baisse.

et ce type de mouvement des TFM les plus jeunes se reflète dans les plus anciens.

La tendance n'est donc pas une ligne droite, mais un grand nombre de pullbacks, multiples en durée et en taille de barre pour les plus jeunes.

Cependant, il semblerait que l'on puisse appliquer Fourier et trouver ces vagues, mais ce n'est pas le cas, car

l'échelle de temps est modulée de la même façon, en avant et en arrière.

Il n'est pas facile de comprendre ce miracle, et si on le fait de front, il y a beaucoup de questions.

Par exemple, on peut considérer le mouvement des prix de gauche à droite ou de droite à gauche, en ne partant pas forcément du bord droit.

On obtient ainsi des mouvements d'avant en arrière, de haut en bas.