We had a question come in on how to do variance and covariance in scripting. So I thought I would put the answers in here for anyone else who is interested.

**Variance**

This is simply taking an average and then for each data point measuring the distance from that close to the average. We square the value to remove the sign.

// get the rolling daily returns r1 = Change(INT_TYPE=Day, INT_COUNT=1); // Calculate the average a1 = MA(r1, Bars=5); // Calc the square of the distance from the average d1 = r1 - a1; sd1 = d1 * d1; // Average those values - this may need to be 4 bars (n-1) for a sample variance. v1 = MA(sd1, Bars=5, CALC=Close); //output v1 v1

**Covariance**

This is trying to find how two datasets move in parallel. It is the combined variance of x & y from their respective averages.

Note that I have not got anything to compare this with, so let me know if you find examples that show this script to need adjusting.

// Get the SPX Data - if not using Bloomberg change BLMB to WI g1 = GETDATA(CODE=SPX:BLMB); // get the rolling daily returns r1 = Change(INT_TYPE=Day, INT_COUNT=1); r2 = Change(g1, INT_TYPE=Day, INT_COUNT=1); // Calculate the average a1 = MA(r1, Bars=5); a2 = MA(r2, Bars=5); // Calc the product of the distances from the respective averages d1 = r1 - a1; d2 = r2 - a2; sd12 = d1 * d2; // Average those values by adding them and dividing by n-1 v1 = ACC(sd12, BARS=5, RANGE=Look Back Period, BACKTYPE=Bars) / 4; v1

Hopefully that helps if you are doing this type of work.