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

 
Maxim Dmitrievsky:

https://www.mql5.com/ru/code/127

il y a juste une erreur dans le code, je pense que l'indicateur est mal normalisé.

C'est correct, la normalisation se fait simplement sur un intervalle différent de [0;1].


Pour simplifier, vous pouvez laisser la même fonction CalcRegression que vous avez (mais tenez compte du fait que b renvoie déjà avec le signe opposé*, c'est-à-dire que vous n'avez pas besoin de changer le signe pour la deuxième fois). Déterminez expérimentalement par quelle valeur vous devez multiplier le résultat pour qu'il soit compris dans l'intervalle [-0,5;0,5]. Et puis ajoutez +0,5 pour faire passer le milieu de 0 à 0,5.


*Cette formule vous donnera b avec le bon signe si les prix les plus anciens ont l'indice le plus élevé dans le tableau.

 
Dr. Trader:

Tout est correct, il est juste normalisé non pas dans [0;1] mais dans un autre intervalle.


Pour simplifier, vous pouvez laisser la même fonction CalcRegression que vous avez (mais tenez compte du fait que b retourne déjà avec le signe opposé, c'est-à-dire que vous n'avez pas besoin de changer le signe pour la deuxième fois). Déterminez expérimentalement par quelle valeur vous devez multiplier le résultat pour qu'il soit compris dans l'intervalle [-0,5;0,5]. Et puis ajoutez +0,5 pour faire passer la moyenne de 0 à 0,5.


pour différentes échéances, nous avons besoin de différents max et min, ce n'est pas très pratique, il me semble que la normalisation sur un plus grand intervalle d'histoire est la meilleure.
 
Dr. Trader:

*Cette formule vous donnera b avec le bon signe si les prix les plus anciens ont l'indice le plus élevé dans le tableau.


ajoutez simplement un autre tampon normalisé à l'indicateur par-dessus le tampon existant :)
 

La pente de régression pourrait également être intéressante. Backtest et forward. En bref, il semble que vous puissiez travailler avec cette logique et expérimenter avec différents prédicteurs.


Dossiers :
 
Maxim Dmitrievsky:

La pente de régression pourrait également être intéressante. Backtest et forward. En bref, il semble que vous puissiez travailler avec cette logique et expérimenter avec différents prédicteurs.


Merci pour le code, je l'ai testé. J'ai empiré. Mais j'ai pris seulement 1 mois pour l'optimisation au lieu d'une année, je voulais le vérifier rapidement. Sur Fronttest, j'ai vu comment l'EA est d'abord normale, puis commence lentement à s'aplatir, puis elle ralentit. Il vit encore un peu des nouvelles données, ce qui n'est pas mal.

Je changerais ceci

1) double a3 = regr[0] ; - l'index zéro est la donnée la plus ancienne dans le temps. Le dernier bar (le plus récent) ici serait le 49 (puisque le 50 a été pris), c'est mieux. Mais le dernier peut être à découvert, donc 48 est mieux. Il est également nécessaire de vérifier si l'indicateur est à découvert.
La même chose avec le rsi, vous avez supprimé celui qui était plus récent. Il est logique d'essayer de supprimer celui dont l'indice est nul, car il est le plus obsolète.

2) La troisième version de Yuri's Expert Advisor possède la fonction RNN avec quatre paramètres, elle peut donc être combinée avec 3 rx et la tendance. En général, la fonction peut être complétée par de nouveaux paramètres, comme écrit dans l'article de Yuri, mais chaque paramètre +1 doublera le nombre de coefficients.

3) Je n'aime pas les stops et les takeoffs, leurs valeurs optimales changent constamment sur les nouvelles barres. Pour être plus précis, il n'y a pas de valeurs optimales, il y a juste certaines valeurs "pratiques" pour un EA sur un intervalle de temps spécifique. De plus, les courtiers peuvent dessiner des chandeliers avant les stops. J'essaierais de faire une prévision à chaque nouvelle barre et je maintiendrais simplement la transaction dans cette direction jusqu'à la barre et la prévision suivantes, et je ferais un revirement si nécessaire.

4)

   int handle=iRSI(_Symbol,0,9,PRICE_OPEN);
   double rsi[30];
   CopyBuffer(handle,0,0,28,rsi);

Le Handle doit être initialisé dans OnInit, et non à chaque fois que l'on crée un EA. Et aussi le tableau a 30 éléments, et seulement 28 sont copiés. C'est-à-dire que les index 28 et 29 ne sont pas accessibles (personne ne le fait jamais, mais on ne sait jamais), ils ne sont pas remplis.

 
Dr. Trader:


Merci pour le code, je l'ai essayé. J'en ai une pire. Mais je n'ai pris qu'un mois pour l'optimisation au lieu d'une année, je voulais le tester rapidement. Le fronttest montre que mon Expert Advisor est normal au début, puis il commence à aplatir l'équilibre et ensuite il descend. Il vit encore un peu des nouvelles données, ce qui n'est pas mal.

Je changerais ceci

1) double a3 = regr[0] ; - l'index zéro est la donnée la plus ancienne dans le temps. Le dernier bar (le plus récent) ici serait le 49 (puisque le 50 a été pris), c'est mieux. Mais le dernier peut être à découvert, donc 48 est mieux. Il est également nécessaire de vérifier si l'indicateur est à découvert.
Il en va de même pour le rsi, vous avez supprimé celui qui était plus récent. Il est logique d'essayer d'éliminer celui qui a un indice zéro comme étant le plus ancien.

