Você está na página 1de 43

UNIVERSIDADE FEDERAL DE SÃO PAULO

ESCOLA PAULISTA DE POLÍTICA, ECONOMIA E NEGÓCIOS

FLÁVIA SILVA DOS REIS

​ TIMIZAÇÃO DE CARTEIRAS DE INVESTIMENTOS PELO MODELO DE


O
MARKOWITZ UTILIZANDO A LINGUAGEM DE PROGRAMAÇÃO PYTHON

OSASCO
2022
FLÁVIA SILVA DOS REIS

​OTIMIZAÇÃO DE CARTEIRAS DE INVESTIMENTOS PELO MODELO DE


MARKOWITZ UTILIZANDO A LINGUAGEM DE PROGRAMAÇÃO PYTHON

​Trabalho de Conclusão de Curso


apresentado à Universidade Federal de São
Paulo como requisito parcial para obtenção
do grau em Bacharel em Ciências
Contábeis.
​Orientador: Prof. Dr. José Marcos Carrera
Júnior

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.

Ficha catalográfica elaborada pela Biblioteca Unifesp Osasco, CRB-8: 3998,


e Departamento de Tecnologia da Informação Unifesp Osasco,
com os dados fornecidos pelo(a) autor(a)

R375o REIS, Flávia Silva dos


Otimização de carteiras de investimentos pelo modelo de
Markowitz utilizando a linguagem de programação Python /
Flávia Silva dos Reis. - 2022.
40 f. :il.

Trabalho de conclusão de curso (Ciências Contábeis) -


Universidade Federal de São Paulo - Escola Paulista de Política,
Economia e Negócios, Osasco, 2022.
Orientador: José Marcos Carrera Júnior.

1. Python. 2. Markowitz. 3. Análise de dados. 4. Otimização


de carteiras. I. Carrera Júnior, José Marcos, II. TCC -
Unifesp/EPPEN. III. Título.

CDD: 657
FLÁVIA SILVA DOS REIS

​OTIMIZAÇÃO DE CARTEIRAS DE INVESTIMENTOS PELO MODELO DE


MARKOWITZ UTILIZANDO A LINGUAGEM DE PROGRAMAÇÃO PYTHON

​Trabalho de Conclusão de Curso


apresentado à Universidade Federal de São
Paulo como requisito parcial para obtenção
do grau em Bacharel em Ciências
Contábeis.

Aprovada em: 28 de janeiro de 2022

Prof. Dr. José Marcos Carrera Júnior


Universidade Federal de São Paulo

Prof. Dr. Sandro Braz Silva


Universidade Federal de São Paulo
RESUMO

Ao considerar a importância da análise de grandes quantidades de dados para a


tomada de decisões e que profissionais de diversas áreas são capazes de manipular
ferramentas robustas e de alto nível para otimizar tarefas. Quis-se demonstrar que o
uso da linguagem Python para otimizar uma carteira de investimento, com base na
Teoria do Portfólio de Markowitz (1952) não está restrita apenas aos profissionais da
área da computação, mas que é possível que outros tipos de profissionais, que
possuam conhecimentos básicos em programação, façam uso da linguagem Python.
Pesquisa quantitativa de cunho exploratório e avaliativo, baseada no uso da
biblioteca PyPortfolioOpt que permitiu a coleta de preços de fechamento histórico de
15 ações ordinárias de empresas brasileiras atuantes em diversos setores, ao longo
de 21 anos. Com posterior inferência das porcentagens de cada ativo que devem
compor a carteira ótima contendo a melhor relação entre risco e retorno. Obteve-se
os pesos de cada ativo que formaram uma carteira de investimentos apresentando
retorno anual de 30,3%, volatilidade anual de 16,2% e índice de Sharpe de 1,78. O
uso da linguagem de programação Python, mostrou-se eficaz para a otimização de
carteiras de investimento, legível e de fácil aplicação por profissionais com
conhecimentos básicos em programação e computação.

Palavras-chave: Python. Markowitz. Análise de dados. Otimização de carteiras.


ABSTRACT

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.

Keywords: Python. Markowitz. Data analysis. Portfolio optimization.


SUMÁRIO

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

APÊNDICE A - Guia de programas instalados 37

APÊNDICE B - Guia de comandos 38


5

​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

difusão da internet, que contribuiu para o surgimento de novas fontes de dados e


também de Big Data, que se refere aos desafios encontrados para manipular tais
dados. Com isso, houve o surgimento de novas formas de armazenar dados e de
softwares capazes de trabalhar de modo intuitivo e acessível, como nos diz
Ramesh, 2019.
​ A necessidade de aperfeiçoar a tomada de decisões trouxe os sistemas de
suporte de decisões, que, conforme apontam Fleury, Agostini e Lima (1984,
p.30), foi um termo cunhado por Ken e Scoot Morson em 1978 definido como
sistemas computacionais interativos capazes de dar suporte aos tomadores de
decisões.
​ Atualmente esses sistemas de suporte a decisões são capazes de analisar
grandes volumes de dados e entregar informações confiáveis para auxiliar as
escolhas de investidores do mercado financeiro e assim passaram a ser bastante
procurados. Por conta disso, o objetivo geral deste trabalho é apresentar e
aplicar uma metodologia de análise de dados financeiros usando Python como
linguagem de programação para a otimização de carteiras de investimento
usando o modelo de Markowitz.
​ A escolha dessa linguagem para esse estudo é motivada por ser um projeto
de desenvolvimento de software de código-fonte aberto, ou seja, permite o
estudado e modificação livre, como nos explica Perkovic (2016, p.8). Além disso,
de acordo Banin (2018, p.17) é possível ser usada em diversos tipos de sistemas
operacionais, de maneira simples e robusta quando comparada a outras
linguagens e possuir grande aplicabilidade.
​ Para aplicar a linguagem Python como um modo de analisar dados será
usada a biblioteca PyportfolioOpt, disponibilizada de forma livre e gratuita, onde
há algoritmos criados com base na teoria moderna do portfólio de Markowitz que
é conceituada por Bodie, Kane e Marcus (2015, p. 193) como uma solução para
a construção de carteiras levando em consideração o retorno e o risco dos ativos
e a melhor combinação entre eles. Essa biblioteca PyportfolioOpt está integrada
a um banco de dados online o que permitirá demonstrar de forma prática a teoria
7

moderna do portfólio de Markowitz para criar uma carteira de investimentos


eficiente.
​ O trabalho terá a função de mostrar que é possível utilizar linguagem de
programação para otimizar tarefas que envolvam grande quantidade de dados e
também poder ser empregada de maneira descomplicada por profissionais de
diversas áreas. Como hipótese parte-se do pressuposto que a geração de uma
carteira de investimentos que ofereça bons retornos utilizando a linguagem
Python será obtida de modo mais confiável devido ao grande volume de dados
que podem ser avaliados de modo rápido.
​ Será de grande valia mostrar que a análise de dados financeiros pode ser
manipulada com poucas dificuldades e eficazmente por meio da linguagem
Python, pois para Sala et al. (2008, p.73) é uma linguagem fácil de usar, de
sintaxe simples e capaz de trazer resolver tarefas de alto nível por meio de
soluções menos sofisticadas e com bom desempenho. Além de estar indo a favor
das novas tendências de como trabalhar com grandes volumes de informações,
aliadas às novas demandas do mercado como um todo.
​ Esse trabalho poderá contribuir para mostrar uma alternativa para manipular
grandes volumes de dados disponibilizados por instituições financeiras e difundir
o acesso às ferramentas baseadas em linguagem de programação a
profissionais de diversas áreas. Além de apresentar a sequência regras e
operações trazidas pelo PyportifolioOpt como alternativa para realizar previsões
financeiras para empresas.
8

​2. REVISÃO DE LITERATURA


​2.1 Teoria Do Portfólio De Markowitz
A otimização de carteiras de investimentos tem como base a teoria do
portfólio de Harris Markowitz, muito conhecida como Portfolio Selection, ou seleção
de carteiras. Em 1952 foi publicado o artigo que, segundo Rubistein (2002), marcaria
o nascimento da economia financeira moderna por ser a primeira formalização
matemática da ideia de diversificação de investimentos.
Markowitz mostrou que a diversificação não trata apenas do risco isolado de
um ativo, mas da contribuição que este ativo dá à variação da carteira como um
todo. Seguindo esse raciocínio foi capaz de postular que um investidor deve
maximizar o retorno esperado de sua carteira de investimentos enquanto minimiza a
variância do retorno do portfólio, conforme Rubistein (2002).
No artigo, Portfolio Selection, publicado em The Journal of Finance, Markowitz
diz que existe uma regra onde o investidor deve diversificar seus fundos entre os
títulos que proporcionam o máximo de retorno esperado. Essa regra é um caso
especial da regra de variância dos retornos esperados a qual assume a existência
de uma carteira que ofereça o maior retorno e variância mínima. Porém, a carteira
com maior retorno não será necessariamente a com menor variância, caberá ao
investidor decidir se ganhará o retorno esperado ao assumir a variância ou reduzir a
variância ao renunciar ao retorno esperado (MARKOWITZ, 1952).
Para a apresentação matemática da Teoria do Portfólio, Markowitz evitou o
uso de provas matemáticas complicadas, assumiu o uso das previsões da
probabilidade estatística e tomou como base os conceitos elementares da estatística
matemática e economia: risco, retorno, covariância, correlação, fronteira eficiente e
mercados eficientes, os quais serão expostos em seguida.

2.1.1 Retorno Esperado


9

Na visão de Assaf Neto (2018, p. 268)


O retorno pode ser entendido como ganho (ou perda) de um
investimento para certo período de tempo e o retorno esperado de
um ativo é o retorno médio ponderado de todos os prováveis
resultados de um investimento, calculados para diferentes cenários
projetados.
Pode-se entender por esses conceitos que o retorno está relacionado com o tempo e
os diferentes cenários que o ativo poderá ser exposto.
Na carteira de investimentos como um todo o retorno é a somatória dos pesos
dos ativos (wi), sendo a somatória dos pesos = 1, multiplicado pelo retorno esperado
de cada ativo (µi), como caracteriza Markowitz (1952).
Portanto, o retorno esperado é dado por:
𝑁
𝐸 = ∑ 𝑤𝑖 · µ𝑖 (1)
𝑖=1

O retorno esperado pelo método do CAPM (Capital Asset Princing Model), em


certos casos pode ser considerado uma alternativa melhor para a obtenção dos
retornos, pois há menos nível de carregamento de incertezas do que no uso da
média histórica dos retornos. Nesse caso a fórmula é a seguinte:

E = Rf + βi(E(Rm) − Rf) (2)

Em que Rf é o retorno de uma taxa livre de risco na economia, E(Rm) é o


retorno esperado de uma carteira diversificada de mercado formada por todos os
ativos de risco na economia e βi é o coeficiente beta do ativo i, calculado pelo
coeficiente angular da reta de regressão linear simples entre o retorno do ativo e o
retorno esperado da carteira de mercado, ou seja, é uma medida de risco sistêmico
que indica como o retorno do ativo está relacionado com as variações do retorno da
carteira de mercado.
10

​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)

Agora, deve-se pensar sobre o fato de o risco isolado de um ativo, quando


está incluso numa carteira de investimentos, ser diferente do risco quando interage
com o risco dos demais ativos da carteira, desse modo, cada ativo contribuirá de
modo diferente para o risco total da carteira. Outro ponto importante é que quanto
mais ativos compuserem o portfólio o risco diminuirá até certo ponto, devido à
permanência do risco sistemático (ASSAF NETO, 2018).
A equação que revela o risco (desvio padrão) de uma carteira de
investimentos contendo N ativos, baseada no Modelo de portfólio desenvolvido por
Markowitz é dada pelas equações 4 e 5, de acordo com Bodie, Kane e Marcus
(2015, p. 195):

