Análise Financeira Geral em Python (Parte 1)

O último artigo examinou como você pode obter informações sobre instrumentos financeiros. A seguir, vários artigos serão publicados sobre o que inicialmente pode ser feito com os dados obtidos, como analisar e elaborar uma estratégia. Os materiais são baseados em publicações em fontes estrangeiras e cursos em uma das plataformas online.

Este artigo discutirá como calcular rentabilidade, volatilidade e criar um dos principais indicadores.

import pandas as pd
import yfinance as yf
import numpy as np
import matplotlib.pyplot as plt

sber = yf.download('SBER.ME','2016-01-01')

Lucratividade


Este valor representa a variação percentual no valor das ações em um dia útil. Não leva em consideração dividendos e comissões. É fácil calcular usando a função pct_change () do pacote Pandas.

Como regra, eles usam o log de rentabilidade, pois permite entender e investigar melhor as alterações ao longo do tempo.

#   `
daily_close = sber[['Adj Close']]

#  
daily_pct_change = daily_close.pct_change()

#  NA   0
daily_pct_change.fillna(0, inplace=True)

print(daily_pct_change.head())

#   
daily_log_returns = np.log(daily_close.pct_change()+1)

print(daily_log_returns.head())

imagem

Para descobrir a rentabilidade semanal e / ou mensal a partir dos dados obtidos, use a função resample ().

#   `sber`      
monthly = sber.resample('BM').apply(lambda x: x[-1])

#  
print(monthly.pct_change().tail())

#  `sber`        
quarter = sber.resample("4M").mean()

#  
print(quarter.pct_change().tail())

imagem

A função pct_change () é conveniente de usar, mas, por sua vez, oculta como o valor é obtido. Um cálculo semelhante que ajuda a entender o mecanismo pode ser feito usando shift () do pacote do Pandas. O preço de fechamento diário é dividido pelo preço passado (alterado por um) e uma unidade é subtraída do valor recebido. Mas há um menor menos - o primeiro valor como resultado é NA.

O cálculo da lucratividade é baseado na fórmula:

imagem

Onde, p é o preço, t é o momento no tempo er é a lucratividade.

Em seguida, um diagrama de distribuição de rentabilidade é construído e as principais estatísticas são calculadas:

#  
daily_pct_change = daily_close / daily_close.shift(1) - 1

print(daily_pct_change.head())

imagem

#  `daily_pct_c`
daily_pct_change.hist(bins=50)

plt.show()

#  
print(daily_pct_change.describe())

imagem

A distribuição parece muito simétrica e normalmente distribuída em torno de um valor de 0,00. Para obter outros valores estatísticos, a função description () é usada. Como resultado, é visto que o valor médio é um pouco maior que zero e o desvio padrão é quase 0,02.

Retorno cumulativo


Os retornos diários cumulativos são úteis para determinar o valor de um investimento durante um período de tempo especificado. Pode ser calculado conforme mostrado no código abaixo.

#   
cum_daily_return = (1 + daily_pct_change).cumprod()

print(cum_daily_return.tail())

imagem

#    
cum_daily_return.plot(figsize=(12,8))

plt.show()

imagem

Você pode recalcular o rendimento no período mensal:

#   
cum_monthly_return = cum_daily_return.resample("M").mean()

print(cum_monthly_return.tail())

imagem

Saber calcular retornos é valioso ao analisar estoques. Mas é ainda mais valioso quando comparado com outras ações.

Faça algumas ações (a escolha é totalmente aleatória) e construa seu gráfico.

ticker = ['AFLT.ME','DSKY.ME','IRAO.ME','PIKK.ME', 'PLZL.ME','SBER.ME','ENRU.ME']

stock = yf.download(ticker,'2018-01-01')

#    `daily_close_px`
daily_pct_change = stock['Adj Close'].pct_change()

# 
daily_pct_change.hist(bins=50, sharex=True, figsize=(20,8))

plt.show()

imagem

Outro gráfico útil é a matriz de dispersão. Ele pode ser facilmente construído usando a função scatter_matrix (), que faz parte da biblioteca do pandas. Daily_pct_change é usado como argumentos e o parâmetro Kernel Density Estimation está definido. Além disso, você pode definir a transparência usando o parâmetro alfa e o tamanho do gráfico usando o parâmetro figsize.

from pandas.plotting import scatter_matrix

#   `daily_pct_change`  
scatter_matrix(daily_pct_change, diagonal='kde', alpha=0.1,figsize=(20,20))

plt.show()

imagem

É tudo por agora. O próximo artigo abordará o cálculo da volatilidade, média e o método dos mínimos quadrados.

All Articles