Skip to content

Commit 67120e5

Browse files
Merge pull request #26 from GrupoTuring/feature_ewma_rollstd
adiciona funções para a visualização de rolling std e ewma
2 parents 79355cc + 77cf869 commit 67120e5

File tree

1 file changed

+63
-0
lines changed

1 file changed

+63
-0
lines changed

turingquant/metrics.py

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)