𝑛 𝑛
σ𝑝 = ∑ ∑ 𝑤𝑖𝑤𝑗𝐶𝑜𝑟𝑟𝑖,𝑗 · σ𝑖 · σ𝑗 (4)
𝑖=1 𝑗=1
ou
11

𝑛 𝑛
σ𝑝 = ∑ ∑ 𝑤𝑖𝑤𝑗𝐶𝑜𝑣 𝑟𝑖, 𝑟𝑗
𝑖=1 𝑗=1
( ) (5)

Há casos em que se insere ativos livres de risco na proposta de diversificação


de carteiras, ocasionando a simplificação dos cálculos, pois o desvio padrão desse
tipo de ativo é nulo, assim o risco do portfólio ficará reduzido, conforme mostram as
equações 6 e 7:

2 2 2 2 ( )
1
2
de σ𝑃 = ⎡⎢𝑊𝐴 · σ𝐴 + 𝑊𝐹 · σ𝐹 + 2⋅𝑊𝐴 · 𝑊𝐹 · 𝐶𝑂𝑉𝐴𝐹⎤⎥ (6)
⎣ ⎦

para σP = WA x σA (7)

Segundo Assaf Neto (2018, p. 190)


Um ativo que se espera perda e que apresenta um prazo muito curto
é considerado como livre de risco (risk free). Se a maturidade do
título for se incrementando, irá se tornando mais arriscado,
demandado o pagamento de um prêmio pelo prazo mais longo.

​2.1.3 Covariância e Correlação


Markowitz (1959) conceitua a covariância como a medida da extensão em
que dois conjuntos de números tendem a se mover juntos, de modo positivo ou
negativo. Pode-se exemplificar assim: se os preços de duas ações vão na mesma
direção a covariância é positiva (σXY > 0), já se os preços vão para direções opostas
a covariância será negativa (σXY < 0) e se os preços dessas duas ações não
estiverem relação a covariância será nula (σXY = 0), como mostrado por Doane e
Seward (2014).Matematicamente a covariância é descrita pelas fórmulas 8, para
uma população e 9, para uma amostra:
𝑁
(
∑ 𝑥𝑖−µ𝑥 · 𝑦𝑖−µ𝑌 )( )
σ𝑋𝑌 = 𝑖=1
𝑁
(8)
12

𝑛
(
∑ 𝑥𝑖−𝑥¯ · 𝑦𝑖−𝑦¯ )( )
𝑆𝑋𝑌 = 𝑖=1
𝑛−1
(9)

De acordo com Doane e Seward (2014, p. 163)


As unidades de medida para a covariância são imprevisíveis porque
as médias e/ou unidades de medida de X e Y podem diferir. Por essa
razão, os analistas geralmente trabalham com os coeficientes de
correlação.
Algo que para Bodie, Kane e Marcus (2015, p. 221) pode ser expresso como “a
divisão da covariância pelo produto dos desvios-padrão das variáveis que gera um
número puro denominado correlação”, matematicamente, de acordo com a equação
10:
(
𝐶𝑜𝑣 𝑟𝐷,𝑟𝐸 )
(
𝐶𝑜𝑟𝑟 𝑟𝐷, 𝑟𝐸 = ) σ𝐷σ𝐸
(10)

O coeficiente de correlação é a medida que revela a variabilidade entre duas


variáveis, essa definição simplificada é confirmada por Doane e Seward (2014,
p.161) quando dizem que
O coeficiente de correlação da amostra (conhecido também como
coeficiente de correlação de Pearson) é uma estatística bem
conhecida que descreve o grau de linearidade entre observações
pareados de duas variáveis quantitativas X e Y.
A equação 11 que descreve o coeficiente de correlação é dada por:
𝑛
(
∑ 𝑥𝑖−𝑥¯ · 𝑦𝑖−𝑦¯)( )
𝑟= 𝑖=1
(11)
𝑛 𝑛
2 2
(
∑ 𝑥𝑖−𝑥¯ ·
𝑖=1
) (
∑ 𝑦𝑖−𝑦¯
𝑖=1
)

O valor do coeficiente de correlação varia de -1 ≤ r ≤ +1 e a interpretação é


feita da seguinte forma: se r estiver próximo de 0 a relação linear entre X e Y será
mínima; mas se r estiver próximo de +1 a relação linear forte e positiva; e se r estiver
próximo a -1 a relação linear fraca e negativa.
13

Ao tratar da importância da correlação para a seleção de portfólio Markowitz


(1959), diz que caso o retorno dos títulos não fosse correlacionado a diversificação
poderia eliminar o risco e caso a correlação fosse perfeita a diversificação não
eliminaria o risco. Uma diversificação ideal seria aquela com títulos altamente
correlacionados, mas não perfeitamente correlacionados, algo que levaria a redução
do risco, porém sem eliminá-lo.
Os conceitos estatísticos apresentados possuem grande relação entre si
como a variância que para a covariância que vai para a correlação, é possível por
meio dessa constatação perceber a que uma certa simplicidade na teoria criada por
Markowitz e ao mesmo tempo grande complexidade ao perceber relações
estatísticas importantes entre o comportamento dos ativos.

​2.1.4 Cálculo de Risco e Retorno usando matrizes


​ No processo de seleção de uma carteira de ativos pode-se considerar como
peças centrais o retorno esperado de cada ativo e a matriz de covariância que
“representa o controle do risco e o potencial de diversificação”, porém a solução
desses problemas está envolta em erros de estimações que são agravados
conforme o número de ativos excede o tamanho da amostra, conforme Santos e
Tessari, informam.
​ Para minimizar tais erros de estimação diversos métodos de estimar matrizes
foram criados e usados conforme o caso e a necessidade de cada usuário. Como
exemplo desses métodos podemos citar:
​ Matriz de Covariância Amostral: que considera como R sendo a matriz N x
T ( com N retornos e T observações). Como na equação 12.

