La media móvil simple es la media obtenida de los datos durante un período de tiempo t. En la media normal, su valor cambia con los datos cambiantes, pero en este tipo de media también cambia con el intervalo de tiempo. Obtenemos la media para algún período t y luego eliminamos algunos datos anteriores. Nuevamente obtenemos una nueva media y este proceso continúa. Es por eso que es una media móvil. Esto tiene una gran aplicación en el mercado financiero. Ejemplos:
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
Enfoque Dada una serie de números y un tamaño de subconjunto fijo, el primer elemento del promedio móvil se obtiene tomando el promedio del subconjunto fijo inicial de la serie de números. Luego, el subconjunto se modifica «desplazando hacia adelante» , es decir, excluyendo el primer número de la serie e incluyendo el siguiente valor en el subconjunto.
Aquí hay un programa java para calcular la media móvil simple.
C++
// C++ program to calculate // Simple Moving Average #include <bits/stdc++.h> using namespace std; class SimpleMovingAverage { // queue used to store list so that we get the average queue<double> Dataset; int period; double sum; public: // constructor to initialize period SimpleMovingAverage(int per) { period = per; } // function to add new data in the // list and update the sum so that // we get the new mean void addData(double num) { sum += num; Dataset.push(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.front(); Dataset.pop(); } } // function to calculate mean 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; } } // This code is contributed by phasing17
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()); } } }
Python3
# Python3 program to calculate # Simple Moving Average # queue used to store list so that we get the average Dataset = [] sum = 0 # function to add new data in the # list and update the sum so that # we get the new mean def addData(num): global sum sum += num Dataset.append(num) # Updating size so that length # of data set should be equal # to period as a normal mean has if (len(Dataset) > period): sum -= Dataset.pop(0) # function to calculate mean 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()) # This code is contributed by phasing17
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
Javascript
// JavaScript program to calculate // Simple Moving Average // queue used to store list so that we get the average let Dataset = []; let period; let sum = 0; // function to add new data in the // list and update the sum so that // we get the new mean function addData(num) { sum += num; Dataset.push(num); // Updating size so that length // of data set should be equal // to period as a normal mean has if (Dataset.length > period) { sum -= Dataset.shift(); } } // function to calculate mean 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()); } // This code is contributed by phasing17
Producción:
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
Referencias: Wiki
Publicación traducida automáticamente
Artículo escrito por Surya Priy y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA