L'étiquette du marché ou les bonnes manières dans un champ de mines - page 84

 

Neutron: merci d'avoir envoyé la thèse


Merci également pour le sujet abordé et les commentaires constructifs

J'ai réussi jusqu'à présent à mettre en œuvre quelque chose de similaire en utilisant SSAS (malheureusement, je n'ai lu ce fil de discussion et la thèse qu'aujourd'hui),

peut-être que K.N. en tirera quelque chose d'utile :

1. Regroupement de la fourchette intrajournalière en plusieurs groupes en fonction de la valeur moyenne du chandelier H1 et division de la journée en intervalles de temps (TI).

(2 clusters et 2 VV, mais une paire de yens a donné 4 clusters et 7 VV)

2. Des modèles sont créés pour chaque instrument et VI :

- regroupement des mouvements précédents à la hausse et à la baisse séparément par deux paramètres d'entrée : le prix et le temps.

- Regroupement des mouvements futurs à la hausse et à la baisse séparément par deux paramètres d'entrée : le prix et le temps
(ce modèle n'est bien sûr utilisé que pour préparer les données pour la phase d'entraînement).

- Modèles prédictifs :
-- Bayes naïfs

-- règle empirique

-- règles de relation

-- NS

-- arbre de décision

3. sur la base de la déviation minimale d'un extremum, un zigzag est construit - nous obtenons une structure f monotone par morceaux et, par conséquent, des motifs de N segments.

Nous formons des modèles de regroupement appropriés et regroupons les segments.

5. Nous calculons l'horizon prédictif du motif en tant que fraction de la longueur du motif ou de la longueur fixe ou au multiple le plus proche d'une fraction plus grande de la longueur du motif.

6. Calculer et classer les "prévisions".

7. Enseigner les modèles de pronostic

Pendant son fonctionnement, l'Expert Advisor charge les données dans MS SQL et génère périodiquement des points en zigzag et des prévisions. Après les avoir reçus, elle analyse les valeurs de leur support et la validité des règles. Il prend une décision sur la base de cette comparaison.


Avantages :

- Il est possible d'utiliser et de comparer les résultats de plusieurs modèles DM

- les modèles eux-mêmes peuvent choisir parmi une variété de méthodes

Inconvénients :

- Moins de paramètres pour la configuration des modèles

- fonctionnement intensif en ressources de MSSQL

- Absence de base scientifique (corrigeons, y compris les conclusions de la dissertation susmentionnée)


Sans empiéter en aucune façon sur la grande ombre de la science et des preuves dans l'ouvrage mentionné,

J'aimerais vraiment demander à tous ceux qui lisent ce fil de discussion

sur l'opportunité d'utiliser pour le clustering des entrées supplémentaires monotones par morceaux telles que le volume, le delta du marché, etc.

Peut-être peuvent-ils jouer un rôle supplémentaire, par exemple de filtrage.


S.Privalov: Essentiellement, ce travail (thèse) définit une méthodologie pour créer un modèle pour une prévision.

Je pense que c'est de cela qu'il s'agit - par exemple, lorsque vous obtenez une prévision par les règles d'ass., vous pouvez spécifier le nombre N de pièces du modèle et demander un nombre différent d'étapes de pronostic et les obtenir avec différents supports et certitudes - c'est-à-dire que nous obtenons un modèle qui peut être utilisé comme base pour une prévision.

Pensez-vous que c'est possible/comment leur appliquer votre idée d'utiliser la f. de Kalman ?

Avoir un modèle/et il serait intéressant de le former sous eux.


Voici à quoi ressemblent les modèles dans SSAS, pour cet outil 3 vi ont été identifiés

Sur http://www.fxexpert.ru/forum/index.php?showtopic=656, il y a des bibliothèques de maillages, y compris mql et d'autres trucs utiles.

 

J'ai commencé à creuser profondément dans le réseau en essayant de déterminer le nombre optimal de neurones cachés. Je suis arrivé à une conclusion plutôt intéressante, à laquelle je pense que d'autres sont arrivés depuis longtemps. Je vais essayer de l'expliquer de manière intuitive. Imaginez un neurone de couche cachée qui a 20 entrées. Avec ces entrées, comme des tentacules, il grogne sur les entrées et dans le processus de grognement, les poids des entrées sont optimisés pour obtenir les sorties attendues du réseau. Nous ajoutons maintenant un autre neurone caché, avec 20 entrées connectées aux 20 entrées du premier neurone, mais avec des poids différents. Comme le deuxième neurone sonde les mêmes entrées, il ne fournit essentiellement aucune nouvelle information. Si c'est vrai, la formation du réseau conduira aux mêmes poids d'entrée pour les deux neurones. Comme les sorties des deux neurones sont multipliées par les poids correspondants du neurone de sortie et additionnées, les poids d'entrée des deux neurones cachés peuvent différer l'un de l'autre en amplitude par un facteur égal au rapport des poids des neurones de sortie.

Quoi qu'il en soit, après avoir formé un tel réseau 20-2-1, j'obtiens ces poids d'entrée de deux neurones cachés :

Remarquez que les deux ensembles de poids se comportent de la même manière en fonction du nombre d'entrées, sauf pour le multiplicateur constant. C'est-à-dire que les deux neurones donnent la même information au neurone de sortie. C'est peut-être pour cela que l'erreur d'apprentissage de mon réseau ne s'améliore guère après l'ajout d'un deuxième neurone caché. Voici une autre image des poids des neurones cachés. Ici ils diffèrent par un signe, mais les signes des poids des neurones de sortie diffèrent également


D'une manière générale, un tel réseau à deux couches se comporte de la même manière qu'un simple réseau à une couche (modèle AR). Avec cette conclusion, je suis dans une impasse. Il s'avère que les réseaux neuronaux ne conviennent que pour la classification, c'est-à-dire lorsque la sortie n'a que deux valeurs : oui ou non. Essayer d'utiliser le réseau pour la prédiction des prix conduit aux mêmes résultats que le modèle AR puisque les sorties des neurones ne sont pas saturées et que sa fonction d'activation non linéaire joue un rôle mineur même si nous normalisons les données d'entrée à -1...+1. Je vais prendre une bière - peut-être que de nouvelles idées apparaîtront (par exemple, pour alimenter +1 et -1 aux entrées du réseau ?).

 
M1kha1l писал(а) >>

J'ai réussi jusqu'à présent à mettre en œuvre quelque chose de similaire en utilisant SSAS (malheureusement, je n'ai lu ce fil de discussion et la thèse qu'aujourd'hui),

Sur http://www.fxexpert.ru/forum/index.php?showtopic=656, il y a des bibliothèques de maillages, y compris mql et d'autres trucs utiles.

Merci, M1kha1l, pour vos aimables paroles et pour avoir partagé vos connaissances.

Votre message a besoin d'un peu de temps pour être compris. Je suis en train de le lire.

gpwr a écrit >>

J'ai commencé à creuser profondément dans le réseau en essayant de déterminer le nombre optimal de neurones cachés. Je suis arrivé à une conclusion plutôt intéressante, à laquelle d'autres sont probablement arrivés il y a longtemps. Je vais essayer de l'expliquer de manière intuitive. Imaginez un neurone de couche cachée qui a 20 entrées. Avec ces entrées, comme des tentacules, il grogne sur les entrées et dans le processus de grognement, les poids des entrées sont optimisés pour obtenir les sorties attendues du réseau. Nous ajoutons maintenant un autre neurone caché, avec 20 entrées connectées aux 20 entrées du premier neurone, mais avec des poids différents. Comme le deuxième neurone sonde les mêmes entrées, il ne fournit essentiellement aucune nouvelle information. Si c'est vrai, la formation du réseau conduira aux mêmes poids d'entrée pour les deux neurones. Comme les sorties des deux neurones sont multipliées par les poids correspondants du neurone de sortie et additionnées, les poids d'entrée des deux neurones cachés peuvent différer l'un de l'autre en amplitude par un facteur égal au rapport des poids des neurones de sortie.

Superbe travail, gpwr, je n'ai même pas pensé à regarder les poids des neurones parallèles !

Examinons le processus de réduction de l'erreur d'apprentissage (en rouge) et de l'erreur de généralisation (en bleu) pour les SN multicouches dans le processus d'apprentissage :

Nous pouvons voir que le minimum de l'erreur de généralisation (ce qui nous donne l'avantage statistique dans la prise de décision) n'est pas le même que le minimum de l'erreur de généralisation. Cela est compréhensible, car l'histoire ne se répète pas toujours exactement, elle se répète approximativement. Et s'il n'existe qu'un seul minimum global pour l'apprentissage, il existe de nombreux minima locaux pour la généralisation et il n'y a aucun moyen de choisir le meilleur. Vous ne pouvez que deviner. Et c'est là que les statistiques sous forme de neurones multiples dans une couche cachée entrent en jeu. Tous sont un peu sous-entraînés et se " vautrent " dans des minima locaux, certains au mieux (en termes d'erreur de généralisation), d'autres au pire. Tu comprends ? En général, leurs solutions sont moyennées par le neurone linéaire de sortie et cette estimation est la meilleure. De plus, l'erreur d'estimation diminue comme la racine carrée du nombre de neurones dans la couche cachée. C'est pourquoi le pouvoir prédictif de NS augmente avec le nombre de neurones dans la couche cachée.

