CONTEXTO:
Desenvolvemos a otimização de três (03) portfólios composto por ações de três (03) empresas (que no inicio do 2023 foram sugeridos por reconhecidos Investidores Brasileiros, que não serão explícitamente mencionados) da bolsa brasileira 🇧🇷, aplicando algoritmos de otimização e aprendizagem profunda em cenários de risco não sistemático, analisando os riscos e procurando maximizar os rendimentos do portfólio ao final do período.
OBJETIVO:
O objetivo é encontrar a alocação de ativos que maximize o retorno esperado ou minimize o risco, considerando restrições específicas. A combinação de deep learning e algoritmos genéticos é uma abordagem interessante para abordar esse problema complexo.
BASES:
No estudo, consideramos dados de movimentações da Bolsa Brasileira, no período desde 2018-01-01 até 2023-06-30. Totalizando cinco (05) anos, mais os restantes seis (06) meses do 2023.
Portfólios:
Os portfólios estão compostos pelas seguintes empresas:
PORTFÓLIO LB:
Podemos observar os portfólios para ter uma visão mais clara do comportamento das ações de empresas que o conformam.

A primeira vista, as ações da BBAS3 mostram-se com melhor rendimento ao longo do periodo.
Mas, percebe-se que as linhas tem diferenças significativas, básicamente, porque não estão na mesma escala. Vamos tentar resolver isso, e observar que os comportamentos se mostram de manera diferente, porem, agora sim mostram a realidade e podem ser comparados.

Agora sim, com a apresentação na mesma escala, podemos comparar entre elas. E percebemos que a que obteve melhores resultados foi a CSAN3.
PORTFÓLIO TN:
A continuação as empresas que compõem o portfolio TN para ter uma visão mais clara do desempenho.

Novamente, em diferentes escalas resulta inviável reconhecer o melhor rendimento ao longo do periodo.
Depois de converter para a mesma escala, o gráfico representa a realidade dos rendimentos das ações das empresas do portfólio.

Com a apresentação na mesma escala, percebemos que a que obteve melhores resultados foi a RANI3.
PORTFÓLIO BP:
Por fim, o histórico das ações das empresas do portfólio BP ao longo do periodo.

Mas, como nos casos anteriores, precisamos aplicar a normalização para trazer a mesma escala.

E assim percebemos que as ações da VIVT3 conseguiram um melhor rendimento dentro do periodo histórico.
TAXAS DE RETORNO:
A princípio, definiremos aleatóriamente os pesos para as carteiras de manera igualmente distribuido, e na sequencia aplicaremos esses pesos para saber quais seriam as nossas taxas de retorno ao longo do periodo.
Para fins ilustrativos aplicaremos os seguintes pesos:
pesos_carteira = np.array([0.36, 0.32,0.32])
Aplicaremos a seguinte fórmula: retorno_carteira_lb = (df_normalizado / df_normalizado.shift(1)) -1
Essa é a taxa de retorno simples, já que estamos fazendo comparativo em um mesmo periodo de tempo para várias empresas.
Na sequencia, fazemos o calculo anual: retorno_anual = retorno_carteira.mean( ) * 246; normalmente aplica-se 246 dias de operação no ano.
E assim, obtemos os seguintes resultados de taxa de retorno:
- Portfólio_LB: 11.77
- Portfólio_TN: 28.94
- Portfólio_BP: 5.38
A taxa de retorno mais promissora, com esses pesos distribuidos aleatóriamente, seria o Portfolio_TN com taxa de retorno anual de 28.94

No gráfico podemos observar os três (03) portfólios normalizados, confirmando o melhor comportamento de taxa de retorno do Portfólio_TN, conseguindo performar e capitalizar pós Pandemia
CÁLCULO DE RISCOS DOS PORTFÓLIOS:
Para calcular o risco basearemos o estudo na aplicação dos conceitos de variância, desvio padrão e coeficiente de variação, assim como covariância e correlação (normalmente, os portfólios com empresas do mesmo setor apresentam correlações entre elas).
Calculamos o risco medio anual para cada um dos portfólios, assim como a volatilidade dos portfólios por meio do cálculo de covariância e desvio padrão.

Atenção no Portfólio_TN, onde acabamos apostando mais do que o 50% numa empresa, chegando a 0.61 de taxa de retorno, e no global podemos mencionar as seguintes observações:
- O Portfolio_TN é o mais Arrojado, com media de 0.47 de risco.
- O Portfolio_BP é o mais Conservador, com media de 0.28 de risco.
- O Portfolio_LB acaba sendo Moderado, com media de 0.35 de risco.
Agora, mostramos o gráfico de correlações de cada um dos portfólios:

