Skip to main content

Download dados de fundos de investimento e realiza comparações.

Project description

python   MIT license   Code style: black   Checked with mypy  

A biblioteca comparar_fundos_br possui uma série de funções que permitem:

  • Capturar dados diários de fundos de investimento;
  • Filtrar fundos por classe CVM (ex Fundos de Ações, Fundos de Renda Fixa, etc);
  • Calcular risco (volatilidade) e retorno dos fundos;
  • Cálculo de rentabilidade no período selecionado, rentabilidade diária, rentabilidade acumulada, rentabilidade anualizada;
  • Filtrar fundos por CNPJ ou por nome (ex: fundos que contenham a palavra Bradesco);
  • Comparar fundos com benchmarks como: CDI, Índice Bovespa, IMA-B, IMA-B 5 e IMA-B 5+;
  • Comparar fundos com sua carteira de investimentos;
  • Plotar gráficos de comparação e evolução dos fundos em período específico juntamente com seus benchmarks.

Instalação

pip install comparar_fundos_br

Caso necessite utilizar proxy, inicie com o código abaixo:

import getpass

user = getpass.getuser().lower()
pwd = getpass.getpass(prompt="Senha: ")
proxy = "10.10.1.10"
porta = 3128
proxies = {
    "http": f"http://{user}:{pwd}@{proxy}:{porta}",
    "https": f"https://{user}:{pwd}@{proxy}:{porta}",
        }

Veja a seguir um exemplo para capturar dados dos Fundos de Investimento com seus respectivos filtros.

import comparar_fundos_br as comp

informe_diario_fundos_historico = comp.get_brfunds(anos=range(2021,2022), #somente 2021
                                              meses=range(1,3), #somente Jan e Fev
                                              classe="Fundo de Ações", 
                                              num_minimo_cotistas=10, 
                                              patriminio_liquido_minimo=1e6, 
                                              proxy=proxies)
informe_diario_fundos_historico.head()
| DT_COMPTC  | CNPJ - Nome                                       |   CLASSE        |   VL_QUOTA  |  NR_COTST |   VL_PATRIM_LIQ |
|:-----------|:-------------------------------------------------:|----------------:|------------:|----------:|----------------:|
| 2022-01-03 | 28.144.770/0001-27 // SAFRA FARADAY AÇÕES FUND... |  Fundo de Ações |  147.689974 |      7144 |   1085967556.96 | 
| 2022-01-03 | 28.122.142/0001-40 // XP INVESTOR IBOVESPA ATI... |  Fundo de Ações |  1.402952   |      7401 |     59237924.90 |
| 2022-01-03 | 28.098.599/0001-67 // HAWK FUNDO DE INVESTIMEN... |  Fundo de Ações |  1.963080   |        12 |     94788040.60 |
| 2022-01-03 | 28.076.506/0001-01 // CSHG ALLOCATION EQUITAS ... |  Fundo de Ações |  1.099504   |        78 |     24340094.17 |
| 2022-01-03 | 28.075.715/0001-22 // CSHG ALLOCATION MILES VI... |  Fundo de Ações |  1.577636   |       107 |    148464847.88 |

Importante ressaltar que todos os Fundos que são retornados possuem SIT ou situação CVM como "EM FUNCIONAMENTO NORMAL".

Se desejar capturar todas as classes de fundos, basta não restringir a variável classe. No exemplo seguinte, também não há restrições sobre fundos com número de cotistas, tampouco sobre o patrimônio líquido. Nesse exemplo, não está sendo utilizada a configuração da proxy.

