Ce qu’il est possible de faire avec les Moyennes Mobiles

Oleh Fedorov | 2 septembre, 2022

Introduction

J'ai plusieurs systèmes de trading qui fonctionnent. En général, je n'utilise pas d’indicateurs calculés sur chaque tick. Je préfère analyser les courbes. Mais il m'arrive parfois d’avoir des idées qui améliorent ma perception d'un graphique des prix, voire qui changent complètement ma vision du trading, même si elles nécessitent quelques calculs.

Cet article présente quelques idées liées à l'indicateur le plus populaire et le plus facile d’accès - la moyenne mobile (МА).

Dans sa version la plus simple, la valeur de l'indicateur est calculée à l'aide de la formule de la moyenne :

MA[i] = (Price[i]+Price[i+1]+...+Price[i+MAPeriod])/MAPeriod

Ici, MA[i] est le i-ème élément de la séquence. Il correspond à un point sur une courbe. Price[i] - est le prix de la i-ème barre (depuis la dernière barre), et MAPeriod - est le nombre d'éléments utilisés pour le calcul de la moyenne.

Nous pouvons bien sûr appliquer n'importe quel prix : Open (prix d’ouverture), Close (prix de clôture), Plus Haut, Plus Bas, valeurs moyennes pondérées, etc. Un indicateur classique permet de sélectionner à la fois le prix de calcul et la méthode de calcul, y compris celles qui sont plus complexes qu'une simple moyenne... Des exemples seront fournis. Je vous laisse la possibilité de choisir la méthode de calcul de votre choix. Cela n'est toutefois pas important pour saisir l'idée qui sous-tend les méthodes considérées. Tous les exemples fonctionnent assez bien, que l'on utilise une Moyenne Mobile "Simple" (SMA), une Moyenne Mobile Exponentielle (EMA) ou n’importe quelle autre. Notez que la SMA est utilisée par défaut dans toutes les captures d'écran et dans les paramètres par défaut des indicateurs. Tous les indicateurs utilisent les prix de Clôture, sauf indication contraire. Vous êtes libre de jouer avec ces paramètres pour les améliorer.

Lorsque je parle d'une seule courbe, j'utilise généralement une nombre de périodes par défaut de 10 barres. Si plusieurs courbes avec des périodes différentes sont utilisées dans un même indicateur, les périodes appliquées seront le plus souvent 5 et 8. Je n'utilise en général pas plus de deux courbes avec des périodes différentes.

Les couleurs sont les suivantes : rouge - rapide, orange - lente... Si j'utilise autre chose, je l'indiquerai explicitement dans le texte.


Modèle d’indicateur

J'ai déjà créé plusieurs indicateurs pour visualiser les signaux déclenchés lors de l'utilisation de diverses approches des courbes. Ils sont basés sur un modèle unique qui ressemble beaucoup au MACD standard présent dans les exemples. Il est inutile de montrer le code complet du modèle ici.

Chaque indicateur utilisera une ou plusieurs Moyennes Mobiles et parfois aussi l'ATR pour définir une distance ou pour dessiner des canaux.

Il est parfois plus facile de visualiser une idée si un indicateur est situé sur le graphique. D’autres fois, il faut une fenêtre séparée. Ceci est fait en utilisant une propriété spécifique de l’indicateur. La propriété suivante permet de spécifier d’utiliser la fenêtre du graphique :

#property indicator_chart_window

Si un indicateur doit être situé dans une fenêtre séparée, il faut utiliser cette propriété à la place :

#property indicator_separate_window

Et dans ce cas, on peut définir la hauteur de la fenêtre à l'aide de la propriété :

#property indicator_height 100

La valeur de la propriété peut bien sûr être modifiée.

Les noms des buffers (tableaux pour stocker des données) ont le suffixe "Buffer" à la fin. Par exemple, les buffers pour les flèches standards seront appelés ArrowDownBuffer et ArrowUpBuffer. Si l'indicateur dessine les lignes, le buffer sera nommé selon la fonction de la ligne.

Toutes les variables globales auront le préfixe "ext" (si elles ne sont pas des buffers). Par exemple, extATRData est une variable globale contenant les données de l'indicateur ATR.

