//+------------------------------------------------------------------+ //| ar.mqh | //| Copyright 2025, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2025, MetaQuotes Ltd." #property link "https://www.mql5.com" #include"..\..\np.mqh" #include"..\..\Regression\OLS.mqh" #include"mean.mqh" //+------------------------------------------------------------------+ //| info criterion | //+------------------------------------------------------------------+ enum ENUM_INFO_CRITERION { AIC=0,//AIC BIC//BIC }; //+------------------------------------------------------------------+ //|Bits view | //+------------------------------------------------------------------+ matrix bitview(vector& data, int basis, int view) { if(!data.Size()) return matrix::Zeros(0,0); matrix out = matrix::Zeros(data.Size(),basis/view); int value = 0; int rem = 0; for(ulong i = 0; i-1; --k) { if(value) out[i,j*8+k] = MathMod(value,2); else break; value/=2; } } } return out; } //+------------------------------------------------------------------+ //|Autoregressive AR-X(p) model order selection. | //+------------------------------------------------------------------+ vector ar_select_order(vector& endog, matrix& exog, ulong maxlag,bool use_constant=true, bool global_search = false, ENUM_INFO_CRITERION ic = BIC, ulong holdback=0, ulong period=0) { ulong nexog = exog.Cols(); ArchParameters modelparams; modelparams.y = endog; modelparams.x = exog; modelparams.mean_constant = use_constant; ARX model; if(!model.initialize(modelparams)) return vector::Zeros(0); vector y = endog; matrix x = model.get_regressors(); ulong base_col = x.Cols() - nexog - maxlag; vector sel = vector::Ones(x.Cols()); vector lags[]; double ics[]; int index[]; matrix xx; OLS ols; if(!global_search) { np::fillVector(sel,0.0,long(base_col),long(base_col+maxlag)); ArrayResize(lags,int(maxlag+1)); for(ulong i = 0; i