Created
January 23, 2024 20:19
-
-
Save wesleyit/ee60ce102611032e809200a82cd35540 to your computer and use it in GitHub Desktop.
Este notebook apresenta algumas sugestões para análise de ações e índices econômicos utilizando Python.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "cells": [ | |
| { | |
| "cell_type": "markdown", | |
| "id": "df749074-f948-4522-9c6f-0cc796878f82", | |
| "metadata": {}, | |
| "source": [ | |
| "# Carga de Dados\n", | |
| "\n", | |
| "Este notebook é o primeiro do conjunto, e deve ser executado ao menos uma vez antes dos notebooks seguintes para que as bases de dados sejam baixadas localmente para serem analisadas posteriormente.\n", | |
| "\n", | |
| "As principais fontes de dados utilizadas neste estudo são:\n", | |
| "\n", | |
| "#### Fundamentus\n", | |
| "\n", | |
| "O site fundamentus contém dados das empresas listadas na bolsa, mostrando informações como PREÇO/LUCRO, MARGEM, EBTIDA, etc.\n", | |
| "Para baixar os dados, acesse a URL <https://www.fundamentus.com.br/resultado.php?setor=>, copie a tabela e salve no Excel.\n", | |
| "\n", | |
| "#### Banco Central do Brasil\n", | |
| "\n", | |
| "O BCB pode ser utilizado para obter dados de índices de preço, inflação e taxas como IPCA, IGPM e SELIC, índices de qualidade de vida e preços de produtos de consumo, taxas de câmbio, preço do ouro, entre vários outros.\n", | |
| "\n", | |
| "#### Yahoo Finance\n", | |
| "\n", | |
| "Daqui serão baixados os dados de ações da bolsa com suas cotações diárias.\n", | |
| "\n", | |
| "A primeira etapa é a importação das bibliotecas necessárias:" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 1, | |
| "id": "e1fca7e4-30e7-491f-ba87-3d2c93db939e", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "import pandas as pd\n", | |
| "import yfinance as yf\n", | |
| "import matplotlib.pyplot as plt\n", | |
| "import datetime as dt\n", | |
| "import plotly.express as px\n", | |
| "import plotly.graph_objects as go\n", | |
| "import numpy as np\n", | |
| "import ipywidgets as widgets\n", | |
| "import datetime as dt\n", | |
| "\n", | |
| "pd.set_option('display.max_columns', None)\n", | |
| "pd.set_option('display.max_rows', None)\n", | |
| "\n", | |
| "formata_data = lambda x: dt.datetime.strptime(x, '%Y-%m-%d')\n", | |
| "# Exemplo de uso: formata_data('2020-03-01') " | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "cd53eec9-aaae-479d-a50d-24159a50a87d", | |
| "metadata": {}, | |
| "source": [ | |
| "## Parte I - Fundamentus\n", | |
| "\n", | |
| "O site fundamentus disponibiliza as principais métricas para avaliação da saúde das empresas listadas na bolsa.\n", | |
| "Segundo a SUNO (https://www.suno.com.br/artigos/os-indicadores-mais-importantes-em-uma-analise/), alguns dos principais indicadores são:\n", | |
| "\n", | |
| "#### Preço/Lucro (P/L)\n", | |
| "\n", | |
| "É um índice que revela o preço de mercado de uma ação naquele momento (sua cotação), dividido pelo seu lucro por ação nos últimos 12 meses (LPA).\n", | |
| "\n", | |
| "Na teoria, quanto menor o valor deste índice quando comparado a outras ações melhor as expectativas do mercado em relação à mesma.\n", | |
| "\n", | |
| "Porém, se este índice estiver muito baixo (geralmente menor que 3x), isto poderia indicar risco ao investidor, visto que tal empresa poderia representar baixa expectativa de manter esse lucro no futuro. Este índice pode ser conhecido também como múltiplo de lucros ou P/LPA, e no inglês, P/E Ratio (Price-Earnings Ratio).\n", | |
| "\n", | |
| "#### Dividend Yield (DY)\n", | |
| "\n", | |
| "Soma-se os dividendos e os Juros Sobre Capital Próprio dos últimos 12 meses e depois divide-se esse valor pelo preço do papel naquele momento. Normalmente é usado para medir a rentabilidade dos dividendos de uma empresa em relação ao preço de suas ações. \n", | |
| "\n", | |
| "#### P/VPA\n", | |
| "\n", | |
| "Em inglês P/BV (Price per Book Value), este indicador relaciona o preço da ação ao valor patrimonial proporcional a ela. Indica quanto os acionistas aceitam pagar pelo patrimônio líquido da companhia. É obtido através da divisão entre o preço da ação e Valor Patrimonial por Ação (VPA).\n", | |
| "\n", | |
| "Em épocas de crise, a utilização do múltiplo também passa a ser um importante métrica de avaliação, pois não é raro ver ações negociando abaixo do ativo circulante líquido nesses momentos.\n", | |
| "\n", | |
| "Na teoria, P/VPA = 1 pode significar que a ação está sendo negociada pelo equivalente a seu patrimônio líquido, P/VPA < 1 o mercado está pagando pelas ações da empresa um preço inferior ao do seu patrimônio líquido e P/VPA > 1 que o mercado está aceitando pagar mais pela ação do que todo o patrimônio líquido da empresa.\n", | |
| "\n", | |
| "Não necessariamente, pagar acima do patrimônio é um mal negócio. Ações como Ambev e Weg sempre negociaram acima do patrimônio, e isso não impediu uma forte valorização ao longo do tempo. Empresas com alta rentabilidade geralmente negociam com prêmio em relação ao seu patrimônio.\n", | |
| "\n", | |
| "#### EV/EBITDA\n", | |
| "\n", | |
| "O Ebitda é a sigla em inglês para lucro antes dos juros, impostos, depreciação e amortização. Ela é uma medida simplificada da geração de caixa da companhia.\n", | |
| "\n", | |
| "Já o EV discorre do inglês “enterprise value”, que compreende o valor de mercado da companhia (cotação atual da ação multiplicado pelo total de ações) somado com a dívida líquida (dívida bruta menos o caixa).\n", | |
| "\n", | |
| "Quanto menor o múltiplo EV/Ebtida, mais atraente se encontra a ação. Mas essa comparação normalmente faz mais sentido quando feita entre empresas do mesmo setor devido às peculiaridades existentes nos diferentes ramos de atuação das companhias.\n", | |
| "\n", | |
| "#### Return On Equity (ROE)\n", | |
| "\n", | |
| "O ROE, Retorno sobre Patrimônio Líquido ou Return on Equity (em inglês), é calculado através da divisão do Lucro Líquido na DRE (Demonstração do Resultado do Exercício) pelo Patrimônio Líquido, declarado no Balanço Patrimonial do período contábil imediatamente anterior ao atual, de uma determinada empresa.\n", | |
| "\n", | |
| "Este indicador financeiro serve para medir o quanto que a empresa gera de lucro para cada real aplicado pelo acionista na empresa.\n", | |
| "\n", | |
| "Isto é, a capacidade da empresa de agregar valor (gerar retorno) para o capital próprio investido.\n", | |
| "\n", | |
| "Nós entendemos como regra de bolso que o ROE de uma empresa sólida apresenta valor superior a 10%, mas preferencialmente gostamos de negócios que apresentem ROE acima de 15%. Todos os negócios que indicamos em nossa carteira de dividendos possuem esta característica.\n", | |
| "\n", | |
| "#### Dívida Líquida (DL)\n", | |
| "\n", | |
| "É a Dívida Bruta descontada das disponibilidades e aplicações da empresa. Em outras palavras, é a Dívida Total da companhia menos o caixa (do Balanço).\n", | |
| "\n", | |
| "#### Dívida Líquida sobre Patrimônio Liquido (DL/PL)\n", | |
| "\n", | |
| "Este índice é definido como Dívida Líquida sobre Patrimônio Líquido e, resumidamente, serve para medir o quanto do patrimônio líquido da empresa equivale a sua dívida líquida.\n", | |
| "\n", | |
| "Ou seja, ele indica o equivalente que uma empresa possui do seu patrimônio em dívidas e, teoricamente, quanto menor este indicador melhor.\n", | |
| "\n", | |
| "Por exemplo, um índice DL/PL de 0,5 para determinada empresa significa que a mesma possui 50% do patrimônio em dívidas.\n", | |
| "\n", | |
| "É importante que esse indicador esteja abaixo de 100% e de preferência seja menor que 50%.\n", | |
| "\n", | |
| "Temos como “regras de bolso” que acima desses patamares, em geral, o endividamento começa a pesar sobre as operações da empresa, no entanto, podem existir exceções.\n", | |
| "\n", | |
| "#### Margem Bruta\n", | |
| "\n", | |
| "Representa o Lucro Bruto divido pela Receita Líquida e indica a porcentagem de cada R$1,00 de venda que sobrou após o custo dos produtos e/ou serviços vendidos. Este é um indicador que mede a rentabilidade após os custos, mas antes das despesas (administrativa e vendas). Logo, a Margem Bruta fornece assim a indicação mais direta de quanto a empresa está ganhando de resultado imediato da sua atividade.\n", | |
| "\n", | |
| "#### Margem Líquida\n", | |
| "\n", | |
| "Basicamente é o Lucro Líquido dividido pela Receita Líquida (ambos indicadores são observados na DRE). Em outras palavras, mede a fração de cada real de vendas que resultou em lucro líquido.\n", | |
| "\n", | |
| "A importância de se procurar negócios com margens elevadas se destaca em tempos de crise. Negócios com margens altas geralmente operam com folga de lucro, e se ocorre uma crise e a empresa perde vendas, ela dificilmente apresentará prejuízos mesmo com menores vendas. Negócios com margens apertadas, são os primeiros a sofrer prejuízo quando o ambiente econômico se deteriora.\n", | |
| "\n", | |
| "Para nós, uma “regra de bolso” é que esse indicador seja superior a 10%, no entanto, deve-se levar em consideração o negócio que a empresa está inserido." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 2, | |
| "id": "7bf8157f-68ce-4156-b248-2a694302a503", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>Papel</th>\n", | |
| " <th>Cotação</th>\n", | |
| " <th>P/L</th>\n", | |
| " <th>P/VP</th>\n", | |
| " <th>PSR</th>\n", | |
| " <th>Div.Yield</th>\n", | |
| " <th>P/Ativo</th>\n", | |
| " <th>P/Cap.Giro</th>\n", | |
| " <th>P/EBIT</th>\n", | |
| " <th>P/Ativ Circ.Liq</th>\n", | |
| " <th>EV/EBIT</th>\n", | |
| " <th>EV/EBITDA</th>\n", | |
| " <th>Mrg Ebit</th>\n", | |
| " <th>Mrg. Líq.</th>\n", | |
| " <th>Liq. Corr.</th>\n", | |
| " <th>ROIC</th>\n", | |
| " <th>ROE</th>\n", | |
| " <th>Liq.2meses</th>\n", | |
| " <th>Patrim. Líq</th>\n", | |
| " <th>Dív.Brut/ Patrim.</th>\n", | |
| " <th>Cresc. Rec.5a</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>0</th>\n", | |
| " <td>AALR3</td>\n", | |
| " <td>8.35</td>\n", | |
| " <td>-3.75</td>\n", | |
| " <td>0.97</td>\n", | |
| " <td>0.856</td>\n", | |
| " <td>0.0000</td>\n", | |
| " <td>0.359</td>\n", | |
| " <td>-4.42</td>\n", | |
| " <td>46.29</td>\n", | |
| " <td>-0.91</td>\n", | |
| " <td>81.76</td>\n", | |
| " <td>12.62</td>\n", | |
| " <td>0.0185</td>\n", | |
| " <td>-0.2210</td>\n", | |
| " <td>0.74</td>\n", | |
| " <td>0.0091</td>\n", | |
| " <td>-0.2592</td>\n", | |
| " <td>1506460.0</td>\n", | |
| " <td>1015110000</td>\n", | |
| " <td>1.04</td>\n", | |
| " <td>0.0354</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>1</th>\n", | |
| " <td>ABCB3</td>\n", | |
| " <td>0.00</td>\n", | |
| " <td>0.00</td>\n", | |
| " <td>0.00</td>\n", | |
| " <td>0.000</td>\n", | |
| " <td>0.0000</td>\n", | |
| " <td>0.000</td>\n", | |
| " <td>0.00</td>\n", | |
| " <td>0.00</td>\n", | |
| " <td>0.00</td>\n", | |
| " <td>0.00</td>\n", | |
| " <td>0.00</td>\n", | |
| " <td>0.0000</td>\n", | |
| " <td>0.0000</td>\n", | |
| " <td>0.00</td>\n", | |
| " <td>0.0000</td>\n", | |
| " <td>0.1429</td>\n", | |
| " <td>0.0</td>\n", | |
| " <td>5721810000</td>\n", | |
| " <td>0.00</td>\n", | |
| " <td>0.7094</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>2</th>\n", | |
| " <td>ABCB4</td>\n", | |
| " <td>23.06</td>\n", | |
| " <td>6.68</td>\n", | |
| " <td>0.95</td>\n", | |
| " <td>0.000</td>\n", | |
| " <td>0.0653</td>\n", | |
| " <td>0.000</td>\n", | |
| " <td>0.00</td>\n", | |
| " <td>0.00</td>\n", | |
| " <td>0.00</td>\n", | |
| " <td>0.00</td>\n", | |
| " <td>0.00</td>\n", | |
| " <td>0.0000</td>\n", | |
| " <td>0.0000</td>\n", | |
| " <td>0.00</td>\n", | |
| " <td>0.0000</td>\n", | |
| " <td>0.1429</td>\n", | |
| " <td>13947200.0</td>\n", | |
| " <td>5721810000</td>\n", | |
| " <td>0.00</td>\n", | |
| " <td>0.7094</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>3</th>\n", | |
| " <td>ABEV3</td>\n", | |
| " <td>13.36</td>\n", | |
| " <td>13.96</td>\n", | |
| " <td>2.33</td>\n", | |
| " <td>2.553</td>\n", | |
| " <td>0.0547</td>\n", | |
| " <td>1.526</td>\n", | |
| " <td>56.78</td>\n", | |
| " <td>12.38</td>\n", | |
| " <td>-23.92</td>\n", | |
| " <td>11.56</td>\n", | |
| " <td>8.51</td>\n", | |
| " <td>0.2063</td>\n", | |
| " <td>0.1882</td>\n", | |
| " <td>1.11</td>\n", | |
| " <td>0.1650</td>\n", | |
| " <td>0.1671</td>\n", | |
| " <td>302057000.0</td>\n", | |
| " <td>90254900000</td>\n", | |
| " <td>0.04</td>\n", | |
| " <td>0.1323</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>4</th>\n", | |
| " <td>ABYA3</td>\n", | |
| " <td>4.91</td>\n", | |
| " <td>-214.80</td>\n", | |
| " <td>1.76</td>\n", | |
| " <td>2.055</td>\n", | |
| " <td>0.0000</td>\n", | |
| " <td>0.527</td>\n", | |
| " <td>1.98</td>\n", | |
| " <td>19.96</td>\n", | |
| " <td>-2.75</td>\n", | |
| " <td>33.67</td>\n", | |
| " <td>33.67</td>\n", | |
| " <td>0.1029</td>\n", | |
| " <td>-0.0096</td>\n", | |
| " <td>2.09</td>\n", | |
| " <td>0.0278</td>\n", | |
| " <td>-0.0082</td>\n", | |
| " <td>0.0</td>\n", | |
| " <td>292060000</td>\n", | |
| " <td>1.31</td>\n", | |
| " <td>0.1641</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " Papel Cotação P/L P/VP PSR Div.Yield P/Ativo P/Cap.Giro \\\n", | |
| "0 AALR3 8.35 -3.75 0.97 0.856 0.0000 0.359 -4.42 \n", | |
| "1 ABCB3 0.00 0.00 0.00 0.000 0.0000 0.000 0.00 \n", | |
| "2 ABCB4 23.06 6.68 0.95 0.000 0.0653 0.000 0.00 \n", | |
| "3 ABEV3 13.36 13.96 2.33 2.553 0.0547 1.526 56.78 \n", | |
| "4 ABYA3 4.91 -214.80 1.76 2.055 0.0000 0.527 1.98 \n", | |
| "\n", | |
| " P/EBIT P/Ativ Circ.Liq EV/EBIT EV/EBITDA Mrg Ebit Mrg. Líq. \\\n", | |
| "0 46.29 -0.91 81.76 12.62 0.0185 -0.2210 \n", | |
| "1 0.00 0.00 0.00 0.00 0.0000 0.0000 \n", | |
| "2 0.00 0.00 0.00 0.00 0.0000 0.0000 \n", | |
| "3 12.38 -23.92 11.56 8.51 0.2063 0.1882 \n", | |
| "4 19.96 -2.75 33.67 33.67 0.1029 -0.0096 \n", | |
| "\n", | |
| " Liq. Corr. ROIC ROE Liq.2meses Patrim. Líq Dív.Brut/ Patrim. \\\n", | |
| "0 0.74 0.0091 -0.2592 1506460.0 1015110000 1.04 \n", | |
| "1 0.00 0.0000 0.1429 0.0 5721810000 0.00 \n", | |
| "2 0.00 0.0000 0.1429 13947200.0 5721810000 0.00 \n", | |
| "3 1.11 0.1650 0.1671 302057000.0 90254900000 0.04 \n", | |
| "4 2.09 0.0278 -0.0082 0.0 292060000 1.31 \n", | |
| "\n", | |
| " Cresc. Rec.5a \n", | |
| "0 0.0354 \n", | |
| "1 0.7094 \n", | |
| "2 0.7094 \n", | |
| "3 0.1323 \n", | |
| "4 0.1641 " | |
| ] | |
| }, | |
| "execution_count": 2, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "fundamentus = pd.read_excel('./Fundamentus_2024_01_23.xlsx')\n", | |
| "fundamentus.head()" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 3, | |
| "id": "4d181e3b-deee-46ba-a3af-81c6a8cf3b51", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/plain": [ | |
| "Index(['Papel', 'Cotação', 'P/L', 'P/VP', 'PSR', 'Div.Yield', 'P/Ativo',\n", | |
| " 'P/Cap.Giro', 'P/EBIT', 'P/Ativ Circ.Liq', 'EV/EBIT', 'EV/EBITDA',\n", | |
| " 'Mrg Ebit', 'Mrg. Líq.', 'Liq. Corr.', 'ROIC', 'ROE', 'Liq.2meses',\n", | |
| " 'Patrim. Líq', 'Dív.Brut/ Patrim.', 'Cresc. Rec.5a'],\n", | |
| " dtype='object')" | |
| ] | |
| }, | |
| "execution_count": 3, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "fundamentus.columns" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 4, | |
| "id": "dac0da61-b267-4af6-a36e-2e2428e4bcf8", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>Papel</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>count</th>\n", | |
| " <td>986</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>unique</th>\n", | |
| " <td>983</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>top</th>\n", | |
| " <td>MRSA5B</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>freq</th>\n", | |
| " <td>2</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " Papel\n", | |
| "count 986\n", | |
| "unique 983\n", | |
| "top MRSA5B\n", | |
| "freq 2" | |
| ] | |
| }, | |
| "execution_count": 4, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "fundamentus.describe(include='object')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 5, | |
| "id": "1f639916-faef-4a18-a32b-4f91d6d0cd0b", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| "<div>\n", | |
| "<style scoped>\n", | |
| " .dataframe tbody tr th:only-of-type {\n", | |
| " vertical-align: middle;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe tbody tr th {\n", | |
| " vertical-align: top;\n", | |
| " }\n", | |
| "\n", | |
| " .dataframe thead th {\n", | |
| " text-align: right;\n", | |
| " }\n", | |
| "</style>\n", | |
| "<table border=\"1\" class=\"dataframe\">\n", | |
| " <thead>\n", | |
| " <tr style=\"text-align: right;\">\n", | |
| " <th></th>\n", | |
| " <th>Cotação</th>\n", | |
| " <th>P/L</th>\n", | |
| " <th>P/VP</th>\n", | |
| " <th>PSR</th>\n", | |
| " <th>Div.Yield</th>\n", | |
| " <th>P/Ativo</th>\n", | |
| " <th>P/Cap.Giro</th>\n", | |
| " <th>P/EBIT</th>\n", | |
| " <th>P/Ativ Circ.Liq</th>\n", | |
| " <th>EV/EBIT</th>\n", | |
| " <th>EV/EBITDA</th>\n", | |
| " <th>Mrg Ebit</th>\n", | |
| " <th>Mrg. Líq.</th>\n", | |
| " <th>Liq. Corr.</th>\n", | |
| " <th>ROIC</th>\n", | |
| " <th>ROE</th>\n", | |
| " <th>Liq.2meses</th>\n", | |
| " <th>Patrim. Líq</th>\n", | |
| " <th>Dív.Brut/ Patrim.</th>\n", | |
| " <th>Cresc. Rec.5a</th>\n", | |
| " </tr>\n", | |
| " </thead>\n", | |
| " <tbody>\n", | |
| " <tr>\n", | |
| " <th>count</th>\n", | |
| " <td>986.000000</td>\n", | |
| " <td>986.000000</td>\n", | |
| " <td>986.000000</td>\n", | |
| " <td>986.000000</td>\n", | |
| " <td>986.000000</td>\n", | |
| " <td>986.000000</td>\n", | |
| " <td>986.000000</td>\n", | |
| " <td>986.000000</td>\n", | |
| " <td>986.000000</td>\n", | |
| " <td>986.000000</td>\n", | |
| " <td>986.000000</td>\n", | |
| " <td>986.000000</td>\n", | |
| " <td>986.000000</td>\n", | |
| " <td>986.000000</td>\n", | |
| " <td>986.000000</td>\n", | |
| " <td>986.000000</td>\n", | |
| " <td>9.860000e+02</td>\n", | |
| " <td>9.860000e+02</td>\n", | |
| " <td>986.000000</td>\n", | |
| " <td>986.000000</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>mean</th>\n", | |
| " <td>59.746105</td>\n", | |
| " <td>2.283043</td>\n", | |
| " <td>1475.119970</td>\n", | |
| " <td>16.524474</td>\n", | |
| " <td>0.344660</td>\n", | |
| " <td>1.968330</td>\n", | |
| " <td>-43.725294</td>\n", | |
| " <td>-7.766369</td>\n", | |
| " <td>0.853327</td>\n", | |
| " <td>-5.741187</td>\n", | |
| " <td>-6.733611</td>\n", | |
| " <td>-3.734327</td>\n", | |
| " <td>-16.065346</td>\n", | |
| " <td>1.833357</td>\n", | |
| " <td>0.004001</td>\n", | |
| " <td>27.239592</td>\n", | |
| " <td>1.843271e+07</td>\n", | |
| " <td>6.227386e+09</td>\n", | |
| " <td>43.696815</td>\n", | |
| " <td>0.244899</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>std</th>\n", | |
| " <td>479.244532</td>\n", | |
| " <td>152.386779</td>\n", | |
| " <td>31901.547412</td>\n", | |
| " <td>155.624818</td>\n", | |
| " <td>8.508727</td>\n", | |
| " <td>23.899007</td>\n", | |
| " <td>1272.153628</td>\n", | |
| " <td>334.884516</td>\n", | |
| " <td>55.079351</td>\n", | |
| " <td>380.720168</td>\n", | |
| " <td>276.602247</td>\n", | |
| " <td>34.951511</td>\n", | |
| " <td>260.101807</td>\n", | |
| " <td>4.340076</td>\n", | |
| " <td>1.140235</td>\n", | |
| " <td>613.701238</td>\n", | |
| " <td>8.724058e+07</td>\n", | |
| " <td>2.517854e+10</td>\n", | |
| " <td>955.508043</td>\n", | |
| " <td>2.876201</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>min</th>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>-3584.820000</td>\n", | |
| " <td>-359.150000</td>\n", | |
| " <td>-20.054000</td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>-34462.500000</td>\n", | |
| " <td>-7214.410000</td>\n", | |
| " <td>-748.300000</td>\n", | |
| " <td>-7466.350000</td>\n", | |
| " <td>-7466.350000</td>\n", | |
| " <td>-638.582000</td>\n", | |
| " <td>-5646.250000</td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>-22.599400</td>\n", | |
| " <td>-119.207000</td>\n", | |
| " <td>0.000000e+00</td>\n", | |
| " <td>-2.682290e+10</td>\n", | |
| " <td>-49.850000</td>\n", | |
| " <td>-0.870300</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>25%</th>\n", | |
| " <td>4.385000</td>\n", | |
| " <td>-0.260000</td>\n", | |
| " <td>0.202500</td>\n", | |
| " <td>0.038500</td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>0.090000</td>\n", | |
| " <td>-0.020000</td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>-1.450000</td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>-0.010600</td>\n", | |
| " <td>0.462500</td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>0.000000e+00</td>\n", | |
| " <td>1.353175e+08</td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>0.004925</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>50%</th>\n", | |
| " <td>11.705000</td>\n", | |
| " <td>4.715000</td>\n", | |
| " <td>1.095000</td>\n", | |
| " <td>0.580000</td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>0.379500</td>\n", | |
| " <td>0.720000</td>\n", | |
| " <td>2.550000</td>\n", | |
| " <td>-0.115000</td>\n", | |
| " <td>4.840000</td>\n", | |
| " <td>4.320000</td>\n", | |
| " <td>0.064600</td>\n", | |
| " <td>0.022450</td>\n", | |
| " <td>1.155000</td>\n", | |
| " <td>0.056400</td>\n", | |
| " <td>0.089250</td>\n", | |
| " <td>0.000000e+00</td>\n", | |
| " <td>1.081540e+09</td>\n", | |
| " <td>0.260000</td>\n", | |
| " <td>0.109400</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>75%</th>\n", | |
| " <td>27.937500</td>\n", | |
| " <td>12.747500</td>\n", | |
| " <td>2.070000</td>\n", | |
| " <td>1.601000</td>\n", | |
| " <td>0.019700</td>\n", | |
| " <td>0.853500</td>\n", | |
| " <td>3.997500</td>\n", | |
| " <td>8.055000</td>\n", | |
| " <td>0.000000</td>\n", | |
| " <td>10.415000</td>\n", | |
| " <td>8.712500</td>\n", | |
| " <td>0.194400</td>\n", | |
| " <td>0.133350</td>\n", | |
| " <td>1.997500</td>\n", | |
| " <td>0.134100</td>\n", | |
| " <td>0.201100</td>\n", | |
| " <td>6.528690e+05</td>\n", | |
| " <td>4.089068e+09</td>\n", | |
| " <td>1.057500</td>\n", | |
| " <td>0.206700</td>\n", | |
| " </tr>\n", | |
| " <tr>\n", | |
| " <th>max</th>\n", | |
| " <td>10081.900000</td>\n", | |
| " <td>1466.610000</td>\n", | |
| " <td>723708.000000</td>\n", | |
| " <td>2659.020000</td>\n", | |
| " <td>264.673000</td>\n", | |
| " <td>725.908000</td>\n", | |
| " <td>4884.240000</td>\n", | |
| " <td>5340.370000</td>\n", | |
| " <td>1430.350000</td>\n", | |
| " <td>5802.460000</td>\n", | |
| " <td>1657.070000</td>\n", | |
| " <td>16.562700</td>\n", | |
| " <td>62.535700</td>\n", | |
| " <td>66.470000</td>\n", | |
| " <td>5.230100</td>\n", | |
| " <td>13632.000000</td>\n", | |
| " <td>1.572610e+09</td>\n", | |
| " <td>3.860070e+11</td>\n", | |
| " <td>21227.000000</td>\n", | |
| " <td>63.540700</td>\n", | |
| " </tr>\n", | |
| " </tbody>\n", | |
| "</table>\n", | |
| "</div>" | |
| ], | |
| "text/plain": [ | |
| " Cotação P/L P/VP PSR Div.Yield \\\n", | |
| "count 986.000000 986.000000 986.000000 986.000000 986.000000 \n", | |
| "mean 59.746105 2.283043 1475.119970 16.524474 0.344660 \n", | |
| "std 479.244532 152.386779 31901.547412 155.624818 8.508727 \n", | |
| "min 0.000000 -3584.820000 -359.150000 -20.054000 0.000000 \n", | |
| "25% 4.385000 -0.260000 0.202500 0.038500 0.000000 \n", | |
| "50% 11.705000 4.715000 1.095000 0.580000 0.000000 \n", | |
| "75% 27.937500 12.747500 2.070000 1.601000 0.019700 \n", | |
| "max 10081.900000 1466.610000 723708.000000 2659.020000 264.673000 \n", | |
| "\n", | |
| " P/Ativo P/Cap.Giro P/EBIT P/Ativ Circ.Liq EV/EBIT \\\n", | |
| "count 986.000000 986.000000 986.000000 986.000000 986.000000 \n", | |
| "mean 1.968330 -43.725294 -7.766369 0.853327 -5.741187 \n", | |
| "std 23.899007 1272.153628 334.884516 55.079351 380.720168 \n", | |
| "min 0.000000 -34462.500000 -7214.410000 -748.300000 -7466.350000 \n", | |
| "25% 0.090000 -0.020000 0.000000 -1.450000 0.000000 \n", | |
| "50% 0.379500 0.720000 2.550000 -0.115000 4.840000 \n", | |
| "75% 0.853500 3.997500 8.055000 0.000000 10.415000 \n", | |
| "max 725.908000 4884.240000 5340.370000 1430.350000 5802.460000 \n", | |
| "\n", | |
| " EV/EBITDA Mrg Ebit Mrg. Líq. Liq. Corr. ROIC \\\n", | |
| "count 986.000000 986.000000 986.000000 986.000000 986.000000 \n", | |
| "mean -6.733611 -3.734327 -16.065346 1.833357 0.004001 \n", | |
| "std 276.602247 34.951511 260.101807 4.340076 1.140235 \n", | |
| "min -7466.350000 -638.582000 -5646.250000 0.000000 -22.599400 \n", | |
| "25% 0.000000 0.000000 -0.010600 0.462500 0.000000 \n", | |
| "50% 4.320000 0.064600 0.022450 1.155000 0.056400 \n", | |
| "75% 8.712500 0.194400 0.133350 1.997500 0.134100 \n", | |
| "max 1657.070000 16.562700 62.535700 66.470000 5.230100 \n", | |
| "\n", | |
| " ROE Liq.2meses Patrim. Líq Dív.Brut/ Patrim. \\\n", | |
| "count 986.000000 9.860000e+02 9.860000e+02 986.000000 \n", | |
| "mean 27.239592 1.843271e+07 6.227386e+09 43.696815 \n", | |
| "std 613.701238 8.724058e+07 2.517854e+10 955.508043 \n", | |
| "min -119.207000 0.000000e+00 -2.682290e+10 -49.850000 \n", | |
| "25% 0.000000 0.000000e+00 1.353175e+08 0.000000 \n", | |
| "50% 0.089250 0.000000e+00 1.081540e+09 0.260000 \n", | |
| "75% 0.201100 6.528690e+05 4.089068e+09 1.057500 \n", | |
| "max 13632.000000 1.572610e+09 3.860070e+11 21227.000000 \n", | |
| "\n", | |
| " Cresc. Rec.5a \n", | |
| "count 986.000000 \n", | |
| "mean 0.244899 \n", | |
| "std 2.876201 \n", | |
| "min -0.870300 \n", | |
| "25% 0.004925 \n", | |
| "50% 0.109400 \n", | |
| "75% 0.206700 \n", | |
| "max 63.540700 " | |
| ] | |
| }, | |
| "execution_count": 5, | |
| "metadata": {}, | |
| "output_type": "execute_result" | |
| } | |
| ], | |
| "source": [ | |
| "fundamentus.describe(include='number')" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "937d04b2-5f59-4664-be90-96589fb3cb69", | |
| "metadata": {}, | |
| "source": [ | |
| "#### Filtros\n", | |
| "\n", | |
| "Um dos objetivos deste estudo é filtrar as empresas listadas pensando em analisar apenas os papéis que estejam em conformidade com nossos valores esperados para margem, dívida, distribuição de dividendos, entre outras características.\n", | |
| "\n", | |
| "**Parâmetros requeridos:**\n", | |
| "\n", | |
| "- Liq.2meses (queremos empresas fáceis de negociar);\n", | |
| "- Div.Yield (o objetivo do estudo é montar uma carteira de dividendos);\n", | |
| "- Cresc. Rec.5a (a empresa precisa estar em ascenção, não em queda);\n", | |
| "- Mrg. Líq. (a empresa consegue fazer dinheiro eficientemente);\n", | |
| "- ROE (Quanto a empresa tem de previsibilidade de lucro quando está perto do P/VP);\n", | |
| "- PL (Quantos anos vai demorar para você ter o retorno do dinheiro);\n", | |
| "- PVP (Quando a empresa tem patrimônio)\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 6, | |
| "id": "c9f4559f-1f44-4a06-a18e-bd26d39595de", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "application/vnd.jupyter.widget-view+json": { | |
| "model_id": "1223bd5cf9ac4af8b4e4f470a19aafbe", | |
| "version_major": 2, | |
| "version_minor": 0 | |
| }, | |
| "text/plain": [ | |
| "interactive(children=(IntSlider(value=1000000, description='liquidez', max=500000000, step=100000), FloatSlide…" | |
| ] | |
| }, | |
| "metadata": {}, | |
| "output_type": "display_data" | |
| } | |
| ], | |
| "source": [ | |
| "@widgets.interact(\n", | |
| " liquidez=widgets.IntSlider(min=0, max=500_000_000, step=100_000, value=1_000_000),\n", | |
| " dy=widgets.FloatSlider(min=0.0, max=0.50, step=0.01, value=0.06),\n", | |
| " cagr=widgets.FloatSlider(min=0.0, max=1.0, step=0.01, value=0.05),\n", | |
| " margem_liq=widgets.FloatSlider(min=0.0, max=1.0, step=0.01, value=0.10),\n", | |
| " roe=widgets.FloatSlider(min=0.0, max=1.0, step=0.01, value=0.10),\n", | |
| " pl=widgets.FloatSlider(min=0, max=50, step=0.5, value=15),\n", | |
| " pvp=widgets.FloatSlider(min=0, max=10, step=0.5, value=5),\n", | |
| ")\n", | |
| "def pesquisa_fundamentus(liquidez, dy, cagr, margem_liq, roe, pl, pvp):\n", | |
| " return fundamentus[\n", | |
| " (fundamentus['Liq.2meses'] > liquidez) &\n", | |
| " (fundamentus['Div.Yield'] > dy) &\n", | |
| " (fundamentus['Cresc. Rec.5a'] > cagr) &\n", | |
| " (fundamentus['Mrg. Líq.'] > margem_liq) &\n", | |
| " (fundamentus['ROE'] > roe) &\n", | |
| " (fundamentus['P/L'] < pl) &\n", | |
| " (fundamentus['P/VP'] < pvp) \n", | |
| " ]\n" | |
| ] | |
| }, | |
| { | |
| "cell_type": "markdown", | |
| "id": "3d29b6b4-4181-434b-9256-1220edcd0e9e", | |
| "metadata": {}, | |
| "source": [ | |
| "---\n", | |
| "## Parte II - Banco Central do Brasil\n", | |
| "\n", | |
| "O Banco Central do Brasil disponibiliza uma API gratuíta para consulta de dados de séries temporais relacionadas à economia brasileira.\n", | |
| "A API está disponível em <https://www3.bcb.gov.br/sgspub/localizarseries/localizarSeries.do> e permite download dos dados em CSV, JSON, entre outros formatos." | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 7, | |
| "id": "fd0b1a76-c83e-4bd5-af76-c5d280f05cc0", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "def consulta_bcb(metrica, start='01/01/2019', end='01/01/2024'):\n", | |
| " '''\n", | |
| " Algumas métricas úteis e seus códigos no BCB:\n", | |
| " \n", | |
| " 1 Exchange rate - Free - United States dollar (sale) - 1\n", | |
| " 11 Interest rate - Selic\n", | |
| " 12 Interest rate - CDI\n", | |
| " 188 National Consumer Price Index (INPC)\n", | |
| " 189 General Price Index-Market (IGP-M)\n", | |
| " 194 Cost of Living Index (ICV-Dieese)\n", | |
| " 432 Interest rate - Selic target\n", | |
| " 433 Broad National Consumer Price Index (IPCA)\n", | |
| " 1207 GDP at current prices in R$ (PIB)\n", | |
| " 7493 Staple basket - São Paulo\n", | |
| " '''\n", | |
| " \n", | |
| " endpoint = 'http://api.bcb.gov.br'\n", | |
| " path = f'dados/serie/bcdata.sgs.{metrica}/dados'\n", | |
| " formato = 'csv'\n", | |
| " url = f'{endpoint}/{path}?formato={formato}&dataInicial={start}&dataFinal={end}'\n", | |
| " try:\n", | |
| " df = pd.read_csv(url, sep=';', decimal=',', parse_dates=['data'], dayfirst=True)\n", | |
| " except:\n", | |
| " df = pd.read_csv(url, sep=';', decimal=',')\n", | |
| " df['valor_normalizado'] = df['valor'] / df['valor'].iloc[0]\n", | |
| " return df" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 8, | |
| "id": "95ecee2c-ec0b-42e5-84ff-6d0288dd0d5f", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "selic = consulta_bcb(11)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 9, | |
| "id": "b5f0cc1a-b450-4806-aeea-6b9b07de2837", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "cdi = consulta_bcb(12)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 10, | |
| "id": "5861e31a-a8c8-475f-8459-c52256309d61", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "ipca = consulta_bcb(433)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 11, | |
| "id": "b0e20708-c7e3-4ffb-bd24-1ba81b0d689a", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "igpm = consulta_bcb(189)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 12, | |
| "id": "1739f8c6-3bc6-46f6-85a6-0f7e5215eaaa", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "dolar = consulta_bcb(1)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 13, | |
| "id": "d5851d4a-a741-491d-850b-22306ad022a8", | |
| "metadata": {}, | |
| "outputs": [], | |
| "source": [ | |
| "tr = consulta_bcb(226)" | |
| ] | |
| }, | |
| { | |
| "cell_type": "code", | |
| "execution_count": 14, | |
| "id": "b5e89fb5-1dbe-4ca6-9299-15b3d214f939", | |
| "metadata": {}, | |
| "outputs": [ | |
| { | |
| "data": { | |
| "text/html": [ | |
| " <script type=\"text/javascript\">\n", | |
| " window.PlotlyConfig = {MathJaxConfig: 'local'};\n", | |
| " if (window.MathJax && window.MathJax.Hub && window.MathJax.Hub.Config) {window.MathJax.Hub.Config({SVG: {font: \"STIX-Web\"}});}\n", | |
| " if (typeof require !== 'undefined') {\n", | |
| " require.undef(\"plotly\");\n", | |
| " define('plotly', function(require, exports, module) {\n", | |
| " /**\n", | |
| "* plotly.js v2.27.0\n", | |
| "* Copyright 2012-2023, Plotly, Inc.\n", | |
| "* All rights reserved.\n", | |
| "* Licensed under the MIT license\n", | |
| "*/\n", | |
| "/*! For license information please see plotly.min.js.LICENSE.txt */\n", |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment