Aroon_v1_v1
Download scriptThis custom indicator is designed to help traders identify the strength and direction of a market trend by analyzing how recently price highs and lows have occurred within a specific timeframe.
Core Logic Overview
The script monitors the price movement over a user-defined period (the "Aroon Period") and calculates two distinct values: an "Up" value and a "Down" value. These are visualized as two separate lines on a dedicated sub-window of the trading chart.
How the Calculation Works
To determine the trend strength, the logic performs the following steps for every candle on the chart:
-
Identifying Key Points: The script looks back over the last few bars (determined by the user) to find two specific pieces of information:
- The most recent time a High price was reached.
- The most recent time a Low price was reached.
-
Measuring Recency: It calculates how many bars have passed since those highs and lows occurred.
- If a new high was reached very recently, the "Up" difference is small.
- If a new low was reached very recently, the "Down" difference is small.
-
Converting to a Percentage Score: The script converts these time differences into a numerical score ranging from 0 to 100:
- Aroon Up: This value increases as the price moves toward new highs more frequently. A high score suggests a strengthening bullish trend (buying pressure).
- Aroon Down: This value increases as the price moves toward new lows more frequently. A high score suggests a strengthening bearish trend (selling pressure).
Practical Application
By observing the interaction between these two lines, a trader can visually identify market momentum. When the "Up" line is near 100 and the "Down" line is low, it indicates a powerful upward trend. Conversely, when the "Down" line climbs toward 100 while the "Up" line stays low, it signals significant downward momentum. This allows users to gauge whether the market is trending strongly in one direction or if it is moving sideways with little conviction.
/*-----------------------------+
| |
| Shared by www.Aptrafx.com |
| |
+------------------------------*/
//+------------------------------------------------------------------+
//| Custom Aroon_v1.mq4 |
//| rafcamara |
//| Has corrected - Ramdass |
//+------------------------------------------------------------------+
#property copyright "rafcamara"
#property link "rafcamara@yahoo.com"
//---- indicator settings
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 DodgerBlue
#property indicator_color2 Red
//---- indicator parameters
extern int AroonPeriod=10;
extern int CountBars=300;
//---- indicator buffers
double AroonUpBuffer[];
double AroonDnBuffer[];
int HighBarBuffer;
int LowBarBuffer;
//+------------------------------------------------------------------+
//| Custom indicator initialization function |
//+------------------------------------------------------------------+
int init()
{
//---- 2 additional buffers are used for counting.
IndicatorBuffers(2);
SetIndexBuffer(0, AroonUpBuffer);
SetIndexBuffer(1, AroonDnBuffer);
//---- drawing settings
SetIndexStyle(0,DRAW_LINE,STYLE_SOLID,1);
SetIndexStyle(1,DRAW_LINE,STYLE_SOLID,1);
IndicatorDigits(1);
//---- indicator buffers mapping
if(!SetIndexBuffer(0,AroonUpBuffer) && !SetIndexBuffer(1,AroonDnBuffer))
Print("cannot set indicator buffers!");
//---- name for DataWindow and indicator subwindow label
IndicatorShortName("Aroon Up & Dn_v1("+AroonPeriod+")");
//---- initialization done
return(0);
}
//+------------------------------------------------------------------+
//| Aroon Up & Dn |
//+------------------------------------------------------------------+
int start()
{
if (CountBars>=Bars) CountBars=Bars;
SetIndexDrawBegin(0,Bars-CountBars+AroonPeriod+1);
SetIndexDrawBegin(1,Bars-CountBars+AroonPeriod+1);
double AroonUp,AroonDn;
int ArPer,limit,i;
int UpBarDif,DnBarDif;
// int HighBarBuffer;
// int LowBarBuffer;
int counted_bars=IndicatorCounted();
ArPer=AroonPeriod; //Short name
//---- check for possible errors
if(counted_bars<0) return(-1);
if(AroonPeriod<1) return(-1);
//---- initial zero
if(counted_bars<1)
{
for(i=1;i<=ArPer;i++) AroonUpBuffer[CountBars-i]=0.0;
for(i=1;i<=ArPer;i++) AroonDnBuffer[CountBars-i]=0.0;
}
//---- last counted bar will be recounted
//if(counted_bars>0) counted_bars--;
limit=CountBars-AroonPeriod;
//----Calculation---------------------------
for( i=0; i<limit; i++)
{
HighBarBuffer = Highest(NULL,0,MODE_HIGH,ArPer,i); //Periods from HH
LowBarBuffer = Lowest(NULL,0,MODE_LOW,ArPer,i); //Periods from LL
UpBarDif = i-HighBarBuffer; //Period substraction
DnBarDif = i-LowBarBuffer; //Period substraction
AroonUpBuffer[i]=100+(100/ArPer)*(UpBarDif); //Adjusted Aroon Up
AroonDnBuffer[i]=100+(100/ArPer)*(DnBarDif); //Adjusted Aroon Down
}
return(0);
}
Comments