DoubleCCI_With_EMA_Email
Download scriptIndicator Overview
The DoubleCCI-With_EMA is a specialized technical analysis tool designed to help traders identify market trends and potential entry points by utilizing two distinct versions of the Commodity Channel Index (CCI). Rather than relying on a single indicator, this script overlays different time sensitivities to provide a clearer picture of market momentum.
Core Logic & Functionality
1. Dual CCI Analysis
The heart of this indicator lies in its use of two separate CCI calculations:
- Trend CCI: This is designed to track the broader market movement. It acts as a "macro" view, helping you understand the general direction of the price action over a larger period.
- Entry CCI: This provides a faster, more sensitive look at the current price action. It reacts more quickly to short-term fluctuations, making it useful for identifying immediate momentum shifts.
By viewing these two together, traders can differentiate between long-term trends and short-term "noise" or opportunities.
2. Visual Representations
The indicator translates these data points into several visual formats on your chart:
- Histograms: The Trend CCI is displayed as a histogram. It separates positive values (upward momentum) and negative values (downward momentum) into distinct colors, allowing you to see the strength of the trend at a glance.
- Lines: Both the Trend CCI and Entry CCI are plotted as lines, providing a continuous view of their trajectories relative to the zero level.
- Optional EMA: The script includes an optional Exponential Moving Average (EMA). You can choose to apply this moving average specifically to either the Trend CCI or the Entry CCI. This helps smooth out volatility and identify clearer signals within the indicator's own data.
3. Smart Timeframe Management
One of the unique features of this script is its Automatic Timeframe Setting. Recognizing that different trading styles (e.g., Scalping vs. Swing Trading) require different settings, the tool can automatically adjust the periods for both the Trend and Entry CCI based on the chart timeframe you are currently viewing. This ensures that the indicator remains relevant whether you are looking at a 1-minute chart or a Monthly chart.
4. Alerts and Notifications
The script is equipped with a proactive notification system to ensure you don't miss key moments. It can monitor for "Zero Crosses," which occur when both the Trend CCI and the Entry CCI move across the zero line simultaneously.
- Alerts: If these conditions are met, the system will trigger an on-screen alert.
- Email Notifications: If enabled, the script can also send an email notification directly to your device, providing a heads-up even when you aren't actively watching the charts.
Summary for the Trader
This tool is built for traders who want to confirm momentum before taking a position. By checking if both the "fast" (Entry) and "slow" (Trend) indicators agree on a direction, you can increase the reliability of your trades. The inclusion of automatic settings and customizable alerts makes it a robust solution for maintaining consistency across various timeframes.
//+------------------------------------------------------------------+
//| 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 6
#property indicator_color1 MediumSeaGreen
#property indicator_color2 Crimson
#property indicator_color3 Blue
#property indicator_color4 Black
#property indicator_color5 DarkTurquoise
//#property indicator_color6 Black
#property indicator_width1 3
#property indicator_width2 3
#property indicator_width3 2
#property indicator_width4 1
#property indicator_width5 2
//#property indicator_width6 1
#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
extern bool EmailON=false;
//---- input parameters
extern int TrendCCI_period = 50;
extern int EntryCCI_period = 14;
extern bool Zero_cross_alert = false;
extern int Alert_level__Includes_negative = 0;
extern bool Show_EMA = false;
extern int EMA_period;
extern string EMA_of_TrendCCI_or_EntryCCI = "TrendCCI";
extern bool Automatic_timeframe_setting;
extern int M1_TrendCCI_period = 50;
extern int M1_EntryCCI_period = 14;
extern int M5_TrendCCI_period = 50;
extern int M5_EntryCCI_period = 14;
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 CCIHistogramDownBuffer[];
double EntryCCIBuffer[];
double EMA[];
//double ZeroLine[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(2, DRAW_LINE, STYLE_SOLID, 2);
SetIndexBuffer(2, TrendCCIBuffer);
SetIndexStyle(3, DRAW_LINE, STYLE_SOLID, 2);
SetIndexBuffer(3, EntryCCIBuffer);
SetIndexStyle(0, DRAW_HISTOGRAM, 0, 3);
SetIndexBuffer(0, CCIHistogramUpBuffer);
SetIndexStyle(1, DRAW_HISTOGRAM, 0, 3);
SetIndexBuffer(1, CCIHistogramDownBuffer);
SetIndexBuffer(4, EMA);
SetIndexStyle(4, DRAW_LINE, STYLE_SOLID, 2);
/*SetIndexBuffer(5, ZeroLine);
SetIndexStyle(5, DRAW_LINE, STYLE_SOLID, 1);*/
//----
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 )
CCIHistogramUpBuffer[i] = TrendCCIBuffer[i];
else
CCIHistogramUpBuffer[i] = 0;
if (TrendCCIBuffer[i] < 0 )
CCIHistogramDownBuffer[i] = TrendCCIBuffer[i];
else
CCIHistogramDownBuffer[i]=0;
EntryCCIBuffer[i] = iCCI(NULL, 0, entryCCI, PRICE_TYPICAL, i);
//ZeroLine[i] = 0;
}
if (Show_EMA == true) {
if (EMA_of_TrendCCI_or_EntryCCI == "TrendCCI")
for(i=0; i<limit; i++)
EMA[i] = iMAOnArray(TrendCCIBuffer, 0, EMA_period, 0, MODE_EMA, i);
else if (EMA_of_TrendCCI_or_EntryCCI == "EntryCCI")
for(i=0; i<limit; i++)
EMA[i] = iMAOnArray(EntryCCIBuffer, 0, EMA_period, 0, MODE_EMA, 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");
if (EmailON) SendMail("Cross below Zero",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");
if (EmailON) SendMail("Cross above Zero",Symbol() + " M" + Period() + " Trend & Entry CCI Have both crossed above zero");
}
}
prevtime = Time[0];
}
}
//----
return(0);
}
//+------------------------------------------------------------------+
Comments