@@ -224,3 +224,66 @@ def test_metrics():
224224
225225 print ("Sharpe: " , sharpe_ratio (returns ))
226226 print ("Beta: " , beta (returns , market ))
227+
228+ def ewma_volatility (close_prices ,return_type ,window ,plot = True ):
229+ """
230+ Essa função possibilita a visualização da volatilidade a partir do cálculo da EWMA e da plotagem do gráfico
231+ dessa métrica ao longo de um período.
232+
233+ Parâmetros:
234+ close_prices (pd.DataFrame): série de preços de fechamento que será utilizado de base para o cálculo da EWMA;
235+ return_type (string): tipo de retorno (simple - 'simp' ou logarítmico - 'log') que será utilizado de base para cálculo;
236+ window (int): janela móvel para cálculo da EWMA;
237+ plot (bool): se True, plota o gráfico de linha da EWMA ao longo do tempo
238+
239+ Retorna:
240+ ewma_volatility (pd.DataFrame): um dataframe indexado à data com os valores de EWMA dos últimos window dias
241+ """
242+ if return_type == 'log' :
243+ returns = np .log (close_prices / close_prices .shift (1 ))
244+ elif return_type == 'simp' :
245+ returns = close_prices .pct_change ()
246+ else :
247+ raise ValueError ("Tipo de retorno inválido" )
248+ ewma_volatility = returns .ewm (span = window ).std ()
249+ ewma_volatility = pd .Series .to_frame (ewma_volatility )
250+ if plot :
251+ fig = px .line (ewma_volatility ,x = ewma_volatility .index ,y = 'Close' ,title = 'EWMA' )
252+ fig .update_xaxes (title_text = 'Tempo' )
253+ fig .update_yaxes (title_text = 'EWMA' )
254+ fig .show ()
255+ return ewma_volatility
256+ if plot == False :
257+ return ewma_volatility
258+
259+ def rolling_std (close_prices ,return_type ,window ,plot = True ):
260+ """
261+ Essa função possibilita a visualização da volatilidade a partir do cálculo da desvio padrão móvel e da plotagem do gráfico dessa
262+ métrica ao longo de um período.
263+
264+ Parâmetros:
265+ close_prices (pd.DataFrame): série de preços de fechamento que será utilizado de base para o cálculo do desvio padrão móvel;
266+ return_type (string): tipo de retorno (simple - 'simp' ou logarítmico - 'log') que será utilizado de base para cálculo;
267+ window (int): janela móvel para cálculo do desvio padrão móvel;
268+ plot (bool): se True, plota o gráfico de linha do desvio padrão móvel ao longo do tempo
269+
270+ Retorna:
271+ rolling_std (pd.DataFrame): um dataframe indexado à data com os valores de desvio padrão móvel dos últimos window dias
272+ """
273+ if return_type == 'log' :
274+ returns = np .log (close_prices / close_prices .shift (1 ))
275+ elif return_type == 'simp' :
276+ returns = close_prices .pct_change ()
277+ else :
278+ raise ValueError ("Tipo de retorno inválido" )
279+ rolling_std = returns .rolling (window ).std ()
280+ rolling_std = pd .Series .to_frame (rolling_std )
281+ if plot :
282+ fig = px .line (rolling_std , x = rolling_std .index , y = 'Close' ,title = 'Desvio Padrão Móvel' )
283+ fig .update_xaxes (title_text = 'Tempo' )
284+ fig .update_yaxes (title_text = 'Desvio padrão móvel' )
285+ fig .show ()
286+ return rolling_std
287+ if plot == False :
288+ return rolling_std
289+
0 commit comments