informe_diario_fundos_historico = comp.get_brfunds(anos=range(2021,2022), #somente 2021
                                              meses=range(1,3), #somente Jan e Fev)

O exemplo acima demora mais para ser executado, uma vez que obtém todos os Fundos dentro do período selecionado. Caso deseje, por exemplo, apenas algunas classes de Fundos, como: Fundos de Ações e de Renda Fixa, siga o exemplo abaixo.

Também é possível consultar os tipos de classe disponíveis.

informe_diario_fundos_historico = comp.get_brfunds(anos=range(2021,2022), #somente 2021
                                              meses=range(1,3), #somente Jan e Fev,
                                              classe=["Fundo de Renda Fixa","Fundo de Ações"])

#Para obter as classes disponíveis:
comp.get_classes()

Para obter o retorno dos Fundos, chame a função calcula_rentabilidade_fundos passando os dados dos fundos que acabou de obter.

(  risco_retorno,
    cotas_normalizadas,
    rentabilidade_media_anualizada,
    rentabilidade_acumulada_por_ano,
    rentabilidade_fundos_total,
) = comp.calcula_rentabilidade_fundos(informe_diario_fundos_historico)

O primeiro dataframe indica tanto o risco (volatidade padrão) de cada fundo, por CNPJ, quanto sua rentabilidade, ambos anualizados. Já o segundo dataframe retorna o valor das cotas dos fundos normalizadas no período selecionado, o que facilita para comparação (veja a seguir nos gráficos).

Os demais dataframes retornam as rentabilidades média anualizada, acumulada por ano e a rentabilidade total no período, respectivamente.

A forma mais eficiente para comparar o desempenho dos Fundos é usando gráficos. Você pode plotar o risco x retorno dos Fundos e comparar com seu benchmark ou sua carteira de investimentos. Aqui não vamos calcular pra você a rentabilidade da sua carteira, apenas usar esse dado para comparar com os fundos selecionados. Veja o exemplo:

df4 = risco_retorno[
                    (risco_retorno["volatilidade"] <= 40)
                    & (risco_retorno["rentabilidade"] >= 0)
                    & (risco_retorno["rentabilidade"] <= 100)
                    ]

comp.plotar_comparacao_risco_retorno(
                                df4,
                                (21, 18), #(risco, retorno) da minha carteira
                                (19, 15), #(risco, retorno) do benchmark
                                nome_carteira="Minha Carteira",
                                nome_benchmark="Benchmark",
                                figsize=(15, 5),
                                posicao_texto_carteira=(30, 25),
                                posicao_texto_benchmark=(31, -25),
                                )
plt.title("Risco x Retorno - Fundos de Ações")
plt.ylim(-10, 140)
plt.xlim(-3, 60)
plt.show()

Uma outra forma de comparação é utilizando as cotas iniciando em um valor inicial de 100, arbitrário. Assim a comparação fica facilitada.

A função plotar_evolucao encontra os Fundos tanto por CNPJ quanto por Nome, ou seja, se deseja obter todos os Fundos que possuam Bradesco no Nome, basta informa na variável lista_fundos=["Bradesco"].

Para facilitar a comparação, você pode personalizar o gráfico para destacar o melhor e o pior Fundo, além de plotar o seu benchmark.

Os benchmarks disponíveis são: CDI, IMA-B, IMA-B 5, IMA-B 5+, Ibovespa e Ações diversas listadas na B3.

cdi, cdi_acumulado = comp.get_benchmark("2022-01-01", 
                                        "2022-07-22", 
                                        benchmark = "cdi", 
                                        proxy=proxies)

data = comp.plotar_evolucao(
                cotas_normalizadas,
                lista_fundos=["03.916.081/0001-62","06.916.384/0001-73"],
                figsize=(15, 5),
                color="darkblue",
                alpha=0.8
                )
plt.title("Evolução dos Fundos")
plt.plot(cdi_acumulado*100, label="CDI")
plt.legend(frameon=False, loc="center right")
plt.show()
indice_ibov, indice_ibov_acumulado = comp.get_benchmark("2022-01-01", 
                                                        "2022-07-25", 
                                                        benchmark = "ibov",
                                                        proxy=proxies)

data = comp.plotar_evolucao(
                cotas_normalizadas,
                lista_fundos=["Bradesco"],
                figsize=(15, 5),
                color="gray",
                alpha=0.2,
                color_maximo="orange",
                color_minimo="blue",
                color_seta_maximo="orange",
                color_seta_minimo="blue",
                posicao_texto_maximo=(-100, -45),
                posicao_texto_minimo=(-100, 40),
                )
plt.title("Evolução dos Fundos que contenham Bradesco no nome")
plt.plot(indice_ibov_acumulado*100, label="Ibovespa", color="red", lw=3)
plt.legend(frameon=False, loc="upper center")
plt.show()

Ainda é possível listar os Fundos de maior e pior desempenho:

melhores = data.iloc[-1:].T.dropna().sort_values(data.index[-1], ascending=False)
melhores.columns = ["Evolução"]
melhores = melhores.reset_index()
melhores[['CNPJ', 'DENOM SOCIAL']] = melhores['CNPJ - Nome'].str.split(' // ', 1, expand=True)
melhores = melhores.drop('CNPJ - Nome', axis=1)
melhores.head()
| Evolução   |         CNPJ       |   DENOM SOCIAL                                       |
|:-----------|:------------------:|-----------------------------------------------------:|
| 172.542213 | 10.590.125/0001-72 |  BRADESCO FUNDO DE INVESTIMENTO EM AÇÕES CIELO       | 
| 127.689792 | 03.916.081/0001-62 |  BRADESCO FUNDO DE INVESTIMENTO EM AÇÕES PETROBRAS   |
| 127.658068 | 03.922.006/0001-04 |  BRADESCO H FUNDO DE INVESTIMENTO AÇÕES PETROBRAS    |
| 127.449134 | 17.489.100/0001-26 |  BRADESCO FUNDO DE INVESTIMENTO EM AÇÕES BB SEG...   |
| 127.296598 | 11.504.894/0001-73 |  BRADESCO FUNDO DE INVESTIMENTO EM AÇÕES - PETR...   |

Também há a possibilidade de listar os piores e melhores Fundos em termos de risco e retorno:

melhores_fundos, piores_fundos = comp.melhores_e_piores_fundos(rentabilidade_fundos_total, num=10)

fundos_maior_risco, fundos_menor_risco = comp.melhores_e_piores_fundos(risco_retorno[["volatilidade"]], num=10)

Para Fundos de Participação (FIPs) e Fundos de Direitos Creditórios (FIDCs), a sistemática é diferente. Enquanto os FIPs tem seus resultados divulgados trimestralmente, os FIDCs são mensalmente divulgados. Assim, para obte-los, basta codar:

#Informe apenas o ano para obter os dados de FIPs disponíveis
fip = comp.get_fip(2022)

#Para FIDCs informe ano e mês
informe_fidcs_all = pd.DataFrame()
for ano in [2020, 2021]:
    for mes in range(1, 13):
        print(f"Data {mes}/{ano}")
        informe_fidcs = comp.get_fidc(ano, mes)
        if not informe_fidcs.empty:
            informe_fidcs_all = pd.concat([informe_fidcs_all, informe_fidcs])

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

comparar-fundos-br-0.0.7.tar.gz (19.3 kB view hashes)

Uploaded Source

Built Distribution

comparar_fundos_br-0.0.7-py3-none-any.whl (23.4 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page