Escolar Documentos
Profissional Documentos
Cultura Documentos
OSASCO
2022
FLÁVIA SILVA DOS REIS
OSASCO
2022
Autorizo a reprodução e divulgação total ou parcial deste trabalho, por qualquer meio convencional ou
eletrônico, para fins de estudo e pesquisa, desde que citada a fonte.
CDD: 657
FLÁVIA SILVA DOS REIS
When considering the importance of analyzing large amounts of data for decision
making and that professionals from different areas are able to handle robust and
high-level tools to optimize tasks. We wanted to demonstrate that the use of Python
language to optimize an investment portfolio, based on Markowitz's Portfolio Theory
(1952) is not restricted only to professionals in the computing area, but that it is
possible that other types of professionals, who have basic knowledge in
programming, make use of the Python language. Quantitative research with an
exploratory and evaluative nature, based on the use of the PyPortfolioOpt library,
which allowed the collection of historical closing prices of 15 common shares of
Brazilian companies operating in different sectors, over 21 years. With subsequent
inference of the percentages of each asset that should compose the optimal portfolio
containing the best risk-return ratio. The weights of each asset that formed an
investment portfolio were obtained, presenting an annual return of 30.3%, annual
volatility of 16.2% and a Sharpe ratio of 1.78. The use of the Python programming
language proved to be effective for the optimization of investment portfolios, readable
and easy to apply by professionals with basic knowledge in programming and
computing.
1. INTRODUÇÃO 5
2. REVISÃO DE LITERATURA 8
2.1 Teoria Do Portfólio De Markowitz 8
2.1.1 Retorno Esperado 8
2.1.2 Risco 10
2.1.3 Covariância e Correlação 11
2.1.4 Cálculo de Risco e Retorno usando matrizes 13
2.1.5 Fronteira Eficiente de Ativos com Risco 14
2.1.6 Índice de Sharpe 15
2.1.7 Análise de dados do mercado para a otimização de carteiras 16
2.2 Apresentação da linguagem Python 17
2.2.1. Python e Finanças 19
2.2.2 Python para finanças versus Excel 20
2.2.3 Python na prática através do PyPortifolioOpt 20
3. METODOLOGIA 23
4. RESULTADOS 26
5. CONSIDERAÇÕES FINAIS 32
REFERÊNCIAS 35
1. INTRODUÇÃO
Quando uma empresa entrega seu capital a um investimento que possa trazer
retornos futuros e positivos beneficia desde aquele que investe até aos que
indiretamente estão envolvidos ao modo como o capital circulará e trará a tona
outras necessidades de investimento. Este raciocínio segue o de Assaf Neto
(2018, p. 5) quando diz que investir “representa a ampliação de capital em
alternativas que promovem o aumento efetivo da capacidade produtiva do país,
determinando maior capacidade futura de gerar riquezas”.
Contudo, encontrar alternativas viáveis para investir dinheiro pode acabar
sendo uma tarefa que demanda tempo e métodos eficazes que deem
informações valiosas, pois uma grande quantidade de dados é gerada pelo
mercado financeiro diariamente, o que torna a busca por opções de investimento
extremamente relevante para os que querem usar da melhor forma seu capital.
Para Cassarotto Filho (2019 p. 96) avaliar adequadamente o custo do capital
empregado e levar em consideração estudos, que enfatizam critérios financeiros
e econômicos, pode mostrar opções de investimentos mais vantajosas. Isso
confirma o quão importante é analisar os dados de investimentos de modo a
obter informações relevantes para a escolha da melhor possibilidade de
aplicação do capital.
A análise de investimentos, sobre outro ponto de vista, tornou-se valiosa para
as instituições financeiras, que estimuladas pelas inovações tecnológicas e
regulamentações legais passaram a ser não apenas intermediários financeiros,
mas também empresas com grande potencial tecnológico, algo que lhes dá
vantagem competitiva sobre outras empresas (HILPISCH, 2014, p. 9).
Para corroborar essa ideia vem Sharda, Delen e Turban (2019, p.14) quando
dizem que “em meio a concorrência global, gestores se deparam com a incrível
oportunidade de tomarem melhores decisões usando análise de dados para
aumentar receitas, diminuir custos e desenvolver produtos melhores.”
Oportunidades de tomar melhores decisões surgiram por meio das mudanças
na maneira como os dados são capturados, a partir da década de 2010, devido a
6
2.1.2 Risco
O risco está atrelado à capacidade de medir as incertezas que rodeiam uma
escolha feita a partir do conhecimento das probabilidades de ocorrência de certos
resultados ou valores, como descreve Assaf Neto (2018). Ou seja, a medida de risco
pode auxiliar na tomada de decisões por mostrar o quanto um acontecimento pode
influenciar positiva ou negativamente um resultado.
Ainda, conforme Assaf Neto (2018) o risco total de um ativo é a soma de sua
parte sistêmica ou conjuntural, que não pode ser evitado por ser de natureza
conjuntural, e de sua parte não sistêmica ou diversificável que é inerente a cada
ativo.
A medida de risco é o desvio-padrão da taxa de retorno (σ), o que para
Bodie, Kane e Marcus (2015, p. 113) é “definido como a raiz quadrada da variância,
que, por sua vez, é o valor esperado dos desvios ao quadrado em relação ao retorno
esperado”, que simbolicamente pode ser expressa pela equação 3:
2
σ = ∑ 𝑤𝑖 · µ𝑖 − 𝐸
𝑖
[ ]2 (3)
𝑛 𝑛
σ𝑝 = ∑ ∑ 𝑤𝑖𝑤𝑗𝐶𝑜𝑟𝑟𝑖,𝑗 · σ𝑖 · σ𝑗 (4)
𝑖=1 𝑗=1
ou
11
𝑛 𝑛
σ𝑝 = ∑ ∑ 𝑤𝑖𝑤𝑗𝐶𝑜𝑣 𝑟𝑖, 𝑟𝑗
𝑖=1 𝑗=1
( ) (5)
2 2 2 2 ( )
1
2
de σ𝑃 = ⎡⎢𝑊𝐴 · σ𝐴 + 𝑊𝐹 · σ𝐹 + 2⋅𝑊𝐴 · 𝑊𝐹 · 𝐶𝑂𝑉𝐴𝐹⎤⎥ (6)
⎣ ⎦
para σP = WA x σA (7)
𝑛
(
∑ 𝑥𝑖−𝑥¯ · 𝑦𝑖−𝑦¯ )( )
𝑆𝑋𝑌 = 𝑖=1
𝑛−1
(9)
relação risco x retorno, sendo a relação entre o prêmio pago pelo risco e o risco
assumido para investir, indicando a eficiência dos investimentos. Sendo
representado pela equação 15:
( )
𝐸 𝑅𝑀 −𝑅𝐹
Í𝑛𝑑𝑖𝑐𝑒 𝑑𝑒 𝑆ℎ𝑎𝑟𝑝𝑒 = σ𝑅
(15)
𝑀
compreender por que está uma das linguagens de programação mais usadas no
mundo.
3. METODOLOGIA
Pesquisa é, como conceitua Walliman, (2014, p. 5) “a atividade que envolve
descobertas diversas, de modo sistemático e que proporciona o avanço da fronteira
do conhecimento, corroborando ou refutando algo que possivelmente já existia”.
Para tanto é necessário que a pesquisa seja feita com base em métodos capazes de
conferir validade às inferências e conclusões obtidas.
Este trabalho tem cunho quantitativo e nele serão usadas as técnicas de
pesquisa exploratória e avaliativa. Sendo a técnica exploratória a que visa analisar o
tema em questão buscando obter mais conhecimento. Algo que em relação a este
trabalho será focado em obter conhecimento sobre como se dá a aplicação prática
da linguagem Python para a otimização de carteiras de investimento.
Para complementar o estudo será empregada a técnica avaliativa que é
capaz de, conforme Walliman, (2014, p. 6), “favorecer a análise de achados de
forma que se possa conjeturar sobre possíveis resultados”. Será possível, com base
nisso, avaliar se o uso da biblioteca PyportfolioOpt para otimizar carteiras de
investimento trará bons resultados de modo rápido e eficiente.
Quanto ao procedimento, esta pesquisa refere-se a um estudo de caso que
visa verificar por meio do uso de dados históricos de preços de ativos e aplicação de
algoritmos presentes na biblioteca PyportfolioOpt, a possibilidade da aplicação da
linguagem python ser empregada de forma fácil por profissionais de diversas áreas.
Para iniciar este estudo deve-se ter instalado num computador:
1) O interpretador padrão Python, a partir da versão 3.7.6
(https://www.python.org/downloads/);
2) O Anaconda Python, a partir da versão 3
(https://www.anaconda.com/products/individual). É necessário, pois nele estão
inclusas inúmeras ferramentas ausentes no interpretador padrão Python.
3) O Visual Studio Builds Tools, versão 16.10 comunidade
(https://visualstudio.microsoft.com/pt-br/downloads/?q=build+tools), necessário
para aplicações internas do PyPortfolioOpt.
24
Fonte: Ibovespa (B3)
25
4. RESULTADOS
Em posse dos símbolos das ações e todos os programas instalados será
necessário conectar-se ao Jupyter Notebook, um aplicativo de web que permite o
emprego da linguagem Python, e seguir os protocolos de uso das funções e
algoritmos indicados pelos desenvolvedores.
Para a obtenção da carteira eficiente, foram realizados os seguintes passos e
alcançado os seguintes resultados:
Por meio do gráfico percebe-se grande queda no preço dos ativos no primeiro
quadrimestre de 2020, muito provavelmente por conta do início da pandemia de
COVID-19. Bem como observa-se que as ações da BRFS3 e BBAS3 tiveram
relevante aumento de preços entre 2020 e 2021, enquanto as demais ações
mantiveram constância na evolução dos preços de fechamento.
de 30,7%. Sendo que a volatilidade anual de 16,2%, numa medida que pode ir até
100% mostra o quão é esta carteira sugerida, e, neste caso, pode ser considerada
de baixo risco. Já o índice de Sharpe calculado foi de 1,78.
REFERÊNCIAS
ASSAF NETO, A. Mercado Financeiro, 14 ed. São Paulo - SP: Atlas, 2018.
Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788597018066/.
Acesso em: 26 abril de 2021
BODIE, Z.; KANE, A.; MARCUS, A.; Investimentos. 10. ed. São Paulo: AMGH
Editora Ltda, 2015. Disponível em:
https://integrada.minhabiblioteca.com.br/#/books/9788580554205/
Acesso em: 12 de maio 2021
SHARDA, R.; DELEN, D.; TURBAN, E.; Business Intelligence e Análise de Dados
para Gestão do Negócio. 4 ed. Porto Alegre - RS: 2019.
Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788582605202/.
Acesso: 11 de maio de 2021
I. Previamente salvar uma nova pasta onde os arquivos gerados serão salvos;
II. Abrir o Prompt de Comando - buscando-o na barra de inicialização;
III. Buscar no Prompt de Comando a nova pasta - digitar o comando CD;
IV. Após encontrar a pasta de interesse digitar: jupyter notebook;
V. Uma página no navegador será aberta mostrando a interface do jupyter;
VI. Clicar em NEW → Python 3, assim um arquivo em branco será gerado;
VII. Inserir os seguintes códigos nas células do Jupyter, sem alteração de nenhum
item, para a garantia de sucesso na análise.
● Célula 1
import yfinance as yf
import matplotlib.pyplot as plt
import pandas as pd
import numpy as np
● Célula 2 - Inserção dos códigos (tickers) dos ativos que comporão o
portifólio
tickers = [ ‘códigoDoAtivo.SA’ ;‘códigoDoAtivo2.SA’; ‘códigoDoAtivo3’; …]
Deve-se seguir o padrão descrito: código da ação, seguido de .SA, entre
aspas simples e cada código de ação separada por ponto e vírgula.
● Célula 3 - Captura dos preços de fechamento diários de cada uma das
ações escolhidas
ohlc = yf.download(tickers, period="max")
● Célula 4 - Exclusão dos valores nulos e apresentação da tabela
preços = ohlc["Adj Close"].dropna(how="all")
preços.tail()
● Célula 5 - Plotar gráfico dos preços de fechamento diários das ações
preços[preços.index >= "AAAA-MM-DD"].plot(figsize=(15,10));
OBS: em AAAA-MM-DD, informar a data que iniciará o gráfico dos preços de
fechamentos das ações.
39
ef.portfolio_performance(verbose=True)
● Célula 14 - Determinação da Fronteira Eficiente e do Ponto Ótimo de
menor risco
from pypfopt import CLA, plotting
cla = CLA(retornoEsperado,Estimativa_reducao)
cla.max_sharpe()
cla.portfolio_performance(verbose=True);
● Célula 15 - Plotagem do gráfico da Fronteira Eficiente
ax = plotting.plot_efficient_frontier(cla, showfig=True)