//+------------------------------------------------------------------+ //| MovingAverages.mqh | //| Copyright 2009-2013, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "2009, MetaQuotes Software Corp." #property link "http://www.mql5.com" //+------------------------------------------------------------------+ //| Simple Moving Average | //+------------------------------------------------------------------+ double SimpleMA(const int position,const int period,const double &price[]) { //--- double result=0.0; //--- check position if(position>=period-1 && period>0) { //--- calculate value for(int i=0;i0) { double pr=2.0/(period+1.0); result=price[position]*pr+prev_value*(1-pr); } //--- return(result); } //+------------------------------------------------------------------+ //| Smoothed Moving Average | //+------------------------------------------------------------------+ double SmoothedMA(const int position,const int period,const double prev_value,const double &price[]) { //--- double result=0.0; //--- check position if(period>0) { if(position==period-1) { for(int i=0;i=period) result=(prev_value*(period-1)+price[position])/period; } //--- return(result); } //+------------------------------------------------------------------+ //| Linear Weighted Moving Average | //+------------------------------------------------------------------+ double LinearWeightedMA(const int position,const int period,const double &price[]) { //--- double result=0.0,sum=0.0; int i,wsum=0; //--- calculate value if(position>=period-1 && period>0) { for(i=period;i>0;i--) { wsum+=i; sum+=price[position-i+1]*(period-i+1); } result=sum/wsum; } //--- return(result); } //+------------------------------------------------------------------+ //| Simple moving average on price array | //+------------------------------------------------------------------+ int SimpleMAOnBuffer(const int rates_total,const int prev_calculated,const int begin, const int period,const double& price[],double& buffer[]) { int i,limit; //--- check for data if(period<=1 || rates_total-begin