Simple moving average

Implemented with closures:

func simple_moving_average(period) {
 
    var list = []
    var sum = 0
 
    func (number) {
        list.append(number)
        sum += number
        if (list.len > period) {
            sum -= list.shift
        }
        (sum / list.length)
    }
}
 
var ma3 = simple_moving_average(3)
var ma5 = simple_moving_average(5)
 
for num (1..5, flip(1..5)) {
  printf("Next number = %d, SMA_3 = %.3f, SMA_5 = %.1f\n",
    num, ma3.call(num), ma5.call(num))
}

Implemented as a class:

Output:

Last updated

Was this helpful?