Author: Copyright � 2007 Steve Bowley
Rads MACD

The Rads MACD is a technical analysis tool designed to help traders visualize market momentum by identifying specific trends and shifts in price movement. Unlike standard moving average crossovers, this script focuses on the "flow" of the data to provide a clearer visual distinction between rising and falling pressure.

How the Logic Works

The script operates through a three-step logical process:

1. Calculating the Momentum Base The tool begins by calculating a customized version of the Moving Average Convergence Divergence (MACD). It does this by comparing two different "Exponential Moving Averages" (EMAs) based on weighted prices. By subtracting one average from the other, the script determines the current momentum of the asset. If the result is positive, it suggests upward pressure; if negative, it suggests downward pressure.

2. Analyzing Directional Change Instead of simply showing a single line, the logic evaluates how the momentum changes from one moment to the next. The script compares the current calculated value against the previous one to determine if the "trend" is moving up or down. This allows the tool to detect the exact moment the momentum switches direction.

3. Visual Differentiation (The Histogram) The final step is the visual output provided on your chart. The script separates the data into two distinct categories based on the direction of the move:

  • Upward Movement: When the momentum is increasing, the script highlights these values in one color (Lime).
  • Downward Movement: When the momentum is decreasing, it captures those values in a different color (Red).

Summary for the Trader

By using this logic, the tool creates a dual-colored histogram. This allows you to see at a glance not just where the price is going, but the strength and direction of the current trend. It filters out the "noise" of standard indicators by highlighting specific directional shifts, making it easier to identify when a trend is gaining strength or beginning to lose steam.

Indicators Used
Moving average indicator
Miscellaneous
Implements a curve of type %1
12 Views
0 Downloads
0 Favorites
Rads MACD
//+------------------------------------------------------------------+
//|                                                    Rads MACD.mq4 |
//|                                    Copyright © 2007 Steve Bowley |
//|                                        http://www.9squaredfx.com |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2007 Steve Bowley"
#property link      "http://www.9squaredfx.com"

//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 2
#property  indicator_color1  Lime
#property  indicator_color2  Red
//---- indicator buffers
double     ind_buffer1[];
double     ind_buffer2[];
double     ind_buffer3[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- 1 additional buffer used for counting.
   IndicatorBuffers(3);
   //---- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2);
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2);
   IndicatorDigits(MarketInfo(Symbol(),MODE_DIGITS)+1);
   SetIndexDrawBegin(0,36);
   SetIndexDrawBegin(1,36);
//---- 3 indicator buffers mapping
   if(!SetIndexBuffer(0,ind_buffer1) &&
      !SetIndexBuffer(1,ind_buffer2) &&
      !SetIndexBuffer(2,ind_buffer3))
      Print("cannot set indicator buffers!");
//---- Set level Color and Style 
   SetLevelStyle(0, 2, RoyalBlue);
   SetLevelValue(0 , 0);
//---- name for DataWindow and indicator subwindow label
   IndicatorShortName("Rads MACD");
//---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| 9Squared Oscillator                                              |
//+------------------------------------------------------------------+
int start()
  {
   int    limit;
   int    counted_bars=IndicatorCounted();
   double prev,current;
//---- 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;
//---- macd counted in the 1-st additional buffer
   for(int i=0; i<limit; i++)
      ind_buffer3[i]=iMA(NULL,0,18,0,MODE_EMA,PRICE_WEIGHTED,i)-iMA(NULL,0,27,0,MODE_EMA,PRICE_WEIGHTED,i);
//---- dispatch values between 2 buffers
   bool up=true;
   for(i=limit-1; i>=0; i--)
     {
      current=ind_buffer3[i];
      prev=ind_buffer3[i+1];
      if(current>prev) up=true;
      if(current<prev) up=false;
      if(!up)
        {
         ind_buffer2[i]=current;
         ind_buffer1[i]=0.0;
        }
      else
        {
         ind_buffer1[i]=current;
         ind_buffer2[i]=0.0;
        }
     }
//---- done
   return(0);
  }

Comments