English Русский 中文 Español Deutsch 日本語 Português 한국어 Italiano Türkçe
preview
Indicateur CCI Mise à jour et nouvelles fonctionnalités

Indicateur CCI Mise à jour et nouvelles fonctionnalités

MetaTrader 5Exemples | 3 avril 2023, 10:03
721 0
Aleksej Poljakov
Aleksej Poljakov

Un bref historique

Le CCI (Commodity Channel Index, ou Indice du Canal des Matières Premières) est familier à tout trader. Il a été développé par Donald Lambert et publié pour la première fois dans le magazine Commodities (aujourd'hui Modern Trader) en 1980. Depuis, cet indicateur a acquis une renommée bien méritée et est devenu très populaire parmi les traders. Il est présent dans la Boîte à Outils de la plateforme de trading MetaTrader et est utilisé à la fois dans le trading manuel et dans le cadre de systèmes de trading automatisés.


Algorithme de calcul

Le calcul de l'indicateur CCI est assez simple et clair. L'indicateur montre de combien le prix s'est écarté de la valeur moyenne par rapport à l'écart absolu moyen. L'algorithme de son calcul peut être représenté comme suit. Considérons que la période est de N relevés de prix. Nous devons maintenant :

  • Calculer la moyenne (mean) : 

moyenne

  • Trouver l'écart moyen absolu (MAD) :

MAD

  • Calculer la valeur de l'indicateur :

CCI

Dans l'indicateur original, le facteur de correction k = 0,015. Il est déterminé de manière à ce que l'écart de prix de 1,5*MAD soit égal à 100 unités d'indicateur. Dans ce cas, l'écart de 3*MAD est de 200 unités. (Il est intéressant de noter que si la division est remplacée par la multiplication, la valeur du coefficient de normalisation k est alors de 66,6).


Modifications possibles de l’algorithme

La caractéristique notable de l'indicateur est l'utilisation de l'écart moyen absolu. Cette approche était tout à fait justifiée à l'aube de la technologie informatique puisque le calcul de l'écart absolu nécessitait moins de ressources informatiques que le calcul de l'écart type, plus approprié. Les ordinateurs modernes peuvent maintenant gérer les calculs mathématiques en un temps raisonnable. L'algorithme de calcul peut donc se présenter comme suit.

  • Trouver la somme des nombres (sumS) :

sumS

  • Trouver la somme des carrés (sumQ) :

sumQ

  • Calculer la valeur de l'indicateur :

CCI

Cet algorithme est plus précis, mais il n'est pas encore parfait. Le principal problème est que l'estimation des valeurs moyennes et de la moyenne quadratique nécessite un nombre suffisamment important de prix (au minimum 30). Cependant, les périodes courtes peuvent aussi être utilisées pour le trading. Dans la version classique du CCI par exemple, une période de 14 échantillons est recommandée.

Cela nécessite finalement des méthodes statistiques robustes. Elles permettront d'obtenir des estimations de paramètres assez stables et fiables, même dans des situations très extrêmes, qui sont nombreuses sur les marchés financiers.

Voyons comment fonctionnent des méthodes plus robustes et comparons-les aux méthodes classiques. Prenons par exemple une série chronologique de trois valeurs : p[0] = 1, p[1] = 3, p[2] = 8.

L'approche classique se réduit aux calculs suivants :

  • Moyenne : (1 + 3 + 8) / 3 = 4
  • Écart absolu (abs(1 - 4) + abs(3 - 4) + abs(8 - 4)) /3 = 2,67
  • Limites inférieure et supérieure du canal : 1,33 - 6,67 

Nous pouvons maintenant calculer en utilisant l'écart-type :

  • Moyenne : (1 + 3 + 8) / 3 = 4
  • Écart-type : sqrt(((1 - 4)^2 + (3 - 4)^2 + (8 - 4)^2) / 3) = 2,94
  • Limites inférieure et supérieure du canal : 1,06 - 6,94

Les estimations plus robustes sont également plus coûteuses en calculs. Utilisons la méthode de Theil-Sen pour estimer la moyenne. Pour cela, nous devons d'abord trouver toutes les demi-sommes des valeurs de la série chronologique prises deux à deux. Le nombre de ces paires peut être obtenu à l'aide de l'équation : num = (N*(N-1)) / 2.

Dans ce cas, la moyenne stable est égale à la médiane de ces demi-sommes. Pour trouver la médiane, nous devons d'abord trier le tableau par ordre croissant. La médiane correspondra alors à la valeur située au centre du tableau. Pour trouver la valeur médiane, nous avons besoin de l'indice de l'élément central si la taille du tableau est un nombre impair, et de l'indice des deux éléments centraux si la taille du tableau est un nombre pair. La médiane est alors égale à la moyenne de ces deux éléments.

Les équations pour calculer les indices dans les 2 cas ('taille' est le nombre d'éléments dans le tableau) :

  • taille impaire :

Index = taille / 2

  • taille paire :

Index1 = taille / 2 - 1 ; Index2 = taille / 2

Dans le cas de notre exemple, cela se présente de la façon suivante :

hs1 = (1 + 3) / 2 = 2

hs2 = (1 + 8) / 2 = 4,5

hs3 = (3 + 8) / 2 = 5,5

valeurs triées : 2 ; 4,5 ; 5,5

  • Moyenne = 4,5

Passons maintenant au calcul de l’écart. Nous devons trouver la médiane entre les valeurs absolues de la série chronologique originale et sa moyenne.

d1 = abs(1 - 4,5) = 3,5

d2 = abs(3 - 4,5) = 1,5

d3 = abs(8 - 4,5) = 3.5

valeurs triées : 3,5 ; 1,5 ; 3,5

  • Écart = 3,5
  • Limites inférieure et supérieure du canal 1 - 8


Comparaison de la version classique et de la version améliorée de l'indicateur

Comparons ces deux approches. Avec les calculs normaux, les valeurs minimales et maximales de la série allaient au-delà de la moyenne +/- l'écart. Dans le cas d'une estimation robuste, toutes les valeurs de la série originale s'inscrivent dans ces limites. La différence entre les 3 approches est évidente, mais uniquement dans notre exemple. Voyons maintenant comment les différentes méthodes de calcul se comportent sur des données réelles. Implémentons les 3 algorithmes sous la forme d’un indicateur séparé. Cela nous permettra en même temps de nous familiariser avec les caractéristiques de calcul de chaque option.

L'apparence de l'indicateur dépend largement de 2 variables : le type de prix appliqué et la période. Avec MQL5, la constante de prix peut être définie lors de la définition des propriétés de l'indicateur.

#property indicator_applied_price PRICE_TYPICAL

Avec MQL4, j'utiliserai une fonction distincte.

La période de l'indicateur indique le nombre de valeurs (ou de prix) utilisés dans les calculs.

input ushort iPeriod=14;//indicator period

La valeur minimum de la variable est 3. N'oubliez pas que si la période est petite, il est possible d'obtenir des valeurs incorrectes (trop grandes).

Le calcul de la version classique (1) du CCI sur chaque i-ème barre est effectué comme suit. Calculer tout d’abord la valeur de la moyenne de l'échantillon.

double mean=0;                //sample mean
for(int j=0; j<iPeriod; j++)
   {
    mean=mean+price[i+j];     //sum up price values
   }
mean=mean/iPeriod;            //sample mean for the period

Calculer ensuite l'écart moyen absolu.

double mad=0;                          //mean absolute deviation
for(int j=0; j<iPeriod; j++)
   {
    mad=mad+MathAbs(price[i+j]-mean);  //sum up absolute difference values
   }

Si la valeur de l'écart absolu moyen est supérieure à 0, alors l'indicateur est égal à :

res=(price[i]-mean)*iPeriod/mad;

La version (2) de l'indicateur utilisant l'écart-type est calculée comme suit. Nous devons tout d’abord calculer les sommes des prix et leurs carrés.

double sumS=0,//sum of prices
       sumQ=0;//sum of price squares
for(int j=0; j<iPeriod; j++)
   {
    sumS=sumS+price[i+j];
    sumQ=sumQ+price[i+j]*price[i+j];
   }

Nous devons ensuite trouver le dénominateur nécessaire au calcul de l'indicateur.

double denom=MathSqrt(iPeriod*sumQ-sumS*sumS);

Si le dénominateur est supérieur à 0, le résultat est le suivant :

res=(iPeriod*price[i]-sumS)/denom;

Considérons enfin les calculs utilisant les méthodes robustes. Nous devons tout d’abord préparer 2 tableaux pour stocker les résultats intermédiaires. L’un des tableaux sert à stocker les valeurs des demi-sommes, et l’autre sert à stocker les différences absolues.

double halfsums[],diff[];

Initialisez d’abord le tableau des demi-sommes pour une utilisation ultérieure. Pour cela, nous définissons sa taille ;

int size=iPeriod*(iPeriod-1)/2; //halfsums array size
ArrayResize(halfsums,size);     //set the array size

Cherchons maintenant les index des éléments centraux du tableau. Pour des raisons de polyvalence, je vais utiliser 2 index. Si la taille est impaire, alors ces indices correspondront entre eux, et resteront différents dans le cas contraire.

indx10=size/2;
indx11=indx10;
if(MathMod(size,2)==0)
   indx11=indx10-1;

Préparez ensuite le tableau des différences. Sa taille correspond à la période de l'indicateur. Les indices des éléments sont les mêmes que dans le cas précédent.

ArrayResize(diff,iPeriod);
indx20=iPeriod/2;
indx21=indx20;
if(MathMod(iPeriod,2)==0)
   indx21=indx20-1;

Nous pouvons maintenant calculer les valeurs des indicateurs. Nous avons besoin d'un compteur supplémentaire pour remplir le tableau avec les demi-sommes.

int cnt=0; //counter of array elements
for(int j=iPeriod-2; j>=0; j--)
   {
    for(int k=iPeriod-1; k>j; k--)
       {
        halfsums[cnt]=(price[i+j]+price[i+k])/2; //half sum value
        cnt++;                                   //increase the counter
       }
   }

Une fois le tableau rempli, nous devons le trier. Les valeurs du centre du tableau doivent être utilisées comme une estimation de la moyenne.

ArraySort(halfsums);                               //sort the array
double mean=(halfsums[indx10]+halfsums[indx11])/2; //robust mean

Nous pouvons maintenant déterminer une estimation robuste de l'écart-type :

for(int j=0; j<iPeriod; j++)
   {
    diff[j]=MathAbs(price[i+j]-mean);
   }
    
ArraySort(diff);
double sd=(diff[indx20]+diff[indx21])/2; //robust standard deviation

Si l'écart-type est supérieur à 0, alors la valeur de l'indicateur sera :

res=(price[i]-mean)/sd;

Nous pouvons maintenant comparer le comportement des différentes versions de l'indicateur. Dans certains cas, les indicateurs sont très similaires.


Mais dans d’autres cas, la différence est tout à fait perceptible :



Un petit Expert Advisor pour comparer les indicateurs

Les comparaisons visuelles sont subjectives et peuvent conduire à des conclusions erronées. Nous avons besoin d'une base plus fiable pour nos conclusions. Pour évaluer toutes les versions de l'indicateur, nous allons écrire un Expert Advisor simple. Appliquons-lui les mêmes règles pour l'ouverture et la clôture des positions, et comparons ensuite les résultats. Je vais utiliser les règles suivantes : le franchissement d'un niveau spécifique ouvre une position dans une direction et ferme les positions dans la direction opposée (le cas échéant).

Paramètres de l'EA :

  • TypeInd - type de l'indicateur (Classique, Carré, Moderne)
  • iPeriod - période de l’indicateur
  • iPrice - prix à utiliser
  • Level - niveau dont le franchissement doit être suivi. La valeur 150 correspond au niveau 100 du CCI classique.

Pour accélérer le test, l'algorithme de calcul de l'indicateur a été déplacé à l'intérieur de l'EA. Les valeurs de l'indicateur sont calculées à l'ouverture d'une nouvelle barre. Une position d'achat est ouverte si l’indicateur franchit à la hausse la valeur du niveau négatif. Dans le même temps, les positions de vente sont clôturées. Les positions de vente sont ouvertes (et les positions d'achat sont fermées) si la valeur de l'indicateur franchit la valeur du niveau positif vers le bas.

Paramètres de test :

Paire EURUSD

Période H1

Intervalle de temps : l'année 2021

iPeriod = 14

iPrice = PRICE_TYPICAL

Level = 150

Les options pour la courbe du solde pour les 3 cas sont présentées ci-dessous :

TypeInd = Classical

tester1

TypeInd = Square

tester2

Comme nous pouvons le constater, le calcul de l'écart-type a entraîné une diminution du nombre de transactions suivie d'une diminution des pertes importantes.

TypeInd = Modern

tester3

L'utilisation d'estimations robustes a permis d'augmenter le nombre de transactions, et le nombre de pertes importantes a été réduit encore plus. C'est un très gros avantage pour cette version de l'indicateur.

Dans tous les cas, les règles d'ouverture et de clôture des positions doivent être sérieusement améliorées.


    Modification de l'indicateur pour l'estimation de la tendance

    En observant attentivement l'indicateur CCI (dans toutes ses versions), j'ai fait une découverte étonnante : le CCI peut prendre des valeurs positives et négatives. Je ne sais pas si cela vaut le prix Nobel, mais MetaQuotes Ltd devrait créer son propre prix. Je le mérite vraiment :) . Mais trêve de plaisanteries.

    Les valeurs positives de l'indicateur sont associées à une tendance haussière. Et les valeurs négatives sont liées à une tendance baissière. Examinons cela plus en détail. L'idée générale du nouvel indicateur est la suivante : nous additionnons les valeurs du CCI depuis le début d'une tendance jusqu'à sa fin. Nous comparerons bien entendu ce mouvement avec les valeurs moyennes. De cette manière, nous pourrons évaluer la durée et la force des mouvements de tendance.

    La version des calculs avec des estimations robustes doit être utilisée comme base. La seule différence est que nous accumulerons la somme des valeurs du CCI après qu'il ait dépassé le niveau zéro. La valeur de ce montant cumulé sera utilisée comme sortie. Les montants moyens pour les tendances haussières et pour les tendances baissières seront calculés séparément pour comparaison. Le résultat global de cet indicateur se présente de la façon suivante :


    Avec cet indicateur, nous pouvons évaluer le début d'une tendance, sa force ainsi que sa fin. La stratégie la plus simple pour cet indicateur peut ressembler à ceci : à la fin de la tendance, si la tendance était au-dessus de la moyenne (l'indicateur a franchi le niveau correspondant), nous pouvons nous attendre à ce que le prix se déplace dans la direction opposée.

    Conclusion

    Comme nous pouvons le constater, un regard neuf sur les indicateurs techniques existants peut être très utile. Aucun indicateur n'est une version finale - il est toujours possible de l'affiner et de le modifier pour des stratégies spécifiques. Les fichiers suivants sont attachés :

    • mCCI - indicateur avec 3 versions différentes du CCI
    • EA CCI - EA de trading pour comparer les différentes versions du CCI
    • tCCI - indicateur de calcul des montants cumulés des tendances.

    Traduit du russe par MetaQuotes Ltd.
    Article original : https://www.mql5.com/ru/articles/11126

    Fichiers joints |
    mCCI.mq5 (3.84 KB)
    EA_CCI.mq5 (7.46 KB)
    tCCI.mq5 (4.55 KB)
    mCCI.mq4 (5.25 KB)
    EA_CCI.mq4 (6.26 KB)
    tCCI.mq4 (4.54 KB)
    Data Science des Données et Apprentissage Automatique (Machine Learning) (partie 4) : Prévoir le Krach Boursier Actuel Data Science des Données et Apprentissage Automatique (Machine Learning) (partie 4) : Prévoir le Krach Boursier Actuel
    Dans cet article, je vais tenter d'utiliser notre modèle logistique pour prédire le krach boursier en me basant sur les fondamentaux de l'économie américaine. Nous allons nous concentrer sur les actions NETFLIX et APPLE. En utilisant les krachs boursiers précédents de 2019 et 2020, voyons comment notre modèle se comportera dans la morosité actuelle.
    Apprenez à concevoir un système de trading basé sur l’indicateur Williams PR Apprenez à concevoir un système de trading basé sur l’indicateur Williams PR
    Un nouvel article dans notre série sur l'apprentissage de la conception d'un système de trading par les indicateurs techniques les plus populaires de MQL5 à utiliser dans le MetaTrader 5. Dans cet article, nous allons apprendre à concevoir un système de trading basé sur l'indicateur %R de Williams.
    Data Science des Données et Apprentissage Automatique (Machine Learning) (partie 5) : Arbres de Décision Data Science des Données et Apprentissage Automatique (Machine Learning) (partie 5) : Arbres de Décision
    Les Arbres de Décision imitent la façon dont les humains pensent pour classer les données. Voyons comment construire des arbres et comment les utiliser pour classer et prédire certaines données. L'objectif principal de l'algorithme des arbres de décision est de séparer les données contenant des impuretés en nœuds purs ou proches.
    Apprendre à concevoir un système de trading basé sur l’Ichimoku Apprendre à concevoir un système de trading basé sur l’Ichimoku
    Voici un nouvel article dans notre série sur la façon de concevoir un système de trading avec les indicateurs les plus populaires. Nous allons parler de l'indicateur Ichimoku en détail et de comment concevoir un système de trading basé sur cet indicateur.