CCI_Woodies_Valeo

Download script
Author: Under The GNU General Public License
CCI_Woodies_Valeo

This script is a specialized technical analysis tool designed to help traders identify market trends and potential entry points by using a modified version of the Commodity Channel Index (CCI) and a Linear Smoothed Moving Average (LSMA). Unlike standard indicators, this version is specifically tuned to follow the "Woodie" methodology, focusing on precise visual cues through distinct colors and shapes.

Core Logic and Visual Behavior

The indicator operates by analyzing price action and displaying information in a separate window below the main chart. It uses several layers of logic to communicate market conditions:

1. Trend Identification (Histograms) The script tracks the general direction of the market. It monitors the "Trend CCI" and classifies the price movement into three distinct visual categories:

  • Uptrend: When the market shows sustained upward momentum, it highlights this area with a specific color (Crimson/Red).
  • Downtrend: When the market shows sustained downward momentum, it highlights this area with another color (Lime/Green).
  • Neutral/No Trend: When the market is moving but has not yet established a definitive trend, it remains in a neutral state (Yellow).

2. Momentum Tracking (Lines) The script utilizes an "Entry CCI," which is a faster-reacting calculation than the Trend CCI. This creates a smoother line that helps traders see immediate price velocity. By comparing this to the larger trend movements, users can better understand if the current "pulse" of the market aligns with the broader direction.

3. Advanced Smoothing (LSMA & EMA) The logic incorporates an LSMA (Linear Smoothed Moving Average) and an EMA (Exponential Moving Average) to filter out market "noise."

  • The script calculates a weighted average of price points to create a smooth trend line.
  • It uses specific "Weight" logic to determine if the current price is above or below these smoothed averages, which helps in confirming whether a move is strong enough to be considered a significant shift in market sentiment.

4. Automatic Adaptability One of the key features for the user is the Automatic Timeframe Setting. The script contains pre-configured logic that recognizes different chart types (e.g., 1-minute, 5-minute, Hourly, Daily). If enabled, the indicator automatically adjusts its internal sensitivity and periods to match the timeframe you are currently viewing, ensuring that the visual data remains consistent whether you are scalping short-term movements or swing trading long-term trends.

Summary for the User

Essentially, this script takes complex mathematical formulas (CCI and LSMA) and translates them into a clear, color-coded visual map. It tells you:

  • The Direction: Through colored histograms showing where the trend is "strong."
  • The Momentum: Through an entry line that shows the immediate speed of price change.
  • The Confirmation: By using weighted averages to ensure that the signals you see aren't just temporary spikes, but meaningful market shifts.
Indicators Used
Commodity channel indexMoving average indicator
Miscellaneous
Implements a curve of type %1
13 Views
0 Downloads
0 Favorites
CCI_Woodies_Valeo
//+------------------------------------------------------------------+
//|                                Real Woodie CCI Valeo Version.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
extern bool Automatic_Timeframe_Setting = false;
extern int M1_TrendCCI_Period = 50;
extern int M1_EntryCCI_Period = 14;
extern int M1_LSMA = 25;
extern int M5_TrendCCI_Period = 50;
extern int M5_EntryCCI_Period = 14;
extern int M5_LSMA = 25;
extern int M15_TrendCCI_Period = 14;
extern int M15_EntryCCI_Period = 6;
extern int M15_LSMA = 25;
extern int M30_TrendCCI_Period = 14;
extern int M30_EntryCCI_Period = 6;
extern int M30_LSMA = 25;
extern int H1_TrendCCI_Period = 14;
extern int H1_EntryCCI_Period = 6;
extern int H1_LSMA = 25;
extern int H4_TrendCCI_Period = 14;
extern int H4_EntryCCI_Period = 6;
extern int H4_LSMA = 25;
extern int D1_TrendCCI_Period = 14;
extern int D1_EntryCCI_Period = 6;
extern int D1_LSMA = 25;
extern int W1_TrendCCI_Period = 14;
extern int W1_EntryCCI_Period = 6;
extern int W1_LSMA = 25;
extern int MN_TrendCCI_Period = 14;
extern int MN_EntryCCI_Period = 6;
extern int MN_LSMA = 25;
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()  
   {   
//---- 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);  
   
    
//----
   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;   
   
   if (Automatic_Timeframe_Setting == true) {
      switch(Period()) {
         case 1: trendCCI = M1_TrendCCI_Period; entryCCI = M1_EntryCCI_Period; LSMAPeriod = M1_LSMA ;break;
         case 5: trendCCI = M5_TrendCCI_Period; entryCCI = M5_EntryCCI_Period; LSMAPeriod = M5_LSMA ;break;
         case 15: trendCCI = M15_TrendCCI_Period; entryCCI = M15_EntryCCI_Period; LSMAPeriod = M15_LSMA ;break;
         case 30: trendCCI = M30_TrendCCI_Period; entryCCI = M30_EntryCCI_Period;LSMAPeriod = M30_LSMA ; break;
         case 60: trendCCI = H1_TrendCCI_Period; entryCCI = H1_EntryCCI_Period; LSMAPeriod = H1_LSMA ;break;
         case 240: trendCCI = H4_TrendCCI_Period; entryCCI = H4_EntryCCI_Period; LSMAPeriod = H4_LSMA ;break;
         case 1440: trendCCI = D1_TrendCCI_Period; entryCCI = D1_EntryCCI_Period; LSMAPeriod = D1_LSMA ;break;
         case 10080: trendCCI = W1_TrendCCI_Period; entryCCI = W1_EntryCCI_Period; LSMAPeriod = W1_LSMA ;break;
         case 43200: trendCCI = MN_TrendCCI_Period; entryCCI = MN_EntryCCI_Period; LSMAPeriod = MN_LSMA ;break;
         }
         }
   else {
   trendCCI = TrendCCI_Period;
   entryCCI = EntryCCI_Period;
       
   }    
  
   IndicatorShortName("(CCI: " + trendCCI + ", TCCI: " + entryCCI + ", LSMA: " + LSMAPeriod + ") ) ");   
   
   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