Je vais utiliser des buffers sans passer en mode "série".

Pendant l'initialisation, toutes les valeurs sont initialisées avec la valeur 0 :

  PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
  PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
  PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);

Nous n'avons donc que d’afficher les conditions d’affichage des flèches et des lignes, c'est-à-dire tout ce qui reste dans la boucle principale.

J'essaie toujours d'éviter les redessinages de l'indicateur. Donc le dessin est effectué sur la bougie zéro, les données des bougies déjà fermées sont utilisées pour les calculs.


Les prix croisent la courbe de la MA (direction de la tendance)

Dans le cas le plus simple, la ligne de la МА est utilisée en solo, dans sa forme "naturelle". Je pense que vous avez déjà tous vu une image similaire sur vos écrans :

MA "simple"

Fig. 1 : Moyenne Mobile Simple

Dans la plupart des cas, les traders utilisent la MA pour suivre la tendance. Une tendance peut être définie comme un ensemble de bougies situées d'un seul côté de la courbe. Par exemple, si plus de deux bougies clôturent en dessous de la ligne, la tendance est baissière, il est alors temps d'envisager des transactions courtes. Si le cours de clôture est supérieur à la courbe, la tendance est haussière, et il est donc temps d'acheter... Si le prix traverse la courbe de la MA, nous assistons à un changement de tendance.

Les conditions permettant de détecter un croisement peuvent se présenter comme suit :

//--- main cycle
  for(i=start+3; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    if(
      ((close[i-1]<extMAData[i-1]
        && open[i-1]>extMAData[i-1]
       )
       ||(close[i-2]>extMAData[i-2]
          && open[i-2]>extMAData[i-2]
          && close[i-1]<extMAData[i-1]
          && open[i-1]<extMAData[i-1]
         )
      )

    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/5;
     }
    else
      if(
        ((close[i-1]>extMAData[i-1]
          && open[i-1]<extMAData[i-1]
         )
         ||(close[i-2]<extMAData[i-2]
            && open[i-2]<extMAData[i-2]
            && close[i-1]>extMAData[i-1]
            && open[i-1]>extMAData[i-1]
           )
        )
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/5;
       }
   } // main cycle

Au lieu de vérifier les prix Open, nous pouvons concentrer notre attention uniquement sur les prix Close de la barre actuelle et des barres précédentes. S'ils sont situés de part et d'autre de la courbe, il y a un croisement.

Le fichier de l'indicateur est nommé MA-Breaking.mq5. En l'exécutant sur le graphique, on obtient le résultat suivant (pour une période de 10 barres) :

MA - croisement

Fig. 2 : Croisement de la Moyenne

Je pense que cette méthode nécessite un tri supplémentaire. Le nombre de flèches ascendantes correspond presque au nombre de flèches descendantes, même dans la zone de tendance. Lorsque l'on augmente la période de la МА, le nombre de flèches diminue. Mais cela n'est pas d'une grande aide car une rupture brutale avec une tendance sans retour en arrière est un événement plutôt rare. Dans la plupart des cas, un mouvement fort est précédé d'un temps calme. Nous allons donc chercher des filtres...


МА comme ligne de Support/Résistance

La prochaine façon assez évidente d'utiliser la courbe de la MA est de l'appliquer comme ligne de Support/Résistance. Si le prix touche la ligne mais ne la traverse pas (clôture du même côté), c’est un signal de transaction. Par exemple, le 17 février, nous pouvons voir 3 points de mouvement à la baisse. Sans filtre supplémentaire, un point de mouvement à la hausse (au début).

Nous pouvons utiliser cette règle à la fois pour ouvrir une première transaction ou pour ajouter à la transaction existante.

Ce concept est démontré dans le fichier intitulé MA-Support.mq5.

//--- main cycle
  for(i=start+3; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    if(
      (high[i-1]>=extMAData[i-1]
       && close[i-1]<extMAData[i-1]
       && open[i-1]<extMAData[i-1]
      )
    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/5;
     }

    else
      if(
        (low[i-1]<=extMAData[i-1]
         && close[i-1]>extMAData[i-1]
         && open[i-1]>extMAData[i-1]
        )
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/5;
       }
   } // Main cycle end

