WeightedCCI

Download script
Author: Copyright � 2005, Luis Guilherme Damiani
WeightedCCI

The Weighted WCCI is a sophisticated technical analysis tool designed to help traders visualize market momentum and trend strength. It functions by combining two primary indicators—the Commodity Channel Index (CCI) and a "Turbo" variation of it—and applying a unique mathematical weighting system to filter out market noise.

Core Logic and Functionality

The script operates on several layers to provide a clearer picture of price action:

1. Dual Momentum Tracking The tool simultaneously calculates two different versions of the CCI. One serves as a standard measure of momentum, while the "Turbo" version is designed to react more quickly to price fluctuations. By displaying both, the indicator allows users to see the difference between immediate price movements and broader momentum shifts.

2. Volatility-Based Weighting The standout feature of this script is its weighting mechanism. Instead of simply showing raw data, it adjusts the values based on the Average True Range (ATR). This means the indicator calculates the ratio between short-term volatility and long-term volatility. By applying this "weight" to the CCI values, the tool helps normalize the data, potentially making it more responsive during high-activity periods while remaining stable during quieter market phases.

3. Dynamic Boundary Management The script incorporates specific mathematical "ceilings" and "floors." It monitors the indicators to ensure they stay within reasonable bounds relative to a pre-defined overbought level. If the momentum pushes beyond these designated limits, the tool caps the visual output, which helps prevent extreme data spikes from distorting the overall trend analysis on the chart.

4. Trend Identification and Counting Beyond just drawing lines, the script actively analyzes the direction of the price. It tracks whether the current momentum is moving in an upward or downward direction and maintains a running count of how many consecutive bars the trend has maintained. This provides a real-time "streak" counter, helping traders gauge the persistence of the current market move.

Visual Representation

For the end-user, the script translates this logic into a multi-layered visual display:

  • Main Lines: Display the weighted and turbo momentum values for easy tracking.
  • Histogram: Provides a visual volume-like representation of the standard CCI.
  • Reference Levels: Automatically plots horizontal boundaries (overbought/oversold levels and trigger zones) to serve as visual cues for potential entry or exit points.
  • On-Screen Feedback: The script provides an active text comment on the chart, explicitly stating whether the current trend is "UP" or "DOWN" and exactly how many bars that trend has persisted.
Indicators Used
Commodity channel indexIndicator of the average true range
Miscellaneous
Implements a curve of type %1
9 Views
0 Downloads
0 Favorites
WeightedCCI
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                                Weighted WCCI.mq4 |
//|                         Copyright © 2005, Luis Guilherme Damiani |
//|                                      http://www.damianifx.com.br |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Luis Guilherme Damiani"
#property link      "http://www.damianifx.com.br"

#property indicator_separate_window
#property indicator_buffers 8
#property indicator_color1 Red
#property indicator_color2 DodgerBlue
#property indicator_color3 CadetBlue
#property indicator_color4 Red
#property indicator_color5 Red
#property indicator_color6 RoyalBlue
#property indicator_color7 RoyalBlue
#property indicator_color8 PaleGreen

//---- input parameters
extern int       TCCIp=7;
extern int       CCIp=13;
extern double    overbslevel=200.0;
extern double    triglevel=50.0;
extern double    weight=1.0;
//---- buffers
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
double ExtMapBuffer7[];
double ExtMapBuffer8[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
   SetIndexLabel(0,"Turbo CCI");
   SetIndexStyle(1,DRAW_LINE,1,3);
   SetIndexBuffer(1,ExtMapBuffer2);
   SetIndexLabel(2,"CCI");
   SetIndexStyle(2,DRAW_HISTOGRAM);
   SetIndexBuffer(2,ExtMapBuffer3);
   SetIndexStyle(3,DRAW_LINE,1,3);
   SetIndexLabel(3,"CCI");
   SetIndexBuffer(3,ExtMapBuffer4);
   SetIndexStyle(4,DRAW_LINE,1,3);
   SetIndexBuffer(4,ExtMapBuffer5);
   SetIndexStyle(5,DRAW_LINE,STYLE_DASH,1);
   SetIndexBuffer(5,ExtMapBuffer6);
   SetIndexStyle(6,DRAW_LINE,STYLE_DASH,1);
   SetIndexBuffer(6,ExtMapBuffer7);
   SetIndexStyle(7,DRAW_LINE,STYLE_DASH,1);
   SetIndexBuffer(7,ExtMapBuffer8);
   
   SetIndexDrawBegin(0,50);
   SetIndexDrawBegin(1,50);
   SetIndexDrawBegin(2,50);
   SetIndexDrawBegin(3,50);
   SetIndexDrawBegin(4,50);
   SetIndexDrawBegin(5,50);
   SetIndexDrawBegin(6,50);
   SetIndexDrawBegin(7,50);
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int trend_counter=0;
string trend="ZERO";
int start()
  {
   
   int    counted_bars=IndicatorCounted();
//---- check for possible errors
   if(counted_bars<0) return(-1);
//---- last counted bar will be recounted
   //if(counted_bars>0) counted_bars=-1;
   int limit=Bars-counted_bars;
   //if (limit>Bars-CCIp-1)limit=Bars-CCIp-1;
   //Comment(Bars+"    "+limit); 
   double Kw=0.0;
   int alt=0;
//---- 
   for (int shift = 0; shift<=limit;shift++)
   {  
   
      double CCI=iCCI(NULL,0,CCIp,PRICE_TYPICAL,shift);
      double TCCI=iCCI(NULL,0,TCCIp,PRICE_TYPICAL,shift);  
     
      if (weight==0)Kw=0; 
      else
      {  Kw=weight*iATR(NULL,0,7,shift)/iATR(NULL,0,49,shift);
         CCI=CCI*Kw;
         TCCI=TCCI*Kw;
      }
      if(TCCI>overbslevel+50)TCCI=overbslevel+50;
      if(CCI>overbslevel+50)CCI=overbslevel+50;
      if(CCI<-overbslevel-50)CCI=-overbslevel-50;
      if(TCCI<-overbslevel-50)TCCI=-overbslevel-50;
      ExtMapBuffer1[shift]=TCCI;
      ExtMapBuffer2[shift]=CCI;
      ExtMapBuffer3[shift]=CCI;
      ExtMapBuffer4[shift]=overbslevel;
      ExtMapBuffer5[shift]=-overbslevel;
      ExtMapBuffer6[shift]=triglevel;
      ExtMapBuffer7[shift]=-triglevel;
      ExtMapBuffer8[shift]=0;
      
      if (shift==0)
      {	if (CCI>0) 
		    if (trend=="UP" && limit>1)trend_counter+=1; else {trend_counter=1;trend="UP";}
	        else if (trend=="DOWN" && Bars-counted_bars>1) trend_counter+=1; else {trend_counter=1;trend="DOWN";} 	
      
	      Comment("CCI is trending ",trend," during last ",trend_counter," bar(s)");
      }		
   }
//----
   return(0);
  }
//+------------------------------------------------------------------+

Comments