DoubleCCI-With_SMAvbobslowVK
Download scriptThis script is a specialized technical analysis tool designed to help traders visualize market momentum and trend direction by utilizing two different types of "Commodity Channel Index" (CCI) calculations simultaneously. Instead of looking at a single data point, this tool provides a multi-layered view of price action to help distinguish between long-term trends and short-term entries.
Core Logic and Functionality
Dual CCI Analysis The primary logic relies on two distinct CCI periods:
- Trend CCI: This is designed to identify the broader market direction. It uses a longer timeframe to smooth out "noise" and show where the market is heading over a larger span.
- Entry CCI: This is designed for shorter-term sensitivity. It reacts more quickly to price fluctuations, making it useful for identifying immediate momentum shifts or potential entry points.
Visual Categorization (The Histogram) The tool doesn't just show lines; it categorizes the "Trend CCI" data into a multi-colored histogram based on specific intensity levels:
- It identifies areas where the trend is between 0 and 100.
- It highlights extreme bullish momentum (values above 100).
- It highlights extreme bearish momentum (values below -100).
- It identifies moderate bearish momentum (values between 0 and -100). By color-coding these different zones, the script allows a trader to see at a glance whether the market is in a steady climb, an overextended peak, a gradual decline, or a deep crash.
Smart Timeframe Adaptation One of the key features of this script is its ability to be "context-aware." It includes an automatic setting that adjusts the CCI periods based on the timeframe you are currently viewing (e.g., switching from 1-minute charts to Daily charts). This ensures that the sensitivity of the indicator remains consistent with the speed of the market regardless of which chart a trader chooses to use.
Moving Average Smoothing To further refine the data, the script can calculate and display a Simple Moving Average (SMA) over either the Trend CCI or the Entry CCI. This helps traders see the "average" behavior of these indicators, making it easier to spot when the current momentum is diverging from its recent average.
Automated Alert System The script includes a logic gate for real-time notifications. It can monitor both the Trend and Entry CCIs simultaneously. If both indicators cross a specific threshold (such as zero) at the same time, the script will trigger a visual alert. This serves as a confirmation signal, notifying the trader when both the long-term trend and short-term momentum are moving in the same direction.
//+------------------------------------------------------------------+
//| DoubleCCI-With_EMA.mq4 |
//| Copyright © 2005, Jason Robinson (jnrtrading). |
//| http://www.jnrtrading.co.uk |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, Jason Robinson (jnrtrading)."
#property link "http://www.jnrtrading.co.uk"
#property indicator_separate_window
#property indicator_buffers 7
#property indicator_color1 DarkGreen
#property indicator_color2 Maroon
#property indicator_color3 DarkSlateGray
#property indicator_color4 MediumSeaGreen
#property indicator_color5 Red
#property indicator_color6 Gold
#property indicator_color7 Lavender
#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 3
#property indicator_width4 3
#property indicator_width5 3
#property indicator_width6 3
#property indicator_width7 3
//#property indicator_width6 1
#property indicator_level1 100
#property indicator_level2 100
#property indicator_level3 100
#property indicator_level4 0
#property indicator_level5 0
#property indicator_level6 -100
#property indicator_level7 -100
#property indicator_level8 -100
#property indicator_levelcolor DarkSlateGray
//---- input parameters
extern int TrendCCI_period = 63;
extern int EntryCCI_period = 21;
extern bool Zero_cross_alert = false;
extern int Alert_level__Includes_negative = 0;
extern bool Show_SMA = true;
extern int SMA_period=30;
extern string SMA_of_TrendCCI_or_EntryCCI = "EntryCCI";
extern bool Automatic_timeframe_setting;
extern int M1_TrendCCI_period = 89;
extern int M1_EntryCCI_period = 21;
extern int M5_TrendCCI_period = 89;
extern int M5_EntryCCI_period = 21;
extern int M15_TrendCCI_period = 14;
extern int M15_EntryCCI_period = 6;
extern int M30_TrendCCI_period = 14;
extern int M30_EntryCCI_period = 6;
extern int H1_TrendCCI_period = 14;
extern int H1_EntryCCI_period = 6;
extern int H4_TrendCCI_period = 14;
extern int H4_EntryCCI_period = 6;
extern int D1_TrendCCI_period = 14;
extern int D1_EntryCCI_period = 6;
extern int W1_TrendCCI_period = 14;
extern int W1_EntryCCI_period = 6;
extern int MN_TrendCCI_period = 14;
extern int MN_EntryCCI_period = 6;
double TrendCCIBuffer[];
double CCIHistogramUpBuffer[];
double CCIHistogramUpUpBuffer[];
double CCIHistogramDownBuffer[];
double CCIHistogramDownDownBuffer[];
double EntryCCIBuffer[];
double SMA[];
//double ZeroLine[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle (0, DRAW_HISTOGRAM, 0, 3);
SetIndexBuffer(0, CCIHistogramUpBuffer);
SetIndexStyle (1, DRAW_HISTOGRAM, 0, 3);
SetIndexBuffer(1, CCIHistogramDownBuffer);
SetIndexStyle (2, DRAW_LINE, STYLE_SOLID, 3);
SetIndexBuffer(2, TrendCCIBuffer);
SetIndexBuffer(5, SMA);
SetIndexStyle (5, DRAW_LINE, STYLE_SOLID, 3);
SetIndexStyle (6, DRAW_LINE, STYLE_SOLID, 3);
SetIndexBuffer(6, EntryCCIBuffer);
SetIndexStyle (3, DRAW_HISTOGRAM, 0, 3);
SetIndexBuffer(3, CCIHistogramUpUpBuffer);
SetIndexStyle (4, DRAW_HISTOGRAM, 0, 3);
SetIndexBuffer(4, CCIHistogramDownDownBuffer);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start() {
int limit, trendCCI, entryCCI;
static datetime prevtime = 0;
int counted_bars = IndicatorCounted();
//---- 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; break;
case 5: trendCCI = M5_TrendCCI_period; entryCCI = M5_EntryCCI_period; break;
case 15: trendCCI = M15_TrendCCI_period; entryCCI = M15_EntryCCI_period; break;
case 30: trendCCI = M30_TrendCCI_period; entryCCI = M30_EntryCCI_period; break;
case 60: trendCCI = H1_TrendCCI_period; entryCCI = H1_EntryCCI_period; break;
case 240: trendCCI = H4_TrendCCI_period; entryCCI = H4_EntryCCI_period; break;
case 1440: trendCCI = D1_TrendCCI_period; entryCCI = D1_EntryCCI_period; break;
case 10080: trendCCI = W1_TrendCCI_period; entryCCI = W1_EntryCCI_period; break;
case 43200: trendCCI = MN_TrendCCI_period; entryCCI = MN_EntryCCI_period; break;
}
}
else {
trendCCI = TrendCCI_period;
entryCCI = EntryCCI_period;
}
IndicatorShortName("(TrendCCI: " + trendCCI + ", EntryCCI: " + entryCCI + ") ");
for(int i = 0; i <= limit; i++) {
TrendCCIBuffer[i] = iCCI(NULL, 0, trendCCI, PRICE_TYPICAL, i);
if (TrendCCIBuffer[i] >= 0 && TrendCCIBuffer[i] <= 100 )
CCIHistogramUpBuffer[i] = TrendCCIBuffer[i];
else
CCIHistogramUpBuffer[i] = 0;
if (TrendCCIBuffer[i] >= 100 )
CCIHistogramUpUpBuffer[i] = TrendCCIBuffer[i];
else
CCIHistogramUpUpBuffer[i] = 0 ;
if (TrendCCIBuffer[i] < -100 )
CCIHistogramDownDownBuffer[i] = TrendCCIBuffer[i];
else
CCIHistogramDownDownBuffer[i]=0;
if (TrendCCIBuffer[i] < 0 && TrendCCIBuffer[i] >=-100)
CCIHistogramDownBuffer[i] = TrendCCIBuffer[i];
else
CCIHistogramDownBuffer[i]=0;
EntryCCIBuffer[i] = iCCI(NULL, 0, entryCCI, PRICE_TYPICAL, i);
//ZeroLine[i] = 0;
}
if (Show_SMA == true) {
if (SMA_of_TrendCCI_or_EntryCCI == "TrendCCI")
for(i=0; i<limit; i++)
SMA[i] = iMAOnArray(TrendCCIBuffer, 0, SMA_period, 0, MODE_SMA, i);
else if (SMA_of_TrendCCI_or_EntryCCI == "EntryCCI")
for(i=0; i<limit; i++)
SMA[i] = iMAOnArray(EntryCCIBuffer, 0, SMA_period, 0, MODE_SMA, i);
}
if (Zero_cross_alert == true) {
if (prevtime == Time[0]) {
return(0);
}
else {
if(EntryCCIBuffer[0] < -Alert_level__Includes_negative) {
if((TrendCCIBuffer[0] < -Alert_level__Includes_negative) && (TrendCCIBuffer[1] >= -Alert_level__Includes_negative)) {
Alert(Symbol(), " M", Period(), " Trend & Entry CCI Have both crossed below zero");
}
}
else if(EntryCCIBuffer[0] > Alert_level__Includes_negative) {
if((TrendCCIBuffer[0] > Alert_level__Includes_negative) && (TrendCCIBuffer[1] <= Alert_level__Includes_negative)) {
Alert(Symbol(), " M", Period(), " Trend & Entry CCI Have both crossed above zero");
}
}
prevtime = Time[0];
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
Comments