¿Cómo calcular una media móvil exponencial en Python?

Los promedios móviles son indicadores financieros que se utilizan para analizar los valores de las acciones durante un largo período de tiempo. es decir, se calcula el valor promedio para ese largo período. Los promedios móviles exponenciales (EMA) son un tipo de promedios móviles. Ayuda a los usuarios a filtrar el ruido y producir una curva suave. En Medias Móviles 2 son muy populares.

  1. Promedio móvil simple
  2. Media Móvil Exponencial

El promedio móvil simple solo calcula el valor promedio al realizar una operación media en datos dados, pero cambia de un intervalo a otro. Pero mientras que en el promedio móvil exponencial también se usa el promedio simple para calcular su promedio, pero le da más peso al valor recién agregado ya que el último valor tiene más peso.

Fórmula

EMA de hoy =( Valor de hoy *(Constante/ (1+Núm. de días)) )+( EMA de ayer *(1-(Constante/(1+Número de días))) )

El valor de la media móvil exponencial para hoy se calcula utilizando el valor anterior de la media móvil exponencial. Aquí los valores más antiguos tienen menos ponderación y los valores más nuevos obtienen más ponderación. Esta disminución en el peso de los valores se calcula usando un valor constante llamado Decaimiento.  Entonces, a medida que aumenta el número de días, el valor se vuelve menos significativo. Ayuda a prevenir las fluctuaciones de valores.

Usando el método ewm en Pandas

El método de la media ponderada exponencial se utiliza para calcular la EMA, que toma una constante de caída como parámetro.

Sintaxis

NombreDeTramaDeDatos.ewm(com=valor)

Ejemplo 1:

Como la gráfica de los valores de EMA se suaviza poco en comparación con los valores originales de las existencias, esto indica la naturaleza de los promedios móviles exponenciales.

Python3

# import necessary packages
import pandas as pd
import matplotlib.pyplot as plt
 
# create a dataframe
stockValues = pd.DataFrame(
    {'Stock_Values': [60, 102, 103, 104, 101,
                      105, 102, 103, 103, 102]})
 
# finding EMA
# use any constant value that results in
# good smoothened curve
ema = stockValues.ewm(com=0.4).mean()
 
# Comparison plot b/w stock values & EMA
plt.plot(stockValues, label="Stock Values")
plt.plot(ema, label="EMA Values")
plt.xlabel("Days")
plt.ylabel("Price")
plt.legend()
plt.show()

Producción

Ejemplo 2:

En el siguiente código, tomaremos el mismo DataFrame que usamos anteriormente con un valor com diferente , que es un valor más alto en comparación con el anterior. Se pasará como argumento al método ewm.

Python3

# import necessary packages
import pandas as pd
import matplotlib.pyplot as plt
 
# create a dataframe
stockValues = pd.DataFrame(
    {'Stock_Values': [60, 102, 103, 104, 101, 105,
                      102, 103, 103, 102]})
 
# finding EMA
# used constant value as 0.8
ema = stockValues.ewm(com=0.8).mean()
 
# Comparison plot b/w stock values & EMA
plt.plot(stockValues, label="Stock Values", color="black")
plt.plot(ema, label="EMA Values", color="red")
plt.xlabel("Days")
plt.ylabel("Price")
plt.legend()
plt.show()

Producción 

Ejemplo 3:

Aquí consideraremos el mismo DataFrame que usamos en los 2 ejemplos anteriores con un valor com diferente que es casi cero , pasado como argumento al método ewm.

Python3

# import necessary packages
import pandas as pd
import matplotlib.pyplot as plt
 
# create a dataframe
stockValues = pd.DataFrame(
    {'Stock_Values': [60, 102, 103, 104, 101, 105,
                      102, 103, 103, 102]})
 
# finding EMA
# com value=0.1 (0 approx)
ema = stockValues.ewm(com=0.1).mean()
 
# Comparison plot b/w stock values & EMA
plt.plot(stockValues, label="Stock Values", color="blue")
plt.plot(ema, label="EMA Values", color="green")
plt.xlabel("Days")
plt.ylabel("Price")
plt.legend()
plt.show()

Producción

Publicación traducida automáticamente

Artículo escrito por akhilvasabhaktula03 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *