Averages/Simple moving average: Difference between revisions

m
→‎{{header|REXX}}: changed/added comments and whitespace, changed indentations.
m (→‎{{header|REXX}}: changed the wording in the REXX section header.)
m (→‎{{header|REXX}}: changed/added comments and whitespace, changed indentations.)
Line 3,328:
 
The 1<sup>st</sup> and 2<sup>nd</sup> periods (number of values) were parametrized, &nbsp; as well as the total number of values.
<lang rexx>/*REXX program illustrates and displays a simple moving average using a constructed list. */
parse arg p q n . /*obtain optional arguments from the CL*/
if p=='' | p=="," then p= 3 /*theNot 1stspecified? period Then use (the default is: 3).*/
if q=='' | q=="," then q= 5 /* " 2nd " " " " " 5). */
if n=='' | n=="," then n=10 /*the number" of items in the list. " " " " " */
@.=0 /*definedefault arrayvalue, withonly initialneeded zerofor valuesodd N.*/
do j=1 for n%2; @.j=j; end end /*build 1st half of list, increasing #s*/
do k=n%2 toby -1 byto -1; @.j=k; j=j+1; end end /* " 2nd " " " decreasing " */
 
say ' ' " SMA with " ' SMA with '
say ' number ' " period" p' ' ' period' q
say ' ──────── ' "──────────" '──────────'
do m=1 for n
do m=1 for n /* [↓] perform a simple moving average*/
say center(@.m, 10) left(SMA(p, m), 11) left(SMA(q, m), 11)
end /*m*/
end /*m*/ /* [↑] show a simple moving average.*/
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
SMA: procedure expose @.; parse arg p,j; $=0; i=0 ; i$=0
do k=max(1, j-p+1) to j+p for p while k<=j; i=i+1; $=$+@.k
end $=$ + @./*k*/
return $/i</lang>
end /*k*/
return $/i</lang>
'''output''' &nbsp; using the generated default list of numbers:
<pre>