Nas correlações faz total sentido ter esse grau de correlação entre as empresas do Portfólio LB já que temos uma empresa que representa um grande banco brasileiro e outra empresa que não deixa de ser um braço de atuação do mesmo banco. Cabe salientar que é uma correlação intermédia e não extremamente forte
VOLATILIDADE DOS PORTFÓLIOS:
A volatilidade de cada um dos portfólios será calculado aplicando o desvio padrão da nossa taxa de retorno:
volatilidade_portfolio = math.sqrt(np.dot(pesos_carteira, np.dot(taxa_retorno.cov() 246, pesos_carteira)))*
Obtendo os seguintes resultados:
- Portfolio_TN com 32.5%.
- Portfolio_LB 29%
- Portfolio_BP 21%
Claramente, a maior taxa de volatidade, maior risco, maiores opçõesde maior taxa de retorno.
RISCO NÃO SISTEMÁTICO DOS PORTFÓLIOS:
Este tipo de risco, responde a eventos específicos na empresa e depende do tipo de empresa. Em contrapartida com o risco sistemático, que responde a eventos externos, não pode ser eliminado e afeta a todas as empresas, podem ser resultado de eventos como recessão da economia (neste estudo não abordaremos este tipo de riscos).
Para o cãlculo deste risco não sistemático, precisamos definir os pesos, calcular a variância anual e multiplicar pelos pesos, calcular a substração das variâncias e por último o
risco não sistemático é a ((variância do portfólio) - (substração das variâncias))
- Portfolio_TN sai na frente com 0.22
- Portfolio_LB que é o mais próximo com 0.10
- Portfolio_BP recua com 0.075
Podemos comparar essa métrica com a Volatilidade e inclusive usar ambas métricas para analisar o risco dos portfólios.
ALGORITMOS DE OTIMIZAÇÃO:
Neste apartado DEFINIMOS pesos, calculamos o Sharpe Ratio (que é usado para medir o desempenho de uma carteira de ações) que no seu cálculo também utiliza o risco, também adicionamos o cálculo de Markowitz, para finalmente aplicar:
- Alocação randômica de pesos para maximizar o valor do Sharpe Ratio.
- Hill Climb (subida da encosta).
- Simulated Anneling (têmpera simulada).
ALOCAÇÃO RANDÔMICA:
Por medio desta técnica obtimos os seguintes resultados

O método acabou definindo os seguintes PESOS:


O método acabou definindo os seguintes PESOS:


O método acabou definindo os seguintes PESOS:

Finalmente, podemos observer em reais a evolução do patrimônio dos portfólios no periodo.

Destaca-se o Portfólio TN, conseguindo uma distância significativa em relação aos outros portfólios, que no periodo não conseguiram crescer de manera exponencial, objetivo que sim atingiu o Portfólio TN creciendo 5x do capital inicial.
ÍNDICE DE SHARPE RATIO:
O índice Sharpe Ratio, é uma medida de desempenho de um investimento que leva em consideração o retorno em excesso (retorno acima de um ativo livre de risco) em relação à sua volatilidade.

Uma vez aplicada a fórmula, conseguimos os seguintes resultados:
- Portfólio LB: 0.35
- Portfólio TN: 0.78
- Portfólio BP: 0.31
ALOCAÇÃO COM MODELO MARKOWITZ:
A alocação de ativos com o modelo de Markowitz envolve a distribuição de recursos em uma carteira de investimentos para otimizar o equilíbrio entre risco e retorno. Usamos a matriz de covariância e o conceito da fronteira eficiente de Markowitz para calcular a alocação de ativos que otimiza o equilíbrio entre risco e retorno.

