57 lines
4.4 KiB
Plaintext
57 lines
4.4 KiB
Plaintext
//+------------------------------------------------------------------+
|
|
//| RingBuffer.mqh |
|
|
//| Copyright 2016, Vasiliy Sokolov. |
|
|
//| http://www.mql5.com |
|
|
//+------------------------------------------------------------------+
|
|
#property copyright "Copyright 2016, Vasiliy Sokolov."
|
|
#property link "http://www.mql5.com"
|
|
#include "RiBuffDbl.mqh"
|
|
//+------------------------------------------------------------------+
|
|
//| Calculate moving average in the ring buffer |
|
|
//+------------------------------------------------------------------+
|
|
class CRiSMA : public CRiBuffDbl
|
|
{
|
|
private:
|
|
double m_sum;
|
|
protected:
|
|
virtual void OnAddValue(double value);
|
|
virtual void OnRemoveValue(double value);
|
|
virtual void OnChangeValue(int index, double del_value, double new_value);
|
|
public:
|
|
CRiSMA(void);
|
|
|
|
double SMA(void);
|
|
};
|
|
|
|
CRiSMA::CRiSMA(void) : m_sum(0.0)
|
|
{
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Increase the total sum |
|
|
//+------------------------------------------------------------------+
|
|
void CRiSMA::OnAddValue(double value)
|
|
{
|
|
m_sum += value;
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Decrease the total sum |
|
|
//+------------------------------------------------------------------+
|
|
void CRiSMA::OnRemoveValue(double value)
|
|
{
|
|
m_sum -= value;
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Change the total sum |
|
|
//+------------------------------------------------------------------+
|
|
void CRiSMA::OnChangeValue(int index,double del_value,double new_value)
|
|
{
|
|
m_sum -= del_value;
|
|
m_sum += new_value;
|
|
}
|
|
//+------------------------------------------------------------------+
|
|
//| Get the simple moving average |
|
|
//+------------------------------------------------------------------+
|
|
double CRiSMA::SMA(void)
|
|
{
|
|
return m_sum/GetTotal();
|
|
} |