CCI_Histogram_v2

Download script
Author: histogram colour update by thor@gmx.co.uk Moneytec chat: thorr
CCI_Histogram_v2

The 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.

Indicators Used
Commodity channel index
Miscellaneous
Implements a curve of type %1
16 Views
0 Downloads
0 Favorites
CCI_Histogram_v2
//+------------------------------------------------------------------+
//|                                                   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