Trouver un ensemble d'indicateurs pour alimenter les entrées du réseau neuronal. Discussion. Un outil d'évaluation des résultats.

 

Salutations à tous les participants et visiteurs du forum.


Je souhaite proposer à toutes les personnes intéressées de discuter et de rechercher un ensemble d'indicateurs les mieux adaptés pour alimenter les entrées des réseaux neuronaux.

La rentabilité du neuronet dans mon programme peut être utilisée comme un outil d'estimation, je peux aussi mettre en place un MQL4 Expert Advisor avec un neuronet entraîné. Dans des limites raisonnables, bien sûr.


J'ai écrit moi-même (en java) un perseptron avec un nombre arbitraire de couches et de neurones dans chaque couche. Je l'entraîne avec un algorithme génétique de la bibliothèque JGAP (http://jgap.sourceforge.net/).

Le nombre de neurones dans la première couche est égal au nombre d'entrées et dans la deuxième couche - arbitrairement, dans la troisième couche 1 neurone. Le neuronet produit des signaux de trading (sortie du neuronet >0,5 - achat, sortie du neuronet<-0,5 - vente). Les signaux sont traités par un testeur de trading auto-écrit qui, sur la base du signal du neuronet, inverse la position (ou entre sur le marché, si aucune position n'est ouverte). La fonction cible de l'algorithme génétique est le bénéfice résultant. Une telle approche, à mon avis, nous permet de minimiser toutes les erreurs possibles et de rendre la formation aussi proche que possible du trading réel. J'exporte le réseau formé dans MQL4 Expert Advisor et le teste dans le testeur de stratégie de MT4. Je forme les entrées pour le réseau neuronal dans l'indicateur MT4 et les télécharge dans un fichier. L'indicateur et le conseiller expert sont formés par le programme et sont écrits dans les fichiers (moins de confusion et moins d'erreurs).

Pour moi, les réseaux à 4 couches ne donnent pas plus de bénéfices (généralement moins) que les réseaux à 3 couches, mais ils sont plus longs à former.
J'ai entraîné un réseau 8-10-1 pendant 4 jours sur un Core2 Quadro 2.3. 10 fils parallèles avec différentes populations initiales en compétition pour voir "qui a le plus de profit". 4 jours ont passé, environ 4000 générations avec 200 chromosomes dans une population. Le profit maximum a été obtenu dans les 2000 premières générations, au-delà, le profit n'a pas augmenté. La plus forte augmentation des bénéfices a été enregistrée dans les 100 premières générations.

J'ai vérifié les résultats de ce réseau dans le testeur de stratégie MT4. J'ai découvert que le réseau n'atteint presque jamais le seuil de +-0,5 et que le signal de transaction n'est pas déclenché. La raison n'est pas claire, c'est-à-dire que j'ai vérifié l'exactitude de l'exportation vers MQL4 (avec les mêmes valeurs d'entrées en Java et en MQL4, le réseau donne les mêmes valeurs, peut-être que tout le flux entrant aurait dû être soumis, et non des valeurs aléatoires). J'ai abaissé le seuil à 0,4 et cela semble fonctionner... Puis j'ai découvert que le Conseiller Expert ne peut pas inverser une position en une seule fois... Mon conseiller expert fermera la barre et le prix aura le temps de bouger avant la prochaine barre. Sur la période d'apprentissage (j'apprends du 1-08-09 au 1-10-09) le profit dans MT4 était inférieur à celui de mon testeur, sur la période de test dans MT4 (1-10-09 au 1-11-09), le net était profitable. J'ai regardé quels étaient les points d'entrées non rentables et j'ai eu l'impression que les données qui entrent dans le réseau neuronal ne contiennent pas assez d'informations...

Réseau neuronal d'entrée I : (k=100)