(12)

​ Risk Metrics: metodologia desenvolvida pelo banco J.P. Morgan para estimar
o risco de mercado em carteiras. Usa o princípio da matriz de covariância
amostral, mas com uma modificação baseada num método de média móvel
14

exponencial ponderada que molda as covariâncias condicionais. Sendo a


matriz dada pela equação 13:
(13)

​ Método do Encolhimento (Shrinkage): neste método proposto por O. Ledoit


e M. Wolf em 2003, a definição da quantidade de dados que deve ser usado
para a determinação da matriz de covariância é determinada com base em
um trade-off entre a variância estimada e o erro de especificação do modelo.
De acordo com Santos e Tessari (2012, pg. 376) “este método consiste em
‘encolher’ o estimador não-enviesado, mas que contém erro de estimação,
em direção a um alvo fixo representado pelo estimador enviesado” o que
produziria uma matriz de covariância positiva e bem definida. Sendo dado
pela equação 14:
(14)

Neste trabalho será usado como método para o cálculo da matriz de


covariância o código fonte baseado no método de encolhimento de Ledoit & Wolf.

​2.1.5 Fronteira Eficiente de Ativos com Risco


A fronteira eficiente de ativos com risco determina uma carteira de
investimentos com maior nível de retorno e menor risco, para um determinado nível
de risco. Essa ideia é confirmada por Bodie, Kanie e Marcus (2015, p. 193) quando
dizem que as oportunidades de risco-retorno disponíveis ao investidor “são
resumidas pela fronteira de variância mínima dos ativos de risco”, sendo que essa
fronteira é definida pelo ponto de variância mínima global da carteira.
Vê-se por meio da figura 1 que o ponto M representa a carteira de variância
mínima, que de acordo com Assaf Neto (2018) é ponto de menor desvio padrão, e
quanto mais a carteira distancia-se do ponto M, maior o risco, e maior o retorno
esperado.
15

​Figura 1 - Fronteira de variância mínima de ativos de risco

​Fonte: Assaf Neto (2018, p. 293), modificado pela autora.

Segundo Bodie, Kanie e Marcus (2015) as carteiras localizadas na fronteira


eficiente em relação à carteira de variância mínima global e acima (área azul)
oferecem as melhores combinações de risco-retorno, essa área é definida como
fronteira eficiente de ativos de risco. Já as carteiras presentes na parte inferior da
fronteira eficiente (área verde) são consideradas ineficientes.
Em Markowitz (1959) encontra-se que para um portfólio P ser eficiente ele
deverá apresentar três condições: (i) P deve ser uma carteira legítima, ter retorno
médio e desvio padrão acima da curva; (ii) se qualquer carteira legítima tem maior
retorno esperado, também deve ter uma variação de retorno maior que a carteira P;
e (iii) se qualquer carteira legítima tem menor variação de retorno, terá retorno
esperado menor do que a carteira P. Portfólios ineficientes apresentam apenas a
primeira condição satisfeita, falhando nas demais.

​2.1.6 Índice de Sharpe


Com base na teoria de fronteira eficiente e da carteira de mínima variância
global, tem-se o entendimento da linha de mercado de capitais que determina o
Índice de Sharpe, que segundo Assaf Neto (2018), é a medida de avaliação da
16

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)
𝑀

Com o índice de Sharpe determinado tem-se que quanto maior o valor


encontrado maior será o retorno, porém vale salientar que há carteiras com baixo
risco e índice de Sharpe alto e até mesmo carteiras com alto risco e índice de
Sharpe elevado. No caso deste trabalho, procuraremos a carteira com maior índice
de Sharpe e menor retorno.

​2.1.7 Análise de dados do mercado para a otimização de carteiras


A otimização de carteiras usando o Método do Portfólio de Markowitz exige
que se conheça o retorno (E), o risco (σ) da carteira e a matriz de covariância (COV)
ou correlação (CORR), conhecendo-se essas variáveis é possível encontrar a
proporção, a alocação, de cada ativo dentro da carteira para torná-la eficiente. Para
isso é necessário que se faça a análise de dados dos retornos históricos dos ativos
disponíveis.
Pode-se considerar que este trabalho abrangerá dois tipos de análise de
dados: a análise técnica e a análise prescritiva, pois ambas se baseiam no uso de
dados históricos, foco da metodologia de Markowitz, para auxiliar na tomada de
decisões.
Como definido por Yang e Satchell (2003, p.1, tradução nossa) a análise
técnica emprega informações históricas para prever a atividade futura do mercado,
sendo possível fazer o uso de técnicas de reconhecimentos de padrões simples até
o uso de redes neurais profundas ou deep learning (uso de algoritmos que
processam dados e reconhecem padrões).
17

A análise prescritiva é conceituada por Sharda (2019, p.381, tradução nossa)


como a forma de tomar decisões usando algum tipo de modelo analítico e a
capacidade de usar insights descritivos e preditivos para ajudar alguém a tomar
decisões melhores.
Desse modo, percebe-se que o método de Markowitz vai de encontro à
aplicação da análise de dados que engloba a captação e interpretação de dados,
que tomaram como ponto de partida os preços diários de ações de interesse para a
otimização da carteira eficiente.

2.2 Apresentação da linguagem Python