Ces données, que vous avez citées, parlent du réentraînement de la maille et, par conséquent, du fonctionnement synchrone de tous ses neurones dans la couche cachée. La NS multicouche a dégénéré en un pseptron linéaire !

 
Neutron >> :

Merci, M1kha1l, pour vos aimables paroles et pour avoir choisi de partager vos connaissances.

Il faut un certain temps pour comprendre votre message. Je suis en train de le lire.

Excellent travail, gpwr, je n'ai même pas pensé à regarder les poids des neurones parallèles !

Voyons maintenant le processus de réduction de l'erreur d'apprentissage (en rouge) et l'erreur de généralisation (en bleu) pour le NS multicouche dans le processus d'apprentissage :

Nous pouvons voir que le minimum de l'erreur de généralisation (ce qui nous donne l'avantage statistique dans la prise de décision) n'est pas le même que le minimum de l'erreur de généralisation. Cela est compréhensible, car l'histoire ne se répète pas toujours exactement, elle se répète approximativement. Et s'il n'existe qu'un seul minimum global pour l'apprentissage, il existe de nombreux minima locaux pour la généralisation et il n'y a aucun moyen de choisir le meilleur. Vous ne pouvez que deviner. Et c'est là que les statistiques sous forme de neurones multiples dans une couche cachée entrent en jeu. Tous sont un peu sous-entraînés et se " vautrent " dans des minima locaux, certains au mieux (en termes d'erreur de généralisation), d'autres au pire. Tu comprends ? En général, leurs solutions sont moyennées par le neurone linéaire de sortie et cette estimation est la meilleure. De plus, l'erreur d'estimation diminue comme la racine carrée du nombre de neurones dans la couche cachée. C'est pourquoi le pouvoir prédictif de NS augmente avec le nombre de neurones dans la couche cachée.

Ces données, que vous avez citées, parlent du réentraînement de la maille et, par conséquent, du fonctionnement synchrone de tous ses neurones dans la couche cachée. La NS multicouche a dégénéré en un perseptron linéaire !

Mon réseau a reçu 300 exemples d'entraînement et le nombre de poids était de 45. Dans la littérature, on estime qu'avec 5 fois plus d'exemples d'entraînement que de poids, le réseau sera généralisé avec une probabilité de 95%. C'est-à-dire que mon réseau doit avoir une bonne généralisation selon la théorie, mais en fait ce n'est pas le cas. C'est pourquoi j'ai donné des exemples pour le confirmer. Je pense que le but n'est pas de prendre plus d'exemples de formation. Il s'agit de la nature du problème que j'oblige le réseau à résoudre. Si vous essayez de faire en sorte que le réseau prédise la taille de la prochaine étape du prix, il aura tendance, lors de la formation, à utiliser des poids pour lesquels les neurones opèrent dans la zone linéaire de la fonction d'activation, afin de préserver la proportionnalité entre l'étape prédite et les étapes passées en entrée. C'est-à-dire que la tâche elle-même est linéaire. Compte tenu de cet état de fait, l'ajout de neurones cachés n'améliorera rien. Et la couche cachée elle-même devient inutile. En expérimentant avec mon réseau, je suis arrivé à la conclusion qu'une simple couche fonctionne aussi bien qu'une double couche. Je pense, en lisant vos précédents messages dans ce fil, que vous êtes arrivé à la même conclusion pour l'EURUSD également.

