From a19c291525ced48989107a3217f67e9e01d1a30c Mon Sep 17 00:00:00 2001 From: 9nix6 Date: Wed, 14 Mar 2018 13:17:04 +0100 Subject: [PATCH] Added AwesomeOscillator --- .../RangeBars/RangeBars_AwesomeOscillator.mq5 | 145 ++++++++++++++++++ 1 file changed, 145 insertions(+) create mode 100644 Indicators/RangeBars/RangeBars_AwesomeOscillator.mq5 diff --git a/Indicators/RangeBars/RangeBars_AwesomeOscillator.mq5 b/Indicators/RangeBars/RangeBars_AwesomeOscillator.mq5 new file mode 100644 index 0000000..97f3a7d --- /dev/null +++ b/Indicators/RangeBars/RangeBars_AwesomeOscillator.mq5 @@ -0,0 +1,145 @@ +//+------------------------------------------------------------------+ +//| Awesome_Oscillator.mq5 | +//| Copyright 2009-2017, MetaQuotes Software Corp. | +//| http://www.mql5.com | +//+------------------------------------------------------------------+ +#property copyright "2009-2017, MetaQuotes Software Corp." +#property link "http://www.mql5.com" + +//---- indicator settings +#property indicator_separate_window +#property indicator_buffers 4 +#property indicator_plots 1 +#property indicator_type1 DRAW_COLOR_HISTOGRAM +#property indicator_color1 Green,Red +#property indicator_width1 1 +#property indicator_label1 "AO" +//--- indicator buffers +double ExtAOBuffer[]; +double ExtColorBuffer[]; +double ExtFastBuffer[]; +double ExtSlowBuffer[]; +//--- handles for MAs +int ExtFastSMAHandle; +int ExtSlowSMAHandle; +//--- bars minimum for calculation +#define DATA_LIMIT 33 + +// +// + +#include +RangeBarIndicator rangeBarsIndicator; + + +// +// + +//+------------------------------------------------------------------+ +//| Custom indicator initialization function | +//+------------------------------------------------------------------+ +void OnInit() + { +//---- indicator buffers mapping + SetIndexBuffer(0,ExtAOBuffer,INDICATOR_DATA); + SetIndexBuffer(1,ExtColorBuffer,INDICATOR_COLOR_INDEX); + SetIndexBuffer(2,ExtFastBuffer,INDICATOR_CALCULATIONS); + SetIndexBuffer(3,ExtSlowBuffer,INDICATOR_CALCULATIONS); +//--- set accuracy + IndicatorSetInteger(INDICATOR_DIGITS,_Digits+1); +//--- sets first bar from what index will be drawn + PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,33); +//--- name for DataWindow + IndicatorSetString(INDICATOR_SHORTNAME,"AO"); +//--- get handles + //ExtFastSMAHandle=iMA(NULL,0,5,0,MODE_SMA,PRICE_MEDIAN); + //ExtSlowSMAHandle=iMA(NULL,0,34,0,MODE_SMA,PRICE_MEDIAN); + // renko mod +// ExtFastSMAHandle=iCustom(Symbol(),_Period,"RangeBars\\Indicators\\RangeBars_MA",5,0,MODE_SMA,PRICE_MEDIAN,true); +// ExtSlowSMAHandle=iCustom(Symbol(),_Period,"RangeBars\\Indicators\\RangeBars_MA",34,0,MODE_SMA,PRICE_MEDIAN,true); + ExtFastSMAHandle=iCustom(Symbol(),_Period,"RangeBars\\RangeBars_MA",5,0,MODE_SMA,PRICE_MEDIAN,true); + ExtSlowSMAHandle=iCustom(Symbol(),_Period,"RangeBars\\RangeBars_MA",34,0,MODE_SMA,PRICE_MEDIAN,true); +//---- initialization done + } +//+------------------------------------------------------------------+ +//| Awesome Oscillator | +//+------------------------------------------------------------------+ +int OnCalculate(const int rates_total, + const int prev_calculated, + const datetime &time[], + const double &open[], + const double &high[], + const double &low[], + const double &close[], + const long &tick_volume[], + const long &volume[], + const int &spread[]) + { + +//--- check for rates total + if(rates_total<=DATA_LIMIT) + return(0);// not enough bars for calculation + +//--- not all data may be calculated + int calculated=BarsCalculated(ExtFastSMAHandle); + if(calculatedrates_total || _prev_calculated<0) to_copy=rates_total; + else + { + to_copy=rates_total-prev_calculated; + if(_prev_calculated>0) to_copy++; + } +//--- get FastSMA buffer + if(IsStopped()) return(0); //Checking for stop flag + if(CopyBuffer(ExtFastSMAHandle,0,0,to_copy,ExtFastBuffer)<=0) + { + Print("Getting fast SMA is failed! Error",GetLastError()); + return(0); + } +//--- get SlowSMA buffer + if(IsStopped()) return(0); //Checking for stop flag + if(CopyBuffer(ExtSlowSMAHandle,0,0,to_copy,ExtSlowBuffer)<=0) + { + Print("Getting slow SMA is failed! Error",GetLastError()); + return(0); + } +//--- first calculation or number of bars was changed + int i,limit; + if(_prev_calculated<=DATA_LIMIT) + { + for(i=0;iExtAOBuffer[i-1])ExtColorBuffer[i]=0.0; // set color Green + else ExtColorBuffer[i]=1.0; // set color Red + } +//--- return value of prev_calculated for next call + return(rates_total); + } + +//+------------------------------------------------------------------+