Module quantfin.stats.smoothing
Various data smoothing methods
Source code
"""Various data smoothing methods"""
import numpy as np
def sma(y, n):
"""Simple moving average, SMA(n).
Args:
y (numpy.array): Data to calculate moving average from.
n (int): Number of points to use when calculating moving avg.
Returns:
An array of size `len(y) - n`.
Raises:
ValueError: If `n > len(y)`.
"""
N = len(y) - n
if n < 0:
raise ValueError("Input doesn't contain enough data for moving average.")
out = [y[i:i+n].mean() for i in range(len(y) - n)]
out = np.array(out)
return out
def ewma(y, alpha):
"""Exponentialy weighted moving average.
Args:
y (numpy.array): Data to calculate the moving average from.
alpha (float): Smoothing parameter.
Returns:
An array of size `len(y)`.
"""
avg = np.zeros(len(y))
avg[0] = y[0]
for i in range(1, len(y)):
avg[i] = alpha * y[i] + (1 - alpha) * avg[i - 1]
return avg
Functions
def ewma(y, alpha)
-
Exponentialy weighted moving average.
Args
y
:numpy.array
- Data to calculate the moving average from.
alpha
:float
- Smoothing parameter.
Returns
An array of size
len(y)
.Source code
def ewma(y, alpha): """Exponentialy weighted moving average. Args: y (numpy.array): Data to calculate the moving average from. alpha (float): Smoothing parameter. Returns: An array of size `len(y)`. """ avg = np.zeros(len(y)) avg[0] = y[0] for i in range(1, len(y)): avg[i] = alpha * y[i] + (1 - alpha) * avg[i - 1] return avg
def sma(y, n)
-
Simple moving average, SMA(n).
Args
y
:numpy.array
- Data to calculate moving average from.
n
:int
- Number of points to use when calculating moving avg.
Returns
An array of size
len(y) - n
.Raises
ValueError
- If
n > len(y)
.
Source code
def sma(y, n): """Simple moving average, SMA(n). Args: y (numpy.array): Data to calculate moving average from. n (int): Number of points to use when calculating moving avg. Returns: An array of size `len(y) - n`. Raises: ValueError: If `n > len(y)`. """ N = len(y) - n if n < 0: raise ValueError("Input doesn't contain enough data for moving average.") out = [y[i:i+n].mean() for i in range(len(y) - n)] out = np.array(out) return out