A mon avis, le réseau devrait être utilisé pour des problèmes hautement non linéaires (comme les problèmes de XOR ou de classification) pour lesquels on peut choisir de décaler la fonction d'activation des neurones.


 

Je voulais souligner que l'essence de l'effet détecté peut être expliquée par le surentraînement de NS en raison du nombre excessif d'époques d'entraînement, et il doit y avoir un optimum dans le nombre d'époques d'entraînement Nopt (voir la figure ci-dessus), qui dépend du coefficient du taux d'apprentissage. Je n'ai pas dit que nous devions...pour prendre encore plus d'exemples de formation. "C'est l'essence même du problème de la longueur optimale de l'échantillon d'entraînement Rort=w*w/d. C'est ce que dit la théorie, et non pas que "...le nombre d'exemples d'apprentissage est égal à 5 fois le nombre de poids..." .

Nous parlons de différentes causes pour l'effet de surentraînement du réseau.

Je suis d'accord avec vous pour dire que la tâche de prédire le signe et l'amplitude de la prochaine barre est principalement linéaire et qu'il ne peut y avoir autre chose. Le marché est aussi simple qu'un pied de biche et aussi imprévisible qu'une prévision météorologique. Cependant, un peu plus tard, je publierai les résultats comparatifs de la qualité des prédictions sur les barres horaires pour la couche simple, la couche double avec deux neurones dans la couche cachée et la couche double avec 4 neurones dans la couche cachée. Tous ces éléments seront présentés en fonction du nombre d'entrées d du SN. La moyenne des données sera calculée sur 50 expériences numériques indépendantes.

 

N'y a-t-il aucun moyen... de mettre un cheval et une biche dans le même chariot ? Je veux dire MT4 et MathCad. Pour recevoir les cotations actuelles directement dans MathCad et y effectuer toute l'analyse, puis transférer le signal généré vers MT4. La première chose qui vient à l'esprit est l'utilisation du fichier, mais les deux programmes doivent constamment vérifier le contenu de deux fichiers différents. Ce n'est pas très pratique. Il y a peut-être autre chose ? C'est dommage qu'il n'y ait pas de gestion des interruptions dans MQL. Comme tout se fait mal à propos ! МТ4, ce putain de... Je pourrais m'asseoir et étudier le C++.


P.S. Je m'amuse avec les données de la grille.

 

Non, est-ce ennuyeux d'implémenter l'ensemble de l'algorithme d'analyse dans MQL ? Ou bien les difficultés sont-elles exorbitantes d'une certaine manière ?

P.S. Et je commence à avoir des statistiques...

 

Oui, il y a des difficultés avec le MQL à chaque tournant. Par exemple, voici le code (indicateur) le plus simple pour diviser un quotient en plusieurs opérations :

#property indicator_chart_window
#property indicator_buffers 2

#property indicator_color1 Red
#property indicator_color2 MediumBlue

extern int step = 5;
extern int sp = 3;