Depois de aplicar o modelo Markowitz, obtemos os seguintes resultados:
-
PORTFÓLIO LB
-
PORTFÓLIO TN
-
PORTFÓLIO BP
MÉTODO HILL CLIMB (SUBIDA DE ENCOSTA):
O método Hill Climbing é um algoritmo de otimização utilizado em problemas de busca heurística, onde o objetivo é encontrar a melhor solução em um espaço de busca, geralmente caracterizado por um espaço de estados e uma função de avaliação (função de custo) que atribui um valor a cada possível solução. Aplicando o método obtemos os seguintes resultados:
-
PORTFÓLIO LB
- Pesos para BBAS3: 100.0
- Pesos para BBSE3: 0.0
- Pesos para CSAN3: 0.0
- RETORNO: 7163.68
-
PORTFÓLIO TN
- Pesos para RAPT3: 0.0
- Pesos para RANI3: 100.0
- Pesos para LEVE3: 0.0
- RETORNO: 32321.42
-
PORTFÓLIO BP
- Pesos para ITSA3: 0.0
- Pesos para VIVT3: 99.98
- Pesos para SAPR11: 0.01
- RETORNO: 5812.75
Os resultados do método Hill Climb ficaram muito parecidos em dois (02) portfólios em relação ao Método de Alocação Randômico. Já no Portfólio TN foi superior ao seu concorrente, crescendo em 30% aproximadamente.
SIMULATED ANNEALING (TÊMPERA SIMULADA):
O Simulated Annealing é um algoritmo de otimização probabilística inspirado no processo físico de recozimento de metais, onde um material é gradualmente resfriado para alcançar um estado de menor energia e maior ordenação. Esse método é usado para encontrar soluções aproximadamente ótimas em problemas de otimização, especialmente quando a paisagem de busca é complexa, possui muitos mínimos locais e a função de custo é ruidosa ou não diferenciável.
Aplicando o método obtemos os seguintes resultados:
-
PORTFÓLIO LB
- Pesos para BBAS3: 0.0
- Pesos para BBSE3: 100.0
- Pesos para CSAN3: 0.0
- RETORNO: 5437.28
-
PORTFÓLIO TN
- Pesos para RAPT3: 0.0
- Pesos para RANI3: 100.0
- Pesos para LEVE3: 0.0
- RETORNO: 32321.42
-
PORTFÓLIO BP
- Pesos para ITSA3: 0.0
- Pesos para VIVT3: 90.90
- Pesos para SAPR11: 9.09
- RETORNO: 5758.49
Os resultados do método Simulated Annealing foram levemente menores que os resultados do Hill Climb, isso pode-se dever a falta de profundidade na hora da procura dos pesos, para seguintes oportunidades poderiamos colocar um maior número de iterações para conseguir aproveitar ao máximo o potencial dos algoritmos de otimização.
PREVISÃO DE PREÇOS:
A previsão de preços de ativos financeiros é o processo de tentar prever o valor futuro de ativos financeiros, como ações, títulos, moedas, commodities e outros instrumentos de investimento. Essa previsão é uma parte essencial da tomada de decisões de investimento e gestão de portfólio. O objetivo principal da previsão de preços de ativos financeiros é antecipar o movimento dos preços para tomar decisões informadas sobre comprar, vender ou manter esses ativos.
Neste ponto aplicaremos tanto a simulação de Monte Carlo e Arima para comparação de resultados com o algoritmo de aprendizagem profunda Long Short Term Memory.
SIMULAÇÃO DE MONTE CARLO:
A simulação de Monte Carlo é uma técnica estatística e computacional que utiliza números aleatórios e probabilidades para modelar o comportamento de sistemas complexos ou processos que envolvem incerteza.
Na aplicação do Monte Carlo, fazemos uso do movimento browniano geométrico (GBM) que ajuda descrever o comportamento dos preços dos ativo financeiros. Depois de aplicar a nossa função monte_carlo_previsao, graficaremos as nossas previsões, que tem como premisas, simular os seguintes 28 dias, com 30 simulações distintas.
Para o Portfólio LB, específicamente nas ações BBAS3, temos a seguinte Simulação:

Por outra parte, para o Portfólio TN, específicamente nas ações BBAS3, temos a seguinte Simulação:

Com essas simulações, podemos planejar alguma estrategia para enfrentar o melhor ou pior cenário futuro.
Sobre essas previsões aplicamos o cálculo do "erro" e dos "intervalos de confiança" para 80% e 95%


Para finalmente termos o melhor e pior cenário ou previsão:

Também mostramos as previsões de preços das ações RANI3 do Portfólio TN

PREVISÃO DE PREÇOS COM MULTILAYER PERCEPTRON MLP:
A previsão de preços com um Multilayer Perceptron (MLP) envolve o uso de uma rede neural feedforward para prever os preços futuros de um ativo financeiro, como ações, moedas ou commodities.

A nossa linha de previsão segue o padrão da linha de valores reais. Podemos avaliar melhor mediante uma métrica formal.

Isso significa que, em média, os erros entre as previsões do modelo e os valores reais têm um quadrado médio de 0.1609 e que, com esse MAPE, em média, as previsões do modelo estão, em média, 1.77% afastadas dos valores reais.
PREVISÃO DE PREÇOS COM LONG SHORT TERM LSTM:
A previsão de preços com redes neurais recorrentes (RNN), como Long Short-Term Memory (LSTM), é uma abordagem poderosa para prever preços de ativos financeiros ou séries temporais em geral
A previsão de preços com LSTM é uma abordagem que pode capturar relações temporais e complexas nos dados, tornando-a adequada para séries temporais financeiras. No entanto, é importante lembrar que prever preços de ativos financeiros é um desafio e que os resultados podem variar com base em vários fatores, incluindo a qualidade dos dados e a escolha da arquitetura da rede.
Vamos configurar o número de camadas LSTM, o número de neurônios em cada camada, a função de ativação e outras configurações específicas.

Agora, no treinamento mostraremos as últimas Epoch

Para finalmente mostrar as previsões:

E as métricas consdieradas:
- RMSE: 0.0205
- MSE: 0.000421






