Aroon Oscilator_v1_v1

Download script
Aroon Oscilator_v1_v1

The Custom Aroon Oscillator is a technical analysis tool designed to help traders identify the strength of market trends and determine whether price action is currently moving in a sustained direction or remaining stagnant. By analyzing recent price extremes, the script provides visual cues to help distinguish between bullish momentum, bearish momentum, and neutral market conditions.

Core Logic and Mechanism

The indicator operates by scanning a specific number of past price bars (defined by the Aroon Period) to identify two key data points: the highest price reached and the lowest price reached within that timeframe.

The script calculates an "Oscillator" value based on the distance between these highs and lows relative to the period length. Essentially, it measures how much "room" has been covered by price movement over a set duration.

Signal Interpretation

To make this data actionable for the user, the script organizes the results into three distinct visual categories based on a Filter threshold:

  • Bullish Momentum (Strong Uptrend): When the oscillator value exceeds the upper filter limit, the script highlights the data in a specific color. This suggests that the upward movement is significant enough to be considered a dominant trend.
  • Bearish Momentum (Strong Downtrend): When the oscillator value falls below the lower filter limit, the script highlights the data in a different color. This indicates that downward pressure is significant and may signify a sustained selling trend.
  • Neutral/Consolidation Zone: When the oscillator value remains between the upper and lower filter limits, it signals a period of relative equilibrium or low volatility. In this state, the price is neither breaking out strongly in either direction, suggesting a "sideways" market or a pause in momentum.

Key User Parameters

  • Aroon Period: Determines how far back into the past the script looks to find high and low prices (shorter periods react faster to changes; longer periods identify broader trends).
  • Filter: Sets the sensitivity of the tool. It defines the "boundary" that the price movement must cross before the indicator classifies it as a strong trend versus a neutral movement.
  • CountBars: Limits how much historical data is processed on the chart at one time, ensuring the platform remains responsive and efficient.

In summary, this tool filters out market "noise" by only highlighting significant price movements that surpass a user-defined strength threshold, allowing traders to focus on clear trends while identifying periods of market indecision.

Miscellaneous
Implements a curve of type %1
11 Views
0 Downloads
0 Favorites
Aroon Oscilator_v1_v1
/*-----------------------------+
|			       |
| Shared by www.Aptrafx.com    |
|			       |
+------------------------------*/

//+------------------------------------------------------------------+
//|                                    Custom Aroon Oscilator_v1.mq4 |
//|                                                        rafcamara |
//|                                       Has corrected - Ramdass    |
//+------------------------------------------------------------------+
#property  copyright "rafcamara"
#property  link      "rafcamara@yahoo.com"
//---- indicator settings
#property  indicator_separate_window
#property  indicator_buffers 4
#property  indicator_color1  DodgerBlue
#property  indicator_color2  Red
#property  indicator_color3  Snow
#property  indicator_color4  Green

//---- indicator parameters
extern int AroonPeriod=10;
extern int Filter=50;
extern int CountBars=300;

//---- indicator buffers
double     ind_buffer1[];
double     ind_buffer2[];
double     ind_buffer3[];

double     HighBarBuffer[];
double     LowBarBuffer[];
double     ArOscBuffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
   
   //---- additional buffers are used for counting.
   IndicatorBuffers(6);
   SetIndexBuffer(4, HighBarBuffer);
   SetIndexBuffer(5, LowBarBuffer);
   SetIndexBuffer(3, ArOscBuffer);
   SetIndexBuffer(0, ind_buffer1);
   SetIndexBuffer(1, ind_buffer2);
   SetIndexBuffer(2, ind_buffer3);



   //---- drawing settings
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,1);
   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,1);
   SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,1);
   SetIndexStyle(3,DRAW_LINE,STYLE_SOLID,1);
   
   IndicatorDigits(0);
   //-- indicator buffers mapping
   if(!SetIndexBuffer(0,ind_buffer1) && !SetIndexBuffer(1,ind_buffer2)
   && !SetIndexBuffer(2,ind_buffer3))
      Print("cannot set indicator buffers!");
   //---- name for DataWindow and indicator subwindow label
   IndicatorShortName("Aroon Osc_v1("+AroonPeriod+", "+Filter+")");
   //---- initialization done
   return(0);
  }
//+------------------------------------------------------------------+
//| Aroon Oscilator                                                  |
//+------------------------------------------------------------------+
int start()
  {
   if (CountBars>=Bars) CountBars=Bars;
   SetIndexDrawBegin(0,Bars-CountBars+AroonPeriod+1);
   SetIndexDrawBegin(1,Bars-CountBars+AroonPeriod+1);
   SetIndexDrawBegin(2,Bars-CountBars+AroonPeriod+1);
   SetIndexDrawBegin(3,Bars-CountBars+AroonPeriod+1);
   double   ArOsc, HighBar=0,LowBar=0;
   int      ArPer; 
   int      limit,i;
//   bool     up,dn;
   int      counted_bars=IndicatorCounted();
   
   ArPer=AroonPeriod;
   //---- check for possible errors
   if(counted_bars<0) return(-1);
   
   //---- initial zero
   if(counted_bars<1)
     {
      for(i=1;i<=ArPer;i++) HighBarBuffer[CountBars-i]=0.0;
      for(i=1;i<=ArPer;i++) LowBarBuffer[CountBars-i]=0.0;
      for(i=1;i<=ArPer;i++) ArOscBuffer[CountBars-i]=0.0;
      for(i=1;i<=ArPer;i++) ind_buffer1[CountBars-i]=0.0;
      for(i=1;i<=ArPer;i++) ind_buffer2[CountBars-i]=0.0;
      for(i=1;i<=ArPer;i++) ind_buffer3[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[i] = Highest(NULL,0,MODE_HIGH,ArPer,i); 	//Periods from HH  	   
  	   LowBarBuffer[i] = Lowest(NULL,0,MODE_LOW,ArPer,i);		//Periods from LL

  	   ArOscBuffer[i]= 100*(LowBarBuffer[i]-HighBarBuffer[i])/ArPer;		//Short formulation
   }

   //---- dispatch values between 2 buffers
   for(i=limit-1; i>=0; i--)
     {
      ArOsc=ArOscBuffer[i];
      if(ArOsc>Filter)
        {
         ind_buffer1[i]=ArOsc;
         ind_buffer2[i]=0.0;
         ind_buffer3[i]=0.0;      
        }       
      if(ArOsc<-Filter)
        {
         ind_buffer1[i]=0.0;
         ind_buffer2[i]=ArOsc;
         ind_buffer3[i]=0.0;
        }
       if(ArOsc<=Filter && ArOsc>=-Filter)
       {
         ind_buffer1[i]=0.0;
         ind_buffer2[i]=0.0;
         ind_buffer3[i]=ArOsc;
       }  
     }
   //---- done
   return(0);
  }

Comments