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

 

Sur le sujet de comment transférer un neurone de R à mql :

Je l'ai fait avec le paquet nnet. Voirhttps://cran.r-project.org/web/packages/nnet/index.html(Source du paquet : nnet_7.3-12.tar.gz). Il y a un dossier src / nnet.c dans l'archive.

Nous avons besoin de la fonction fpass, les premières lignes avant thisError = 0.0 (c'est le début du calcul de l'erreur pour le backprop, pas besoin de prédiction simple).


Voici le code que nous pouvons utiliser dans notre EA -

   double sigmoid(double sum)
     {
      if(sum<-15.0)
         return (0.0);
      else if(sum>15.0)
         return (1.0);
      else
         return (1.0 / (1.0 + exp(-sum)));
     }

//nnet_hidden - число нейронов в скрытом слое
//выход один
//nnet_weights - массив с весами нейронки взятыми из R после обучения nnet модели

int weights_it=0;
double hiddenLayer[];
ArrayResize(hiddenLayer,nnet_hidden);
for(int i=0; i<nnet_hidden; i++)
 {
  hiddenLayer[i]=nnet_weights[weights_it++];
  for(int j=1; j<=nnet_bars; j++)
    {
     hiddenLayer[i]+=openPrices[j]*nnet_weights[weights_it++];
    }
  hiddenLayer[i]=sigmoid(hiddenLayer[i]);
 }
double prediction=nnet_weights[weights_it++];
for(int i=0; i<nnet_hidden; i++)
 {
  prediction+=hiddenLayer[i]*nnet_weights[weights_it++];
 }
if(!linout)
 {
  prediction = sigmoid(prediction);
 }

ce code ne fonctionnera qu'avec le paramètre de modèle skip = FALSE
Si ce n'est pas le cas, ou si une softmax est utilisée, recherchez les différences dans la fonction fpass().


les poids (tableau nnet_weights) doivent être copiés de R lui-même après l'entraînement.

library(nnet)
trainedModel <- nnet(y = 1:10, x = matrix(runif(20),ncol=2), size=10)
nnet_weights <- trainedModel$wts
cat("double nnet_weights[] = {", paste(format(weights,digits=16,scientific=T), collapse=","), "};", file="D:/weights.txt") #сохранить  веса в файлик чтоб оттуда скопипастить в советник
 
О ! C'est quelque chose. Un peu plus de travail et vous pourrez l'utiliser. Merci ! (Rires)
 

Un autre petit article d'introduction sur le renforcement, bien que le point soit

Il serait intéressant d'organiser une petite session de travail d'équipe et de brainstorming sur mql et de partager l'expérience.

https://proglib.io/p/trade-learning/

Трейдинг и машинное обучение с подкреплением
Трейдинг и машинное обучение с подкреплением
  • 2018.02.15
  • matyushkin
  • proglib.io
В статье рассмотрено, как машинное обучение с подкреплением может применяться для трейдинга финансовых рынков и криптовалютных бирж. Академическое сообщество Deep Learning в основном находится в стороне от финансовых рынков. В силу ли того, что у финансовой индустрии не лучшая репутация, что решаемые проблемы не кажутся слишком интересными для...
 

À mon avis, l'apprentissage par renforcement donne généralement un modèle avec un très grand surplomb, et la validation croisée n'est pas la solution dans ce cas. Il doit y avoir des mécanismes spéciaux au sein du modèle lui-même contre le surajustement.

Pour ceux qui ne sont pas familiers avec ce sujet, brièvement : au lieu de l'évaluation habituelle du modèle (précision, r2, logloss, etc), une fonction de fitness spéciale avec sa propre logique d'évaluation du modèle est créée. Une telle fonction d'adaptation peut par exemple calculer le bénéfice d'un modèle lors d'un échange, ou le ratio de précision. Et les paramètres du modèle sont sélectionnés par algorithme génétique.

Il est intéressant de noter que l'optimiseur de MT4 et MT5 fonctionne également sur le principe de l'apprentissage par renforcement - à chaque barre (ou même tick), le conseiller expert reçoit les valeurs actuelles du prix et des indicateurs, prend certaines décisions, et l'estimation finale de l'EA est calculée comme le résultat de la transaction. Les paramètres du conseiller expert sont sélectionnés par la génétique pour augmenter l'estimation.
Si l'on en juge par les Expert Advisors librement disponibles pour MT5, nous pouvons clairement voir que cette méthode d'apprentissage entraîne beaucoup de "pertes". Mais parfois les bons EA sont bons aussi.

 
Dr. Trader:

À mon avis, l'apprentissage par renforcement donne généralement un modèle avec un très grand surplomb, et la validation croisée ne sauvera pas dans ce cas. Il doit y avoir des mécanismes spéciaux au sein du modèle lui-même contre le surajustement.

Pour ceux qui ne sont pas familiers avec ce sujet, brièvement : au lieu de l'évaluation habituelle du modèle (précision, r2, logloss, etc), une fonction de fitness spéciale avec sa propre logique d'évaluation du modèle est créée. Une telle fonction d'adaptation peut par exemple calculer le bénéfice d'un modèle lors d'un échange, ou le ratio de précision. Et les paramètres du modèle sont sélectionnés par un algorithme génétique.

Ce qui est intéressant, c'est que l'optimiseur de MT4 et MT5 fonctionne également sur le principe de l'apprentissage par renforcement - à chaque barre (ou même tick), le conseiller expert reçoit les valeurs actuelles des prix et des indicateurs, prend certaines décisions, et l'estimation finale du conseiller expert est le résultat du trading. Les paramètres du conseiller expert sont sélectionnés par la génétique pour augmenter l'estimation.
Si l'on en juge par les Expert Advisors librement disponibles pour MT5, nous pouvons clairement voir que cette méthode d'apprentissage fait beaucoup de perdants. Mais parfois les bons EA sont aussi de bons EA.

C'est une bonne analogie avec l'optimiseur, mon bot précédent en parlait, mais c'est trop simple.

Mais en général, il ne l'est pas, RL s'il ne s'oppose pas à la génétique, il en souligne les avantages, par exemple la possibilité de travailler sur des processus non stationnaires. Il est notamment possible d'utiliser des fonctions de fitness non avides, grâce auxquelles le modèle apprend constamment au fur et à mesure de son exécution et effectue des pas aléatoires. Et en tant qu'optimiseur, nous utilisons le bourrage NS (not genetics).

C'est un peu plus compliqué là-bas, mais je n'ai pas encore fini de lire le livre.

Donc votre affirmation sur la génétique, l'optimiseur et le RL est incorrecte.

 

*un moment d'émotion et de philosophie et tout ça*

Imaginez un jour clair et ensoleillé. Vous êtes assis sur l'herbe au bord d'un étang, une chaude brise printanière souffle, laissant des ondulations dans l'eau, le bruit des canards se fait entendre quelque part à proximité. Les poissons nageaient sous l'eau, touchant parfois la surface avec leurs nageoires et faisant des cercles dans l'eau. Son voisin écope l'eau et son petit-fils jette des pierres dans l'eau, chassant les grenouilles d'un côté à l'autre. De l'autre côté de l'étang, un homme lave sa voiture.

Le prix est comme les vagues sur l'eau de toute l'agitation mais aussi pendant une tempête. Nous pouvons suivre les vagues et essayer de deviner quand l'eau montera ou descendra à un point donné, mais si nous ne suivons pas l'environnement, nous nous tromperons la plupart du temps.

La valeur du prix futur ne dépend pas des mouvements de prix passés, mais des processus globaux qui ont causé les mouvements de prix passés et qui en causeront de nouveaux.
Vous devez surveiller non seulement les vagues sur l'eau, mais aussi le vent, la trajectoire des poissons, le seau du voisin, etc., alors la nature des vagues sur l'eau sera claire et prévisible.

Par conséquent, si vous disposez d'informations sur tous les processus mondiaux qui affectent le prix, vous pouvez apprendre à prédire et n'importe quel modèle simple du siècle précédent fera l'affaire.
Le problème est qu'il n'existe généralement qu'un graphique des prix et que cela ne suffit pas.

 

Voici comment connecter RL et NN

 

et une vidéo, il y a une partie 2 plus.

C'est tout, je ne fais plus de spam, ceux qui sont intéressés peuvent le lire.


 
Les réseaux neuronaux de MT sont simples. Il existe une bibliothèque de Microsoft appelée CNTK. Il est implémenté pour Python, C# et C++. Toute l'analyse et la formation du réseau sont effectuées en Python, tandis que le C++ est utilisé pour écrire une DLL qui charge le réseau formé et effectue des calculs à l'aide de celui-ci. À mon avis, c'est la meilleure option. La deuxième option, la connexion de Python à MT. J'ai écrit une bibliothèque simple pour cela. Bibliothèque. Nous le connectons et pouvons utiliser tout ce qui est disponible en Python. Et il y a beaucoup de choses disponibles. Je me demande si je dois commencer à écrire sur l'apprentissage automatique sur mon blog.
 
Grigoriy Chaunin:
Tout est simple avec les réseaux neuronaux en MT. Il existe une bibliothèque CNTK de Microsoft. Il est implémenté pour Python, C# et C++. Toute l'analyse et la formation du réseau sont effectuées en Python, tandis que le C++ est utilisé pour écrire une DLL qui charge le réseau formé et effectue des calculs à l'aide de celui-ci. À mon avis, c'est la meilleure option. La deuxième option, la connexion de Python à MT. J'ai écrit une bibliothèque simple pour cela. Bibliothèque. Nous le connectons et pouvons utiliser tout ce qui est disponible en Python. Et il y a beaucoup de choses disponibles. Je me demande si je dois commencer à écrire sur l'apprentissage automatique sur mon blog.

il serait intéressant de lire les stratégies et les réflexions/expériences personnelles... pour moi personnellement

parce que la plupart des choses qu'ils écrivent ici sont juste des conneries sur le fait de passer en revue un tas de bibliothèques et ce qui est mieux pour écrire dessus... c'est une épidémie, et tout est gaspillé.

Bien que l'idée de base ait été exprimée par fxsaber il y a longtemps - avec la même approche, le sujet pourrait aussi bien être clos, parce qu'il est initialement faux.

Raison: