balanceando-carteira-investimentos-capa

Balanceando uma carteira de investimentos usando Python

  • Autor do post:
  • Categoria do post:Python
  • Última modificação do post:21/03/2026
  • Comentários do post:0 comentário

Uma carteira de investimentos é algo que muitas pessoas tem, porém nem sempre sabem como organiza-lá de forma eficiente. Essa organização requer tempo, planejamento e compreensão das escolhas. Pensando nisso, esse artigo propõe uma ferramenta para auxiliar nessa organização e planejamento: O Python ! Por isso, esse post tem como objetivo ensinar você a como usar o python para otimizar seus investimentos. Este artigo tem fins estritamente educacionais de programação em Python e não constitui recomendação de investimento.

O que é uma carteira de investimentos ?

Uma carteira de investimentos é o conjunto de ativos financeiros que uma pessoa ou instituição possui, como ações, fundos imobiliários, renda fixa, criptomoedas ou outros instrumentos disponíveis no mercado. O objetivo de uma carteira não é apenas acumular ativos, mas organizar esses investimentos de forma estratégica, considerando fatores como perfil de risco, horizonte de tempo e objetivos financeiros. Ao combinar diferentes tipos de ativos, o investidor busca equilibrar segurança e rentabilidade, reduzindo a dependência de um único investimento ou classe de ativos.

Por que balancear uma carteira de investimentos é importante ?

Dentro desse contexto, surge a importância de balancear uma carteira de investimentos. Com o passar do tempo, os ativos não se valorizam ou desvalorizam de maneira uniforme. Alguns podem crescer rapidamente, enquanto outros permanecem estáveis ou até perdem valor. Esse movimento altera a proporção original da carteira, podendo aumentar o risco além do que o investidor está disposto a assumir ou afastá-lo de seus objetivos iniciais. O balanceamento consiste em ajustar periodicamente essas proporções, comprando ou vendendo ativos para que a carteira volte à alocação desejada, mantendo o nível de risco e a estratégia alinhados ao plano original.

Onde o python se encaixa nisso ?

É nesse ponto que o Python se torna uma ferramenta extremamente útil. Por ser uma linguagem versátil e acessível, o Python permite automatizar cálculos, analisar grandes volumes de dados e simular diferentes cenários de investimento com facilidade.

Com o auxílio de bibliotecas especializadas, é possível calcular retornos, volatilidade, correlação entre ativos e até sugerir novas alocações com base em critérios matemáticos e estatísticos. Dessa forma, o balanceamento da carteira deixa de ser um processo manual e sujeito a erros, passando a ser mais preciso, reproduzível e baseado em dados, o que ajuda o investidor a tomar decisões mais conscientes e eficientes. Gosta de python ? Veja também como buscar informações de um ativo na B3 usando Python.

Criando um algoritmo

A ideia do algoritmo é simular o balanceamento de uma carteira a partir de um novo aporte, respeitando limites máximos de alocação para cada ativo que também iremos definir. Para isso, iremos criar uma carteira definindo ativos e qual a portcentagens para cada deles. Os ativos serão:

  • CDB
  • Ações
  • Fundos Imobiliários
  • Criptomoedas

A partir daí, o gráfico abaixo apresenta a carteira de investimento com os ativos mencionados acima com sua respectiva porcentagem

Definido esses parâmetros temos todas as informações necessárias para criar o algoritmo. Para isso, vamos iniciar criando a função main do nosso programa.

Python
    

def main():
    #Na lista de porcentagens segue a ordem CDB, Ações, FII's e Cripto
    porcentagens = [0.50, 0.30, 0.15, 0.05]
    valoresAtuais = [0, 0, 0, 0, 0]
    valorAporte = 2753   

main()
    
  

Na função main definimos os valores de cada ativo na variável porcentagens, o valor que já temos investidos fica armezanado na variável valoresAtuais, eu deixei zero pois estou considerando que não há nada investido ainda. Um ponto importante a se atentar aqui é que se houvesse 100 reais investidos em fundos imobiliários(FII’s), a lista deveria estar assim:

valoresAtuais = [0, 0, 0, 100, 0]

Isso porque a 4ª posição representa o ativo FII’s. Essas posições seguem as mesmas definidas na variável porcentagens.

Agora, iremos criar um método que recebe os parâmetros já definidos e calcula essa distribuição.

Python
    

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
    
  

A função distribuir_com_limite é responsável por decidir como o valor do aporte será distribuído entre os ativos da carteira, levando em conta os valores atuais, as porcentagens alvo e o valor total que será investido. A função recebe três parâmetros: valores, que representa quanto já está investido em cada ativo; porcentagens, que define a alocação ideal de cada ativo na carteira; e total, que é o valor do novo aporte a ser distribuído.

Logo no início da função, o código calcula quanto a carteira já possui e quanto ela terá após o aporte. O somatório é guardado nas variáveis soma_existente e soma_final. Essas duas variáveis são importantes porque o balanceamento é feito com base no valor total final da carteira, e não apenas no valor atual. Em seguida, o código transforma as porcentagens alvo em valores absolutos, ou seja, quanto cada ativo deveria ter em reais após o aporte.

Depois disso, o código calcula quanto ainda pode ser investido em cada ativo sem ultrapassar esse limite. Para isso, o zip percorre simultaneamente os limites calculados e os valores atuais. Se um ativo já estiver acima do limite desejado, o valor disponível para ele será zero. Caso contrário, será a diferença entre o limite e o valor atual. O próximo passo é somar todos esses espaços disponíveis para representar o quanto a carteira ainda pode receber de aporte sem quebrar as porcentagens alvo

Seguindo a lógica do método precisamos verificar se o aporte for menor ou igual ao espaço disponível, ele é distribuído proporcionalmente entre os ativos que ainda têm margem para crescer. Isso garante que nenhum ativo ultrapasse sua porcentagem máxima e que o balanceamento seja feito de forma equilibrada. Caso contrário, se o aporte for maior do que o espaço disponível, o código simplesmente preenche todos os limites possíveis. É importante lembrar que, nesse cenário, nem todo o aporte consegue ser alocado sem quebrar as regras da carteira, então a função retorna apenas o máximo que cada ativo pode receber.

Agora, precisamos voltar a função main e chamar essa outra função criada passando todos os parâmetros e criar também uma forma de mostrar essas informações para o usuário.

Python
    


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

def main():
    #Na lista de porcentagens segue a ordem CDB, Ações, FII's e Cripto
    porcentagens = [0.50, 0.30, 0.15, 0.05]
    valoresAtuais = [0, 0, 0, 0, 0]
    valorAporte = 2753   
    
    distribuicao = distribuir_com_limite(list(map(float, valoresAtuais)), porcentagens, valorAporte)
    novos_valores = [v + d for v, d in zip(list(map(float, valoresAtuais)), distribuicao)]
    total_novo = sum(novos_valores)
    
    print("Distribuição:", ', '.join(f"{v:.2f}" for v in distribuicao))
    print("Novos valores:", ', '.join(f"{v:.2f}" for v in novos_valores))
    print(f"Total final: {total_novo:.2f}")
    print("Porcentagens finais:", ', '.join(f"{(v / total_novo):.2f}" for v in novos_valores))

main()

    
  

Nessa última parte do código foi adicionado a chamada para a função que criamos na linha 25, contudo se atentando nas converções de valores para float para evitar problemas de tipo. Além disso, cada valor atual é somado à sua respectiva parcela do aporte, e o total final da carteira é recalculado. Por fim, o código exibe os quanto foi investido em cada ativo, os novos valores individuais, o total da carteira e as porcentagens finais após o balanceamento.

Ao final se exercutarmos esse código teremos uma saída como mostrado abaixo.

Distribuição: 1376.50, 825.90, 412.95, 137.65
Novos valores: 1376.50, 825.90, 412.95, 137.65
Total final: 2753.00
Porcentagens finais: 0.50, 0.30, 0.15, 0.05

Plataforma de balanceamento de carteira online

Pensando em facilitar para os estudantes de python como também os entusiastas do mercado financeiro, eu desenvolvi uma calculadora online e pode ser usado por qualquer pessoa gratuitamente. A aplicação permite que você insira o tipo de ativo, a porcentagem atual que possui alocada, quanto deseja ter e qual o valor de aporte. A partir disso, o site apresenta quanto deve ser alocado em cada investimento de maneira mais amigável. Confira esse site clicando no link.

Assista o vídeo com explicação passo a passo

Se ficou alguma dúvida, assista também o vídeo onde eu explico o que foi feito e a aplicação no mundo dos investimentos.

Aviso Legal: O Descomplicando Algoritmos é um portal de caráter estritamente educativo e tecnológico, focado no ensino de linguagens de programação, ciência de dados e engenharia de software. Todos os tutoriais, códigos e estudos de caso publicados (incluindo aqueles que utilizam dados reais do mercado financeiro, B3, FIIs ou dados de caráter biológico e de saúde) servem exclusivamente como exemplos práticos para a aplicação de algoritmos matemáticos e estatísticos.

Nenhum conteúdo publicado neste site constitui, em circunstância alguma, aconselhamento financeiro, recomendação de investimento, compra e venda de ativos ou qualquer tipo de orientação médica. Para decisões financeiras ou de saúde, o utilizador deve sempre consultar profissionais devidamente certificados e credenciados nas respetivas áreas.

Deixe um comentário