Python é uma linguagem de programação criada pelo holandês Guido van
Rossun, na década de 1980, podendo ser considerada um projeto de
desenvolvimento de software de código-fonte aberto, ou seja, permite o estudo e
modificação livre. É uma linguagem que de forma precisa torna os programas mais
legíveis, possui uma vasta biblioteca (local onde é encontra-se algoritmos que
auxiliam no desenvolvimento de programas) que permite o desenvolvimento de
aplicações robustas, mas aparência simples como nos explica Perkovic (2016, p.8,
tradução nossa).
A definição que Hilpisch (2014, p. 3, tradução nossa) apresenta é a de que
Python é uma linguagem de programação multifuncional por tornar possível ser
aplicada em vários domínios e campos técnicos. Devido à facilidade de
aprendizagem e aplicação é usada por programadores iniciantes até os mais
qualificados, além de ser aplicada em escolas, universidades e em diversas áreas
científicas.
As principais características da linguagem Python, informadas por Hilpisch
(2014, p. 4, tradução nossa) são as seguintes:
​ open source: permite que os usuários tenham acesso gratuito e
ilimitado a linguagem em si e também as bibliotecas Python, que
são repositórios dos algoritmos usados com mais frequência.
18

​ interpretada: os interpretadores servem para traduzir o código


Python em tempo de execução para um código de bytes
executáveis
​ multiparadigma: oferece suporte a diferentes paradigmas de
programação, como orientação a objetos e programação
imperativa, funcional ou procedural;
​ multiuso: usado para desenvolver códigos rápidos e interativos,
construir aplicativos mais complexos, operado em sistemas de
baixo ou alto nível;
​ plataforma cruzada: sua versatilidade permite estar disponível em
diversos sistemas operacionais como Windows, Linux, e Mac05.
Além de poder ser usado desde os servidores mais poderosos até
em pequenos dispositivos como Raspberry;
​ Indentação consciente: usa a indentação para marcar blocos de
códigos, ou seja, ajuda a ressaltar a estrutura dos algoritmos
tornando o código mais legítimo.
Percebe-se que a linguagem Python é muito poderosa por possuir grande
variedade de recursos, poder ser usada em diferentes tipos de meios e pela
versatilidade dos projetos que é capaz de entregar. Outro ponto importante que pode
ser inferido é que o Python pode ser manipulado por diversos tipos de usuários com
o mínimo de conhecimento em programação computacional, algo ressalta o grande
potencial que essa linguagem possui de atuar em diferentes áreas do conhecimento
humano.
De acordo com Srinath (2017, p. 354, tradução nossa), com base em
dados divulgados pela plataforma Stack Overflow (comunidade formada por
profissionais da programação) o crescimento rápido do Python pode ser explicado
pela maior acessibilidade e utilidade da linguagem, o que a torna atraente para os
desenvolvedores em geral.
Vale ressaltar que este trabalho tem como intuito mostrar sucintamente a
linguagem Python, apresentando os pontos mais relevantes para que seja possível
19

compreender por que está uma das linguagens de programação mais usadas no
mundo.

​2.2.1. Python e Finanças


​ A tecnologia na área financeira tem tido papel importante na medida em que
contribui para facilitar a vida dos tomadores de decisões. Graças à facilidade em
tratar e interpretar dados em tempo real, e maior velocidade, colaborou para o
surgimento de novos negócios. Há de se levar em consideração, porém, que o
desenvolvimento de novas tecnologias depende de variáveis como tempo e dinheiro,
algo que em alguns casos acaba inviabilizando novos projetos. (HILPISCH 2014,
p.13, tradução nossa)
​ Em função disso, na visão de Hilpisch (2014, p. 21, tradução nossa) a
linguagem Python pode trazer alguns benefícios para a área financeira, como: (i) o
uso de ponta a ponta, ou seja, da prototipagem até o programa pronto e em
execução; (ii) a eficiência em razão do alto desempenho e velocidade com que é
capaz de executar análises interativas; (iii) disponibilidade de muitas bibliotecas e
ferramentas disponíveis auxiliam os desenvolvimentos recentes em termos de
análise, volume de dados e frequência; e (iv) o grande potencial de apresentar
estruturas singulares para facilitar as atividades das instituições financeiras.
​ As instituições financeiras podem enfrentar como desafios o Big Data, que é a
grande quantidade de dados a ser processada e analisada, e a falta de
fundamentações teóricas que sejam consistentes com o volume de dados atual e a
escala tempo de processamento usado, a de milissegundos. Para tentar resolver
isso a sintaxe Python aparece de forma bem próxima a sintaxe matemática usada
para descrever problemas científicos e algoritmos financeiros. Isso facilita
sobremaneira o uso da linguagem Python, pois a matemática facilita a descrição e
modelagem de forma concisa e exata algoritmos e aspectos abstratos da análise
financeira. (HILPISCH 2014, p.16, tradução nossa)
​ O setor financeiro tem se beneficiado com o uso e aprimoramento da
linguagem Python para analisar dados que entregam informações valiosas para
20

auxiliar na tomada de decisões. A linguagem Python, por conta de sua singularidade


e robustez, é capaz de facilitar a rotina e agrega valor econômico às instituições
financeiras que sabem tirar proveito dela.

​2.2.2 Python para finanças versus Excel


O Excel pode ser considerado a plataforma de análise de dados mais usada
no mundo, devido as suas principais características como a versatilidade, a
facilidade em visualizar os dados, a organização, as diversas funcionalidades e a
capacidade de realizar diversos tipos de manipulação estatística, possuindo todos os
elementos técnicos para a implementação de análises financeiras em um único local,
(HILPISCH 2014, p. 358, tradução nossa).
Com o uso do Python não temos todas essas ferramentas acopladas num só
lugar, sendo necessário utilizar as bibliotecas que supram essa falta. Porém, com o
Python pode-se trabalhar com grandes quantidades de dados, ou dados complexos,
algo que não possível com o Excel que mais é usado como uma interface gráfica do
usuário, exibir dados e agregar informações, seus usos mais habituais, (HILPISCH
2014, p. 358, tradução nossa).
Ao analisar a série de dados dos retornos históricos dos ativos para longos
períodos de tempo tem-se um acúmulo grande de dados, assim sendo o python
torna-se o programa ideal para a manipulação desses dados, pois como ele é temos
uma ferramenta que permite o tratamento de uma série extensa de dados e também
ser um motor analítico que pode empregar diversos recursos analíticos para
planilhas do próprio Excel, tornando-o um também programa que pode
complementar o Excel.

