WoodiesCCI_v3
Download scriptThis script is a custom technical analysis tool designed for the MetaTrader platform. Its primary purpose is to visualize market momentum by combining and comparing two different types of price oscillators into a single, easy-to-read visual display.
Core Functionality
The tool operates by calculating two distinct "Commodity Channel Index" (CCI) values simultaneously. The CCI is a standard trading indicator used to identify when an asset is overbought, oversold, or experiencing strong directional momentum. By using two different timeframes (periods) for these calculations, the script allows you to see how fast-moving price actions compare to slower, broader market trends.
How the Logic Works
The script performs three main actions to provide this visual data:
- Fast Momentum Tracking: It calculates a "Fast" indicator using a short time window. This reacts quickly to immediate price fluctuations and sudden shifts in the market.
- Slow Trend Tracking: It calculates a "Slow" indicator using a longer time window. This provides a smoother view of the overall trend, helping to filter out minor "noise" or small price blips.
- Historical Comparison: The script automatically processes a specific amount of historical data (determined by the user settings) to ensure that the lines on your chart are continuous and consistent from past to present.
Visual Output
Instead of showing you raw numbers, the script translates these calculations into three distinct visual elements in a separate window:
- A Fast Line: Represents the immediate momentum.
- A Slow Line: Represents the broader market trend.
- A Histogram: This provides an additional visual layer to help distinguish between the two different speeds of data, making it easier to spot where the fast momentum is diverging from or aligning with the slow trend.
Summary for Traders
Essentially, this script acts as a "trend filter." By looking at the relationship between the fast and slow indicators provided by the tool, a trader can better identify when a quick price move is supported by the larger market trend or if it is an isolated spike that might soon reverse.
//+------------------------------------------------------------------+
//| WoodiesCCI.mq4 |
//| Rosh |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Luis Damiani translated by Rosh"
#property link "http://www.metaquotes.net"
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 Teal
#property indicator_color3 Lime
//---- input parameters
extern int A_period=14;
extern int B_period=6;
extern int num_bars=550;
// parameters
int shift=0;
bool initDone=true; // áûëî init
int bar=0;
int prevbars=0;
int startpar=0; // áûëî start
int cs=0;
int prevcs=0;
string commodt="nonono";
int frame=0;
int bars=0;
//---- buffers
double FastWoodieCCI[];
double SlowWoodieCCI[];
double HistoWoodieCCI[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_LINE);
SetIndexBuffer(0,FastWoodieCCI);
SetIndexStyle(1,DRAW_LINE);
SetIndexBuffer(1,SlowWoodieCCI);
SetIndexStyle(2,DRAW_HISTOGRAM);
SetIndexBuffer(2,HistoWoodieCCI);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//---- TODO: add your code here
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int counted_bars=IndicatorCounted();
//---- TODO: add your code here
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;
//SetIndexValue(num_bars-1, 0);
//SetIndexValue2(num_bars-1, 0);
bar=num_bars-2;
initDone=false;
}
//SetLoopCount(0);
for (shift = bar;shift>=0;shift--)
{
FastWoodieCCI[shift]=iCCI(NULL,0,B_period,PRICE_TYPICAL,shift);
SlowWoodieCCI[shift]=iCCI(NULL,0,A_period,PRICE_TYPICAL,shift);
HistoWoodieCCI[shift]=iCCI(NULL,0,A_period,PRICE_TYPICAL,shift);
//SetIndexValue(shift,iCCIEx(A_period,PRICE_TYPICAL,shift));
//SetIndexValue2(shift,iCCIEx(B_period,PRICE_TYPICAL,shift));
}
//----
return(0);
}
//+------------------------------------------------------------------+
Comments