simple_moving_average.sf 484 B

12345678910111213141516171819202122232425
  1. #!/usr/bin/ruby
  2. func simple_moving_average(period) {
  3. var list = [];
  4. var sum = 0;
  5. func (number) {
  6. list.append(number);
  7. sum += number;
  8. list.len > period && (
  9. sum -= list.shift;
  10. );
  11. return (sum / list.length);
  12. }
  13. }
  14. var ma3 = simple_moving_average(3);
  15. var ma5 = simple_moving_average(5);
  16. for num in (1..^6, 6^..1) {
  17. printf("Next number = %d, SMA_3 = %.3f, SMA_5 = %.1f\n",
  18. num, ma3.call(num), ma5.call(num));
  19. }