​2.2.3 Python na prática através do PyPortifolioOpt


Uma aplicação prática de Python em finanças é o uso da biblioteca
PyportfolioOpt (disponível gratuitamente para usuários) que otimiza carteiras de
21

investimentos tendo como um de seus fundamentos teóricos a fronteira eficiente de


Markowitz.
No site está presente toda a documentação de apresentação e instruções
dadas pelos desenvolvedores do PyportfolioOpt que sustentam a possibilidade de
investidores casuais até profissionais sérios possam achar grandes utilidades para
essa biblioteca.
O fluxograma da figura 2 mostra como está estruturado o PyportfolioOpt. Para
chegar ao resultado de uma carteira de ativos eficiente pode-se partir dos preços
históricos de ativos ou do modelo prioritário, fica a cargo de o analista optar pelo
melhor ponto de partida. Em seguida, deve ser feito o cálculo dos retornos
esperados e da matriz de covariância.

​Figura 2 - Fluxograma de estruturação do PyportfolioOpt

Fonte: Documentação do PyPortfolioOpt

Numa próxima etapa é feita otimização do portfólio utilizando um dos três


otimizadores disponíveis: fronteira eficiente, Black-Litterman ou risco de paridade
hierárquica. Essa otimização será feita com base em restrições e objetivos
desejáveis para a carteira de ativos.
22

Depois da geração dos pesos ótimos da carteira, deve realizar o


pós-processamento. Trata-se de alocar os pesos em uma alocação acionável, isto é,
a partir do valor monetário que o investidor possui será feita a distribuição adequada
que combine o peso recomendado para cada ação e o valor da ação.
A instalação do PyportfolioOpt pode variar dependendo do sistema
operacional usado, mas neste caso será usado o sistema Windows. Para prosseguir
com a instalação é necessário instalar o programa Visual Studio e em seguida a
instalação do PyportfolioOpt por meio de um gerenciador de pacotes chamado
Python Package Index (PIP). A partir desse ponto, deve-se seguir as orientações
disponíveis na página de documentação do PyportfolioOpt, onde é possível
encontrar livros de receitas, como os próprios desenvolvedores chamam e seguir as
instruções, adaptando-as aos objetivos desejáveis para a otimização do portfólio
mais eficiente.
Vale ressaltar, que o uso da biblioteca PypotfolioOpt requer conhecimentos
básicos na linguagem Python. Neste trabalho, a intenção é a de mostrar que é
possível profissionais de áreas alheias a ciências ou engenharia da computação, por
exemplo, possam aplicar a Teoria do Portfólio de Markowitz aliada com linguagem de
programação.
23

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

4) Após a confirmação de que todos os programas foram corretamente


instalados deve-se instalar a biblioteca de interesse para este estudo, o
PyPortfolioOpt. Para isso, no Prompt de Comando, digitar: pip install
pyportfolioopt.
Após esses procedimentos serem feitos será possível iniciar a otimização da
carteira de investimentos de risco mínimo. Para isso usou-se como apoio a
documentação disponibilizada pelos desenvolvedores responsáveis pelo
PyPortfolioOpt, que abrange desde a teoria até exemplos de aplicação prática da
teoria do portfólio, modelo de risco e retorno, otimização por média variância, entre
outros. Nos apêndices A e B, sem descritos etapas que devem ser realizadas, desde
a instalação dos programas até o uso dos códigos na linguagem Python.
A amostra de dados será composta por uma série histórica de cotação de
ações negociadas no mercado a vista, de empresas de capital aberto, listadas na
B3, a bolsa de valores brasileira. Tal amostra será composta pelos 15 principais
ativos com risco, do IBOVESPA B3 observados em 07 de janeiro de 2022, de acordo
com a tabela 1. Não foram selecionados ativos livres de risco para esse estudo.
A quantidade de ativos selecionados para a realização deste trabalho se dá
pelo fato de que a partir de em torno de 20 ativos o risco da carteira de mantém
estável, em virtude da presença do risco sistemático que não pode ser eliminado por
meio da diversificação, conforme lição de Assaf Neto (2018).
​Tabela. 1 – Empresas selecionadas por setor de atuação carteira Ibovespa


Fonte: Ibovespa (B3)
25

Quatro passos serão dados a fim de conseguir a carteira de melhor eficiência


composta pelos 15 ativos selecionados. Estes passos são os seguintes:
​ Passo 1: coletar dos preços de fechamento de cada ativo
​ Passo 2: estimar os retornos esperados e calcular a matriz de covariância
​ Passo 3: obter os pesos dos ativos que maximiza o índice de Sharpe
​ Passo 4: traçar o gráfico da Fronteira Eficiente e Ponto ótimo de menor risco
26

​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:

PASSO 1: Fornecer os dados dos preços históricos


Inicialmente deve-se instalar as principais bibliotecas, as quais auxiliaram na
captação de dados, nos cálculos matemáticos e na plotagem de gráficos, de acordo
com o apresentado na figura 3. Após selecionar os 15 ativos deve-se inserir seus
códigos (tickers) das ações para que o conjunto de dados de preços históricos de
fechamento do mercado dos ativos sejam usados, desde o primeiro dia útil de
janeiro de 2000 até o último dia útil de dezembro de 2021, tais dados foram
capturados do Yahoo Finance, que no algoritmo está identificado como yfinance.
Nessa etapa, já ocorre a exclusão dos valores nulos por meio código
dropna(how=”all”), algo que facilita o modelo proposto ser posto em prática mais
rapidamente.
27

Figura 3: Apresentação dos algoritmos usados para a coleta de dados

Fonte: própria autora


Figura 4: Gráfico dos preços de fechamentos dos 15 ativos

