[i]RSI_MACD_MA_Ron_01_001
Download scriptThis custom indicator is designed to assist traders in identifying potential market trends and entry points by combining three popular technical analysis tools: Moving Averages (EMA), the MACD (Moving Average Convergence Divergence), and the RSI (Relative Strength Index).
Core Components
The tool processes data from your chart using three distinct layers of logic:
- Trend Tracking: It utilizes two Exponential Moving Averages (EMAs) to help visualize the direction of the price.
- Momentum Analysis: It incorporates the MACD indicator to determine the strength and direction of price movements.
- Overbought/Oversold Monitoring: It uses the RSI to gauge the speed and change of price movements, helping to identify if an asset is gaining or losing strength.
How the Logic Works
The script scans historical price data and applies a specific set of "filters" to decide when to display visual signals on your chart:
1. Buy Signals (Long) The indicator looks for a specific harmony between momentum and strength. A signal is generated when:
- The MACD value is positive (indicating upward momentum).
- AND the RSI value is above 50 (confirming that buying pressure is dominant). When both conditions are met, the script places a visual arrow on the chart to suggest an upward move.
2. Sell Signals (Short) Conversely, the indicator looks for a combination of downward momentum and weakening price action. A signal is generated when:
- The MACD value is negative (indicating downward momentum).
- AND the RSI value is below 50 (confirming that selling pressure is dominant). When these conditions align, the script places an arrow to suggest a potential downward move.
Visual Display
To keep the chart clean and easy to read, the indicator provides:
- Dynamic Lines: It plots the two Moving Averages directly on your price chart so you can see the overarching trend.
- Actionable Icons: Instead of cluttering the screen with constant data points, it only places specific arrows at the exact moments where the momentum and RSI filters align, highlighting potential trade opportunities.
//+------------------------------------------------------------------+
//| MA + MACD + RSI |
//+------------------------------------------------------------------+
#property copyright "Ron T"
#property link "http://www.lightpatch.com/forex"
#property indicator_chart_window
#property indicator_buffers 5
#property indicator_color1 Red
#property indicator_color2 White
#property indicator_color3 Aqua
#property indicator_color4 LightGreen
#property indicator_color5 DodgerBlue
extern int MovingAvg1=5;
extern int MovingAvg2=8;
extern int RSIPeriod=14;
extern int MACDfast=12;
extern int MACDslow=26;
extern int MACDsignal=9;
//---- buffers
double Buffer0[];
double Buffer1[];
double Buffer2[];
double Buffer3[];
double Buffer4[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//|------------------------------------------------------------------|
int init()
{
// 233 up arrow
// 234 down arrow
// 241 hollow up
// 242 hollow down
// 159 big dot
// 158 little dot
// 168 open square
// 120 box with X
SetIndexStyle(0,DRAW_ARROW);
SetIndexBuffer(0, Buffer0);
SetIndexArrow(0,242);
SetIndexStyle(1,DRAW_ARROW);
SetIndexBuffer(1, Buffer1);
SetIndexArrow(1,241);
SetIndexStyle(2,DRAW_LINE);
SetIndexBuffer(2, Buffer2);
SetIndexStyle(3,DRAW_LINE);
SetIndexBuffer(3, Buffer3);
SetIndexStyle(4,DRAW_LINE);
SetIndexBuffer(4, Buffer4);
return(0);
}
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
int i;
for( i=0; i<Bars; i++ ) Buffer0[i]=0;
for( i=0; i<Bars; i++ ) Buffer1[i]=0;
for( i=0; i<Bars; i++ ) Buffer2[i]=0;
for( i=0; i<Bars; i++ ) Buffer3[i]=0;
for( i=0; i<Bars; i++ ) Buffer4[i]=0;
return(0);
}
//+------------------------------------------------------------------+
//| Custom indicator iteration function |
//+------------------------------------------------------------------+
int start()
{
int pos=Bars-100; // leave room for moving average periods
int ctr=0;
double p=Point();
double i0, i1, i2, i3, i4;
while(pos>=0)
{
i0=iMA(Symbol(),0,MovingAvg1,0,PRICE_OPEN,MODE_EMA,pos);
i1=iMA(Symbol(),0,MovingAvg2,0,PRICE_OPEN,MODE_EMA,pos);
i2=iMACD(Symbol(),0,MACDfast,MACDslow,MACDsignal,PRICE_OPEN, MODE_SIGNAL,pos);
i3=iRSI(Symbol(),0,RSIPeriod,PRICE_OPEN,pos);
Buffer2[pos]=i0;
Buffer3[pos]=i1;
//Long
if (i2>0 && i3>50)
{
Buffer1[pos]=High[pos];
}
//Short
if (i2<0 && i3<50)
{
Buffer0[pos]=Low[pos];
}
pos--;
}
return(0);
}
//+------------------------------------------------------------------+
Comments