Averages/Simple moving average: Difference between revisions
Content added Content deleted
No edit summary |
No edit summary |
||
Line 3,333: | Line 3,333: | ||
2 3 3.8 |
2 3 3.8 |
||
1 2 3 |
1 2 3 |
||
</pre> |
|||
=={{header|Ring}}== |
|||
<lang ring> |
|||
load "stdlib.ring" |
|||
decimals(8) |
|||
maxperiod = 20 |
|||
nums = newlist(maxperiod,maxperiod) |
|||
accum = list(maxperiod) |
|||
index = list(maxperiod) |
|||
window = list(maxperiod) |
|||
for i = 1 to maxperiod |
|||
index[i] = 1 |
|||
accum[i] = 0 |
|||
window[i] = 0 |
|||
next |
|||
for i = 1 to maxperiod |
|||
for j = 1 to maxperiod |
|||
nums[i][j] = 0 |
|||
next |
|||
next |
|||
for n = 1 to 5 |
|||
see "number = " + n + " sma3 = " + left((string(sma(n,3)) + " "),9) + " sma5 = " + sma(n,5) + nl |
|||
next |
|||
for n = 5 to 1 step -1 |
|||
see "number = " + n + " sma3 = " + left((string(sma(n,3)) + " "),9) + " sma5 = " + sma(n,5) + nl |
|||
next |
|||
see nl |
|||
func sma number, period |
|||
accum[period] += number - nums[period][index[period]] |
|||
nums[period][index[period]] = number |
|||
index[period]= (index[period] + 1) % period + 1 |
|||
if window[period]<period window[period] += 1 ok |
|||
return (accum[period] / window[period]) |
|||
</lang> |
|||
Output: |
|||
<pre> |
|||
number = 1 sma3 = 1 sma5 = 1 |
|||
number = 2 sma3 = 1.5000000 sma5 = 1.50000000 |
|||
number = 3 sma3 = 2 sma5 = 2 |
|||
number = 4 sma3 = 3 sma5 = 2.50000000 |
|||
number = 5 sma3 = 4 sma5 = 3 |
|||
number = 5 sma3 = 4.6666666 sma5 = 3.80000000 |
|||
number = 4 sma3 = 4.6666666 sma5 = 4.20000000 |
|||
number = 3 sma3 = 4 sma5 = 4.20000000 |
|||
number = 2 sma3 = 3 sma5 = 3.80000000 |
|||
number = 1 sma3 = 2 sma5 = 3 |
|||
</pre> |
</pre> |
||