WoodiesCCI_v1
Download scriptThis tool is a specialized technical analysis indicator designed for the MetaTrader platform. It visualizes market momentum by combining and comparing two different types of Commodity Channel Index (CCI) calculations to help traders identify trend shifts and price extremes.
Core Logic Overview
The script functions by tracking two distinct speeds of market movement simultaneously. Instead of looking at just one data point, it creates a "fast" and a "slow" perspective of the market's momentum.
- The Fast Component: This tracks short-term price fluctuations rapidly. It is designed to be sensitive to immediate changes in price, reacting quickly to sudden movements or "bursts" in volatility.
- The Slow Component: This tracks long-term trends over a larger timeframe. It smooths out the market "noise," providing a clearer picture of where the broader price path is heading.
Visual Outputs
The indicator displays these calculations in three distinct visual formats on your chart:
- Fast Line: A primary line representing immediate momentum.
- Slow Line: A secondary, smoother line representing the broader trend.
- Histogram: A visual representation that compares the two values. By looking at the difference between the fast and slow data, the histogram helps users see how much the current price is deviating from its long-term average.
How it Works for the Trader
The logic relies on the relationship between these three elements. When the fast movement pulls significantly away from the slow movement, it indicates a potential overextended market. Conversely, when the fast and slow movements begin to converge or cross one another, it can signal a potential shift in the trend.
By providing both the "pulse" (fast) and the "heartbeat" (slow) of the market at once, the tool allows for a more nuanced view of price action than a standard single-line indicator could offer. It is built to update automatically with every new price tick, ensuring that the relationship between short-term momentum and long-term trends is always current.
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
//+------------------------------------------------------------------+
//| WoodiesCCI.mq4 |
//| Rosh |
//| http://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "created by Luis Damiani; converted by Rosh"
#property link "http://www.metaquotes.net"
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 Red
#property indicator_color2 White
#property indicator_color3 DarkGray
//---- 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,1,2);
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