ColouredWoodie
Download scriptThis technical tool, known as the Woodies CCI, is designed to help traders visualize price momentum and trend strength by analyzing price movements relative to a specific moving average. It transforms standard market data into a visual histogram that provides immediate feedback on the direction of the market.
Core Logic and Functionality
The indicator operates by calculating two distinct versions of the Commodity Channel Index (CCI)—a standard technical analysis tool—using different time horizons:
- Fast Component: Tracks short-term price fluctuations.
- Slow Component: Tracks long-term price trends.
By comparing these two speeds, the script identifies whether the current market movement is part of a sustained trend or just temporary "noise."
Visual Indicators and Color Coding
The primary purpose of this script is to simplify decision-making through color-coded visual cues:
- Trend Identification: The script automatically categorizes the market into positive and negative zones. When the momentum is positive, the histogram displays in Blue. When the momentum turns negative, it shifts to Red.
- The "Neutral Zone" Logic: One of the most sophisticated features of this script is how it handles price fluctuations around the zero line. To prevent "choppy" signals (where the color flips rapidly during sideways movement), the script includes a Neutral Territory filter.
- Signal Smoothing: If the price hovers near the zero mark, the script waits for a specific number of candles to confirm a clear direction before switching the color. This helps traders stay out of "fake-out" signals where the market isn't moving strongly in either direction.
How it Helps the Trader
Instead of forcing a trader to manually calculate whether a trend is strong enough to act upon, this script does the heavy lifting:
- It filters out minor price jitters.
- It provides a clear visual "Go" or "No-Go" signal via color changes.
- It highlights whether the current momentum is accelerating in a specific direction or stalling out in a neutral zone.
//+------------------------------------------------------------------+
//| 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