Voici le résultat :

МА utilisée comme ligne de Support/Résistance

Fig. 3 : МА utilisée comme ligne de Support/Résistance

Cela semble être plus efficace que l'option précédente. Si nous utilisons les niveaux des prise de bénéfices, ou même simplement l'accumulation des ordres au niveau des flèches et leurs sorties au niveau des flèches opposées, la probabilité d'un trading rentable est élevée.

Plus la période de la МА est élevée, plus l'angle est faible et plus il est situé loin du prix. Ainsi, les signaux de cassure et de retour en arrière arrivent moins souvent mais le niveau devient plus fiable comme niveau de Support/Résistance. Voyons ensemble un graphique à 20 périodes pour comparer. Nous pouvons voir que les retours sont moins fréquents. Mais les signaux sont probablement plus fiables, ce qui permet de réduire le niveau des stop loss.

МА comme Support/Résistance (période augmentée)

Fig. 4 : MA avec une plus grande période (20)

Par exemple, à 4 heures du matin le 17 février, la courbe rouge fournit un signal d'achat. Nous obtenons une perte puisque la courbe orange fournit un signal de vente. Cependant, en utilisant la ligne rouge, nous pouvons utiliser des signaux à 8 heures, 10 heures et 15 heures pour compléter la position.

Dans le cas de périodes de MA plus élevées, les signaux arrivent plus tard, ce qui peut entraîner la perte d'une partie d'un bénéfice potentiel, bien que les transactions puissent devenir moins fréquentes.


Inclinaison

Plus la pente de la courbe est forte, plus le prix se déplace rapidement et plus il est probable que la tendance se poursuive sur la bougie suivante.

La façon la plus simple de mesurer la pente est d'utiliser la différence entre les valeurs actuelles et les valeurs précédentes. Si la différence est positive, la courbe se déplace vers le haut. Si elle est négative, elle se déplace vers le bas.

Le code de la boucle principale dans MA-Slope.mq5 est comme suit :

//--- main cycle
  for(i=start+SlopeShift*2; i<rates_total && !IsStopped(); i++)
   {
    SlopeDownBuffer[i]=0;
    SlopeUpBuffer[i]=0;
    slopeIndex=(extMAData[i-1]-extMAData[i-1-SlopeShift]);

    //---

    if(
      slopeIndex<0

    )
     {
      SlopeDownBuffer[i]=slopeIndex;
     }
    else
      if(
        slopeIndex>0
      )
       {
        SlopeUpBuffer[i]=slopeIndex;
       }
   } // main cycle

Ici, SlopeShift spécifie le nombre de barres à dépasser à partir du prix actuel. La valeur par défaut est 1. Mais nous pouvons obtenir des résultats assez intéressants en augmentant cette valeur, par exemple en utilisant la différence des valeurs des MA de 2 ou 3 barres.

La courbe résultante peut être affichée sous forme d'histogramme. Voici le résultat ci-dessous :

МА - histogramme de la pente

Fig. 5 : Histogramme de la pente de la courbe

Le résultat est assez intéressant.

Il est tout d’abord évident que nous pouvons facilement suivre et trier les fluctuations des mouvements aléatoires. Si le sens de la courbe ne change que pendant une, deux ou trois barres, il est probablement prématuré de parler d'un changement de tendance. Dans tous les cas, nous devons faire très attention à ne pas le manquer.

Deuxièmement, les changements de taux sont visibles immédiatement. Comme nous pouvons le voir, si la hauteur de la colonne du diagramme est inférieure à une certaine valeur, nous sommes très probablement confrontés à un plateau. Il serait donc déraisonnable de trader dans le sens de la petite pente de la MA plus de 2 ou 3 barres.

Troisièmement, bien que la courbe des segments de tendance semble monter ou de descendre de façon presque monotone, le taux de variation réel change fortement d'une barre à l'autre. Cela suggère une sorte de valeur relative, qui pourrait peut être nous aider à voir quelque chose que nous ne voyons pas encore.

Essayons avec le fichier МА-Slope-Index-First.mq5... Voici le code :

