CCI_Woodies_Lnx_v1_1_v1

Author: Under The GNU General Public License
CCI_Woodies_Lnx_v1_1_v1

This script is designed to provide a visual representation of market trends and momentum by combining several advanced technical analysis tools into a single indicator. It follows the "Woodie" logic, which prioritizes identifying the direction and strength of price movement through specific color-coded signals and smoothed averages.

Core Logic and Components

1. Momentum Tracking (CCI) The script utilizes the Commodity Channel Index (CCI) as its primary engine. It processes two different versions of this index simultaneously:

  • Trend CCI: A longer-term version used to establish the overall market direction.
  • Entry CCI: A shorter-term version designed for more immediate price action sensitivity.

2. Trend Identification and Color Coding The primary purpose of this script is to categorize the market into different states based on how long the CCI remains above or below the zero level. The logic works by counting consecutive bars:

  • Neutral State: When the trend first shifts, the script marks a period of "No Trend."
  • Confirmation Phase: After the trend stays consistent for a specific number of bars, it identifies a transition point (Time Bar).
  • Active Trend: Once the momentum is confirmed as sustained, the script highlights the trend with specific colors (Trend Up or Trend Down). This helps traders distinguish between a momentary price fluctuation and a genuine sustained movement.

3. The Linear Weighted Moving Average (LSMA) A key feature of this indicator is the inclusion of a smoothed moving average called the LSMA. Unlike a standard average, this puts more weight on the most recent price data to reduce "lag."

4. Dynamic Price Positioning The script uses the EMA (Exponential Moving Average) and the LSMA to determine relative price position. By comparing the current closing price against these averages:

  • It identifies whether the price is currently trading at a premium or a discount relative to its recent history.
  • It uses this information to plot specific visual markers (arrows), providing a clearer "buy" or "sell" environment based on the relationship between the current price and the moving average.

Summary for the User

Instead of looking at raw numbers, this tool transforms complex momentum data into a visual map. It tells you:

  1. Where the trend is going (by highlighting sustained momentum in different colors).
  2. How "strong" the trend is (by waiting for confirmation before changing colors).
  3. The optimal price zones (by using the LSMA and EMA to show where the price sits in relation to its average trend).
Indicators Used
Commodity channel indexMoving average indicator
Miscellaneous
Implements a curve of type %1
12 Views
0 Downloads
0 Favorites
CCI_Woodies_Lnx_v1_1_v1
//+------------------------------------------------------------------+
//|                                              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 2
#property indicator_color2 Red
#property indicator_width2 2
#property indicator_color3 Gray
#property indicator_width3 2
#property indicator_color4 Yellow
#property indicator_width4 2
#property indicator_color5 Black
#property indicator_width5 2
#property indicator_color6 Crimson
#property indicator_width6 1
#property indicator_color7 Lime
#property indicator_width7 2
#property indicator_color8 Red
#property indicator_width8 2



//#property indicator_level1 50
#property indicator_level2 100
//#property indicator_level3 150
#property indicator_level4 200
#property indicator_level5 -200
//#property indicator_level6 -150
#property indicator_level7 -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+ ")";  
   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