CCI_Woodies_Lnx_v2
Download scriptThe Real Woodie CCI is a specialized technical analysis tool designed to help traders identify market trends and potential entry points by combining three distinct types of momentum data into a single visual interface.
Unlike standard indicators that simply show up and down movements, this script interprets price action through the specific logic defined in "Woodie" trading methodology. It focuses on three core components:
1. Trend Analysis (The Histograms)
The indicator categorizes the market's current momentum into different visual states using colored histograms. This allows you to see at a glance whether the market is currently trending, transitioning, or moving sideways:
- Upward Trend: Shown as distinct color blocks when the price maintains strong positive momentum.
- Downward Trend: Shown as distinct color blocks when the price maintains strong negative momentum.
- Neutral/Transition Zone: The script monitors the "count" of consecutive bars in a specific direction. If the momentum hasn't sustained long enough to be considered a full trend, it remains in a neutral state (No Trend) or marks a specific "Time Bar" transition point.
2. Entry Momentum (The Line)
In addition to the broad trend histograms, the script calculates an Entry CCI. This is a faster, more responsive line that tracks shorter-term price fluctuations. By comparing this fast line against the broader trend histograms, traders can look for "pullbacks" or specific moments where short-term momentum aligns with the longer-term direction.
3. The Woodie LSMA Filter (The Arrows)
A unique feature of this script is the inclusion of a Linear Weighted Moving Average (LSMA) logic. Instead of just drawing a line, the script uses this math to generate visual signals:
- It calculates where the "fair value" of the price should be based on the Woodie methodology.
- It compares the current price to this weighted average.
- Visual Signals: The indicator places specific symbols (arrows) on the chart to highlight moments where the price breaks above or below these calculated thresholds, acting as a secondary confirmation for your trades.
Summary of User Experience
When you look at this indicator on your chart, it provides a "layered" view of the market:
- The Histograms tell you the "Big Picture" (Is the current trend up, down, or uncertain?).
- The Entry Line shows you the "Current Pulse" (How fast is the price moving right now?).
- The Arrows/LSMA Logic provide the "Action Triggers" (Where is the mathematically significant break in price happening?).
By combining these three elements, the script aims to remove the guesswork of identifying when a trend is actually healthy and when it is time to act.
//+------------------------------------------------------------------+
//| Real Woodie CCI.mq4 |
//| Based on the code of Jason Robinson (jnrtrading). |
//| |
//| After read the Woodie introductory document I started a search |
//| for the right coloured CCI. |
//| I can´t find anyone in accomplish with the explanation of Woodie |
//| So, I take the code from another CCI, and I added |
//| the center LSMA line according to the official explanation. |
//| Everything you see is an exact copy like it´s explained in the |
//| document new_woodie_do1. Specially the colors. |
//| If you have some doubts can obtain a copy |
//| from http://woodiescciclub.com/ |
//| |
//| Linuxser 2007 |
//| for any doubts or suggestions contact me on Forex-TSD forum |
//+------------------------------------------------------------------+
#property copyright "Under The GNU General Public License"
#property link "www.gnu.org"
#property indicator_separate_window
#property indicator_buffers 8
#property indicator_color1 Blue
#property indicator_width1 1
#property indicator_color2 Red
#property indicator_width2 1
#property indicator_color3 Gray
#property indicator_width3 1
#property indicator_color4 Yellow
#property indicator_width4 1
#property indicator_color5 Black
#property indicator_width5 2
#property indicator_color6 Crimson
#property indicator_width6 1
#property indicator_color7 Lime
#property indicator_width7 1
#property indicator_color8 Red
#property indicator_width8 1
//#property indicator_level1 50
#property indicator_level1 100
//#property indicator_level3 150
#property indicator_level2 200
#property indicator_level3 -200
//#property indicator_level6 -150
#property indicator_level4 -100
//#property indicator_level8 -50
#property indicator_levelcolor SeaGreen
#property indicator_levelstyle STYLE_SOLID
#property indicator_levelwidth 1
//---- input parameters
extern int TrendCCI_Period = 14;
extern int EntryCCI_Period = 6;
extern int LSMAPeriod = 25; // LSMA period
int FromZero = 0; // Distance from zero level
int EMAPeriod = 34; // ÅÌÀ period
double TrendCCI[];
double EntryCCI[];
double CCITrendUp[];
double CCITrendDown[];
double CCINoTrend[];
double CCITimeBar[];
double LSMABuffer1[];
double LSMABuffer2[];
double ZeroLine[];
double LineHighEMA[];
double LineLowEMA[];
int trendUp, trendDown;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
string short_name;
//---- indicators
SetIndexStyle(4, DRAW_LINE, STYLE_SOLID, 2);
SetIndexBuffer(4, TrendCCI);
SetIndexLabel(4, "TrendCCI");
SetIndexStyle(0, DRAW_HISTOGRAM, 0);
SetIndexBuffer(0, CCITrendUp);
SetIndexLabel (0, NULL);
SetIndexStyle(1, DRAW_HISTOGRAM, 0);
SetIndexBuffer(1, CCITrendDown);
SetIndexLabel (1, NULL);
SetIndexStyle(2, DRAW_HISTOGRAM, 0);
SetIndexBuffer(2, CCINoTrend);
SetIndexLabel (2, NULL);
SetIndexStyle(3, DRAW_HISTOGRAM, 0);
SetIndexBuffer(3, CCITimeBar);
SetIndexLabel (3, NULL);
SetIndexStyle(5, DRAW_LINE, STYLE_SOLID, 1);
SetIndexBuffer(5, EntryCCI);
SetIndexLabel(5, "EntryCCI");
SetIndexStyle (6, DRAW_ARROW, 0);
SetIndexBuffer(6, LSMABuffer2);
SetIndexLabel (6, NULL);
SetIndexEmptyValue(6,EMPTY_VALUE);
SetIndexArrow(6,167);
SetIndexStyle (7, DRAW_ARROW, 0);
SetIndexBuffer(7, LSMABuffer1);
SetIndexLabel (7, NULL);
SetIndexEmptyValue(7,EMPTY_VALUE);
SetIndexArrow(7,167);
short_name="Woodie CCI(" + TrendCCI_Period + "), TCCI: (" +EntryCCI_Period+ "), LSMA: " + LSMAPeriod + ") ";
IndicatorShortName(short_name);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start() {
int limit, i, trendCCI, entryCCI;
int counted_bars = IndicatorCounted();
static datetime prevtime = 0;
//---- check for possible errors
if(counted_bars < 0) return(-1);
//---- last counted bar will be recounted
if(counted_bars > 0) counted_bars--;
limit=Bars;//-counted_bars;
trendCCI = TrendCCI_Period;
entryCCI = EntryCCI_Period;
for(i = limit; i >= 0; i--) {
CCINoTrend[i] = 0;
CCITrendDown[i] = 0;
CCITimeBar[i] = 0;
CCITrendUp[i] = 0;
ZeroLine[i] = 0;
TrendCCI[i] = iCCI(NULL, 0, trendCCI, PRICE_TYPICAL, i);
EntryCCI[i] = iCCI(NULL, 0, entryCCI, PRICE_TYPICAL, i);
if(TrendCCI[i] > 0 && TrendCCI[i+1] < 0) {
if (trendDown > 4) trendUp = 0;
}
if (TrendCCI[i] > 0) {
if (trendUp < 5){
CCINoTrend[i] = TrendCCI[i];
trendUp++;
}
if (trendUp == 5) {
CCITimeBar[i] = TrendCCI[i];
trendUp++;
}
if (trendUp > 5) {
CCITrendUp[i] = TrendCCI[i];
}
}
if(TrendCCI[i] < 0 && TrendCCI[i+1] > 0) {
if (trendUp > 4) trendDown = 0;
}
if (TrendCCI[i] < 0) {
if (trendDown < 5){
CCINoTrend[i] = TrendCCI[i];
trendDown++;
}
if (trendDown == 5) {
CCITimeBar[i] = TrendCCI[i];
trendDown++;
}
if (trendDown > 5) {
CCITrendDown[i] = TrendCCI[i];
}
}
}
//---- Color Middle Line LSMA
double sum, lengthvar, tmp, wt;
int shift;
int Draw4HowLong, loopbegin;
if (counted_bars<0) return;
if (counted_bars>0) counted_bars--;
counted_bars = Bars - counted_bars;
for (shift=0; shift<counted_bars; shift++) {
LineLowEMA[shift] = -FromZero;
LineHighEMA[shift] = -FromZero;
double EmaValue = iMA(NULL, 0, EMAPeriod, 0, MODE_EMA, PRICE_TYPICAL, shift);
if (Close[shift]>EmaValue) LineHighEMA[shift] = EMPTY_VALUE;
if (Close[shift]<EmaValue) LineLowEMA[shift] = EMPTY_VALUE;
}
Draw4HowLong = Bars-LSMAPeriod - 5;
loopbegin = Draw4HowLong - LSMAPeriod - 1;
for(shift=loopbegin; shift>=0; shift--) {
sum = 0;
for (i=LSMAPeriod; i>=1; i--) {
lengthvar = LSMAPeriod + 1;
lengthvar /= 3;
tmp = 0;
tmp = (i - lengthvar) * Close[LSMAPeriod-i+shift];
sum+=tmp;
}
wt = sum * 6 / (LSMAPeriod * (LSMAPeriod + 1));
LSMABuffer1[shift] = 0;
LSMABuffer2[shift] = 0;
if (wt>Close[shift]) LSMABuffer2[shift] = EMPTY_VALUE;
if (wt<Close[shift]) LSMABuffer1[shift] = EMPTY_VALUE;
}
//----
//----
return(0);
}
//+------------------------------------------------------------------+
Comments