Rads MACD
Download scriptThe 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.
//+------------------------------------------------------------------+
//| 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