double Trans[], Kagi[];
int mn, mx, H, Cotir, Up, Dn;
bool set_new=false, SetMax=false, SetMin=false;

//******************************************************************************
int init() 
{ 
SetIndexBuffer(0, Trans);
SetIndexBuffer(1, Kagi);

SetIndexEmptyValue(0,0.0);
SetIndexEmptyValue(1,0.0);

SetIndexStyle(0,DRAW_ARROW);
SetIndexStyle(1,DRAW_ARROW);

SetIndexArrow(0,119);
SetIndexArrow(1,162);

IndicatorShortName ("Kagi++");
return(0); 
} 
//*******************************************************************************

int start() 
{ 
int reset, MaxBar, MaxBarJ, counted_bars=IndicatorCounted(), mx_j, mn_j;

if ( counted_bars<0)return(-1);
if ( counted_bars>0) counted_bars--;
int limit=Bars- counted_bars-1; MaxBar=Bars-2; MaxBarJ= MaxBar-30; 
if ( limit==Bars-1) limit=Bars-2;

//----+ ОСНОВНОЙ ЦИКЛ ВЫЧИСЛЕНИЯ ИНДИКАТОРА 
for(int i= limit; i>=0; i--)
   {
     Cotir = Open[ i]*MathPow(10.0,Digits);
          
     if(! set_new)
      {
        mx = Cotir;
        mn = Cotir;
        H = step* sp;
        set_new = true;
      }               
     if( Cotir - mx > 0)
      {
        mx = Cotir;
        mx_j = i;
      }  

     if( Cotir - mn < 0)
      {
        mn = Cotir;
        mn_j = i;
      }  

     if(! SetMax && Cotir <= mx - H) 
      {
         Trans[ i] = Cotir/MathPow(10.0,Digits); 
         mn = Cotir;           
         mn_j = i;
         SetMax = true;
         SetMin = false;
         Kagi[ mx_j] = mx/MathPow(10.0,Digits);
      } 
     if(! SetMin && mn + H <= Cotir) 
      {
         Trans[ i] = Cotir/MathPow(10.0,Digits); 
         mx = Cotir;       
         mx_j = i;
         SetMax = false;
         SetMin = true;
         Kagi[ mn_j] = mn/MathPow(10.0,Digits);
      } 

   }
return(0);  
}


Il fonctionne mais nous ne pouvons pas dessiner ses résultats avec des lignes dans la fenêtre du graphique. En outre, (ce qui dépasse ma compréhension) si l'écart est divisé par moins de 6 écarts, il ne sort rien du tout, malgré le fait que les tableaux soient formés correctement. Dans MQL, comme dans toute technologie maison, il y a beaucoup de difficultés complètement inattendues (à commencer par la double comparaison et ainsi de suite...) et de "particularités", bien sûr non documentées. Je gronde, en général...

Je comprends aussi comment vérifier la grille dans MathCad, mais comment le faire dans MQL - ne pouvez-vous pas y penser ? Et si j'ai un bug quelque part ?

 
paralocus писал(а) >>

Oui, il y a des difficultés avec le MQL à chaque tournant. Voici un code simple, par exemple, pour diviser un quotient en un certain nombre d'opérations :

voir pièce jointe - dessiner - apprécier

paralocus a écrit >>

Je sais aussi comment vérifier la grille dans MathCad, mais comment le faire dans MQL - je n'en ai aucune idée. >> Et si j'ai un bug quelque part ?

Pourquoi ne pas envisager d'utiliser NeuroShell ou Statistics ? Vous pouvez y créer des maillages et les placer dans des bibliothèques, puis les entraîner à partir de MT et surveiller leurs paramètres.
Dossiers :
 

On dirait que je ne vais pas pouvoir attendre pour collecter des statistiques sur ma SEP...

Je pense que je vais devoir abandonner l'idée de présenter les données de précision des prédictions par incréments de 1 par le nombre d'entrées NS. Par exemple, nous pouvons simplifier la tâche en prenant le nombre d'entrées comme un multiple de 2...

Raison: