MACD_CCI_mtf_Alert_v1
Download scriptThis script is a specialized technical analysis tool designed to help traders identify potential momentum shifts by combining two popular market indicators: the MACD (Moving Average Convergence Divergence) and the CCI (Commodity Channel Index).
Core Logic Overview
The primary purpose of this tool is to filter market signals. Rather than relying on just one indicator, which can often produce "false positives," this script requires a specific agreement between two different types of data before it highlights a potential move on your chart.
How the Analysis Works
The tool continuously monitors the price action across various timeframes and evaluates it based on three specific conditions:
- Momentum Tracking (MACD): It looks at the relationship between fast and slow moving averages to determine the current trend's strength and direction.
- Relative Strength (CCI): It measures how the current price is performing relative to its average range over a set period, helping to identify if an asset is "overbought," "oversold," or moving with significant power.
Signal Generation
The script processes these two data points simultaneously to generate visual cues on the chart:
- Bullish Signals: When the CCI indicates positive momentum and the MACD shows that its value is currently increasing (turning upward), the tool marks this as a potential "Buy" or upward move.
- Bearish Signals: Conversely, when the CCI indicates negative momentum and the MACD shows that its value is decreasing (turning downward), the tool identifies this as a potential "Sell" or downward move.
- Neutral States: If neither of these specific conditions are met, the tool remains neutral, essentially telling the trader that there isn't enough confirmed evidence to act.
Key Features for the User
- Multi-Timeframe Analysis: The logic is capable of looking at higher timeframes than what you might have currently open on your screen. This allows you to see the "big picture" trend without switching windows.
- Automated Alerts: To ensure you don't miss a transition, the script includes an alert system. It can send a notification the moment the signal changes color, highlighting exactly when the momentum shifts from one direction to another.
- Visual Clarity: By using distinct colors (Royal Blue for bullish, Red for bearish), the tool simplifies complex data into clear visual markers, allowing for quicker decision-making during live trading.
//+------------------------------------------------------------------+
//| MACD_CCI.mq4 |
//| Copyright © 2009, challenger78 |
//+------------------------------------------------------------------+
//mod mtf
//19.jun.2009 - Add Alert for change color to "RoyalBlue" or "Red" (okfar)
#property copyright "challenger78"
#property indicator_separate_window
#property indicator_buffers 3
#property indicator_color1 RoyalBlue
#property indicator_color2 Red
#property indicator_color3 Orange
#property indicator_minimum 0
#property indicator_maximum 77
extern int TimeFrame=0;
extern int macdMAfast =144; //12
extern int macdMAslow =233; //26;
extern int macdSigMA =21; //9
extern int macdPrice =0;
extern int macdLnMode =0;
extern int CCIperiod = 50;
extern int CCIprice = 5;
extern double BarLevl = 5;
//0main;1signal
extern string MA_Method_Price = "SMA0 EMA1 SMMA2 LWMA3||0O,1C 2H3L,4Md 5Tp 6WghC: Md(HL/2)4,Tp(HLC/3)5,Wgh(HLCC/4)6||macdLnMode:0main 1sig";
extern string TimeFrames = "M1;5,15,30,60H1;240H4;1440D1;10080W1;43200MN|0-CurrentTF";
extern int alertSwitch = 1;
double buffer1[], buffer2[], buffer3[];
int lastABar;
int init()
{
SetIndexStyle(0,DRAW_ARROW); SetIndexArrow(0,167); SetIndexBuffer(0,buffer1); SetIndexEmptyValue(0,EMPTY_VALUE);
SetIndexStyle(1,DRAW_ARROW); SetIndexArrow(1,167); SetIndexBuffer(1,buffer2); SetIndexEmptyValue(1,EMPTY_VALUE);
SetIndexStyle(2,DRAW_ARROW); SetIndexArrow(2,167); SetIndexBuffer(2,buffer3); SetIndexEmptyValue(2,EMPTY_VALUE);
TimeFrame=MathMax(TimeFrame,Period());
string name1= " macd: "+macdMAfast+","+macdMAslow+","+macdSigMA;
string name2= " cci: " +CCIperiod;
IndicatorShortName("MACDCCI"+name1+name2+" "+TimeFrame);
return(0);
}
int start()
{
int i,limit;
int counted_bars = IndicatorCounted();
if(counted_bars < 0) return(-1);
if(counted_bars > 0) counted_bars--;
limit = Bars - counted_bars;
if(TimeFrame!=Period())
limit = MathMax(limit,TimeFrame/Period());
for (i=limit; i>= 0; i--)
{
int y =iBarShift(NULL,TimeFrame,Time[i]);
double macd0 =iMACD(NULL,TimeFrame,macdMAfast,macdMAslow,macdSigMA,macdPrice,macdLnMode,y);
double macd1 =iMACD(NULL,TimeFrame,macdMAfast,macdMAslow,macdSigMA,macdPrice,macdLnMode,y+1);
double cci =iCCI (NULL,TimeFrame,CCIperiod,CCIprice,y);
buffer1[i]=EMPTY_VALUE; buffer2[i]=EMPTY_VALUE; buffer3[i]=EMPTY_VALUE;
if (cci > 0 && macd0 > macd1 ) buffer1[i] = BarLevl;
else
if (cci < 0 && macd0 < macd1 ) buffer2[i] = BarLevl;
else buffer3[i] = BarLevl;
}
if (alertSwitch == 1 && Bars > lastABar) {
if (buffer1[0] != EMPTY_VALUE && buffer1[1] == EMPTY_VALUE) {
Alert(Symbol(), " Indicator MCAD_CCI change color to 'color0'");
lastABar = Bars;
}
if (buffer2[0] != EMPTY_VALUE && buffer2[1] == EMPTY_VALUE) {
Alert(Symbol(), " Indicator MCAD_CCI change color to 'color1'");
lastABar = Bars;
}
}
return(0);
}
Comments