Program to find simple moving average - GeeksforGeeks

27 May, 2019
Simple Moving Average is the average obtained from the data for some t period of time . In normal mean, it’s value get changed with the changing data but in this type of mean it also changes with the time interval . We get the mean for some period t and then we remove some previous data . Again we get new mean and this process continues . This is why it is moving average . This have a great application in financial market .
Examples:
Input : { 1, 3, 5, 6, 8 } 
        Period = 3
Output :New number added is 1.0, SMA = 0.3333333333333333
        New number added is 3.0, SMA = 1.3333333333333333
        New number added is 5.0, SMA = 3.0
        New number added is 6.0, SMA = 4.666666666666667
        New number added is 8.0, SMA = 6.333333333333333

ApproachGiven a series of numbers and a fixed subset size, the first element of the moving average is obtained by taking the average of the initial fixed subset of the number series. Then the subset is modified by “shifting forward”, i.e excluding the first number of the series and including the next value in the subset.
Here is a java program to calculate the Simple Moving Average.
Java
C#
// Java program to calculate// Simple Moving Averageimport java.util.*;  public class SimpleMovingAverage {          // queue used to store list so that we get the average    private final Queue<Double> Dataset = new LinkedList<Double>();    private final int period;    private double sum;      // constructor to initialize period    public SimpleMovingAverage(int period)    {        this.period = period;    }      // function to add new data in the    // list and update the sum so that    // we get the new mean    public void addData(double num)    {        sum += num;        Dataset.add(num);          // Updating size so that length        // of data set should be equal        // to period as a normal mean has        if (Dataset.size() > period)        {            sum -= Dataset.remove();        }    }      // function to calculate mean    public double getMean()    {        return sum / period;    }      public static void main(String[] args)    {        double[] input_data = { 1, 3, 5, 6, 8,                                12, 18, 21, 22, 25 };        int per = 3;        SimpleMovingAverage obj = new SimpleMovingAverage(per);        for (double x : input_data) {            obj.addData(x);            System.out.println("New number added is " +                                x + ", SMA = " + obj.getMean());        }    }}
// C# program to calculate// Simple Moving Averageusing System;using System.Collections.Generic;   public class SimpleMovingAverage {          // queue used to store list so that we get the average    private Queue<Double> Dataset = new Queue<Double>();    private int period;    private double sum;      // constructor to initialize period    public SimpleMovingAverage(int period)    {        this.period = period;    }      // function to add new data in the    // list and update the sum so that    // we get the new mean    public void addData(double num)    {        sum += num;        Dataset.Enqueue(num);          // Updating size so that length        // of data set should be equal        // to period as a normal mean has        if (Dataset.Count > period)        {            sum -= Dataset.Dequeue();        }    }      // function to calculate mean    public double getMean()    {        return sum / period;    }      // Driver code    public static void Main(String[] args)    {        double[] input_data = { 1, 3, 5, 6, 8,                                12, 18, 21, 22, 25 };        int per = 3;        SimpleMovingAverage obj = new SimpleMovingAverage(per);        foreach (double x in input_data) {            obj.addData(x);            Console.WriteLine("New number added is " +                                x + ", SMA = " + obj.getMean());        }    }}  // This code contributed by Rajput-Ji
Output:
New number added is 1.0, SMA = 0.3333333333333333
New number added is 3.0, SMA = 1.3333333333333333
New number added is 5.0, SMA = 3.0
New number added is 6.0, SMA = 4.666666666666667
New number added is 8.0, SMA = 6.333333333333333
New number added is 12.0, SMA = 8.666666666666666
New number added is 18.0, SMA = 12.666666666666666
New number added is 21.0, SMA = 17.0
New number added is 22.0, SMA = 20.333333333333332
New number added is 25.0, SMA = 22.666666666666668

References :Wiki
Rajput-Ji
statistical-algorithms
Mathematical
Mathematical
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Program to print prime numbers from 1 to N.
Segment Tree | Set 1 (Sum of given range)
Modular multiplicative inverse
Fizz Buzz Implementation
Count all possible paths from top left to bottom right of a mXn matrix
Check if a number is Palindrome
Program to multiply two matrices
Generate all permutation of a set in Python
Merge two sorted arrays with O(1) extra space
Count ways to reach the n'th stair