Nombre del Indicador:
- CCI woodies.mq4
- Gaba
- CCI "Commodity channel index".
-
- El indicador del tipo oscilador desarrollado por "Donald Lambert" y publicado en Octubre de 1980
- Su interpretación es muy similar a la del Estocástico
- Sus lecturas se dan por sobre los niveles de 100 indicando que esta sobre-Comprado y de 0 al -100 indicando que se esta sobreVendido, tambien puede ser utilizado para detectar divergencias.
- El problema de estos indicadores es que quedan indicando sobre-compra o sobre-venta en ocasiones durante un tiempo pudiendo cometer el Trader el grave error de poner una venta, con tendencia alcista, por ello se sugiere acompañar este indicador con un Macd para ver si la dirección se confirma.
Referencias tecnológicas:Código Fuente:
- // ===============================================================
// CCI Woodies.mq4
// ===============================================================
#property copyright "Copyright © 2005, Gaba"
#property link "http://www.metaquotes.net"
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Silver
#property indicator_color2 LimeGreen
#property indicator_color3 OrangeRed
#property indicator_color4 Blue
#property indicator_color5 Yellow
#property indicator_minimum -300
#property indicator_maximum 300
#property indicator_level1 200
#property indicator_level2 100
#property indicator_level3 -100
#property indicator_level4 -200
// Variables definibles por el usuario
extern int fastPeriod = 6;
extern int slowPeriod = 14;
extern int histLength = 500;
// definición de buffers
double FastBuffer[]; // Áûñòðûé CCI
double SlowBuffer[]; // Ìåäëåííûé CCI
double HistBuffer[];
double UpTrBuffer[];
double DnTrBuffer[];
// ===============================================================
// Inicialización del indicador
// ===============================================================
int init()
{
string short_name;
IndicatorBuffers(5);
IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS));
short_name="WoodiesCCI("+fastPeriod+","+slowPeriod+")";
IndicatorShortName(short_name);
// Definiciones
SetIndexStyle(0, DRAW_HISTOGRAM);
SetIndexBuffer(0, HistBuffer);
SetIndexDrawBegin(0, slowPeriod);
SetIndexLabel(0,"SlowCCI histogram");
SetIndexEmptyValue(0, EMPTY_VALUE);
// ---
SetIndexStyle(1, DRAW_HISTOGRAM);
SetIndexBuffer(1, UpTrBuffer);
SetIndexDrawBegin(1, slowPeriod);
SetIndexLabel(1,"UpTrend histogram");
SetIndexEmptyValue(1, EMPTY_VALUE);
// ---
SetIndexStyle(2, DRAW_HISTOGRAM);
SetIndexBuffer(2, DnTrBuffer);
SetIndexDrawBegin(2, slowPeriod);
SetIndexLabel(2,"DnTrend histogram");
SetIndexEmptyValue(2, EMPTY_VALUE);
// ---
SetIndexStyle(3, DRAW_LINE,1,3);
SetIndexBuffer(3, SlowBuffer);
SetIndexDrawBegin(3, slowPeriod);
SetIndexLabel(3,"SlowCCI("+slowPeriod+")");
SetIndexEmptyValue(3, EMPTY_VALUE);
// ---
SetIndexStyle(4, DRAW_LINE);
SetIndexBuffer(4, FastBuffer);
SetIndexDrawBegin(4, slowPeriod);
SetIndexLabel(4,"FastCCI("+fastPeriod+")");
SetIndexEmptyValue(4, EMPTY_VALUE);
return(0);
}
// ===============================================================
// Cierrre del indicador
// ===============================================================
int deinit()
{
return(0);
}
// ===============================================================
// Inicio del indicador
// ===============================================================
int start()
{
string symbolName;
int i, shift, checksum, counted_bars=IndicatorCounted();
double slowCCI=0.0;
if (Bars// Hay Errores ?
if (counted_bars<0) return(-1);
// Recontar barras
if (counted_bars>0) counted_bars++;
int limit=Bars-counted_bars;
if (counted_bars<1 || checksum!=(histLength+fastPeriod+slowPeriod+Period()) || symbolName!=Symbol())
{
// Inicialización
for(i=Bars-1; i<=Bars-histLength; i++)
{
FastBuffer[i]=EMPTY_VALUE;
SlowBuffer[i]=EMPTY_VALUE;
HistBuffer[i]=EMPTY_VALUE;
UpTrBuffer[i]=EMPTY_VALUE;
DnTrBuffer[i]=EMPTY_VALUE;
}
checksum = histLength+fastPeriod+slowPeriod+Period();
symbolName=Symbol();
limit = histLength;
}
for (shift=limit; shift>=0; shift--)
{
FastBuffer[shift] = iCCI(NULL,0,fastPeriod,PRICE_TYPICAL,shift);
SlowBuffer[shift] = iCCI(NULL,0,slowPeriod,PRICE_TYPICAL,shift);
HistBuffer[shift] = SlowBuffer[shift];
UpTrBuffer[shift] = EMPTY_VALUE;
DnTrBuffer[shift] = EMPTY_VALUE;
int a, up=0, dn=0;
for (a=0;a<8;a++)
{
slowCCI=iCCI(NULL,0,slowPeriod,PRICE_TYPICAL,shift+a);
if (slowCCI>0) up++;
if (slowCCI<=0) dn++;
}
if (up>=6) UpTrBuffer[shift]=SlowBuffer[shift];
if (dn>=6) DnTrBuffer[shift]=SlowBuffer[shift];
}
return(0);
}
//--- Fin del programa
- Rubén Dieminger http://AnalizandoForex.blogspot.com
Lectura recomendada:
- El analisis tecnico de la A a la Z
- The Technical Analysis from a TO Z.
- Escrito por Steven B. Achelis, Manuel Cabedo