Aroon_v1_v1

Download script
Aroon_v1_v1

This 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:

  1. 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.
  2. 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.
  3. 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.

Miscellaneous
Implements a curve of type %1
17 Views
0 Downloads
0 Favorites
Aroon_v1_v1
/*-----------------------------+
|			       |
| 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