# Program to find simple moving average

**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

**Approach**

Given 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

`// Java program to calculate ` `// Simple Moving Average ` `import` `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()); ` ` ` `} ` ` ` `} ` `} ` |

*chevron_right*

*filter_none*

## C#

`// C# program to calculate ` `// Simple Moving Average ` `using` `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 ` |

*chevron_right*

*filter_none*

**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

## Recommended Posts:

- Program to find simple interest
- Program to evaluate simple expressions
- Menu Driven C++ Program for a Simple Calculator
- Find the subarray with least average
- Find average of two numbers using bit operation
- Find the average of first N natural numbers
- Find the average of k digits from the beginning and l digits from the end of the given number
- Maximum possible intersection by moving centers of line segments
- Check if it is possible to return to the starting position after moving in the given directions
- Time until distance gets equal to X between two objects moving in opposite direction
- Simple Interest
- Number of Simple Graph with N Vertices and M Edges
- Sum of average of all subsets
- Average of first n odd naturals numbers
- Average of a stream of numbers

If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.