Tag

python para finanças Archives - Análise Macro

Estimando o Beta em R e Python

By | mercado financeiro

Um importante conceito do mundo das finanças é o Beta de mercado, no qual mensura a exposição de ações ou portfólios aos movimentos do portfolio de mercado, este sendo representado por índices, tal como o Ibovespa. O método mais comum de avaliar o Beta é através do Capital Asset Pricing Model (CAPM), um modelo de precificação de ativos que a partir da construção do Beta, avalia o retorno esperado de um ativo. No post de hoje introduziremos o conceito de Beta de mercado e o estimaremos através do R e do Python.

O CAPM é um modelo criado na década de 1970, a partir de uma conjunção de estudos protagonizamos pela Teoria Moderna do Portfólio. O CAPM estima o retorno esperado de um ativo com base no retorno de mercado (isto é, o retorno da carteira de mercado, representando aquela carteira que não possui risco idiossincrático ou que somente possui o risco sistemático) e pela Taxa de Juros Livre de risco.

Com o retorno da carteira de mercado representando o risco sistemático, chega-se a conclusão de que as variações do portfólio de mercado representaria um fator importante na variação do retorno de uma ação. Para tanto, na formulação do CAPM foi levado em conta o quanto estes retornos se relacionam, representado pelo Beta de mercado, formando então a seguinte equação calculada através de uma Regressão Linear via MQO:

     $$r_{i,t} -r_{f,t} = \alpha_i + \beta_i (r_{m,t} - r_{f,t}) + \varepsilon_{i,t}$$

em que r_{i,t} -r_{f,t} representa o excesso de retorno de um ativo, dado pela subtração do retorno do ativo em relação ao retorno da taxa de juros livre de risco. r_{m,t} - r_{f,t} o excesso de retorno do portfolio de mercado, sendo representado pela diferença do retorno de mercado e do retorno da taxa de juros livre de risco. \beta_i é o coeficiente da regressão que demonstrará o efeito da variação do excesso de retorno do mercado no excesso de retorno do ativo. \varepsilon_{i,t} é o erro da regressão.

O objetivo então é obter as reais taxas de retorno do ativo e do portfólio de mercado e calcular o Beta de mercado (coeficiente de regressão) . Para tanto, podemos utilizar o R e o Python para coletar os dados e obter o cálculo do Beta de mercado.

A importação dos dados será feita por meio do NEFIN e do Yahoo Finance. Na primeira fonte buscaremos os dados da taxa de juros livre de risco, calculado por meio do DI Swap de 30 dias e o excesso de retorno do mercado, calculado por meio de um portfólio de ações criado a partir de critérios definidos pelo NEFIN e pela diferença com a taxas de juros livre de risco.

Beta no R

O primeiro passo será buscar as séries no site do NEFIN. Utilizaremos a planilha disponibilizada pelo site e devemos realizar algumas manipulações e limpeza para poder utiliza-la.

Com o excesso de retorno da carteira de mercado e a taxa de juros livre de risco em mãos, buscaremos o preço de uma ação como exemplo. Aqui utilizaremos a ação ITUB4, no qual iremos importar através da função tq_get() do pacote {tidyquant}.  Transformamos os preços da ação em log de retornos com a função tq_transmute() como um wrapper da função dailyReturn().


Por fim, rodamos a regressão através da função lm() e obteremos o Beta de Mercado através do Coeficiente Estimado no valor de 1.1472.

Beta no Python

No Python seguiremos o mesmo processo que realizamos no R. Primeiro capturamos os dados do NEFIN, em seguida buscamos o preço de fechamento da ITUB4 e transformamos em log retornos, e por fim calculamos o Beta através de uma regressão.



DataReader e Análises com Yahoo! Finance

By | mercado financeiro

Os pontos positivos das linguagens para análise de dados não estão somente inseridos no contexto de manipulação, visualização e modelagem, mas também em um fator extremamente importante para todo o processo de análise: coleta. Foi-se facilitado a importação de dados de diversas fontes da internet, e na finanças não foi diferente. No post de hoje, mostraremos como funciona o processo de coleta de dados financeiros através do Yahoo Finance.

Na internet, existem diversos sites e entre outros tipos de aplicações, que mantem dados em suas páginas ou até mesmo disponibilizam em arquivos .csv, .xlsm, e entre outros formatos.

Com o uso do Python, é possível retirar esses dados rapidamente, de forma relativamente simples, utilizando a raspagem de dados das páginas, ou baixando diretamente os arquivos que guardam o conteúdo. E o mais importante de tudo isso: que também seja reprodutivel.

A sorte é que existem métodos de retirada de dados que são tão úteis, que evoluem para bibliotecas, de forma que seja facilitado ainda mais o processo para todos os usuários. É o caso do DataReader, que possibilita nos ajudar a retirar os dados direto do Yahoo Finance, para que possamos ter mãos as cotações de diversos ativos financeiros.

No código abaixo, iremos realizar alguns exemplos de uso.

Além do datareader, também utilizamos aqui o yfinance, de forma que seja corrigido um problema do datareader que possui problemas na importação do Yahoo Finance. Lembrando também que o datareader permite importados dados de diversas outras fontes, além do Yahoo.

Para coletar os dados dos preços históricos, necessitaremos apenas de uma coisa: o string do ticker do ativo que queremos obter. Para encontrar, é necessário entrar na página https://br.financas.yahoo.com/, procurar o ativo, entrar em sua página e copiar o símbolo que aparece ao lado de seu nome.

 

Veja que além do índice de data, foi importado seis colunas (o que é conhecido como OHLC - Open, High, Low, Close + Adj Close + Volume , neste caso). Que significam o preço de abertura, o preço máximo no dia, o preço mínimo no dia, o preço de fechamento do dia, o preço ajustado por eventos corporativos e o volume de contratos negociados no dia (seguindo a ordem do dataframe).

É possível importar diversos dados. Como por exemplo o Ibovespa (no qual seu símbolo possui um ^).

É possível importar cotações de moedas.

O argumento 'actions', possibilita importar dados de eventos corporativos (dividendos e splits), de forma separadas das cotações, já que há um ajuste padrão contido nesses dados.

Com os argumentos 'start' e 'end', controlamos o período de interesse da coleta, seguindo o padrão 'ano-mês-dia' (yyyy-mm-dd).

Por fim, realizamos um exemplo de como é possível coletar os dados de mais de um ativo de uma vez.

 

Quer aprender mais sobre Python? 

Abrimos hoje, 22/3, as inscrições com 30% de desconto para as Turmas de Outono dos nossos Cursos Aplicados de R e Python. As vagas com esse desconto são limitadas aos primeiros inscritos. Haverá vagas para 25 Cursos Livres e 3 Formações. As turmas de Outono terão início no dia 04/04 e contarão com Cursos de Introdução à Programação em R ou Python, de modo que não é necessário nenhum conhecimento prévio nas linguagens. Para todos os detalhes sobre as Turmas de Outono, entre neste link e garanta sua vaga!

Gráficos para análises e operações no Python

By | mercado financeiro

Um dos melhores métodos para realizar análise e tirar insights sobre uma determinada variável econômica ou financeira é através de uma análise gráfica. É possível criar diversos estudos de visualização com diferentes tipos de gráficos, cada qual com seu propósito para a análise. No post de hoje, iremos realizar um exercício de como podemos usar gráficos para analisar duas variáveis do mundo financeiro através do Python.

Antes de realizar a nossa análise, iremos importar as bibliotecas que utilizaremos. Além das necessárias para a análise de dados e visualização (numpy, pandas, matplotlib e seaborn), importaremos também a biblioteca yfinance para coletar nossos dados via Yahoo Finance.

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import pandas_datareader.data as web
import seaborn as sns
!pip install yfinance --upgrade --no-cache-dir
import yfinance as yf
yf.pdr_override()

Aqui iremos importar duas variáveis: o dólar e o Índice Ibovespa. Queremos investigar os seus respectivos comportamentos durante o ano de 2021, e realizar uma análise comparativa e de relação entre elas.

Traçamos um gráfico de série temporal, de forma que possamos ver os períodos em que seus valores aumentam ou descressem, isso é útil pois é possível ver que há momento dos quais há uma correlação entre as duas.

dolar_ibov = web.get_data_yahoo(['^BVSP', 'USDBRL=X'],
                                start = '2021-01-01',
                                end = '2021-12-31')['Close']

dolar_ibov = dolar_ibov.dropna()

sns.set()

dolar_ibov.plot(subplots = True, figsize = (20, 6))

Para obter uma resposta sobre a correlação, podemos construir um gráfico de dispersão, traçando uma reta de regressão. Vemos que há uma correlação negativa entre a duas, com uma dispersão dos dados, bem como a forma da distribuição de ambas as variáveis.

sns.jointplot(x = 'USDBRL=X', y = '^BVSP', data = dolar_ibov, kind = 'reg')

Como forma de entender melhor a distribuição dos dados das variáveis, construímos um KDE plot para estimar a densidade de probabilidade das duas variáveis. Vemos há grande densidade em uma área no gráfico, com uma leve densidade abaixo.

sns.jointplot(x = 'USDBRL=X', y = '^BVSP', data = dolar_ibov, kind = 'kde')

Por fim, podemos traçar um gráfico de correlação móvel no tempo das duas variáveis, de forma que possamos visualizar os períodos em que estavam positivamente ou negativamente correlacionadas. Vemos abaixo a correlação móvel mensal.

dolar_ibov['USDBRL=X'].rolling(22).corr(dolar_ibov['^BVSP']).plot(figsize = (20, 6))

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais
e conteúdos exclusivos sobre Análise de Dados!

Assinar Gratuitamente