//+------------------------------------------------------------------+ //| Custom Aroon_Horn_Oscillator_v1.mq4 | //| www.forex-tsd.com ik | rafcamara | //| Has corrected - Ramdass | //+------------------------------------------------------------------+ #property copyright "rafcamara" #property link "rafcamara@yahoo.com www.forex-tsd.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 #property indicator_style1 0 #property indicator_style2 0 #property indicator_style3 0 #property indicator_style4 0 #property indicator_width1 1 #property indicator_width2 1 #property indicator_width3 1 #property indicator_width4 1 //---- indicator parameters extern int AroonPeriod = 10; extern int Filter = 50; extern int CountBars = 500; //---- 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); SetIndexStyle(1, DRAW_HISTOGRAM); SetIndexStyle(2, DRAW_HISTOGRAM); SetIndexStyle(3, DRAW_LINE); //---- 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("AroonOsc_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); SetIndexLabel(0,"AroonUp("+AroonPeriod+"("+Filter+")"); SetIndexLabel(1,"AroonDown("+AroonPeriod+"("+Filter+")"); SetIndexLabel(2,"AroonOsc("+AroonPeriod+"("+Filter+")"); 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); } //+------------------------------------------------------------------+
Sample
Analysis
Market Information Used:
Indicator Curves created:
Implements a curve of type DRAW_HISTOGRAM
Implements a curve of type DRAW_LINE
Indicators Used:
Custom Indicators Used:
Order Management characteristics:
Other Features: