Skip to main content

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.

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.

informe_diario_fundos_historico = 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 = 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 = 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:
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,
) = 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)
                    ]

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 = get_cdi("2022-01-01", 
                              "2022-07-22", 
                              benchmark = "cdi", 
                              proxy=proxies)

data = 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 = get_ibovespa("2022-01-01", 
                                                  "2022-07-25", 
                                                  proxy=proxies)

data = 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 = melhores_e_piores_fundos(rentabilidade_fundos_total, num=10)

fundos_maior_risco, fundos_menor_risco = 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 = 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 = 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.0.5

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.0.5
File Size Uploaded
comparar-fundos-br-0.0.5.tar.gz 180.0 kB Details

Built distribution (wheel)

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

Total release size: 191.0 kB

Release files / comparar-fundos-br-0.0.5.tar.gz

Download URL comparar-fundos-br-0.0.5.tar.gz
Size 180.0 kB
Tags Source
SHA-256 checksum
How to use checksums
596aa3d8429dfaaeff85ecb80ea88c291478d602a7326f9b9f79d69c94d2fab7
BLAKE2b-256 checksum
How to use checksums
9798bbff2ce90dcef76b2966c1fb4cc266b675a550f573b4e3fc4397b3786671
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.6.0 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.5

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

Download URL comparar_fundos_br-0.0.5-py3-none-any.whl
Size 11.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d1e400c08be7b73dd1d83426177080a23feeaffb7cf26018f82bedb709356569
BLAKE2b-256 checksum
How to use checksums
7714854dc097f4118ed3af51355832e585f9900dac10838e6d9bd35ed3b27444
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.6.0 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.26.0 requests-toolbelt/0.9.1 tqdm/4.62.3 CPython/3.8.5

Release history Release notifications | RSS feed

0.2.5

2 release files

0.2.4

2 release files

0.2.0

2 release files

0.1.3

2 release files

0.0.7

2 release files

0.0.6

2 release files

This release

0.0.5 This release

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