//--- main cycle
  for(i=start+SlopeShift*3; i<rates_total && !IsStopped(); i++)
   {
    SlopeDownBuffer[i]=0;
    SlopeUpBuffer[i]=0;
    slopeIndex=(extMAData[i-1]-extMAData[i-1-SlopeShift]+Point()/100)
               /(extMAData[i-2]-extMAData[i-2-SlopeShift]+Point()/100);
    //---

    if(
      slopeIndex<0
    )
     {
      SlopeDownBuffer[i]=slopeIndex;
     }
    else
      if(
        slopeIndex>0
      )
       {
        SlopeUpBuffer[i]=slopeIndex;
       }
   } // main cycle

L'ajout d'une petite valeur(Point()/100) au dividende et au diviseur ne change pas beaucoup le résultat, mais il nous permet d'éviter les erreurs de division par zéro.

L'image est la suivante :

MA - pente relative

Fig. 6 : Indice relatif de la pente moyenne

Des pics importants peuvent être observés aux jonctions. Si nous déplaçons le graphique de quelques barres vers la gauche, la différence devient encore plus visible.

МА - pente relative déplacé vers la gauche

Fig. 7 : Indice relatif de la pente de la MA (déplacé vers la gauche)

La figure 7 montre de manière frappante comment les valeurs des pics marquent les limites d'un mouvement assez fort. La différence des valeurs maximales avec le reste du tableau de données est assez importante. Le fait que les "pics" soient si différents les uns des autres en termes de taille, ainsi que le fait que la différence entre les pics et les autres données soit si considérable, conduisent à l'étape suivante. Puisque le changement de direction est si important, je ne vois pas l'intérêt d'analyser les histogrammes d'un indice de pente relative. Au lieu de cela, nous pouvons simplement rendre la sortie plus flagrante en la rendant binaire. Par exemple, comme ceci (МА-Slope-Index-Bin.mq5) :

//--- main cycle
  for(i=start+SlopeShift*3; i<rates_total && !IsStopped(); i++)
   {
    SlopeDownBuffer[i]=0;
    SlopeUpBuffer[i]=0;
    slopeIndex=(extMAData[i-1]-extMAData[i-1-SlopeShift]+Point()/100)
               /(extMAData[i-2]-extMAData[i-2-SlopeShift]+Point()/100);
    //---

    if(
      slopeIndex<=-SlopeThreshold
    )
     {
      SlopeDownBuffer[i]=-1;
     }
    else
      if(
        slopeIndex>=SlopeThreshold
      )
       {
        SlopeUpBuffer[i]=1;
       }
   } // Main cycle


Ici, SlopeThreshold est le seuil de la hauteur de la barre du diagramme précédent, à laquelle le signal est déclenché. Sur l'image, la valeur du paramètre est égale à 5.

Pente relative de la МА (binaire)

Fig. 8 : Indice relatif de la pente moyenne (binaire). SlopeThreshold=5

Voici une autre image avec SlopeThreshold=15

Indice de pente relative, avec SlopeThreshold=15

Fig. 9 : Indice relatif de la pente moyenne (binaire). SlopeThreshold=15

Ces barres méritent vraiment qu'on s'y attarde !

Apparemment, ces marques indiquent un changement de direction de la bougie actuelle, ou de 2-3 bougies (min.) après celle marquée. Dans tous les cas, il y a une dépendance claire de la tendance aux couleurs des marques, à la direction principale et à la bougie actuelle. Bien sûr, nous devons rassembler des statistiques. Nous pouvons par exemple nous inspirer de la manière décrite dans mon article sur les feuilles de calcul (). Utilisé avec d'autres méthodes fournies ici, l'indicateur semble déjà prometteur...

Bien sûr, les bandes sur l'histogramme peuvent être facilement remplacées par des flèches, comme pour les indicateurs précédents.


Canaux basés sur une Moyenne Mobile

Nous pouvons construire des canaux basés sur les Moyennes Mobiles afin de prendre en compte la volatilité des prix. Il existent de nombreuses options. Je n’en retiendrai que 2 ici.

