bell notificationshomepageloginNewPostedit profiledmBox

Hoots : How do I calculate a simple moving average for stock prices? To give a little context, this is for a programming assignment at school so the simplest form of proper moving average is all that's needed. I've searched around - freshhoot.com

10% popularity   0 Reactions

How do I calculate a simple moving average for stock prices?
To give a little context, this is for a programming assignment at school so the simplest form of proper moving average is all that's needed. I've searched around and seen the summation formulas and all that good stuff but I'm still a bit unclear on the algorithm.

Suppose I am current displaying 30 days worth of information for a stock (FDX), from 4/25/11 - 6/6/11. Naturally the x-axis represents some time interval and y-axis is my closing price. Now, I need to display a simple moving average. There is where I get a bit confused. To get the moving average for 4/25/11 do I just go back 30 days from that, sum those 30 days, divide by 30 and that will be my "close price" or "y point"? If so that means the moving average for 6/6 will include all data points up to 4/25 and also 4/21 (4/25 must have been a Monday)?


Load Full (5)

Login to follow hoots

5 Comments

Sorted by latest first Latest Oldest Best

10% popularity   0 Reactions

When setting up a spreadsheet, just list the prices in a vertical column. In the next column choose the cell next to the Nth entry (where N is say 30, for your 30day average) then just calculate the average of the cells adjacent and prior N days. When you "fill down" the equation will shift the cells it uses to calculate always using the adjacent cell and prior N cells.


10% popularity   0 Reactions

MyLib.getSimpleMovingAverage = function (closes, mvg, idx) {

for (n = 0; n < closes.length; n++) {
if (n > 0) {
if (closes[n] == null && closes[n - 1] != null) {
closes[n] = closes[n - 1]
}
}
}

if (idx > mvg) {

start = idx - mvg;
end = (idx + 1)
narr = closes.slice(start, end)
var total = narr.reduce(function (sum, value) { return sum + value }, 0);
return parseFloat(total / narr.length)

} else {
start = 0;
end = (idx + 1)
narr = closes.slice(start, end)
var total = narr.reduce(function (sum, value) { return sum + value }, 0);
return parseFloat(total / narr.length)
}
}


10% popularity   0 Reactions

The 30 day moving average for a given day would be the sum of the close prices from the previous 30 days divided by 30.

So, for 4/25, you would sum the prices from 3/24 to 4/25 and divide by 30.

For 4/26, you would sum the prices from 3/25 to 4/26 and divide by 30.

For 4/27, you would sum the prices from 3/26 to 4/27 and divide by 30.

etc...

I see you are trying to write a program to do this. I'd post code here, but that probably wouldn't be appropriate. You might be better off asking over on stackoverflow.com if you need help with the implementation details.


10% popularity   0 Reactions

The moving part of the moving average means that the period used to calculate it moves. For instance, if your data (D) is as follows, and you are doing a moving average (A) with a period of 3, this is what you will get:

D A

1 0

2 0

3 2

2 2.3

3 2.6

4 3

2 3

So, the average calculation ignores the previous average calculations - it is only based on the data.


10% popularity   0 Reactions

See Simple moving average on Wikipedia, it provides an equation that can be easily translated into code.


Back to top Use Dark theme