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.
C++
#include <bits/stdc++.h>
using namespace std;
class SimpleMovingAverage {
queue< double > Dataset;
int period;
double sum;
public :
SimpleMovingAverage( int per) { period = per; }
void addData( double num)
{
sum += num;
Dataset.push(num);
if (Dataset.size() > period) {
sum -= Dataset.front();
Dataset.pop();
}
}
double getMean() { return sum / period; }
};
int main()
{
double input_data[]
= { 1, 3, 5, 6, 8, 12, 18, 21, 22, 25 };
int per = 3;
SimpleMovingAverage obj(per);
for ( double x : input_data) {
obj.addData(x);
cout << "New number added is " << x
<< ", SMA = " << obj.getMean() << endl;
}
}
|
Java
import java.util.*;
public class SimpleMovingAverage {
private final Queue<Double> Dataset
= new LinkedList<Double>();
private final int period;
private double sum;
public SimpleMovingAverage( int period)
{
this .period = period;
}
public void addData( double num)
{
sum += num;
Dataset.add(num);
if (Dataset.size() > period) {
sum -= Dataset.remove();
}
}
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());
}
}
}
|
Python3
Dataset = []
sum = 0
def addData(num):
global sum
sum + = num
Dataset.append(num)
if ( len (Dataset) > period):
sum - = Dataset.pop( 0 )
def getMean():
global sum
return sum / period
input_data = [ 1 , 3 , 5 , 6 , 8 , 12 , 18 , 21 , 22 , 25 ]
per = 3
period = per
for x in input_data:
addData(x)
print ( "New number added is" , x, ", SMA =" , getMean())
|
C#
using System;
using System.Collections.Generic;
public class SimpleMovingAverage {
private Queue<Double> Dataset = new Queue<Double>();
private int period;
private double sum;
public SimpleMovingAverage( int period)
{
this .period = period;
}
public void addData( double num)
{
sum += num;
Dataset.Enqueue(num);
if (Dataset.Count > period) {
sum -= Dataset.Dequeue();
}
}
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);
foreach ( double x in input_data)
{
obj.addData(x);
Console.WriteLine( "New number added is " + x
+ ", SMA = " + obj.getMean());
}
}
}
|
Javascript
let Dataset = [];
let period;
let sum = 0;
function addData(num)
{
sum += num;
Dataset.push(num);
if (Dataset.length > period) {
sum -= Dataset.shift();
}
}
function getMean() { return sum / period; }
let input_data = [ 1, 3, 5, 6, 8, 12, 18, 21, 22, 25 ];
let per = 3;
period = per;
for ( var x of input_data) {
addData(x);
console.log( "New number added is " + x
+ ", SMA = " + getMean());
}
|
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
Last Updated :
01 Aug, 2022
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...