Fonte: própria autora


28

Em seguida são apresentados os dados dos últimos 5 dias da amostra,


apenas de modo ilustrativo e, além disso, é apresentado um gráfico, na figura 4, de
evolução dos preços dos últimos 5 anos de todos os ativos selecionados.

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.

PASSO 2: Estimar os retornos esperados dos ativos e a matriz de covariância


Nesse passo, como apresentado na figura 5, iniciou-se o uso da biblioteca
PyPortfolioOpt, versão 1.4.2. O retorno esperado será calculado pelo retorno do
CAPM por ser mais estável que a média dos retornos históricos médio padrão, o
qual carrega consigo muitas incertezas. Para ilustrar os retornos obtidos
adicionou-se um gráfico de barras que mostra a magnitude dos retornos de cada
ativo. Como é possível observar os cinco ativos que possuem os maiores retornos
são: RADL3 (0,506), RAIL3 (0,363), MGLU3 (0,348), CYRE3 (0,308) e BBAS3
(0,291) conforme mostra a figura que apresenta os valores dos retornos.
29

Figura 5: Apresentação dos algoritmos para o cálculo dos retornos

Fonte: própria autora


Para chegar a uma matriz de covariância ideal para o é necessário realizar a
estimativa de redução da matriz de covariância, proposta por Ledoit & Wolf, com isso
obtêm-se uma matriz sem valores extremos, que leva a uma matriz positiva, melhor
definida e sem vieses.
30

Observa-se que os gráficos de temperatura antes da realização da estimativa


de redução apresentam um ponto de covariância próximo a 0,88 (com tonalidade
mais amarelada), enquanto os demais apresentam-se entre 0,08 e 0,35 (em
tonalidade azulada).
Após a aplicação do algoritmo risk_models.CovarianceShrinkage().ledoit_wolf()
ocorre a apresentação de valores de covariância próximos a 1,0 o que denota um
melhor tratamento dos dados e a precisão do alcance dos resultados, conforme
mostra a figura 6.
​Figura 6: Apresentação dos algoritmos para o cálculo matriz de covariância

Fonte: própria autora


31

PASSO 3: Portfólio que maximiza o Índice de Sharpe


Nessa etapa serão determinados os pesos de cada ativo que comporão uma
carteira eficiente ao maximizar o índice de Sharpe, de acordo com o mostrado na
figura 7. Vale ressaltar que o algoritmo que determina os pesos o faz por simulação
da melhor carteira para investimento.
Figura 7: Algoritmos que levam ao Portfólio de maior índice de Sharpe

​Fonte: própria autora


De acordo as informações os cinco ativos que mais contribuirão para com a
carteira são: RAIL3 (15,69%), MGLU3 (11,26%), RADL3 (8,94%), DXCO3 (8,26%) e
RENT3 (7,57%). Em seguida é apresentado o retorno anual esperado de 30,3%, a
volatilidade anual equivalente a 15,9% e o índice de Sharpe igual a 1,78.
Os dados de performance do portfólio revelam que do total de investimento
realizado sobre os ativos, na distribuição dos pesos sugeridos, ocorreu um retorno
32

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.

PASSO 4: Gráfico da Fronteira Eficiente e o Ponto Ótimo de risco mínimo


Para obter a Fronteira Eficiente é necessário usar o algoritmo CLA (Critical
Line Algorithm), como na figura 8, que gera carteiras ideais usando o algoritmo de
linha crítica conforme implementado pelos desenvolvedores Marcos Lopez de Prado
e David Bailey. O uso desse algoritmo apresenta novas estimativas de retorno anual
esperado de 30,3%, a volatilidade anual equivalente a 15,9% e o índice de Sharpe
igual a 1,78. A figura 8, abaixo, mostra o gráfico da fronteira e ponto ótimo de menor
risco para alocação melhor dos recursos nos ativos para uma carteira eficiente.
Figura 8: Apresentação dos algoritmos que levam ao gráfico da Fronteira Eficiente

Fonte: própria autora

​5. CONSIDERAÇÕES FINAIS


33

O uso da linguagem Python para encontrar uma carteira de investimentos,


composta pelos 15 principais ativos do Ibovespa B3, mostrou-se eficiente. Em razão
da facilidade em coletar a grande quantidade de dados que demanda esta
metodologia e a rapidez em concluir cálculos complexos. Além disso, a biblioteca
PyPortfolioOpt possui grande variedade de algoritmos que facilitaram a obtenção
dos resultados havendo grande gama de opções para o tratamento de dados,
cálculos e apresentação de resultados.
A carteira formada, com base nos ativos propostos, pode ser considerada de
baixo risco devido à volatilidade estimada ser de 16,2%, avaliando conjuntamente
com o Índice de Sharpe pode-se concluir que para cada unidade investida haverá
um retorno de 1,78. Além disso, o gráfico da Fronteira Eficiente mostra que para a
volatilidade de 16,2% o retorno máximo será de 30,3%. Esta carteira de ativos foi
formada a caráter de estudo, não recomenda-se o investimento de capital nela.
Confirmou-se a hipótese proposta ao obter-se uma carteira de investimentos
utilizando a linguagem Python usando grande volume de dados e avaliados de modo
rápido. Aliada a teoria do Portfólio de Markowitz (1952) que ainda se mostra forte e
base para a criação de metodologias que tendem a melhorar e a alcançarem
resultados mais eficientes e que, quando aliados às novas tecnologias, como a
linguagem de programação Python, podem ser alcançados de modo mais rápido.
Vale ressaltar que este estudo teve como intuito apenas apresentar a
aplicação de algoritmos já desenvolvidos por cientistas da computação e mostrar
que esta pode ser uma melhor opção que o uso do Excel, que apresenta limitação
quando há grande volume de dados envolvidos na análise. Outro ponto é que com
um mínimo de conhecimento sobre linguagem de programação é possível que
profissionais de áreas diversas façam uso de métodos como o apresentado.
Sugere-se que estudos futuros sejam realizados com a técnica apresentada
usando ativos com risco e ativos livres de risco. Além disso, sugere-se o uso de
outras linguagens de programação como: R ou Node.js, utilizando ativos com o
mesmo perfil dos utilizados neste trabalho e assim realizar comparações em torno
da facilidade de uso e robustez dos programas frente a grande quantidade de dados.
34
35

