Skip to main content

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

Metadata

Release files for comparar_fundos_br 0.1.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for comparar_fundos_br 0.1.3
File Size Uploaded
comparar_fundos_br-0.1.3.tar.gz 13.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for comparar_fundos_br 0.1.3
File Interpreter ABI Platform
comparar_fundos_br-0.1.3-py3-none-any.whl Python 3 none any Details

Total release size: 26.2 kB

Release files / comparar_fundos_br-0.1.3.tar.gz

Download URL comparar_fundos_br-0.1.3.tar.gz
Size 13.6 kB
Tags Source
SHA-256 checksum
How to use checksums
a4c3aa696848c3aad504385f39219dbd9141f6fee0eb59120242247e98fecee1
BLAKE2b-256 checksum
How to use checksums
4f54c906d3a25e3cfbbc4ec13b8da6c48f918b66e33ddd413eb233a34a312c44
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.8

Release files / comparar_fundos_br-0.1.3-py3-none-any.whl

Download URL comparar_fundos_br-0.1.3-py3-none-any.whl
Size 12.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e739a45e813687edd5ab246d039c15f100dd007349f8e359ef967716e52047e1
BLAKE2b-256 checksum
How to use checksums
fc044dcd560be12b6131005cc79a2b9bf19edb8492d819acf51c3dfaf0362f6d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.12.8

Release history Release notifications | RSS feed

0.2.5

2 release files

0.2.4

2 release files

0.2.0

2 release files

This release

0.1.3 This release

2 release files

0.0.7

2 release files

0.0.6

2 release files

0.0.5

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page