Weighted WCCI
Download scriptThe Weighted WCCI is a specialized technical analysis tool designed to help traders identify market trends and momentum by analyzing price movement dynamics. It functions by comparing two different types of "Commodity Channel Index" (CCI) calculations—one fast and one slow—while applying a unique weighting system based on market volatility.
Core Logic and Mechanics
1. Dual Momentum Tracking The script monitors two primary indicators simultaneously:
- Turbo CCI: A high-speed indicator that reacts quickly to sudden price fluctuations.
- Standard CCI: A slower-moving indicator that provides a broader view of the general trend.
By displaying both on a single window, the tool allows users to see whether short-term "bursts" in price are supported by long-term momentum or if they are merely temporary outliers.
2. Dynamic Volatility Weighting One of the defining features of this script is its "Weighting" logic. Rather than simply showing raw data, the tool adjusts the values of both indicators based on a ratio of market volatility (using the Average True Range).
- When the market is highly volatile, the script modifies the indicator values to ensure they remain relevant to the current environment.
- This helps smooth out "noise" during erratic trading periods and provides a more balanced representation of price strength.
3. Boundary Management (Overbought/Oversold) The tool incorporates specific limits to prevent the indicators from swinging into extreme, unrealistic values. It caps the data at pre-defined "overbought" and "oversold" levels. This ensures that the visual representation remains clear and readable on the chart, making it easier for a trader to identify when a move has reached a potential exhaustion point.
4. Trend Counting and Visualization The script provides real-time feedback through several visual layers:
- Visual Buffers: It draws lines and histograms that represent the weighted values, as well as fixed horizontal levels (Trigger Levels) that act as reference points for potential entries or exits.
- Live Trend Tracking: The logic automatically tracks the current direction of the price. It identifies whether the market is currently in an "UP" or "DOWN" trend and counts how many consecutive bars have stayed in that direction.
- On-Screen Reporting: For immediate clarity, the script provides a live text comment on the chart, informing the user exactly which direction the market is trending and for how long that momentum has persisted.
Summary for the Trader
In essence, this tool acts as a sophisticated filter. It takes raw price data, adjusts it based on how volatile the market is at any given moment, and highlights whether the current trend is gaining strength or losing steam. It aims to give traders a clearer picture of market "flow" by combining speed, stability, and historical context into a single visual display.
//+------------------------------------------------------------------+
//| 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