Merci pour ce lien vers ton site que je découvre avec joie...
En attendant j'ai réussi à écrire un indicateur basé sur la considération de 3 cci.
Cet indicateur ne suffit pas par lui-même, mais il peut être utile au même titre que le RSI ou la Stochastique.
Il offre 3 courbes ( cci_14 cci_50 et cci_170 ) plus un histogramme "impulse" qui ( uniquement ) sur le chandelier en cours
va indiquer les variations impulsives du cci_14 ( attention en cas de très faible volatilité comme le soir après 22h00 ) l'impulse
peut prendre des valeurs très fortes ). J'utilise l'indicateur entre 7h00 et 17h00... ( en gmt+2)
Je m'en sers surtout en TF m1 pour scalper. J'ai mis des commentaires dans le source, je pense cela ne vous posera pas de pbs.
voici également une copie d'écran où l'on peut voir : sma_5, sma_10, slope_14 ichimoku puis rsi_14, sto_14 et enfin cci_v.
A bientôt
Voici le code :
Code
//+------------------------------------------------------------------+
//| cci_v.mq4 |
//+------------------------------------------------------------------+
#property copyright "Nicolas vt"
#property indicator_separate_window
#property indicator_buffers 4
#property indicator_width1 3
#property indicator_width4 2
#property indicator_color1 Red
#property indicator_color2 BlueViolet
#property indicator_color3 MediumVioletRed
#property indicator_color4 MediumSeaGreen
#property indicator_level1 100.0
#property indicator_level2 -100.0
#property indicator_levelcolor RosyBrown
#property indicator_levelstyle STYLE_DOT
double ExtBuffer0[];
double ExtBuffer1[];
double ExtBuffer2[];
double ExtBuffer3[];
/*
__________________________________________________________________________
| |*/
int init() /*
|__________________________________________________________________________|*/
{
IndicatorBuffers(4);
IndicatorDigits(Digits-5); // les décimales ne sont d'aucun interêt...
SetIndexDrawBegin(0,0);
SetIndexDrawBegin(1,150);
SetIndexDrawBegin(2,150);
SetIndexDrawBegin(3,150);
SetIndexBuffer(0,ExtBuffer0);
SetIndexBuffer(1,ExtBuffer1);
SetIndexBuffer(2,ExtBuffer2);
SetIndexBuffer(3,ExtBuffer3);
SetIndexStyle(0,DRAW_HISTOGRAM,EMPTY,3,indicator_color1);
SetIndexStyle(1,DRAW_LINE,DRAW_LINE, 1,indicator_color2);
SetIndexStyle(2,DRAW_LINE,DRAW_LINE, 1,indicator_color3);
SetIndexStyle(3,DRAW_LINE,DRAW_LINE, 2,indicator_color4);
SetIndexLabel(0,"cci 14 impulse ");
SetIndexLabel(1,"cci 14 ");
SetIndexLabel(2,"cci 50 ");
SetIndexLabel(3,"cci 170 ");
IndicatorShortName("CCI_V 14 50 170 impulse : ");
return(1);
}
/*
__________________________________________________________________________
| |*/
int start() /*
|__________________________________________________________________________|*/
{
int counted_bars=IndicatorCounted();
int LastBars=0;
int i;
double cci5[5]; // table des 5 derniers cci_14
int i5=0; // index tableau cci5
if(counted_bars<0) return(-1);
if(counted_bars==0) { // la suite de l'init qui ne peut pas être fait dans "init()"
LastBars=Bars;
// trace les barres antécédentes
for(i=0; i<LastBars; i++) {
ExtBuffer0[i]=2.0; // une ligne de 2 d'épaisseur
ExtBuffer1[i]=iCCI(NULL,0, 14,PRICE_TYPICAL,i);
ExtBuffer2[i]=iCCI(NULL,0, 50,PRICE_TYPICAL,i);
ExtBuffer3[i]=iCCI(NULL,0,170,PRICE_TYPICAL,i);
}
for(i=0; i<5; i++) cci5[i]=ExtBuffer1[0];
LastBars=Bars;
return(0);
}
// Début de la fonction après le lancement initial
if(LastBars != Bars) {
LastBars = Bars;
ExtBuffer0[1]= 2; // l'ancien impulse trace désormais une ligne d'épaisseur 2 au dessus de 0
}
ExtBuffer1[0]=iCCI(NULL,0, 14,PRICE_TYPICAL,0);
ExtBuffer2[0]=iCCI(NULL,0, 50,PRICE_TYPICAL,0);
ExtBuffer3[0]=iCCI(NULL,0,170,PRICE_TYPICAL,0);
// l'impulse est 2.5 x timeframe fois ( pour une visibilité identique qqs cette tf ) la différence
// entre la dernière valeur cotée du cci_14 et la moyenne des 5 dernières valeurs cotées.
ExtBuffer0[0]=((ExtBuffer1[0]*5-(cci5[0]+cci5[1]+cci5[2]+cci5[3]+cci5[4]))/2)*Period();
cci5[i5]=ExtBuffer1[0]; // nouvelle valeur remplace la + ancienne
if(i5==4) i5=0; else i5++; // incrémente le compteur circulaire
return(0);
}