//+------------------------------------------------------------------+ //| Online_Regression.mqh | //| Online Regression v1.00 Copyright 2016, fxborg | //| http://fxborg-labo.hateblo.jp/ | //+------------------------------------------------------------------+ #property copyright "Copyright 2016, fxborg" #property link "http://fxborg-labo.hateblo.jp/" #property version "1.00" #include //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class COnlineRegression { protected: int m_CurrentBar; int m_PrevBar; double m_Alpha; double m_Series; double m_M[6]; double m_V[4]; double m_Series_bk; double m_M_bk[6]; double m_V_bk[4]; CIntMatrix m_MX; public: //--- Initialization void COnlineRegression(); // constructor void ~COnlineRegression(); // destructor void Init(const double alpha); void Push(const double series,const int begin,const int rates_total,const int bar,double &intersept,double &beta); protected: void Dot(const double x1,const double y1,const double x2,const double y2,double &v[]); bool Solver(const double &m[],const double &v[],double &res[]); }; void COnlineRegression::COnlineRegression(){} void COnlineRegression::~COnlineRegression(){} //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void COnlineRegression::Init(const double alpha) { //--- m_Alpha=alpha; //--- m_CurrentBar=-1; m_PrevBar=-1; m_M[0]=0; m_M[1]=0; m_M[2]=0; m_M[3]=0; m_M[4]=2; m_M[5]=2; //--- m_V[0]=0; m_V[1]=0; m_V[2]=2; m_V[3]=1; } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void COnlineRegression::Push(const double series,const int begin,const int rates_total,const int bar,double &intersept,double &beta) { double _M[6]; double _V[6]; _M[0]=0; _M[1]=0; _M[2]=0; _M[3]=0; _M[4]=2; _M[5]=2; _V[0]=0; _V[1]=0; _V[2]=2; _V[3]=1; double x[4]; x[0]=1; x[1]=0; x[2]=2; x[3]=1; if(bar