​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

BANIN, S. L. Python 3 - Conceitos e Aplicações - Uma abordagem didática. 1


ed. São Paulo - SP: Editora Saraiva, 2018.
Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788536530253/.
Acesso em: 04 de maio 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

CASSAROTO FILHO. A. Análise de Investimentos - Manual Para Solução de


Problemas e Tomadas de Decisão. 12 ed. São Paulo - SP: Atlas, 2020.
Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788597023299/.
Acesso em: 26 de abril de 2021

DOANE,D. P.; SEWARD,L.E.; Estatística Aplicada à Administração e Economia,


4 ed. Porto Alegre – RS: AMGH Editora Ltda, 2014.
Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788580553949/
Acesso em: 10 de junho 2021

FLEURY, A. C.; AGOSTINI, C. G.; LIMA; R. R.; Sistemas de Apoio a Decisão em


projetos de engenheria. Revista de Administração, Volume: 19, nº 3, páginas: 28 -
33; julho/setembro de 1984.

HILPISCH, Y. Python for Finance, 1 ed. Sebastopol, Califórnia – EUA: O’Relly


Media, 2014.

IBOVESPA, Disponivel em: https://www.b3.com.br/pt_br/market-data-e-indices


/indices/indices-amplos/indice-ibovespa-ibovespa-composicao-da-carteira.htm
Acesso em: 05 de janeiro de 2022

MARKOWITZ, H. “Portfolio Selection.” The Journal of Finance; Volume: 7, nº 1,


1952, páginas: 77–91.

MARKOWITZ, H.; Portfolio Selection: Efficient Diversification of Investments.


Yale University Press. Publicado em 1959.

PYPORTFOLIOOPT, Portfolio optmization in python Disponível em:


https://pyportfolioopt.readthedocs.io/en/latest/UserGuide.html.
Acesso em: 15 de junho de 2021
36

PERKOVIC, L.; Introdução à Computação Usando Python - Um Foco no


Desenvolvimento de Aplicações.1 ed. Rio de Janeiro - RJ: Editora LTC, 2016.
Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788521630937/
Acesso em: 12 de maio 2021

RUBINSTEIN, M. Markowitz's "Portfolio Selection": A Fifty-Year Retrospective.


The Journal of Finance, Volume: 57, nº 3, páginas: 1041-1045, Junho de 2002.

SALA, M.; ZURICH, E.; SPOTZ, F. W.; HEROUX, A. M. PyTrilinos: High


Performance Distributed-Memory Solvers for Python. ACM Transactions on
Mathematical Software, Vol. 34, No. 2, Article 7, Março de 2008.

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

SRINATH, K. R. Python - The Fastest Growing Programming Language.


International Research Journal of Engineering and Technology;Volume. 4, nº 12,
páginas: 354-357, 2017.

YANG, S; e SATCHELL, S. The impact of technical analysis on asset price


dynamics.
Reino Unido: University of Cambridge; Reino Unido - Agosto de 2003.

WALLIMAN, N. Métodos de Pesquisa. 1 ed. São Paulo: Editora Saraiva, 2014.


Disponível em: https://integrada.minhabiblioteca.com.br/#/books/9788502629857/.
Acesso em: 30 Jun 2021
37

​APÊNDICE A - Guia de programas instalados

I. Interpretador padrão Python - https://www.python.org/downloads/;


II. Anaconda Python - https://www.anaconda.com/products/individual;
III. Visual Studio Builds Tools - https://visualstudio.microsoft.com/pt-br/downloads.
IV. No Prompt de Comando digitar: pip install PyPortfolioOpt
38

​APÊNDICE B - Guia de comandos

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

● Célula 6 - instalando a biblioteca PyPortfolioOpt


import pypfopt
pypfopt.__version__
● Célula 7 - Para calcular o retorno esperado pelo CAPM
from pypfopt import expected_returns
retornoEsperado = expected_returns.capm_return(preços)
retornoEsperado
● Célula 8 - Plotar gráfico de barras dos retornos de cada ativo
retornoEsperado.plot.barh(figsize=(10,6));
● Célula 9 - Cálculo da Matriz de Covariância
from pypfopt import risk_models
from pypfopt import plotting
matrizCov = risk_models.sample_cov(preços, frequency=252)
matrizCov
● Célula 10 - Plotando o gráfico de calor da Covariância antes da
Estimativa de Redução
plotting.plot_covariance(matrizCov, plot_correlation=False);
● Célula 11 - Estimativa de Redução de Ledoit&Wolf e plotagem do gráfico
de calor
Estimativa_reducao = risk_models.CovarianceShrinkage(preços).ledoit_wolf()
plotting.plot_covariance(Estimativa_reducao, plot_correlation=True);
● Célula 12 - Estimando os pesos de cada ativo para maximizar o Índice de
Sharpe
from pypfopt import EfficientFrontier
ef = EfficientFrontier (retornoEsperado,Estimativa_reducao)
pesos = ef.max_sharpe()
cleaned_pesos = ef.clean_weights()
ef.save_weights_to_file("pesos.txt")
cleaned_pesos
● Célula 13 - Descobrindo o desempenho esperado do portfólio
40

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)

Para mais informações e encontrar outros tipos de análises consulte a


documentação em: https://pyportfolioopt.readthedocs.io/en/latest/index.html e o
repositório com guia detalhado de cada uma das análises que os desenvolvedores
criaram, em: https://github.com/robertmartin8/PyPortfolioOpt/tree/master/cookbook.

Você também pode gostar