2) Dans la troisième version de l'EA de Yuri, la fonction RNN contient quatre paramètres, vous pouvez prendre à la fois 3 rsi et la tendance avec elle. En général, la fonction peut être étendue avec de nouveaux paramètres, comme écrit dans l'article de Yuri, mais chaque paramètre +1 doublera le nombre de coefficients.

3) Je n'aime pas les stops et les takeoffs, leurs valeurs optimales changent constamment sur les nouvelles barres. Pour être plus précis, il n'y a pas de valeurs optimales, il y a juste certaines valeurs "pratiques" pour un EA sur un intervalle de temps spécifique. De plus, les courtiers peuvent dessiner des chandeliers avant les stops. J'essaierais de faire une prévision à chaque nouvelle barre et je maintiendrais simplement la transaction dans cette direction jusqu'à la barre et la prévision suivantes, et je ferais un revirement si nécessaire.

4)

Le Handle doit être initialisé dans OnInit, et non à chaque fois que l'on crée un EA. Et aussi le tableau a 30 éléments, et seulement 28 sont copiés. C'est-à-dire que les index 28 et 29 ne sont pas accessibles (personne ne le fera, mais on peut le vouloir), ils ne sont pas remplis.


Hmm, oui ? je pensais que le zéro lors de la copie du tampon retournait la toute première valeur. il faut vérifier...

https://www.mql5.com/ru/docs/series/copybuffer

J'ai ajouté la queue au lieu du sl et ainsi de suite, les résultats ne sont pas beaucoup mieux

au sujet de la poignée, oui, pour la régression je l'ai mise dans l'init, pour radsy j'ai oublié de le faire

Là, je dois choisir le forward avec le facteur de profit le plus élevé, et le backtest devrait être à peu près le même, de sorte qu'avec ces paramètres, la grille est capable de faire une prédiction décente. Si je regarde les statistiques, je ne vois pas pourquoi je l'ai manqué, je ne vois pas pourquoi je ne l'ai pas manqué, et je ne vois pas pourquoi.

Et RNN3 donne beaucoup moins de signaux pour une raison quelconque.

Je ne comprends toujours pas s'il est préférable que la fonction de normalisation prenne un tableau de 5000 barres au lieu de 50, de sorte qu'elle trouve des max et min plus corrects dès le début et ne les mette pas à jour au fil du temps, parce qu'au début du test, nous recevrons des valeurs normalisées pas tout à fait correctes pour l'entrée, mais plus tard de plus en plus précises.

Je ne sais pas encore comment améliorer, par exemple, la pente de régression et l'autocorrélation sur une série stationnaire, car je ne suis pas très doué en économétrie, je regarde des clips vidéo maintenant.

Et je veux aussi comparer plus tard ce RNN avec un MLP ordinaire, mais la comparaison ne sera pas tout à fait correcte, parce que le MLP devra alimenter quelque chose à la sortie. Une autre option est de créer un comité de 3 RNN et d'introduire leurs résultats dans le RNN :D, ou dans un NS convolutif. Il faudra beaucoup de temps pour l'optimiser, même par le biais de Claud. Mieux encore, introduisez 3 RNN dans le MLP et produisez-les avec des incréments de prix, ce qui élimine le surentraînement, en théorie. C'est-à-dire que le RNN jouera un rôle d'autoencodeur http://cyberleninka.ru/article/n/avtoenkoder-podhod-k-ponizheniyu-razmernosti-vektornogo-prostranstva-s-kontroliruemoy-poterey-informatsii


 
Maxim Dmitrievsky:




Il est presque impossible de trouver une citation qui puisse être appliquée à l'ARIMA. Mais c'était la fin de la conférence.

ET POUR GARCH ? Elle est beaucoup plus prometteuse et très largement utilisée sur une échelle de temps inférieure à un jour, même pour le trading à haute fréquence.

 
SanSanych Fomenko:


Il est presque impossible de trouver une citation à laquelle on pourrait appliquer l'ARIMA. Mais c'était la fin de la conférence.

ET POUR GARCH ? Elle est beaucoup plus prometteuse et très largement utilisée sur un horizon temporel de moins d'un jour, même pour le trading à haute fréquence.


Je viens juste de commencer à me familiariser avec ces choses, je n'ai même pas encore expérimenté. Je n'ai entendu parler que des ordures :)

Que pensez-vous de l'utilisation du RNN comme autoencodeur pour les MLP ?

D'après ce que j'ai compris, le réseau récurrent est un auto-encodeur du type avec un ensemble de règles logiques :


 
Maxim Dmitrievsky:

Eh bien, qu'en est-il de la soustraction des tendances, puis de l'application d'une autorégression à celles-ci, et enfin de l'introduction des valeurs dans la NS, avec la pente de régression ? Je viens juste de commencer à me familiariser avec ces choses, je n'ai pas encore expérimenté.

vous feriez mieux d'expérimenter tout de suite !

Vous économiserez beaucoup de temps et de connaissances inutiles.

 
SanSanych Fomenko:


Il est presque impossible de trouver une citation qui puisse être appliquée à l'ARIMA. Mais c'était la fin de la conférence.

ET POUR GARCH ? Elle est beaucoup plus prometteuse et largement utilisée sur une échelle de temps inférieure à un jour, même pour le trading à haute fréquence.

Je l'ai regardé aussi. Imho, ce n'est pas notre domaine.