MACD_CCIobos_mtf

Download script
MACD_CCIobos_mtf

This tool is designed to assist traders in identifying potential momentum shifts by combining two popular technical analysis indicators: the MACD (Moving Average Convergence Divergence) and the CCI (Commodity Channel Index). Instead of showing standard lines on a chart, this script identifies specific market conditions and marks them visually as arrows for easier interpretation.

Core Logic and Functionality

The tool operates by scanning historical price data based on specific mathematical parameters that you can customize. It looks for a "confluence" of signals—meaning it only triggers an alert when both indicators agree on the market direction simultaneously.

1. The Multi-Timeframe Approach One of the key features of this script is its ability to analyze higher timeframes while you are looking at a smaller one. This allows you to see the "big picture" trends (like hourly or daily movements) without switching back and forth between different charts.

2. The Two Primary Indicators

  • MACD: This is used to determine the momentum of the price. The script compares current moving averages against previous ones to see if the strength of a move is increasing or decreasing.
  • CCI: This measures the current price relative to its average price over a specific period. It is primarily used to identify "Overbought" or "Oversold" conditions—essentially telling you when a price has moved too far, too fast in one direction.

How the Signals are Generated

The script processes these two indicators together to produce three distinct visual markers:

  • Bullish Momentum (Potential Buy): The tool looks for a situation where the CCI is above a specific "Overbought" threshold while the MACD shows an upward movement. When both conditions align, it marks a signal on the chart.
  • Bearish Momentum (Potential Sell): Conversely, the tool looks for a situation where the CCI is below a specific "Oversold" threshold while the MACD shows a downward movement. When these align, it marks the opposite signal.
  • Neutral/Other: If the conditions for a strong buy or sell are not met, the script remains neutral, filtering out the "noise" of the market to help you focus on high-probability areas.

Visual Presentation

Rather than cluttering your screen with complex lines, the script simplifies the data into clear arrows. This allows you to quickly glance at your chart and identify where the momentum is shifting based on the combined strength of both indicators.

Indicators Used
MACD Histogram
Miscellaneous
Implements a curve of type %1
12 Views
0 Downloads
0 Favorites
MACD_CCIobos_mtf
//+------------------------------------------------------------------+
//|                                                     MACD_CCI.mq4 |
//|                                   Copyright © 2009, challenger78 |
//+------------------------------------------------------------------+
//mod mtf

#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 int cciOBlevel =  100;
extern int cciOSlevel = -100;

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";

double buffer1[], buffer2[], buffer3[];




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 > cciOBlevel && macd0 > macd1 )   buffer1[i] = BarLevl;  
      else 
      if (cci < cciOSlevel && macd0 < macd1 )   buffer2[i] = BarLevl;  
      else                                      buffer3[i] = BarLevl;
   
   }
   return(0);
}

Comments