MACD_CCI_mtf_Alert_v1

Download script
MACD_CCI_mtf_Alert_v1

This 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:

  1. Momentum Tracking (MACD): It looks at the relationship between fast and slow moving averages to determine the current trend's strength and direction.
  2. 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.
Indicators Used
MACD Histogram
Miscellaneous
Implements a curve of type %1It issuies visual alerts to the screen
9 Views
0 Downloads
0 Favorites
MACD_CCI_mtf_Alert_v1
//+------------------------------------------------------------------+
//|                                                     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