CCI_Cross_New-2 only 25-40
Download scriptThis script is a technical analysis tool designed for the MetaTrader 4 platform. It functions by monitoring price momentum through three different "speeds" of a technical indicator known as the Commodity Channel Index (CCI). Instead of just showing lines on a chart, this script identifies specific trend reversals and alerts the user when certain price movements occur.
How the Logic Works
The script analyzes the market by looking at three distinct timeframes of momentum simultaneously:
- Fast Momentum (Short-term): This monitors very recent price action to identify immediate "quick" shifts in direction.
- Slow Momentum (Medium-term): This looks at a slightly broader range of data to confirm more established trends.
- Very Slow Momentum (Long-term): This captures the overarching movement of the market, identifying major shifts in trend.
Signal Identification
The script is programmed to look for specific "crossovers." When the momentum values move past certain thresholds while moving in a specific direction, the script triggers a signal:
- Upward Signals: The script looks for moments where momentum moves from below a threshold to above it (crossing into positive territory). It identifies three levels of these "Up" signals, corresponding to the Fast, Slow, and Very Slow settings.
- Downward Signals: Conversely, it looks for moments where momentum drops from above a threshold to below it (crossing into negative territory). It also identifies three levels of these "Down" signals.
Visual and Audible Alerts
When the logic detects one of these movements, the script provides feedback in three ways:
- On-Chart Arrows: It places visual arrows directly on the price chart. These arrows appear at specific distances from the candles to help you see exactly where a signal was triggered.
- Text Comments: The script displays a live text comment in the top corner of your chart area (e.g., "1st UP", "2nd Down", etc.), telling you exactly which level of momentum has just triggered a signal.
- Audio and Logs: If you are trading in real-time, the script will play an alert sound and print a message in the platform's log window to notify you of the move immediately.
Summary for the User
Essentially, this tool acts as a multi-layered "early warning system." By checking three different speeds of market momentum at once, it helps filter out minor price noise and highlights significant trend changes, categorizing them from immediate short-term shifts to broader long-term movements.
//+------------------------------------------------------------------+
//| CCI_Cross.mq4 |
//| Copyright © 2006, Eli Hayun |
//| http://www.elihayun.com |
//| Built for ValeoFX |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2006, Eli Hayun"
#property link "http://www.elihayun.com"
#property indicator_chart_window
#property indicator_buffers 6
#property indicator_color1 EMPTY//Red// 5-CCi
#property indicator_width1 0
#property indicator_color2 EMPTY//Red//5-CCi
#property indicator_width2 0
#property indicator_color3 Yellow//15-CCi
#property indicator_width3 3
#property indicator_color4 Yellow //15-CCi
#property indicator_width4 3
#property indicator_color5 GreenYellow//40-CCi
#property indicator_width5 4
#property indicator_color6 GreenYellow // 40-CCi
#property indicator_width6 4
//---- input parameters --------------------------------------------
extern int FastCCI=5;
extern int SlowCCI=25;//15
extern int VerySlowCCI=40;//28
extern int Move_Arrow = 5 ;//5 werk nie; kort nog iets onder sê Gerhard.
//---- buffers -----------------------------------------------------
double ExtMapBuffer1[];
double ExtMapBuffer2[];
double ExtMapBuffer3[];
double ExtMapBuffer4[];
double ExtMapBuffer5[];
double ExtMapBuffer6[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- indicators
SetIndexStyle(0,DRAW_NONE);
SetIndexArrow(0,241);//217
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexEmptyValue(0,0.0);
SetIndexStyle(1,DRAW_NONE);
SetIndexArrow(1,242);//218
SetIndexBuffer(1,ExtMapBuffer2);
SetIndexEmptyValue(1,0.0);
SetIndexStyle(2,DRAW_ARROW,STYLE_SOLID, 3);
SetIndexArrow(2,221);//221
SetIndexBuffer(2,ExtMapBuffer3);
SetIndexEmptyValue(2,0.0);
SetIndexStyle(3,DRAW_ARROW,STYLE_SOLID,3);
SetIndexArrow(3,222);//222
SetIndexBuffer(3,ExtMapBuffer4);
SetIndexEmptyValue(3,0.0);
SetIndexStyle(4,DRAW_ARROW,STYLE_SOLID,5);
SetIndexArrow(4,241);//241
SetIndexBuffer(4,ExtMapBuffer5);
SetIndexEmptyValue(4,0.0);
SetIndexStyle(5,DRAW_ARROW,STYLE_SOLID,5);
SetIndexArrow(5,242);//242
SetIndexBuffer(5,ExtMapBuffer6);
SetIndexEmptyValue(5,0.0);
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
//----
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int shift;
for(shift=Bars-1;shift>=0;shift--)
{
ExtMapBuffer1[shift] = 0; ExtMapBuffer2[shift] = 0; ExtMapBuffer3[shift] = 0;
ExtMapBuffer4[shift] = 0; ExtMapBuffer5[shift] = 0; ExtMapBuffer6[shift] = 0;
double fCCI_0 = iCCI(NULL, 0, FastCCI, PRICE_TYPICAL, shift);
double fCCI_1 = iCCI(NULL, 0, FastCCI, PRICE_TYPICAL, shift+1);
double fCCI_2 = iCCI(NULL, 0, FastCCI, PRICE_TYPICAL, shift+2);
if (fCCI_0 > 35 && fCCI_1< 35 )//*********************************
ExtMapBuffer1[shift] = Low[shift] - 3 * Point;
if (fCCI_0 < -35 && fCCI_1> -35 )//*******************************
ExtMapBuffer2[shift] = High[shift] + 3 * Point;
double sCCI_0 = iCCI(NULL, 0, SlowCCI, PRICE_TYPICAL, shift);
double sCCI_1 = iCCI(NULL, 0, SlowCCI, PRICE_TYPICAL, shift+1);
double sCCI_2 = iCCI(NULL, 0, SlowCCI, PRICE_TYPICAL, shift+2);
if (sCCI_0 > 81 && sCCI_1< 81 && sCCI_2 < 81)//71//62 *****************************************
ExtMapBuffer3[shift] = Low[shift] - 4 * Point;
if (sCCI_0 < -81 && sCCI_1> -81 && sCCI_2 > -81)//71//62 **************************************
ExtMapBuffer4[shift] = High[shift] + 4 * Point;
double vsCCI_0 = iCCI(NULL, 0, VerySlowCCI, PRICE_TYPICAL, shift);
double vsCCI_1 = iCCI(NULL, 0, VerySlowCCI, PRICE_TYPICAL, shift+1);
double vsCCI_2 = iCCI(NULL, 0, VerySlowCCI, PRICE_TYPICAL, shift+2);
if (vsCCI_0 > 0 && vsCCI_1< 0 && vsCCI_2 < 0)//51//35*****************
ExtMapBuffer5[shift] = Low[shift] - 5 * Point;
if (vsCCI_0 < -0 && vsCCI_1> -0 && vsCCI_2 > -0)//51******************
ExtMapBuffer6[shift] = High[shift] + 5 * Point;
}
string sComment = "";
if (ExtMapBuffer1[0] != 0)
sComment = sComment + " 1st UP";
if (ExtMapBuffer2[0] != 0)
sComment = sComment + " 1st Down";
if (ExtMapBuffer3[0] != 0)
sComment = sComment + " 2nd UP";
if (ExtMapBuffer4[0] != 0)
sComment = sComment + " 2nd Down";
if (ExtMapBuffer5[0] != 0)
sComment = sComment + " 3rd UP";
if (ExtMapBuffer6[0] != 0)
sComment = sComment + " 3rd Down";
if ((sComment != "") && (!IsTesting()))
{
if (NewBar())
{
PlaySound("wait.wav");//"expert.wav");
Print(Symbol(), " ", sComment);
}
Comment(TimeToStr(CurTime()), " ", sComment);
}
if ((sComment == "") && (!IsTesting()))
{
Comment("");
}
return(0);
}
//+------------------------------------------------------------------+
bool NewBar()
{
static datetime dt = 0;
//if (dt == 0) dt = Time[0];
if (dt != Time[0])
{
dt = Time[0];
return(true);
}
return(false);
}
//===================================================================
Comments