ColouredWoodiesCCI

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

The Woodies CCI indicator is a custom technical analysis tool designed to provide traders with a visual representation of market momentum and price trends. It works by analyzing the relationship between different timeframes of market movement, specifically focusing on "Commodity Channel Index" (CCI) values.

How the Logic Works

1. Dual-Speed Analysis The script monitors two distinct speeds of market activity simultaneously:

  • Fast Movement: It tracks short-term price fluctuations to capture immediate momentum.
  • Slow Movement: It tracks longer-term trends to provide a broader perspective on where the market is heading.

2. Neutral Zone Detection One of the core features of this logic is its ability to identify "neutral territory." When the indicator detects a significant shift in price direction (a change in the mathematical sign of the data), it enters a monitoring phase. Instead of immediately reacting, it waits for a specific number of bars—defined by a user-set "neutral" parameter—to pass. This helps filter out "noise" or minor fluctuations that might otherwise trigger false signals.

3. Visual Signaling (The Color Logic) The tool translates complex mathematical data into a color-coded histogram to make it easier for traders to read at a glance:

  • Blue Histograms: These appear when the momentum is positive, indicating upward pressure.
  • Red Histograms: These appear when the momentum is negative, indicating downward pressure.
  • Neutral Buffers: By distinguishing between these colors and identifying neutral zones, the script helps users see where a trend is firmly established versus where the market might be indecisive.

Summary for the User

In simple terms, this script acts as a sophisticated filter. It looks at both fast and slow market movements, ignores minor "jitter" in the price by waiting for a neutral period to stabilize, and then paints your chart with clear colors (Blue for up, Red for down). This allows you to see the prevailing trend of the market more clearly without being distracted by every small price movement.

Indicators Used
Commodity channel index
Miscellaneous
Implements a curve of type %1
16 Views
0 Downloads
0 Favorites
ColouredWoodiesCCI
//+------------------------------------------------------------------+
//|                                                   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_color2 White
#property indicator_color3 DimGray
#property indicator_color4 Red
#property indicator_color5 RoyalBlue
//---- input parameters
extern int       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,1);
   SetIndexBuffer(0,FastWoodieCCI);
   SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,3);
   SetIndexBuffer(1,SlowWoodieCCI);
   SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,1);
   SetIndexBuffer(2,HistoWoodieCCI);
   SetIndexStyle(3,DRAW_HISTOGRAM,STYLE_SOLID,1);
   SetIndexBuffer(3,HistoRed);
   SetIndexStyle(4,DRAW_HISTOGRAM,STYLE_SOLID,1);
   SetIndexBuffer(4,HistoBlue);
   IndicatorShortName("ColouredWoodiesCCI("+A_period+","+B_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