CCI_Histogram_v2
Download scriptThe WoodiesCCI is a specialized technical analysis tool designed to help traders visualize market momentum and identify "neutral zones" based on the Commodity Channel Index (CCI). Instead of showing a single complex line, this script breaks down price data into several distinct visual layers to provide a clearer picture of how the market is behaving.
Core Logic and Functionality
The script operates by analyzing two different timeframes (periods) of the CCI simultaneously: a "Fast" period for immediate movement and a "Slow" period for broader trends. Here is how the logic unfolds:
1. Trend Tracking The tool monitors the movement of the market's momentum over a long duration. By comparing current price action against historical averages, it determines whether the market is currently leaning toward a bullish (positive) or bearish (negative) sentiment.
2. The "Neutral Territory" Detection One of the primary unique features of this script is its ability to identify periods of indecision. When the momentum flips from positive to negative (or vice versa), the script enters a "neutral" state.
- During this phase, it tracks how many consecutive price bars stay near the zero line.
- Once this count reaches a specific threshold (defined by the user settings), the tool "resets," helping traders distinguish between a genuine trend reversal and just a moment of market hesitation.
3. Visual Color Coding To make the data easy to interpret at a glance, the script translates these mathematical values into a color-coded histogram:
- Blue Histograms: These appear when the momentum is positive, indicating upward strength.
- Red Histograms: These appear when the momentum is negative, indicating downward strength.
- Dynamic Updates: The script ensures that as new price data arrives, the colors and heights of these bars update in real-time to reflect the most current market conditions.
How it Benefits the User
By separating the "noise" of the market into specific color zones and a neutral tracking system, this tool allows you to see where a trend is strong, where it is weakening, and when the market is entering a period of consolidation. It effectively filters out minor fluctuations to highlight more significant shifts in price momentum.
//+------------------------------------------------------------------+
//| WoodiesCCI.mq4 |
//| thorr |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "histogram colour update by thor@gmx.co.uk Moneytec chat: thorr; created by Luis Damiani; converted by Rosh"
#property indicator_separate_window
#property indicator_buffers 5
#property indicator_color1 Yellow
#property indicator_width1 2
#property indicator_color2 Maroon
#property indicator_width2 2
#property indicator_color3 DarkGray
#property indicator_width3 2
#property indicator_color4 Red
#property indicator_width4 2
#property indicator_color5 RoyalBlue
#property indicator_width5 2
//---- input parameters
extern double A_period=50;
extern int B_period=12;
extern int neutral = 6;
extern int num_bars=5000;
// parameters
int i=0;
bool initDone=true;
int bar=0;
int prevbars=0;
int startpar=0;
int cs=0;
int prevcs=0;
string commodt="nonono";
int frame=0;
int bars=0;
int count = 0, thisbar = 0;
double now, prev;
bool flag;
//---- buffers
double FastWoodieCCI[];
double SlowWoodieCCI[];
double HistoWoodieCCI[];
double HistoRed[];
double HistoBlue[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID);
SetIndexBuffer(0,FastWoodieCCI);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID);
SetIndexBuffer(1,SlowWoodieCCI);
SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID);
SetIndexBuffer(2,HistoWoodieCCI);
SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID);
SetIndexBuffer(3,HistoRed);
SetIndexStyle(4,DRAW_HISTOGRAM,STYLE_SOLID);
SetIndexBuffer(4,HistoBlue);
IndicatorShortName("CCI Histogram ("+A_period+")");
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
cs = A_period + B_period + num_bars; //checksum used to see if parameters have been changed
if ((cs==prevcs) && (commodt == Symbol()) &&
(frame == (Time[4] - Time[5])) &&
((Bars - prevbars) < 2))
startpar = Bars - prevbars;
else
startpar = -1; //params haven't changed only need to calculate new bar
commodt = Symbol();
frame= Time[4] - Time[5];
prevbars = Bars;
prevcs = cs;
if (startpar == 1 | startpar == 0)
bar = startpar;
else
initDone = true;
if (initDone) {
//FastWoodieCCI[num_bars-1]=0;
SlowWoodieCCI[num_bars-1]=0;
HistoWoodieCCI[num_bars-1]=0;
HistoBlue[num_bars-1]=0;
HistoRed[num_bars-1]=0;
bar=num_bars-2;
initDone=false;
}
for (i = bar; i >= 0; i--) {
//FastWoodieCCI[i]=iCCI(NULL,0,B_period,PRICE_TYPICAL,i);
SlowWoodieCCI[i]=iCCI(NULL,0,A_period,PRICE_TYPICAL,i);
now = iCCI(NULL,0,A_period,PRICE_TYPICAL,i);
if ((prev >= 0 && now < 0) || (prev < 0 && now >= 0)) { // change of sign detected
flag = true;
count = 0;
}
if (flag) { // neutral territory
if (thisbar != i)
count++;
prev = now;
HistoWoodieCCI[i] = now;
if (count >= neutral)
flag = false;
thisbar = i;
continue;
}
// Colour it!
if (now > 0)
HistoBlue[i] = now;
if (now < 0)
HistoRed[i] = now;
prev = now;
}
return(0);
}
Comments