a[0]=(iMA(NULL,0, 13,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k;
a[1]=(iMA(NULL,0, 21,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[2]=(iMA(NULL,0, 34,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[3]=(iMA(NULL,0, 55,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[4]=(iMA(NULL,0, 89,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k
a[5]=(iMA(NULL,0, 144,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k*0.9;
a[6]=(iMA(NULL,0, 233,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k*0.8;
a[7]=(iMA(NULL,0, 377,0,MODE_EMA,PRICE_CLOSE, i)-Close[ i])* k*0.6;
Je comprends le fonctionnement des indicateurs, mais je ne les comprends pas assez, ainsi que le marché, pour choisir moi-même un nombre minimal d'indicateurs...

J'ai cherché sur le forum et j'ai trouvé (l'auteur du post dont j'ai pris l'idée, malheureusement, je ne me souviens plus) :

a[0]=(iMA(NULL,0, 3,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 5,0,MODE_EMA,PRICE_CLOSE, i))*200;
a[1]=(iMA(NULL,0, 5,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 8,0,MODE_EMA,PRICE_CLOSE, i))*200;
a[2]=(iMA(NULL,0, 8,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 13,0,MODE_EMA,PRICE_CLOSE, i))*200;
a[3]=(iMA(NULL,0, 13,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0,21,0,MODE_EMA,PRICE_CLOSE, i))*150;
a[4]=(iMA(NULL,0, 21,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 34,0,MODE_EMA,PRICE_CLOSE, i))*150;
a[5]=(iMA(NULL,0, 34,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 55,0,MODE_EMA,PRICE_CLOSE, i))*150;
a[6]=(iMA(NULL,0, 55,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 89,0,MODE_EMA,PRICE_CLOSE, i))*140;
a[7]=(iMA(NULL,0, 89,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 144,0,MODE_EMA,PRICE_CLOSE, i))*130;
a[8]=(iMA(NULL,0, 144,0,MODE_EMA,PRICE_CLOSE, i)-iMA(NULL,0, 233,0,MODE_EMA,PRICE_CLOSE, i))*120;
étudié en 10 threads, 200 générations, taille de population 200 pour la période du 1-08-09 au 1-10-09 (mon testeur java donne les résultats) :
réseau 9-10-1 : profit 10521
9-20-1 net : bénéfice 10 434
9-30-1 réseau : profit 10361
9-50-1 réseau : profit 10059
le résultat est bon, mais il semblait être meilleur avec la version précédente... je vais devoir le mettre avec les entrées précédentes (je n'ai pas sauvegardé les résultats de la dernière formation)

Des multiplicateurs supplémentaires sont nécessaires pour ajuster les valeurs comprises entre -1 et +1.


Après avoir lu ce que j'ai écrit, j'ai commencé à penser à une erreur possible dans l'exportation du réseau neuronal formé vers le conseiller expert - il devrait être testé à nouveau.

P.S. Je suis en train d'écrire un réseau neuronal récurrent de structure arbitraire (si je comprends bien, le réseau neuronal récurrent prend en compte non seulement la valeur, mais aussi l'angle de pente).

 

Le problème est proche du vôtre. L'approche est différente.

Je suis encore moins généticien qu'ingénieur, mais je le comprends à peu près.

Laissez-moi vous poser quelques questions. La fonction d'objectif consistant à maximiser le score n'est pas la meilleure option. Si j'ai bien compris l'exemple ci-dessus - vous allez rechercher un ensemble de systèmes, dans votre cas - 9, bien, à un coup d'œil optimiser les profits des arrêts + plus de fantaisie total au moins un système (ici nous utilisons un indicateur) a au moins 2-3 centaines de variantes possibles. Nous n'obtiendrons pas ces variantes à l'intérieur du cadre, par exemple CCI ou RSI tomberont hors de vue. Nous avons alors un indicateur magique pour le moment présent. Soit mov(20) -mov(10) > < 0. Comment estimer ou du moins estimer combien de temps la situation va durer .

 
iliarr >> :

J'ai un perseptron auto-écrit (en java) avec un nombre arbitraire de couches et de neurones dans chaque couche. Je l'entraîne avec un algorithme génétique de la bibliothèque JGAP (http://jgap.sourceforge.net/).

Comment faites-vous la formation ? Veuillez décrire l'algorithme de formation.

Si je me souviens bien - JGap, est juste une bibliothèque pour algorithme génétique et rien de plus, rien à voir avec NS. La question est peut-être de savoir comment le génome est formé et si la sélection des fonctions de fitness est correcte.

 

La formation d'un réseau avec Ga comporte de nombreux écueils que vous ne pourrez probablement pas résoudre... Au minimum, la question "Combien de temps le réseau fonctionnera-t-il aussi bien qu'en formation ?" ne me semble pas possible, lors d'une formation avec Ga.

Je recommande d'aller à une prédiction standard de résolution de problèmes avec ns-i.

 
rip >> :

Comment se déroule la formation ? Veuillez décrire l'algorithme de formation.

Si je me souviens bien - JGap est juste une bibliothèque pour l'algorithme de gène et rien de plus, il n'a rien à voir avec NS. La question est peut-être de savoir comment le génome est formé et si la sélection des fonctions de fitness est correcte.

JGap est une bibliothèque qui implémente un algorithme génétique. pour moi, il s'agit d'une boîte noire à laquelle il faut donner une fonction cible qui dépend d'un vecteur d'une certaine longueur. l'algorithme génétique de cette bibliothèque sélectionne les valeurs de ce vecteur de façon à ce que la fonction cible soit maximale. ma fonction cible produit le bénéfice d'un historique passé par un émulateur de trading qui reflète les signaux d'un réseau neuronal. le vecteur dont les valeurs sont sélectionnées par l'algorithme génétique détermine les poids des réseaux neuraux.

ivandurak >> :

Le problème est proche du vôtre. L'approche est différente.

Je suis moins généticien qu'ingénieur, mais je comprends l'essentiel.

Laissez-moi vous poser quelques questions, la fonction cible maximisant le score n'est pas la meilleure option. Si j'ai bien compris l'exemple ci-dessus - vous allez chercher un ensemble de systèmes, dans votre cas - 9, bien, à un coup d'œil optimiser les profits des arrêts + plus de fantaisie total au moins un système (ici nous utilisons un indicateur) a au moins 2-3 centaines de variantes possibles. Nous n'obtiendrons pas ces variantes à l'intérieur du cadre, par exemple CCI ou RSI tomberont hors de vue. Nous avons alors un indicateur magique pour le moment présent. Soit mov(20) -mov(10) > < 0. Comment estimer ou du moins estimer combien de temps la situation bénigne va durer .

Malheureusement, je n'ai pas assez de ressources informatiques pour rechercher les indicateurs optimaux (le réseau 9-10-1 dans 10 threads, 200 générations, taille de la population 200 du 1-08-09 au 1-10-09 prend plus d'une heure à apprendre, bien que le nombre de poids des neurones (longueur du vecteur que prend l'algorithme génétique) = 181).

j'ai besoin d'un ensemble d'indicateurs qui reflètent la situation du marché. les indicateurs doivent être simples, de préférence standard MT4 (question de la mise en œuvre et des erreurs possibles) il n'y en a que 30. pas d'objectif les indicateurs doivent donner des informations sur la direction du marché. j'ai besoin qu'ils tirent le plus d'informations possible des fluctuations de prix.


Je me plais ici... Je pense comment et quoi écrire, formuler, et plus de compréhension apparaît... merci au forum et à vous ivandurak . :)

 
iliarr >> :

JGap est une bibliothèque qui implémente un algorithme génétique. ma fonction cible est une boîte noire à laquelle il faut donner une fonction cible qui dépend d'un vecteur d'une certaine longueur. l'algorithme génétique de cette bibliothèque ajuste les valeurs de ce vecteur de façon à ce que la fonction cible soit maximale. ma fonction cible génère des bénéfices à partir de l'historique des passages d'un émulateur de trading qui traite les signaux d'un réseau neuronal. le vecteur dont les valeurs sont ajustées par l'algorithme génétique définit les poids des neurones du réseau neuronal.

C'est exactement ce que je veux dire...


Comment forme-t-on un vecteur que l'on passe ensuite à JGap ? S'agit-il simplement d'un vecteur de valeurs W ou de valeurs W codées ?

Quelle est la fonction f cible. Je peux donner un exemple - si nous prenons comme cible la fonction f E[i](t) = D[i](t) - Y[i](t), où E est une erreur, D est une valeur attendue à la sortie, Y est une valeur obtenue en alimentant l'échantillon d'entraînement X, i est la norme du neurone, t est le nombre d'époques. Si on prend E[i](t) = Sign(D[i](t) - Y[i](t))*(D[i](t) - Y[i](t))^2 sur un certain nombre de tâches, le résultat est bien meilleur. Par exemple, si nous formons une série reflétant les attracteurs des systèmes dynamiques classiques (Lorenz, Henon, Rössler,...), nous pouvons même entraîner le réseau à s'approcher de ces données, pas profondément mais quand même.


Je n'ai pas essayé :) parce que je ne pense pas que ça va marcher :)

 
Avec un tel design, vous pouvez réaliser des évitiations quasi verticales sans dérapage. Allez-vous aborder la question du surentraînement au niveau des neurones ?
 
IlyaA >> :
Avec un tel design, vous pouvez obtenir une évitiation quasi verticale sans glissement. Allez-vous aborder la question du recyclage au niveau du neurone ?

Et il pourrait ne pas y avoir de recyclage... Si l'auteur représente graphiquement l'erreur sur l'échantillon de test, vous pouvez voir immédiatement ce qui se passe avec le recyclage.

 
rip >> :

Et le recyclage peut ne pas avoir lieu... Si l'auteur cite comme graphique l'erreur sur un échantillon de test, vous pouvez dire d'un coup d'œil ce qui se passe en cas de surentraînement.


Je suis d'accord. ça marche avec une boîte noire. le surentraînement est très probable. Cher iliarr pouvez-vous publier un calendrier pour la formation.
 
iliarr >>:.............

Vous ne devriez pas utiliser les bras d'agitation. Ou plutôt, vous ne devriez pas utiliser uniquement des moyennes mobiles. Essayez d'expérimenter un ensemble de différents types d'indicateurs, de préférence l'algorithme de chaque indicateur doit être radicalement différent des autres. Vous obtiendrez alors plus d'informations sur le réseau.

Encore un point.

Vous utilisez un système de trading inversé basé sur les signaux NN. C'est exactement la même chose que l'expert standard muvingaverage. Ni mieux ni pire.

Recherchez un moyen de déterminer la taille des SL et TP à l'aide de NN, et des moyens d'accompagner les positions ouvertes. Il est également possible d'ouvrir au hasard.


StatBars a écrit : >>

Dans la formation en réseau avec ha beaucoup de pièges, que vous pouvez difficilement résoudre ... À tout le moins, la résolution de la question "Pendant combien de temps le réseau fonctionnera-t-il aussi bien que lors de la formation ?" ne me semble pas du tout possible, lors de la formation avec Ga.

Je recommande d'aller vers une solution standard de problème de prédiction ns-ey.

L'AG n'est qu'un outil d'optimisation (un tournevis pour la machine). Avec des différences minimes, vous pouvez l'utiliser ou tout autre algorithme d'optimisation (tournevis).

 

Bonjour

J'ai toujours voulu en savoir plus sur les SN, mais dès que je commence à lire des ouvrages sur le sujet, ma tête se met à bouillir et finalement, je ne comprends même pas ce qu'est la SN.

Pourriez-vous donner un exemple simple (sur les doigts, pour ainsi dire) pour expliquer ce que c'est ?

Merci.