Input pandas DataFrame or GroupBy object with time series data.
required
date_column
str
Column name containing dates or timestamps.
required
close_column
str
Column name with closing prices to calculate volatility.
required
decay_factor
float
Smoothing factor (lambda) for EWMA, between 0 and 1. Higher values give more weight to past data. Default is 0.94 (RiskMetrics standard).
0.94
window
Union[int, Tuple[int, int], List[int]]
Size of the rolling window to initialize EWMA calculation. For each window value the EWMA volatility is only computed when at least that many observations are available. You may provide a single integer or multiple values (via tuple or list). Default is 20.
20
reduce_memory
bool
If True, reduces memory usage before calculation. Default is False.
False
engine
str
Computation engine: ‘pandas’ or ‘polars’. Default is ‘pandas’.
'pandas'
Returns
Name
Type
Description
pd.DataFrame
DataFrame with added columns: - {close_column}ewma_vol{window}_{decay_factor}: EWMA volatility calculated using a minimum number of periods equal to each specified window.
Notes
EWMA volatility emphasizes recent price movements and is computed recursively as:
σ²_t = (1 - λ) * r²_t + λ * σ²_{t-1}
where r_t is the log return. By using the min_periods (set to the provided window value) we ensure that the EWMA is only calculated after enough observations have accumulated.
References:
https://www.investopedia.com/articles/07/ewma.asp
Examples
import pandas as pdimport pytimetk as tkdf = tk.load_dataset("stocks_daily", parse_dates = ['date'])# Example 1 - Calculate EWMA volatility for a single stockdf.query("symbol == 'AAPL'").augment_ewma_volatility( date_column='date', close_column='close', decay_factor=0.94, window=[20, 50]).glimpse()