Standard deviation

 

Good evening all,


I am making my first steps with mql4 and I wanted to get an annualized standard deviation on returns (as a percentage). My trial with isStdDevOnArray() gives me a result close to my expectation but not exactly as expected. Could someone explain to me why I don't get the same result?

   double   returns[],
            total = 0,
            sumDev = 0,
            average,
            stdDev;
   
   ArrayResize(returns, lookBack);
   
   for(int i = 0; i < lookBack; i++) {
      returns[i] = iClose(_Symbol, PERIOD_D1, i+1) / iClose(_Symbol, PERIOD_D1, i+2) - 1.0;
      total += returns[i];
   }
   
   average = total / lookBack;
   
   for(int i = 0; i < lookBack; i++) {
      sumDev += MathPow((returns[i] - average), 2.0);
   }
   
   stdDev = sqrt(sumDev / (lookBack - 1)) * 100 * 16;
   
   Print("Annual standard deviation: ", iStdDevOnArray(returns, 0, lookBack, 0, MODE_SMA, 0) * 100 * 16);
   Print("Expected standard deviation: ", stdDev);


Thanks in advance

 
Francois Franceschini:
lookBack - 1
stdDev = sqrt(sumDev / (lookBack - 1)) * 100 * 16;

why minus 1?
 
Francois Franceschini: Could someone explain to me why I don't get the same result?

Because you divide by lookBack-1 instead of lookBack.

 
Yashar Seyyedin #:

why minus 1?

Because I consider I have a sample only and not the whole population, it makes more sense to me.

As my previous results had been made on excel using the sample formula, for coherence I will have to stick to my two loops.

Thanks for your replies!