Category

mercado financeiro

Construindo uma carteira de ações (portfólio) em Python

By | mercado financeiro

A combinação de diferentes ativos financeiros pode trazer benefícios, entre eles, conseguir uma boa diversificação de forma diluir os diversos riscos existentes. Porém, para construir portfólio, é necessário ter o entendimento correto sobre como construir formas de avaliação: de retorno e risco. No post de hoje, mostramos como podemos construir estas duas métricas utilizando o Python.

Um portfólio de ações consiste no conjunto de diferentes ativos escolhidos, através de uma metodologia, e mantidas durante um período de tempo. Ao realizar a escolha de ativos, é necessário que haja formas de avaliar o quão bem essas escolhas combinadas performaram, e qual o risco empregado por estes ativos.

Retornos do portfolio

Uma ação possui uma variação entre dois períodos históricos diferentes, podemos computar essa variação da seguinte forma:

     $$r_i = \frac{P_t - P_{t-1}}{P_{t-1}}$$

Portanto, podemos saber o quanto essa ação rendeu de um período para outro. Mas, e para o caso de haver mais de uma ação em nossa carteira? Como podemos calcular? Para isso, devemos levar em consideração o peso de cada ação no total investido na carteira, obtendo a seguinte equação:

     $$ r_p = w_1 * r_1 + w_2 * r_2 ... w_i * r_i $$

Em que  $w_i$ é o peso do ativo no portfólio, podendo ser calculado como:

    $$w = \frac{valor\;do\;ativo}{total\;investido\;no\;portfolio}$$

Ou seja, ponderamos o retorno do ativos com o seus pesos dentro da carteira.

Iremos realizar um exemplo utilizando ações da Ibovespa. Abaixo, capturamos o preço ajustado de quatro ações e computamos os retornos individuais.

Utilizamos o método pct_change para computar a variação diária dos preços ajustados das quatro ações.

Calculado os retornos, devemos obter os pesos de cada ativo. Selecionamos manualmente pesos iguais para todas as ações, construindo um portfolio conhecido como Equal Weighted Portfolio. Por fim, calculamos o retorno diário do portfólio multiplicando os pesos com os retornos e somando cada resultado.

Retornos acumulados

Essa forma de cálculo representará os retornos diários dos ativos e do portfolio, o que não muito útil para acompanhar o acumulado ao longo de um período de tempo. Desta forma, podemos calcular o retorno acumulado das ações e do portfolio somando 1 aos retorno e utilizando a função cumprod() para calcular o produto acumulado das variações.


Retornos Anualizados

O retorno anualizado é uma forma de transformar a escala dos retornos em termos "anualizados" (o que é diferente de retornos no ano). O objetivo de computar este tipo de retorno se encontra no fato de poder comparar ativos de períodos e janelas de tempo diferentes em uma mesma escala.

A taxa anualizada para períodos diários é calculada como:

     $$ra_i = (1 + r_i)^{252/N} - 1 $$

Em que 252 representa o número de dias úteis em um ano, e N o número de dias da série. Portanto,  r_i será a variação da última observação da série em relação a primeira observação, o mesmo que o retorno acumulado durante o período.

Abaixo, utilizaremos a última observação do retorno acumulado já computado.

Risco

Até agora já obtivemos as métricas necessárias para computar o retorno das ações, porém, devemos levar em conta o quão arriscado cada ativo é (para justificar o retorno e a alocação dos mesmos), bem como a composição do risco total do portfólio.

O risco (volatilidade) das ações individuais pode ser calculado como o desvio padrão de seus retornos. Calculamos abaixo com base em seu valor anualizado (que possui o mesmo significado que os retornos anualizados).

Entretanto, não podemos realizar o mesmo procedimento para o cálculo da volatilidade de um portfólio, afinal, as ações podem possuir uma relação, portanto, devemos levar em conta a correlação entre os ativos.

Calculamos a variância do portfólio em notação matricial

    $$\sigma^2_{pf} = \begin{bmatrix}{w_1 w_2}\end{bmatrix} \begin{bmatrix}{\sigma^2_1}&{\sigma_{1,2}} \\[0.3em] {\sigma_{2,1}}&{\sigma^2}\end{bmatrix} \begin{bmatrix}{w_1} \\{w_2}\end{bmatrix} $$

E podemos facilmente realizar este cálculo utilizando o Python.

Juntamos os resultados dos retornos anualizados e do desvio padrão (risco) anualizado em um data frame, e geramos um gráfico mostrando o retorno das ações e do portfolio dado o nível de risco.

Quer saber mais?

Veja nossos cursos da trilha de Finanças Quantitativas.

Estrutura a Termo da Taxa de Juros em Python

By | mercado financeiro

A Estrutura a Termo da Taxa de Juros demonstra a relação das taxas de juros dos diferentes instrumentos de renda fixa com os prazos de vencimentos (maturidade). A ETTJ é importante para determinar o comportamento futuro do juros, dado o nível de risco dos agentes de mercado, e é útil para a realização de cálculos para a precificação de ativos de renda fixa. No post de hoje, mostraremos como podemos obter a ETTJ utilizando o Python.

Para obter a ETTJ, podemos importá-la através do site da B3, que oferece os dados de cada dia útil do vencimento da taxa de juros. O processo de extração pode ser feito de diferente formas, a mais simples é utilizando o pacote {pyettj}, que utilizaremos aqui.

Como exemplo, utilizaremos a curva da DI x pré 252 dias, que é determinada com base no DI futuro para obter a ETTJ pré.

O primeiro passo é escolher a data com base em um dia útil do cálculo da curva. Em seguida, utiliza-se a função get_ettj para buscar a série com base na data escolhida. Será retornado um data frame contendo diferentes tipos de taxas disponibilizadas pela B3. Como queremos utilizar a Curva pré, estaremos interessados apenas em sua respectiva coluna. O data frame também contém os dias corridos que se referem ao vencimento da taxa , bem com uma coluna especificando a data do período que buscamos a série. Por fim, podemos visualizar a ETTJ pré com a função plot_ettj fornecida pelo pacote.

Também é possível buscar mais de um período utilizando um for loop. Útil para comparar a evolução das taxas em diferentes períodos.

Quer saber mais?

Veja nossos cursos da trilha de Finanças Quantitativas.

Construindo o juro real e o juro neutro em Python

By | mercado financeiro

Uma importante medida para acompanhar o sentido da política monetária é comparar o Juro real com o Juro de equilíbrio da economia. A diferença entre os dois indicadores permite dizer se a política monetária está em sentido expansionista ou contracionista. No post de hoje mostraremos como é possível construir o Juro real e o Juro neutro utilizando o Python.

O juro real que considerei aqui é o juro real ex-ante, obtido a partir do juro do swap DI 360 deflacionado pela expectativa de inflação para os próximos 12 meses. Já o juro de equilíbrio segue uma proxy definida no Relatório de Inflação de dezembro de 2019, dada pela Selic esperada para t+3 deflacionada pela inflação esperada para t+3.

 

Para o cálculo, utilizamos a equação de Fisher, que nos dá a diferença entre o juro nominal e a expectativa de inflação.

_________________

Para saber mais sobre esse tema, acompanhe o lançamento do nosso Curso de Macroeconomia usando R e Python.

Seleção de Fatores via Machine Learning no R

By | mercado financeiro

É conhecido que variáveis (comumente ditas como fatores), afetam o excesso de retorno de ações no geral. Um fator bastante difundido é o fator de risco de mercado utilizado no modelo Capital Asset Pricing Model. Nas últimas décadas, a literatura aprofundou-se nos estudos dos fatores que fazem parte da características das empresas, ampliando para o modelo de três fatores de Fama French, que introduziu os fatores Small Minus Big (SMB) e High minus Low (HML). Outros diversos fatores também são utilizados, a depender do mercado a ser investigado. O objetivo do post de hoje será utilizar fatores de investimento em conjunto com uma Regressão de Lasso para ajustar uma série de fatores de risco com o R.

Os fatores de risco são importantes mecanismo para traçar estratégias de investimento, principalmente para entender as características de ativos e antecipar possíveis movimentos de mercado. Como dito, é bem conhecido o fator Risco de Mercado, que leva em conta o risco sistemático produzido por um índice que representa o portfólio de mercado. O fator Small Minus Big (SMB), que representa a diferença do retorno de empresas com baixa capitalização e alta capitalização de mercado. High minus Low (HML), que representa a diferença do retorno de empresas com alto book-to-market e baixo book-to-market.

Outro fatores podem também ser levados em conta, tanto por conta da característica das empresas, quanto por fatores macroeconômicos. Adicionaremos mais três, sendo eles: Winners Minus Losers (WML), que leva em conta o retorno de ações que tiveram altos retornos no passado e ações que tiveram baixo retornos.  Illiquid Minus Liquid (IML) que representa os retornos de ações com baixo liquidez e alta liquidez. E por fim, apenas um representado o fator macroeconômico de juros, que será a taxa de juros livre de risco, também útil para obter o excesso de retorno do ativo e do fator risco de mercado.

Todos os fatores são importados do site da NEFIN, onde também é detalhado a metodologia de criação de cada fator, bem como suas características. Para a ação que será utilizada como variável dependente, escolhemos a ITUB4 de forma totalmente aleatória, representado pelo seu log retorno diário dos preços ajustados.

O modelo utilizado será uma Regressão Lasso, útil para diminuir a limitação da regressão linear, representado pela seguinte equação:

Abaixo, representaremos os códigos para a importação dos dados do ativo selecionado e dos fatores disponibilizados pelo NEFIN.

Após obter todos os dados, nosso objetivo será utilizar a série de funções do universo do Tidymodels para aplicar uma Regressão de Lasso. Primeiro iremos separar os dados de teste e treino, como forma de obter uma ideia do quão bem o modelo ajustou os dados. Selecionaremos o modelo com uma penalidade de 0.0001.

Com as amostras produzidas e o modelo em mãos, podemos rodar com a função fit(), escolhendo a fórmula do modelo e os dados utilizado (no caso a amostra de treino). Obtemos também os valores preditos pelo modelo. Por fim podemos comparar com os dados de teste.

Quer saber mais sobre Finanças?

Veja nossas postagens realizadas sobre o assunto:

E nossos curso aplicados ao Mercado Financeiro:

Referências

Tidy Finance with R. 2022

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.



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

Assinar Gratuitamente