//+------------------------------------------------------------------+ //| unifrom.mq5 | //| Copyright 2009-2017, MetaQuotes Software Corp. | //| http://www.mql5.com | //+------------------------------------------------------------------+ //https://www.mql5.com/en/docs/standardlibrary/mathematics/stat/unifrom #include #include #include #include #property script_show_inputs //--- input parameters input double a_par=0; // distribution parameter a (lower bound) input double b_par=10; // distribution parameter b (upper bound) enum ENUM_PRNG_MODE { PRNG_MODE_DBL, // double PRNG_MODE_INT // integer }; input ENUM_PRNG_MODE prng_mode=PRNG_MODE_DBL; // Random number generator mode //--- the random number generator object CRandom pcg; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- hide the price chart ChartSetInteger(0,CHART_SHOW,false); ////--- initialize the random number generator // MathSrand(GetTickCount()); //--- generate a sample of the random variable long chart=0; string name="GraphicNormal"; int n=1000000; // the number of values in the sample int ncells=51; // the number of intervals in the histogram double x[]; // centers of the histogram intervals double y[]; // the number of values from the sample falling within the interval double data[]; // sample of random values double max,min; // the maximum and minimum values in the sample //--- obtain a sample from the uniform distribution MathRandomUniform_PCG32(a_par,b_par,n,data); //--- calculate the data to plot the histogram CalculateHistogramArray(data,x,y,max,min,ncells); //--- obtain the sequence boundaries and the step for plotting the theoretical curve double step; GetMaxMinStepValues(max,min,step); step=MathMin(step,(max-min)/ncells); //--- obtain the theoretically calculated data at the interval of [min,max] double x2[]; double y2[]; MathSequence(min,max,step,x2); MathProbabilityDensityUniform(x2,a_par,b_par,false,y2); ////--- set the scale // double theor_max=y2[ArrayMaximum(y2)]; // double sample_max=y[ArrayMaximum(y)]; // double k=sample_max/theor_max; // for(int i=0; i=cells) ind=cells-1; frequency[ind]++; } //--- set the scale to density estimate if(prng_mode==PRNG_MODE_INT) width=1; for(int i=0; i