@@ -0,0 +1,721 @@
{
"cells": [
{
"metadata": {},
"cell_type": "markdown",
"source": [
"# Estratégia Magic Formula de Joel Greenblatt\n",
"\n",
"A Magic Formula é uma estratégia de investimento que classifica ações com base em dois critérios principais:\n",
"\n",
"- **Qualidade**: medida pelo Retorno sobre o Capital Investido (ROIC)\n",
"- **Valor**: medida pelo Rendimento de Lucros (Earnings Yield)"
],
"id": "f0f9bbafd34ec9e"
},
{
"cell_type": "code",
"id": "initial_id",
"metadata": {
"collapsed": true,
"ExecuteTime": {
"end_time": "2025-04-13T20:27:04.058395Z",
"start_time": "2025-04-13T20:26:52.206786Z"
}
},
"source": "!pip install pandas numpy requests beautifulsoup4",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"/usr/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8): No such file or directory\r\n",
"Collecting pandas\r\n",
" Using cached pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (89 kB)\r\n",
"Collecting numpy\r\n",
" Using cached numpy-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (62 kB)\r\n",
"Collecting yfinance\r\n",
" Using cached yfinance-0.2.55-py2.py3-none-any.whl.metadata (5.8 kB)\r\n",
"Requirement already satisfied: requests in /home/geron/Projects/python-for-finances/.venv/lib/python3.13/site-packages (2.32.3)\r\n",
"Requirement already satisfied: beautifulsoup4 in /home/geron/Projects/python-for-finances/.venv/lib/python3.13/site-packages (4.13.3)\r\n",
"Requirement already satisfied: python-dateutil>=2.8.2 in /home/geron/Projects/python-for-finances/.venv/lib/python3.13/site-packages (from pandas) (2.9.0.post0)\r\n",
"Collecting pytz>=2020.1 (from pandas)\r\n",
" Using cached pytz-2025.2-py2.py3-none-any.whl.metadata (22 kB)\r\n",
"Collecting tzdata>=2022.7 (from pandas)\r\n",
" Using cached tzdata-2025.2-py2.py3-none-any.whl.metadata (1.4 kB)\r\n",
"Collecting multitasking>=0.0.7 (from yfinance)\r\n",
" Using cached multitasking-0.0.11-py3-none-any.whl.metadata (5.5 kB)\r\n",
"Requirement already satisfied: platformdirs>=2.0.0 in /home/geron/Projects/python-for-finances/.venv/lib/python3.13/site-packages (from yfinance) (4.3.7)\r\n",
"Collecting frozendict>=2.3.4 (from yfinance)\r\n",
" Using cached frozendict-2.4.6-py313-none-any.whl.metadata (23 kB)\r\n",
"Collecting peewee>=3.16.2 (from yfinance)\r\n",
" Using cached peewee-3.17.9-cp313-cp313-linux_x86_64.whl\r\n",
"Requirement already satisfied: charset-normalizer<4,>=2 in /home/geron/Projects/python-for-finances/.venv/lib/python3.13/site-packages (from requests) (3.4.1)\r\n",
"Requirement already satisfied: idna<4,>=2.5 in /home/geron/Projects/python-for-finances/.venv/lib/python3.13/site-packages (from requests) (3.10)\r\n",
"Requirement already satisfied: urllib3<3,>=1.21.1 in /home/geron/Projects/python-for-finances/.venv/lib/python3.13/site-packages (from requests) (2.4.0)\r\n",
"Requirement already satisfied: certifi>=2017.4.17 in /home/geron/Projects/python-for-finances/.venv/lib/python3.13/site-packages (from requests) (2025.1.31)\r\n",
"Requirement already satisfied: soupsieve>1.2 in /home/geron/Projects/python-for-finances/.venv/lib/python3.13/site-packages (from beautifulsoup4) (2.6)\r\n",
"Requirement already satisfied: typing-extensions>=4.0.0 in /home/geron/Projects/python-for-finances/.venv/lib/python3.13/site-packages (from beautifulsoup4) (4.13.2)\r\n",
"Requirement already satisfied: six>=1.5 in /home/geron/Projects/python-for-finances/.venv/lib/python3.13/site-packages (from python-dateutil>=2.8.2->pandas) (1.17.0)\r\n",
"Using cached pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (12.7 MB)\r\n",
"Using cached numpy-2.2.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (16.1 MB)\r\n",
"Using cached yfinance-0.2.55-py2.py3-none-any.whl (109 kB)\r\n",
"Using cached frozendict-2.4.6-py313-none-any.whl (16 kB)\r\n",
"Using cached multitasking-0.0.11-py3-none-any.whl (8.5 kB)\r\n",
"Using cached pytz-2025.2-py2.py3-none-any.whl (509 kB)\r\n",
"Using cached tzdata-2025.2-py2.py3-none-any.whl (347 kB)\r\n",
"Installing collected packages: pytz, peewee, multitasking, tzdata, numpy, frozendict, pandas, yfinance\r\n",
"Successfully installed frozendict-2.4.6 multitasking-0.0.11 numpy-2.2.4 pandas-2.2.3 peewee-3.17.9 pytz-2025.2 tzdata-2025.2 yfinance-0.2.55\r\n"
]
}
],
"execution_count": 1
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-04-13T20:27:40.137379Z",
"start_time": "2025-04-13T20:27:39.725248Z"
}
},
"cell_type": "code",
"source": [
"import numpy as np\n",
"import pandas as pd\n",
"import requests\n",
"from bs4 import BeautifulSoup"
],
"id": "737ea007e532eace",
"outputs": [],
"execution_count": 2
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-04-13T20:55:39.461968Z",
"start_time": "2025-04-13T20:55:39.453184Z"
}
},
"cell_type": "code",
"source": [
"def obter_acoes_b3():\n",
" url = \"https://www.fundamentus.com.br/resultado.php\"\n",
" headers = {\n",
" 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64; rv:136.0) Gecko/20100101 Firefox/136.0'\n",
" }\n",
"\n",
" response = requests.get(url, headers=headers)\n",
" soup = BeautifulSoup(response.text, 'html.parser')\n",
"\n",
" tabela = soup.find('table', {'id': 'resultado'})\n",
" dados = []\n",
"\n",
" for linha in tabela.find_all('tr')[1:]:\n",
" colunas = linha.find_all('td')\n",
" ticker = colunas[0].text.strip()\n",
"\n",
" # Extrair métricas fundamentalistas\n",
" ev_ebit = colunas[10].text.strip().replace('.', '').replace(',', '.')\n",
" roic = colunas[16].text.strip().replace('.', '').replace(',', '.')\n",
" liquidez = colunas[18].text.strip().replace('.', '').replace(',', '.')\n",
" divida_pl = colunas[19].text.strip().replace('.', '').replace(',', '.')\n",
"\n",
" # Converter para float, tratando valores inválidos\n",
" try:\n",
" ev_ebit = float(ev_ebit) if ev_ebit != '-' else np.nan\n",
" roic = float(roic[:-1]) if '%' in roic else float(roic)\n",
" liquidez = float(liquidez)\n",
" divida_pl = float(divida_pl)\n",
"\n",
" # Calcular Earnings Yield (inverso do EV/EBIT)\n",
" earnings_yield = 1 / ev_ebit if ev_ebit > 0 else np.nan\n",
"\n",
" dados.append({\n",
" 'Ticker': ticker,\n",
" 'ROIC': roic,\n",
" 'EV/EBIT': ev_ebit,\n",
" 'Earnings Yield': earnings_yield,\n",
" 'Liquidez Media': liquidez,\n",
" 'Divida Bruta/PL': divida_pl\n",
" })\n",
" except (ValueError, ZeroDivisionError):\n",
" continue\n",
"\n",
" return pd.DataFrame(dados)"
],
"id": "5a0af3f299da432",
"outputs": [],
"execution_count": 33
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-04-13T20:55:40.849860Z",
"start_time": "2025-04-13T20:55:40.092717Z"
}
},
"cell_type": "code",
"source": [
"acoes_df = obter_acoes_b3()\n",
"acoes_df"
],
"id": "eee764781bd7c385",
"outputs": [
{
"data": {
"text/plain": [
" Ticker ROIC EV/EBIT Earnings Yield Liquidez Media Divida Bruta/PL\n",
"0 PORP4 -2.08 0.00 NaN 2.239900e+07 0.00\n",
"1 POPR4 19.93 0.00 NaN 5.458030e+08 0.82\n",
"2 MNSA3 145.70 0.00 NaN -9.105000e+06 -6.52\n",
"3 CFLU4 32.15 0.00 NaN 6.035100e+07 0.06\n",
"4 CSTB4 20.11 0.00 NaN 8.420670e+09 0.14\n",
".. ... ... ... ... ... ...\n",
"986 UBBR4 0.33 0.00 NaN 1.031720e+10 0.00\n",
"987 VSTE3 0.06 25.50 0.039216 1.043280e+09 0.33\n",
"988 UBBR11 0.33 0.00 NaN 1.031720e+10 0.00\n",
"989 UBBR3 0.33 0.00 NaN 1.031720e+10 0.00\n",
"990 LJQQ3 0.03 4.86 0.205761 5.459970e+08 0.98\n",
"\n",
"[991 rows x 6 columns]"
],
"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>Ticker</th>\n",
" <th>ROIC</th>\n",
" <th>EV/EBIT</th>\n",
" <th>Earnings Yield</th>\n",
" <th>Liquidez Media</th>\n",
" <th>Divida Bruta/PL</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>0</th>\n",
" <td>PORP4</td>\n",
" <td>-2.08</td>\n",
" <td>0.00</td>\n",
" <td>NaN</td>\n",
" <td>2.239900e+07</td>\n",
" <td>0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>1</th>\n",
" <td>POPR4</td>\n",
" <td>19.93</td>\n",
" <td>0.00</td>\n",
" <td>NaN</td>\n",
" <td>5.458030e+08</td>\n",
" <td>0.82</td>\n",
" </tr>\n",
" <tr>\n",
" <th>2</th>\n",
" <td>MNSA3</td>\n",
" <td>145.70</td>\n",
" <td>0.00</td>\n",
" <td>NaN</td>\n",
" <td>-9.105000e+06</td>\n",
" <td>-6.52</td>\n",
" </tr>\n",
" <tr>\n",
" <th>3</th>\n",
" <td>CFLU4</td>\n",
" <td>32.15</td>\n",
" <td>0.00</td>\n",
" <td>NaN</td>\n",
" <td>6.035100e+07</td>\n",
" <td>0.06</td>\n",
" </tr>\n",
" <tr>\n",
" <th>4</th>\n",
" <td>CSTB4</td>\n",
" <td>20.11</td>\n",
" <td>0.00</td>\n",
" <td>NaN</td>\n",
" <td>8.420670e+09</td>\n",
" <td>0.14</td>\n",
" </tr>\n",
" <tr>\n",
" <th>...</th>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" <td>...</td>\n",
" </tr>\n",
" <tr>\n",
" <th>986</th>\n",
" <td>UBBR4</td>\n",
" <td>0.33</td>\n",
" <td>0.00</td>\n",
" <td>NaN</td>\n",
" <td>1.031720e+10</td>\n",
" <td>0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>987</th>\n",
" <td>VSTE3</td>\n",
" <td>0.06</td>\n",
" <td>25.50</td>\n",
" <td>0.039216</td>\n",
" <td>1.043280e+09</td>\n",
" <td>0.33</td>\n",
" </tr>\n",
" <tr>\n",
" <th>988</th>\n",
" <td>UBBR11</td>\n",
" <td>0.33</td>\n",
" <td>0.00</td>\n",
" <td>NaN</td>\n",
" <td>1.031720e+10</td>\n",
" <td>0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>989</th>\n",
" <td>UBBR3</td>\n",
" <td>0.33</td>\n",
" <td>0.00</td>\n",
" <td>NaN</td>\n",
" <td>1.031720e+10</td>\n",
" <td>0.00</td>\n",
" </tr>\n",
" <tr>\n",
" <th>990</th>\n",
" <td>LJQQ3</td>\n",
" <td>0.03</td>\n",
" <td>4.86</td>\n",
" <td>0.205761</td>\n",
" <td>5.459970e+08</td>\n",
" <td>0.98</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"<p>991 rows × 6 columns</p>\n",
"</div>"
]
},
"execution_count": 34,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 34
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-04-13T20:55:41.458678Z",
"start_time": "2025-04-13T20:55:41.454935Z"
}
},
"cell_type": "code",
"source": [
"def filtrar_acoes(df):\n",
" \"\"\"Filtra ações conforme recomendação de Greenblatt\"\"\"\n",
"\n",
" # Remover empresas com baixa liquidez (menor que 1M)\n",
" df_filtrado = df[df['Liquidez Media'] > 1_000_000]\n",
"\n",
" # Remover empresas com dívida muito alta\n",
" df_filtrado = df_filtrado[(df_filtrado['Divida Bruta/PL'] > 0) & (df_filtrado['Divida Bruta/PL'] < 4)]\n",
"\n",
" return df_filtrado"
],
"id": "f91f75a047ff57bf",
"outputs": [],
"execution_count": 35
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-04-13T20:55:42.184602Z",
"start_time": "2025-04-13T20:55:42.181491Z"
}
},
"cell_type": "code",
"source": "acoes_df = filtrar_acoes(acoes_df)",
"id": "17276b69637e2cbe",
"outputs": [],
"execution_count": 36
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-04-13T20:55:42.796804Z",
"start_time": "2025-04-13T20:55:42.793964Z"
}
},
"cell_type": "code",
"source": [
"def magic_formula(df):\n",
" # Remover dados inválidos\n",
" df = df[df['Earnings Yield'].notna()].copy()\n",
"\n",
" # Classificar as ações (ranking)\n",
" df['ROIC_Rank'] = df['ROIC'].rank(ascending=False)\n",
" df['EY_Rank'] = df['Earnings Yield'].rank(ascending=False)\n",
"\n",
" # Calcular o ranking combinado\n",
" df['Magic_Rank'] = df['ROIC_Rank'] + df['EY_Rank']\n",
"\n",
" # Ordenar pelo ranking combinado (do menor para o maior)\n",
" df_result = df.sort_values('Magic_Rank')\n",
"\n",
" return df_result"
],
"id": "32611e00190bf868",
"outputs": [],
"execution_count": 37
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-04-13T20:55:43.475901Z",
"start_time": "2025-04-13T20:55:43.454407Z"
}
},
"cell_type": "code",
"source": [
"resultado = magic_formula(acoes_df)\n",
"\n",
"# Selecionar as 15 melhores ações\n",
"top_acoes = resultado.head(15)\n",
"top_acoes"
],
"id": "625cd15e9bf429eb",
"outputs": [
{
"data": {
"text/plain": [
" Ticker ROIC EV/EBIT Earnings Yield Liquidez Media Divida Bruta/PL \\\n",
"453 AHEB3 61.47 2.17 0.460829 2.444130e+08 0.02 \n",
"455 AHEB5 61.47 2.48 0.403226 2.444130e+08 0.02 \n",
"459 AHEB6 61.47 2.80 0.357143 2.444130e+08 0.02 \n",
"367 CSPC4 45.33 1.43 0.699301 2.126670e+09 1.48 \n",
"371 CSPC3 45.33 1.43 0.699301 2.126670e+09 1.48 \n",
"433 SYNE3 50.87 2.41 0.414938 1.073780e+09 0.76 \n",
"435 CPFG4 36.99 0.95 1.052632 3.614430e+09 0.42 \n",
"437 CPFG3 36.99 0.97 1.030928 3.614430e+09 0.42 \n",
"396 PALF11 46.56 2.84 0.352113 3.055110e+09 3.00 \n",
"403 PALF5 46.56 2.87 0.348432 3.055110e+09 3.00 \n",
"405 PALF3 46.56 2.88 0.347222 3.055110e+09 3.00 \n",
"380 ENER3 51.72 3.09 0.323625 1.167120e+09 3.89 \n",
"381 ENER6 51.72 3.09 0.323625 1.167120e+09 3.89 \n",
"379 ENER5 51.72 3.09 0.323625 1.167120e+09 3.89 \n",
"382 TEFC11 46.72 3.45 0.289855 4.585600e+10 2.95 \n",
"\n",
" ROIC_Rank EY_Rank Magic_Rank \n",
"453 7.0 25.0 32.0 \n",
"455 7.0 30.0 37.0 \n",
"459 7.0 32.0 39.0 \n",
"367 23.5 16.5 40.0 \n",
"371 23.5 16.5 40.0 \n",
"433 16.0 28.0 44.0 \n",
"435 37.5 7.0 44.5 \n",
"437 37.5 8.0 45.5 \n",
"396 19.0 33.0 52.0 \n",
"403 19.0 34.0 53.0 \n",
"405 19.0 35.0 54.0 \n",
"380 11.0 44.0 55.0 \n",
"381 11.0 44.0 55.0 \n",
"379 11.0 44.0 55.0 \n",
"382 17.0 52.0 69.0 "
],
"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>Ticker</th>\n",
" <th>ROIC</th>\n",
" <th>EV/EBIT</th>\n",
" <th>Earnings Yield</th>\n",
" <th>Liquidez Media</th>\n",
" <th>Divida Bruta/PL</th>\n",
" <th>ROIC_Rank</th>\n",
" <th>EY_Rank</th>\n",
" <th>Magic_Rank</th>\n",
" </tr>\n",
" </thead>\n",
" <tbody>\n",
" <tr>\n",
" <th>453</th>\n",
" <td>AHEB3</td>\n",
" <td>61.47</td>\n",
" <td>2.17</td>\n",
" <td>0.460829</td>\n",
" <td>2.444130e+08</td>\n",
" <td>0.02</td>\n",
" <td>7.0</td>\n",
" <td>25.0</td>\n",
" <td>32.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>455</th>\n",
" <td>AHEB5</td>\n",
" <td>61.47</td>\n",
" <td>2.48</td>\n",
" <td>0.403226</td>\n",
" <td>2.444130e+08</td>\n",
" <td>0.02</td>\n",
" <td>7.0</td>\n",
" <td>30.0</td>\n",
" <td>37.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>459</th>\n",
" <td>AHEB6</td>\n",
" <td>61.47</td>\n",
" <td>2.80</td>\n",
" <td>0.357143</td>\n",
" <td>2.444130e+08</td>\n",
" <td>0.02</td>\n",
" <td>7.0</td>\n",
" <td>32.0</td>\n",
" <td>39.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>367</th>\n",
" <td>CSPC4</td>\n",
" <td>45.33</td>\n",
" <td>1.43</td>\n",
" <td>0.699301</td>\n",
" <td>2.126670e+09</td>\n",
" <td>1.48</td>\n",
" <td>23.5</td>\n",
" <td>16.5</td>\n",
" <td>40.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>371</th>\n",
" <td>CSPC3</td>\n",
" <td>45.33</td>\n",
" <td>1.43</td>\n",
" <td>0.699301</td>\n",
" <td>2.126670e+09</td>\n",
" <td>1.48</td>\n",
" <td>23.5</td>\n",
" <td>16.5</td>\n",
" <td>40.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>433</th>\n",
" <td>SYNE3</td>\n",
" <td>50.87</td>\n",
" <td>2.41</td>\n",
" <td>0.414938</td>\n",
" <td>1.073780e+09</td>\n",
" <td>0.76</td>\n",
" <td>16.0</td>\n",
" <td>28.0</td>\n",
" <td>44.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>435</th>\n",
" <td>CPFG4</td>\n",
" <td>36.99</td>\n",
" <td>0.95</td>\n",
" <td>1.052632</td>\n",
" <td>3.614430e+09</td>\n",
" <td>0.42</td>\n",
" <td>37.5</td>\n",
" <td>7.0</td>\n",
" <td>44.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>437</th>\n",
" <td>CPFG3</td>\n",
" <td>36.99</td>\n",
" <td>0.97</td>\n",
" <td>1.030928</td>\n",
" <td>3.614430e+09</td>\n",
" <td>0.42</td>\n",
" <td>37.5</td>\n",
" <td>8.0</td>\n",
" <td>45.5</td>\n",
" </tr>\n",
" <tr>\n",
" <th>396</th>\n",
" <td>PALF11</td>\n",
" <td>46.56</td>\n",
" <td>2.84</td>\n",
" <td>0.352113</td>\n",
" <td>3.055110e+09</td>\n",
" <td>3.00</td>\n",
" <td>19.0</td>\n",
" <td>33.0</td>\n",
" <td>52.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>403</th>\n",
" <td>PALF5</td>\n",
" <td>46.56</td>\n",
" <td>2.87</td>\n",
" <td>0.348432</td>\n",
" <td>3.055110e+09</td>\n",
" <td>3.00</td>\n",
" <td>19.0</td>\n",
" <td>34.0</td>\n",
" <td>53.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>405</th>\n",
" <td>PALF3</td>\n",
" <td>46.56</td>\n",
" <td>2.88</td>\n",
" <td>0.347222</td>\n",
" <td>3.055110e+09</td>\n",
" <td>3.00</td>\n",
" <td>19.0</td>\n",
" <td>35.0</td>\n",
" <td>54.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>380</th>\n",
" <td>ENER3</td>\n",
" <td>51.72</td>\n",
" <td>3.09</td>\n",
" <td>0.323625</td>\n",
" <td>1.167120e+09</td>\n",
" <td>3.89</td>\n",
" <td>11.0</td>\n",
" <td>44.0</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>381</th>\n",
" <td>ENER6</td>\n",
" <td>51.72</td>\n",
" <td>3.09</td>\n",
" <td>0.323625</td>\n",
" <td>1.167120e+09</td>\n",
" <td>3.89</td>\n",
" <td>11.0</td>\n",
" <td>44.0</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>379</th>\n",
" <td>ENER5</td>\n",
" <td>51.72</td>\n",
" <td>3.09</td>\n",
" <td>0.323625</td>\n",
" <td>1.167120e+09</td>\n",
" <td>3.89</td>\n",
" <td>11.0</td>\n",
" <td>44.0</td>\n",
" <td>55.0</td>\n",
" </tr>\n",
" <tr>\n",
" <th>382</th>\n",
" <td>TEFC11</td>\n",
" <td>46.72</td>\n",
" <td>3.45</td>\n",
" <td>0.289855</td>\n",
" <td>4.585600e+10</td>\n",
" <td>2.95</td>\n",
" <td>17.0</td>\n",
" <td>52.0</td>\n",
" <td>69.0</td>\n",
" </tr>\n",
" </tbody>\n",
"</table>\n",
"</div>"
]
},
"execution_count": 38,
"metadata": {},
"output_type": "execute_result"
}
],
"execution_count": 38
},
{
"metadata": {
"ExecuteTime": {
"end_time": "2025-04-13T20:55:47.816488Z",
"start_time": "2025-04-13T20:55:47.812631Z"
}
},
"cell_type": "code",
"source": [
"# Salvar resultados em um CSV\n",
"top_acoes.to_csv('magic_formula_b3_resultado.csv', index=False)\n",
"print(\"\\nResultados salvos em 'magic_formula_b3_resultado.csv'\")"
],
"id": "605685dca910a47c",
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"\n",
"Resultados salvos em 'magic_formula_b3_resultado.csv'\n"
]
}
],
"execution_count": 39
},
{
"metadata": {},
"cell_type": "code",
"outputs": [],
"execution_count": null,
"source": "",
"id": "cdcab25ed5f48c3b"
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}