Averages/Simple moving average: Difference between revisions

Content added Content deleted
(→‎{{header|Perl}}: some more clarification and code clean-up)
(Add Brat implementation)
Line 324: Line 324:
Number = 1 SMA3 = 2 SMA5 = 3
Number = 1 SMA3 = 2 SMA5 = 3
</pre>
</pre>

=={{header|Brat}}==
Object version
<lang brat>
SMA = object.new

SMA.init = { period |
my.period = period
my.list = []
my.average = 0
}

SMA.prototype.add = { num |
true? my.list.length >= my.period
{ my.list.deq }

my.list << num
my.average = my.list.reduce(:+) / my.list.length
}

sma3 = SMA.new 3
sma5 = SMA.new 5
[1, 2, 3, 4, 5, 5, 4, 3, 2, 1].each { n |
p n, " - SMA3: ", sma3.add(n), " SMA5: ", sma5.add(n)
}</lang>

Function version

<lang brat>sma = { period |
list = []

{ num |
true? list.length >= period
{ list.deq }

list << num
list.reduce(:+) / list.length
}
}

sma3 = sma 3
sma5 = sma 5
[1, 2, 3, 4, 5, 5, 4, 3, 2, 1].each { n |
p n, " - SMA3: ", sma3(n), " SMA5: ", sma5(n)
}</lang>

Output:

<pre>1 - SMA3: 1 SMA5: 1
2 - SMA3: 1.5 SMA5: 1.5
3 - SMA3: 2 SMA5: 2
4 - SMA3: 3 SMA5: 2.5
5 - SMA3: 4 SMA5: 3
5 - SMA3: 4.6666666666667 SMA5: 3.8
4 - SMA3: 4.6666666666667 SMA5: 4.2
3 - SMA3: 4 SMA5: 4.2
2 - SMA3: 3 SMA5: 3.8
1 - SMA3: 2 SMA5: 3</pre>


=={{header|C}}==
=={{header|C}}==