Pitch: Como usei Python para automatizar o rebalanceamento de investimentos (e levei a ferramenta para a Web)
Salve, pessoal!
Sempre achei que o processo de rebalancear uma carteira de investimentos na mão ou usando planilhas genéricas era muito manual e propenso a erros. Como programador, a minha vontade natural foi resolver isso com código.
O grande desafio lógico de um rebalanceamento de carteira não é apenas calcular porcentagens ideais, mas sim lidar com a regra de ouro: você geralmente não vende ativos, apenas direciona o dinheiro novo para o que ficou para trás.
Para resolver isso, construí um algoritmo focado em encontrar a distância matemática entre o cenário atual e o alvo. A lógica principal nasceu em Python.
Abaixo, compartilho o coração do algoritmo:
def distribuir_com_limite(valores, porcentagens, total):
soma_existente = sum(valores)
soma_final = soma_existente + total
limites_absolutos = [p * soma_final for p in porcentagens]
limites_disponiveis = [max(0, limite - atual) for limite, atual in zip(limites_absolutos, valores)]
soma_disponivel = sum(limites_disponiveis)
if total <= soma_disponivel:
return [(disp / soma_disponivel) * total for disp in limites_disponiveis]
else:
return limites_disponiveis
O uso do max(0, limite - atual) combinado com o zip() foi a forma mais limpa que encontrei para criar a trava lógica. Se um ativo valorizou demais e ultrapassou a porcentagem ideal, a matemática daria um número negativo. O max(0, ...) força o algoritmo a entender que aquele ativo receberá "Zero" de aporte neste mês, sem quebrar o resto do cálculo.
Depois de validar o modelo matemático, decidi que isso não poderia ficar preso no meu terminal. Traduzi essa mesma lógica para JavaScript, usei a biblioteca Chart.js para criar um gráfico de pizza dinâmico e criei uma interface interativa.
Publiquei a ferramenta completa e gratuita no meu projeto pessoal, o Descomplicando Algoritmos.
Se alguém quiser testar a calculadora com seus próprios números ou dar um feedback sobre a UI e a estrutura do código, o link está aqui:
https://descomplicandoalgoritmos.com.br/calculadora-balanceamento-carteira
Adoraria saber o que a comunidade acha da abordagem que usei no código e como vocês costumam resolver esse tipo de cálculo lógico!