//+------------------------------------------------------------------+ //| base.mqh | //| Copyright 2025, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2025, MetaQuotes Ltd." #property link "https://www.mql5.com" #include #include"..\Utility\wald.mqh" #include #include //--- #define EMPTY_VECTOR vector::Zeros(0) #define EMPTY_MATRIX matrix::Zeros(0,0) //--- vector EMPTY_VECTOR_ARRAY[]; matrix EMPTY_MATRIX_ARRAY[]; //+------------------------------------------------------------------+ //| covariance type | //+------------------------------------------------------------------+ enum ENUM_COVAR_TYPE { COVAR_CLASSIC = 0,//classic COVAR_ROBUST//robust }; //+------------------------------------------------------------------+ //| forecasting method | //+------------------------------------------------------------------+ enum ENUM_FORECAST_METHOD { FORECAST_ANALYTIC=0,//analytic FORECAST_SIMULATION,//simulation FORECAST_BOOTSTRAP//bootstrap }; //+------------------------------------------------------------------+ //| forecast alignment | //+------------------------------------------------------------------+ enum ENUM_FORECAST_ALIGNMENT { ALIGN_ORIGIN = 0,//origin ALIGN_TARGET//target }; //+------------------------------------------------------------------+ //| mean models | //+------------------------------------------------------------------+ enum ENUM_MEAN_MODEL { MEAN_CONSTANT=0,//Constant Mean MEAN_ZERO,//Zero Mean MEAN_AR,//AR MEAN_ARX,//AR-X MEAN_HAR,//HAR MEAN_HARX//HAR-X }; //--- const string MEAN_MODELS = "Constant Mean,Zero Mean,AR,AR-X,HAR,HAR-X"; //+------------------------------------------------------------------+ //| volatility models | //+------------------------------------------------------------------+ enum ENUM_VOLATILITY_MODEL { VOL_CONST=0,//Constant Variance VOL_ARCH,//ARCH VOL_AVARCH,//AVARCH VOL_AVGARCH,//AVGARCH VOL_TARCH,//TARCH ZARCH VOL_GARCH,//GARCH VOL_GJR_GARCH//GJR_GARCH }; //--- const string VOLATILITY_MODELS = "Constant Variance,ARCH,AVARCH,AVGARCH,TARCH ZARCH,GARCH,GJR GARCH"; //+------------------------------------------------------------------+ //| distributions | //+------------------------------------------------------------------+ enum ENUM_DISTRIBUTION_MODEL { DIST_NORMAL=0,//Normal DIST_STUDENT,//Standardized Student's T DIST_SKEW_STUDENT,//Standardized Skew Student's T DIST_GEN_ERROR,//Generalized Error Distribution }; //--- const string DISTRIBUTIONS = "Normal,Standardized Student's t,Standardized Skew Student's t,Generalized Error Distribution"; //+------------------------------------------------------------------+ //|Test a matrix for an implicit constant | //+------------------------------------------------------------------+ bool implicit_constant(matrix &exog_data) { ulong nobs = exog_data.Rows(); matrix temp(nobs,exog_data.Cols()+1); vector ones = vector::Ones(nobs); temp.Col(ones,0); for(ulong i = 1; iobs) { ArrayResize(out,int(actual)); matrix temp = matrix::Zeros(in[0].Rows(),in[0].Cols()); temp.Fill(EMPTY_VALUE); for(uint i = 0; iobs) { matrix out(actual); vector temp = vector::Zeros(in.Cols()); temp.Fill(EMPTY_VALUE); for(ulong i = 0; i<(actual - obs); ++i) out.Row((i<(actual - obs))?temp:in.Row(i-(actual - obs)),i); return out; } return in; } //+------------------------------------------------------------------+ //|reindex | //+------------------------------------------------------------------+ vector _reindex(ulong actual, vector& in) { ulong obs = ulong(in.Size()); if(actual>obs) { vector out(actual); double temp = EMPTY_VALUE; for(ulong i = 0; i<(actual - obs); ++i) out[i] = (i<(actual - obs))?temp:in[i-(actual - obs)]; return out; } return in; } //+------------------------------------------------------------------+ //| generate parameter names | //+------------------------------------------------------------------+ string common_names(ulong p, ulong o, ulong q) { string names = "omega"; for(ulong i = 0; i