La première est très simple puisqu'elle ne nécessite que l'indicateur Moyenne Mobile standard. Nous ne devrions avoir qu’à ajouter des niveaux lors de l'ajout d'un indicateur sur le graphique. Le seul problème est que chaque période a ses propres niveaux. Je les ai rassemblés dans un seul "paquet" pour éviter de les saisir à chaque fois que je change de période. Par exemple pour JPY :

Chaîne simple - MA

Fig. 10 : Liste des niveaux du canal

L'image finale sur la période H1 se présente comme suit :

Canal constitué de différents niveaux

Fig. 11 : Affichage des niveaux (période H1)

Les niveaux sont définis pour un retour ici. Donc si une bougie touche un niveau et revient en arrière (ou s'en rapproche), vous devez entrer sur la marché dans le sens contraire de la tendance. Par exemple, le canal de la figure 11 montre qu'il y avait un bon moment pour vendre le 22 février. Nous pouvons placer un ordre au milieu de la bougie de signal ou à la fin (ici, si nous entrons après un rollback, un ordre aurait pu être placé au niveau bas de la bougie de signal - 115.100, tandis que le stop aurait pu être placé à 115.265). La cible est de toucher la moyenne, et l'objectif ultime est de toucher la frontière opposée du canal.

Mais dans ce cas, il est également possible de trader la percée du petit canal. Par exemple, la bougie de 9 heures a clôturé au-dessus de la bordure du petit canal le 22 février. Deux bougies haussières ont clôturé au-dessus de la moyenne, alors que la bougie baissière qui les sépare n'a pas dépassé la limite inférieure. La pente de la МА est clairement descendante (on peut le voir plus clairement si on regarde le graphique avec MA-Slope réglé). Tout ceci peut donc être utilisé comme un signal d'achat clair. Un niveau de stop peut être fixé à 114.570. Et le point d'entrée peut être calculé grâce aux niveaux. Nous pouvons le définir à 115.230. Nous pouvons aussi utiliser un trailing stop, ou toute autre méthode que nous souhaitons.

Veuillez noter que seuls deux canaux peuvent être vus sur la période : le plus petit, et celui qui est légèrement plus grand. Si nous passons à une période supérieure, disons D1, le canal +-50 est presque caché, tandis que +-300 et +-1500 deviennent opérationnels. Le canal mensuel peut aussi être parfois visible. Il peut même fournir des signaux. Mais les canaux les plus visibles sont utilisés comme étant les principaux canaux.

Multiples canaux (D1)

Fig. 12 : Affichage des niveaux (période D1)

Une image similaire est peut être vue sur les périodes hebdomadaire et mensuelle. Le quatrième canal convient le mieux. Le troisième peut être utilisé comme canal interne et auxiliaire.

Le canal le plus interne est conçu pour les périodes М1-М15.

Le principe d'ajustement est simple : nous passons sur la période désirée et nous sélectionnons la taille des niveaux de manière à avoir le minimum de points de contact, tout en ayant le maximum d'amplitude possible entre eux. Le moyen le plus simple d'y parvenir est de mesurer l'amplitude de la principal correction sur la période actuelle et de la diviser par 2. L'animation ci-dessous illustre ce processus.

Mesure de la taille du canal

Fig. 13 : Mesure de la volatilité du canal (période D1)

Après quelques estimations approximatives, nous devrons peut-être ajuster la taille plus précisément, mais c'est assez facile à faire...


Canaux basés sur 2 Moyennes Mobiles (ATR3x5)

Les canaux décrits ci-dessus sont corrects, mais ils présentent quelques inconvénients.

Tout d'abord, la taille du canal doit être définie manuellement pour chaque période et pour chaque symbole. L'automatisation du processus semble être une tâche difficile.

Deuxièmement, les niveaux ne sont pas stockés dans des buffers. Cela signifie qu'il serait difficile de les utiliser dans un programme.

Le canal basé sur les Moyennes Mobiles et sur l'ATR ne présente pas ces inconvénients. L'idée est relativement simple. Prenons 2 Moyennes Mobiles avec une période de 3. L'une d'elle est appliquée aux Plus Hauts(high) et l’autre est utilisée avec les Plus Bas(low). Déplacez ensuite les lignes obtenues à la distance d'un ATR de 5 périodesdans la direction appropriée (la ligne inférieure va vers le bas, la ligne supérieure vers le haut).

Et le canal est prêt ! Il s'adapte parfaitement à n'importe quel symbole et fonctionne surtout sur les retours puisque les percées sont plutôt rares. J'ai également ajouté des flèches pour détecter les contacts avec les bords du canal.

//--- main cycle
  for(i=start+3; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    MAUpBuffer[i]=extMAUpData[i]+extATRData[i]*DistanceCoefficient;
    MADownBuffer[i]=extMADownData[i]-extATRData[i]*DistanceCoefficient;

    if(
      (high[i-1]>=MAUpBuffer[i-1]
       && close[i-1]<MAUpBuffer[i-1])
      ||(
        close[i-2]>MAUpBuffer[i-2]
        && close[i-1]<MAUpBuffer[i-1]
      )
    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/5;
     }
    else
      if(
        (low[i-1]<=MADownBuffer[i-1]
         && close[i-1]>MADownBuffer[i-1])
        ||(
          close[i-2]<MADownBuffer[i-2]
          &&close[i-1]>MADownBuffer[i-1]
        )
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/5;
       }
   }// main cycle

Ici, DistanceCoefficient est un paramètre de l'indicateur permettant de modifier la distance des bordures du canal en ajustant l'indicateur à des conditions spécifiques. Le paramètre peut prendre n'importe quelle valeur fractionnaire. Cependant, il n'y a pas vraiment d'intérêt à en fixer plus de 2 puisque les flèches disparaissent presque complètement dans ce cas (ce qui signifie qu'aucune transaction n'est effectuée).

Canal ATR3x5

Fig. 14 : Canal ATR3x5

Bien entendu, l'indicateur peut être utilisé avec de nombreux autres indicateurs.

Lorsque vous regardez l'image, faites attention à la façon dont le prix réagit avec les sommets et les creux de l'indicateur. Cela peut être utile.


Plusieurs indicateurs avec des périodes différentes

Jusqu'à présent, nous avons considéré l'utilisation d'une seule ligne de Moyenne Mobile pour identifier les signaux d'achat et de vente du marché. Cependant, de nombreux traders pensent que la précision de l'entrée peut être grandement améliorée en ajoutant un ou plusieurs autres indicateurs.

Créons donc le graphique avec deux courbes ayant des périodes de 5 et 8 barres respectivement. Les périodes sont tirées de la série de Fibonacci. L'une des périodes décrit la ligne "rapide", tandis que l’autre décrit la ligne "lente".

2 MA affichées simultanément

Fig. 15 : Deux MA sur un seul graphique

En plus des caractéristiques déjà considérées, nous avons maintenant la possibilité de voir la position relative des courbes et leur convergence (ou leur divergence). La distance entre les courbes apparaît également.

Chacun des paramètres peut renforcer ou affaiblir certains mouvements affichés par chacune des courbes, ainsi que fournir des signaux d'entrée indépendants.


Position Relative. Croisement des Moyennes Mobiles

Si la MA rapide est située au-dessus de la MA lente, nous assistons très probablement à une tendance haussière. La probabilité que la prochaine bougie soit haussière est très élevée. D'autres paramètres doivent également être pris en compte, par exemple la pente de la ligne de signal.

Si la MA rapide est inférieure à la MA lente, nous avons une tendance baissière "globale" (pour la période actuelle). La probabilité que chaque bougie suivante soit baissière augmente fortement jusqu'à ce que nous atteignions le sommet...

Nous pouvons admettre un changement de tendance si la MA rapide croise la MA lente.

Essayons de développer un indicateur répondant au croisement des MAs. Nous devrions également envisager les périodes plates pour réduire les fausses entrées. Cela peut être fait, par exemple, en considérant la taille de la pente rapide de la MA. Dans ce cas, nous pouvons utiliser le code suivant pour rechercher des signaux (MA2-Breaking) :

//--- main cycle
  for(i=start+3+SlopeShift*2; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    if(
      extMAFastData[i-1]<extMASlowData[i-1]
      && extMAFastData[i-2]>=extMASlowData[i-2]
      && MASlope(extMAFastData,i-1)<-SlopeThreshold
      && MASlope(extMASlowData,i-1)<SlopeThreshold/SlowDelimiter
    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/3;
     }
    else
      if(
        extMAFastData[i-1]>extMASlowData[i-1]
        && extMAFastData[i-2]<=extMASlowData[i-2]
        && MASlope(extMAFastData,i-1)>SlopeThreshold
        && MASlope(extMASlowData,i-1)>-SlopeThreshold/SlowDelimiter
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/3;
       }
   } // main cycle

Ici, MASlope est une fonction qui calcule la pente de la MA d'une manière similaire à l'exemple fourni dans la section Pente. Elle prend en paramètre le tableau de données pour la courbe nécessaire et l'index de la barre sur laquelle les calculs sont effectués.

SlopeTreshold - seuil de la pente de la MA rapide. Comme vous vous en souvenez peut-être, si la pente de la MA rapide est trop faible au moment du franchissement, nous avons très probablement affaire à une période plate. La période plate est généralement assaillie par un grand nombre de faux positifs qui finissent par générer des pertes.

SlowDelimiter - délimiteur du seuil de la pente de la MA lente. Parfois, nous pouvons avoir un très bon signal lorsque la MA rapide a déjà basculé vers le bas, alors que la MA lente ne s'est pas encore inversée, bien qu'elle soit proche de l'inversion. En d'autres termes, l'entrée

MASlope(extMASlowData,i-1)>-SlopeThreshold/SlowDelimiter

signifie que la pente de la MA lente peut avoir soit une valeur négative faible (dirigée vers le bas), être égale à 0 ou être positive, mais pas fortement négative.

Si nous utilisons l'indicateur dans sa forme "simple", le seuil et le délimiteur doivent être sélectionnés pour chaque outil et chaque période séparément. Ci-dessous le résultat obtenu pour USDJPY en période H1 avec SlopeTreshold=0.017 et SlowDelimiter=5 :

Signaux de croisement des MA en tenant compte de la pente

Fig. 16 : Signaux de croisement des MA en tenant compte de la pente

L'image n'a pas de courbes afin que les flèches soient plus visibles. Si nous sélectionnons la bonne valeur de take profit (ou niveaux Exit By), nous pouvons obtenir un profit à partir de presque chaque flèche en fixant des niveaux de stop qui ne sont pas trop déficitaires.

L'image ci-dessous représente le même graphique de plus près avec un zoom plus grand.

Croisement des MA (zoomé)

Fig. 17 : Croisement des MA en tenant compte de la pente (zoomé)

Comme vous vous en souvenez peut-être, le signal arrive sur la bougie 0. Cependant, l'intervalle précédent est analysé. Donc pour comprendre les raisons du dessin d'une flèche, nous devons examiner l'intervalle entre la ligne verte et la barre de gauche.

Pourquoi n'avons-nous pas deux flèches à droite ? La pente ne dépasse pas le seuil pour une MA lente ou rapide, et l'indicateur considère cet intervalle comme une période plate. Cependant, si j'avais tradé cette zone avec ces signaux, je n'aurais probablement pas de raisons de râler puisque la tendance a continué à monter et a permis de vendre à un meilleur prix.

Croisement des MA - la tendance se poursuit

Fig. 18 : Signaux de croisement : la tendance se poursuit


Conclusion

J'ai encore des choses à dire à ce sujet, mais je le ferai dans un autre article.

Dans cet article, j'ai considéré les éléments de base liés aux Moyennes Mobiles et nous permettant de suivre la direction générale du mouvement des prix.

En outre, j'ai affiché le code d'indicateurs démontrant graphiquement l'utilisation des principaux paramètres de la MA pour prendre des décisions de trading.

J'ai montré les moyens d'améliorer une stratégie de trading en combinant les propriétés d'indicateurs bien connus, en les appliquant ensemble.

Dans le prochain article, j'espère vous révéler comment nous pouvons calculer la position de chaque bougie en nous basant sur les données des moyennes mobiles et des indicateurs qui en sont dérivés.

L'article ne garantit pas que les informations qu'il contient vous aideront dans vos transactions.

Que le profit soit avec vous !