Veja também no YouTube:

A nomenclatura Éden do Traders foi criada pelo trader Stormer (Alexandre Wolwacz), para indicar quando ambas médias móveis exponenciais de 8 e 80 períodos estão apontando para a mesma direção.

Sendo assim, se as MMEs estiverem voltadas para cima, diz-se que o papel está no Éden dos Traders de compra, ao passo que se ambas estiverem viradas para baixo, o papel se encontra no Éden dos Traders de venda. Caso as médias estejam apontadas para direções contrárias, o ativo não está direcional.

Em outras palavras, o Éden dos Traders ajuda a avaliar a tendência de um ativo, e a tendência, por sua vez, é um grande aliado na análise técnica de um trader.

Quando falamos de análise técnica no mercado de ações, estamos nos referindo a um conjunto de ferramentas, como reconhecimento de padrões gráficos, indicadores e filtros, que facilitam a leitura gráfica de um ativo. Assim, somos capazes de estudar as melhores combinações entre essas ferramentas através dos backtests, buscando uma estratégia com boa taxa de retorno e baixo drawdown.

No artigo de hoje, aprenderemos a calcular quais ativos, dos 200 ativos mais líquidos da bolsa brasileira, se encontram no Éden dos Traders.

Web scraping dos 200 ativos mais líquidos da bolsa

Como de costume, o primeiro passo é importar todas as bibliotecas necessárias para o nosso código:

# %%capture means we suppress the output
%%capture

import pandas as pd
import requests

!pip install yfinance
import yfinance as yf

import sqlalchemy
from sqlalchemy import create_engine

!pip install psycopg2-binary
import psycopg2

Em seguida, vamos realizar o web scraping dessa tabela do site Fundamentus, que ordena os ativos da bolsa brasileira por diversos critérios, dentre eles, sua liquidez em 2 meses.

Para isso utilizaremos a biblioteca request para fazer a requisição HTTP (mesma biblioteca que utilizamos no artigo Determinando as BDRs Mais Líquidas do Ibovespa Utilizando Python). A única diferença é que o site Fundamentus exige a especificação do User-Agent, que nada mais é do que fazer a identificação do navegador para o site.

O último passo do web scraping será ler a tabela html em um dataframe através da função read_html. Perceba que importaremos somente as colunas com os símbolos de cada papel e sua respectiva liquidez.

url = "https://www.fundamentus.com.br/resultado.php"
headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.114 Safari/537.36"}
r = requests.get(url, headers=headers)

df = pd.read_html(r.text, decimal=",", thousands=".")[0][["Papel", "Liq.2meses"]]

df.head()
Papel Liq.2meses
0 IVTT3 0.0
1 PORP4 0.0
2 MNSA3 0.0
3 CSTB3 0.0
4 CFLU4 0.0

Quando fazemos a leitura em dataframe, perdemos a ordenação encontrada no HTML. Por conta disso, utilizaremos a função sort_values para organizar os papeis em ordem decrescente de liquidez.

Por fim, filtraremos os 200 mais líquidos (sorted_per_liquidity) e adicionaremos o sufixo .SA necessário para baixar os preços da biblioteca do Yahoo Finance.

df.sort_values("Liq.2meses", ascending=False, inplace=True)

sorted_per_liquidity = df["Papel"].copy()[:200]

tickers = [ticker + ".SA" for ticker in sorted_per_liquidity.to_list()]
print(tickers)
['VALE3.SA', 'PETR4.SA', 'ITUB4.SA', 'BBDC4.SA', 'B3SA3.SA', 'PETR3.SA', 'VVAR3.SA', 'GGBR4.SA', 'CSNA3.SA', 'ABEV3.SA', 'BBAS3.SA', 'BPAC11.SA', 'SUZB3.SA', 'MGLU3.SA', 'LREN3.SA', 'USIM5.SA', 'ITSA4.SA', 'BRFS3.SA', 'JBSS3.SA', 'NTCO3.SA', 'ELET3.SA', 'RENT3.SA', 'BIDI11.SA', 'AZUL4.SA', 'WEGE3.SA', 'GNDI3.SA', 'CSAN3.SA', 'LAME4.SA', 'PRIO3.SA', 'BRDT3.SA', 'BRKM5.SA', 'LWSA3.SA', 'KLBN11.SA', 'BTOW3.SA', 'RDOR3.SA', 'EMBR3.SA', 'MRFG3.SA', 'BBDC3.SA', 'BRML3.SA', 'COGN3.SA', 'SULA11.SA', 'BRAP4.SA', 'GOLL4.SA', 'GOAU4.SA', 'CVCB3.SA', 'RAIL3.SA', 'ELET6.SA', 'EQTL3.SA', 'CYRE3.SA', 'HAPV3.SA', 'RADL3.SA', 'BIDI4.SA', 'MULT3.SA', 'PCAR3.SA', 'BPAN4.SA', 'CCRO3.SA', 'IRBR3.SA', 'ASAI3.SA', 'CASH3.SA', 'TOTS3.SA', 'BBSE3.SA', 'UGPA3.SA', 'POSI3.SA', 'SBSP3.SA', 'ENEV3.SA', 'CMIG4.SA', 'CMIN3.SA', 'CIEL3.SA', 'SANB11.SA', 'IGTA3.SA', 'HYPE3.SA', 'FHER3.SA', 'OIBR3.SA', 'VIVT3.SA', 'ETER3.SA', 'ALPA4.SA', 'PETZ3.SA', 'CRFB3.SA', 'EZTC3.SA', 'YDUQ3.SA', 'TAEE11.SA', 'ENGI11.SA', 'BEEF3.SA', 'QUAL3.SA', 'RRRP3.SA', 'AMAR3.SA', 'LCAM3.SA', 'SLCE3.SA', 'VIVR3.SA', 'LAME3.SA', 'TIMS3.SA', 'HGTX3.SA', 'CXSE3.SA', 'ENBR3.SA', 'ECOR3.SA', 'MRVE3.SA', 'EGIE3.SA', 'WIZS3.SA', 'PSSA3.SA', 'CPLE6.SA', 'LINX3.SA', 'RAPT4.SA', 'DTEX3.SA', 'CPFE3.SA', 'PTBL3.SA', 'ARZZ3.SA', 'INTB3.SA', 'TASA4.SA', 'ALSO3.SA', 'CESP6.SA', 'UNIP6.SA', 'STBP3.SA', 'FLRY3.SA', 'NEOE3.SA', 'SOMA3.SA', 'MOVI3.SA', 'LJQQ3.SA', 'SMTO3.SA', 'HBSA3.SA', 'AERI3.SA', 'SAPR11.SA', 'LIGT3.SA', 'SBFG3.SA', 'VIVA3.SA', 'MDIA3.SA', 'JHSF3.SA', 'MYPK3.SA', 'GMAT3.SA', 'AGRO3.SA', 'TRPL4.SA', 'TUPY3.SA', 'CSMG3.SA', 'VAMO3.SA', 'ROMI3.SA', 'ANIM3.SA', 'ESPA3.SA', 'SIMH3.SA', 'SEQL3.SA', 'ENAT3.SA', 'MOSI3.SA', 'LEVE3.SA', 'BKBR3.SA', 'TEND3.SA', 'OMGE3.SA', 'BMOB3.SA', 'LUPA3.SA', 'BRSR6.SA', 'ALUP11.SA', 'DASA3.SA', 'CPLE11.SA', 'GFSA3.SA', 'RANI3.SA', 'DIRR3.SA', 'FESA4.SA', 'AMBP3.SA', 'BIDI3.SA', 'CEAB3.SA', 'AURA33.SA', 'ENJU3.SA', 'POMO4.SA', 'PNVL3.SA', 'MODL11.SA', 'MEAL3.SA', 'TPIS3.SA', 'ITUB3.SA', 'GRND3.SA', 'BRPR3.SA', 'RECV3.SA', 'AALR3.SA', 'MILS3.SA', 'NGRD3.SA', 'GUAR3.SA', 'HBOR3.SA', 'SAPR4.SA', 'AESB3.SA', 'SEER3.SA', 'SOJA3.SA', 'EVEN3.SA', 'DEXP3.SA', 'JPSA3.SA', 'MTRE3.SA', 'PGMN3.SA', 'PMAM3.SA', 'CAML3.SA', 'LOGN3.SA', 'BLAU3.SA', 'LAVV3.SA', 'SQIA3.SA', 'CPLE3.SA', 'GGPS3.SA', 'ABCB4.SA', 'DMMO3.SA', 'ODPV3.SA', 'LOGG3.SA', 'TRIS3.SA', 'BBRK3.SA', 'KEPL3.SA', 'IFCM3.SA', 'TCSA3.SA', 'BOAS3.SA']

OBS: Para quem está acompanhando nossa série sobre Banco de Dados, um passo extra seria salvar esses ativos em um portfólio "Top 200 Liquidez", uma vez que eles podem ser utilizados para diversos backtests. O artigo Determinando as BDRs Mais Líquidas do Ibovespa Utilizando Python ensina o passo a passo de como fazer isso.

Baixando os dados necessários

Baixaremos os preços de fechamento dos últimos 4 meses (2021-02-26 a 2021-06-26) da lista de ativos adquirida acima (tickers).

start="2021-02-26"
end="2021-06-26"

df = yf.download(tickers=tickers, start=start, end=end).copy()["Close"]
df
[*********************100%***********************] 200 of 200 completed
AALR3.SA ABCB4.SA ABEV3.SA AERI3.SA AESB3.SA AGRO3.SA ALPA4.SA ALSO3.SA ALUP11.SA AMAR3.SA AMBP3.SA ANIM3.SA ARZZ3.SA ASAI3.SA AURA33.SA AZUL4.SA B3SA3.SA BBAS3.SA BBDC3.SA BBDC4.SA BBRK3.SA BBSE3.SA BEEF3.SA BIDI11.SA BIDI3.SA BIDI4.SA BKBR3.SA BLAU3.SA BMOB3.SA BOAS3.SA BPAC11.SA BPAN4.SA BRAP4.SA BRDT3.SA BRFS3.SA BRKM5.SA BRML3.SA BRPR3.SA BRSR6.SA BTOW3.SA CAML3.SA CASH3.SA CCRO3.SA CEAB3.SA CESP6.SA CIEL3.SA CMIG4.SA CMIN3.SA COGN3.SA CPFE3.SA ... PSSA3.SA PTBL3.SA QUAL3.SA RADL3.SA RAIL3.SA RANI3.SA RAPT4.SA RDOR3.SA RECV3.SA RENT3.SA ROMI3.SA RRRP3.SA SANB11.SA SAPR11.SA SAPR4.SA SBFG3.SA SBSP3.SA SEER3.SA SEQL3.SA SIMH3.SA SLCE3.SA SMTO3.SA SOJA3.SA SOMA3.SA SQIA3.SA STBP3.SA SULA11.SA SUZB3.SA TAEE11.SA TASA4.SA TCSA3.SA TEND3.SA TIMS3.SA TOTS3.SA TPIS3.SA TRIS3.SA TRPL4.SA TUPY3.SA UGPA3.SA UNIP6.SA USIM5.SA VALE3.SA VAMO3.SA VIVA3.SA VIVR3.SA VIVT3.SA VVAR3.SA WEGE3.SA WIZS3.SA YDUQ3.SA
Date
2021-02-26 9.01 15.360000 14.020000 10.19 NaN 22.010000 34.930000 23.430000 23.590000 5.07 23.090000 9.28 71.320000 NaN 53.500000 40.599998 18.100000 28.049999 18.718182 20.909090 1.87 25.430000 9.70 52.630001 17.733334 17.006666 8.83 NaN 25.809999 10.52 102.339996 13.890000 62.860001 19.920000 21.639999 31.260000 8.35 8.14 12.64 82.000000 10.43 28.200001 11.25 11.02 27.280001 3.60 10.726755 8.93 3.74 28.860001 ... 43.590000 8.690000 31.590000 23.230000 18.100000 5.96 13.04 69.099998 NaN 58.000000 26.799999 35.970001 37.619999 19.740000 3.96 22.360001 36.799999 12.290000 30.129999 37.549999 40.980000 31.219999 NaN 13.410000 22.000000 5.79 31.165808 73.169998 30.760000 18.990000 7.66 25.549999 12.80 31.379999 1.70 9.36 23.900000 21.250000 19.320000 56.790001 16.240000 94.519997 34.500000 23.750000 1.01 44.000000 11.87 39.025002 6.26 30.120001
2021-03-01 9.03 15.550000 13.770000 9.83 NaN 22.580000 35.349998 22.799999 23.490000 5.08 22.950001 8.95 71.199997 71.400002 53.650002 40.049999 18.116667 27.860001 18.109091 20.218182 1.83 24.799999 9.65 55.863335 18.820000 18.626665 9.00 NaN 26.000000 10.38 102.709999 14.550000 64.580002 19.690001 21.700001 31.780001 8.17 7.93 11.98 80.730003 10.37 28.590000 10.92 10.83 26.490000 3.38 10.341094 8.95 3.61 28.049999 ... 43.099998 8.890000 31.799999 22.780001 18.080000 6.10 12.65 70.220001 NaN 59.160000 28.350000 38.910000 37.259998 19.530001 3.91 22.360001 35.430000 11.520000 30.379999 36.980000 42.759998 30.650000 NaN 13.290000 21.490000 5.90 31.062078 74.489998 30.410000 19.070000 7.19 25.900000 12.72 31.480000 1.70 9.18 23.520000 20.940001 18.750000 54.040001 16.850000 98.570000 33.349998 23.850000 0.97 43.310001 12.11 39.000000 6.49 28.730000
2021-03-02 9.02 15.760000 13.990000 9.63 NaN 22.860001 35.459999 22.900000 23.170000 5.10 22.799999 8.54 71.830002 72.500000 57.500000 38.790001 18.670000 28.930000 18.409090 20.745455 1.75 24.790001 9.61 54.853333 18.299999 18.139999 8.89 NaN 25.280001 9.79 102.300003 14.530000 66.190002 19.389999 21.590000 30.510000 8.23 8.17 12.10 78.589996 10.63 27.820000 10.88 10.56 26.860001 3.36 10.646035 8.80 3.63 28.680000 ... 43.689999 8.950000 32.290001 22.879999 18.299999 6.10 12.90 69.230003 NaN 58.599998 31.120001 41.590000 38.389999 19.750000 3.98 22.260000 36.290001 11.370000 29.650000 37.450001 43.799999 30.209999 NaN 13.560000 21.650000 5.83 31.137520 73.529999 30.480000 19.070000 7.24 25.690001 12.74 31.020000 1.69 9.31 23.719999 21.700001 18.690001 55.200001 17.230000 101.599998 34.189999 23.760000 0.94 43.480000 12.02 38.529999 6.26 27.889999
2021-03-03 8.82 15.660000 14.170000 9.93 NaN 22.930000 35.529999 22.930000 23.110001 5.16 22.700001 8.34 70.900002 71.300003 57.700001 38.560001 18.863333 28.990000 18.781818 20.927273 1.77 24.620001 9.61 54.056667 18.686666 18.443333 8.93 NaN 26.150000 9.85 100.930000 13.870000 64.820000 19.000000 21.709999 29.510000 8.15 8.09 12.18 76.150002 11.23 28.299999 11.03 10.64 26.799999 3.40 10.556347 8.49 3.67 29.040001 ... 43.580002 9.150000 32.889999 23.209999 18.490000 6.11 13.14 68.050003 NaN 58.820000 28.490000 40.599998 37.830002 19.959999 4.05 21.969999 36.980000 11.590000 29.549999 36.410000 44.419998 30.290001 NaN 13.270000 20.920000 5.66 30.722603 73.500000 30.500000 19.680000 7.19 25.500000 12.86 30.930000 1.64 9.24 23.840000 22.510000 18.219999 53.150002 17.320000 100.349998 33.750000 22.400000 0.94 44.189999 11.92 38.500000 6.23 27.680000
2021-03-04 8.92 15.660000 14.780000 9.52 NaN 22.850000 36.099998 23.850000 23.709999 5.14 23.150000 8.52 73.000000 73.199997 58.299999 38.500000 18.496666 30.040001 19.409090 21.736362 1.73 24.500000 9.91 52.666664 17.879999 17.670000 8.97 NaN 25.209999 9.79 98.250000 13.510000 62.810001 20.290001 22.730000 30.129999 8.38 8.34 12.67 74.680000 11.22 27.040001 11.63 10.52 27.240000 3.46 10.897163 8.45 3.70 29.500000 ... 43.480000 8.910000 33.750000 23.600000 19.850000 6.14 13.01 67.919998 NaN 60.919998 27.990000 41.509998 38.630001 20.450001 4.13 22.309999 38.290001 11.730000 29.510000 36.090000 42.860001 31.160000 NaN 13.000000 20.860001 5.65 30.496286 73.599998 32.369999 20.570000 7.65 25.129999 13.05 30.610001 1.70 9.29 24.549999 23.090000 19.350000 52.540001 16.809999 98.860001 34.000000 21.950001 0.93 44.009998 12.11 36.615002 7.22 27.680000
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
2021-06-21 11.33 17.730000 18.730000 10.48 14.45 30.790001 49.619999 31.860001 27.129999 9.80 38.500000 13.15 95.930000 86.459999 68.500000 48.290001 17.070000 34.580002 23.379999 27.670000 2.11 25.469999 9.72 69.019997 22.700001 23.260000 12.14 45.630001 21.049999 11.31 122.980003 23.920000 68.150002 27.580000 28.830000 55.110001 11.30 9.52 14.17 70.489998 9.80 45.220001 13.98 15.31 24.650000 3.88 13.070000 9.44 4.80 28.790001 ... 55.000000 16.620001 28.330000 25.750000 20.059999 9.31 14.01 66.900002 19.290001 63.220001 25.799999 48.860001 43.889999 20.959999 4.24 38.840000 38.180000 19.059999 26.799999 56.450001 48.910000 37.790001 15.11 16.780001 22.350000 9.30 36.029999 58.500000 39.470001 22.639999 8.59 25.750000 12.67 36.759998 3.20 10.37 26.750000 23.680000 19.719999 94.489998 18.160000 110.110001 53.549999 33.970001 4.78 45.139999 15.75 35.250000 13.19 34.980000
2021-06-22 11.19 17.500000 18.290001 10.35 14.32 30.820000 50.000000 31.450001 26.790001 10.01 39.650002 13.32 95.000000 86.400002 68.599998 47.430000 16.990000 33.849998 23.100000 27.160000 2.40 25.540001 9.70 70.250000 23.150000 23.889999 12.37 46.500000 21.549999 11.40 120.930000 24.480000 69.209999 27.750000 28.799999 54.889999 11.02 9.67 14.01 69.830002 9.78 44.349998 13.57 14.77 24.520000 3.76 12.810000 9.39 4.69 28.549999 ... 54.720001 16.620001 28.540001 26.000000 19.860001 9.72 13.80 69.750000 18.950001 63.000000 25.190001 48.099998 43.750000 NaN 4.23 38.500000 37.939999 18.900000 26.709999 55.000000 49.230000 37.500000 14.97 16.549999 22.110001 9.25 35.950001 58.700001 NaN 23.020000 8.53 25.610001 12.05 37.650002 3.14 10.06 26.209999 23.639999 19.530001 93.919998 18.230000 111.400002 53.750000 34.049999 5.89 43.900002 15.93 34.290001 13.86 34.570000
2021-06-23 11.63 17.290001 17.990000 10.31 14.32 30.650000 49.320000 30.790001 26.920000 9.25 40.180000 13.80 93.709999 86.000000 69.250000 47.500000 17.020000 33.849998 23.059999 27.040001 4.00 24.700001 9.61 71.669998 23.730000 24.219999 12.17 47.459999 22.320000 11.58 121.209999 25.580000 69.730003 27.120001 28.570000 56.439999 10.89 9.41 13.89 68.290001 9.80 45.990002 13.60 14.59 24.420000 3.73 12.700000 9.37 4.74 28.030001 ... 54.340000 15.850000 28.500000 25.350000 19.709999 9.57 13.65 68.800003 18.940001 64.000000 25.240000 47.709999 43.189999 NaN 4.22 37.689999 37.590000 19.180000 27.200001 55.299999 48.799999 37.250000 14.62 16.290001 22.570000 9.30 35.520000 58.110001 NaN 22.959999 8.94 25.150000 11.94 37.880001 3.54 10.07 26.110001 23.650000 19.150000 94.250000 18.620001 113.070000 54.790001 33.619999 9.81 43.470001 15.80 33.950001 15.68 35.400002
2021-06-24 11.74 17.280001 17.950001 10.11 14.32 30.330000 49.919998 30.799999 26.799999 9.20 39.209999 13.82 94.300003 87.309998 67.900002 47.000000 16.990000 33.919998 23.059999 27.240000 2.59 24.400000 9.84 69.199997 22.660000 23.459999 12.25 49.189999 22.200001 11.75 120.400002 24.450001 70.070000 27.629999 28.650000 56.900002 10.99 9.44 13.84 70.370003 9.84 48.389999 13.72 14.72 24.430000 3.74 12.750000 9.38 4.75 28.250000 ... 53.799999 15.760000 28.549999 25.600000 19.930000 9.24 13.73 68.190002 19.860001 64.500000 25.200001 46.610001 43.099998 NaN 4.28 36.959999 37.889999 18.910000 26.500000 54.990002 48.750000 36.990002 14.89 16.740000 22.809999 9.33 35.990002 59.849998 NaN 22.990000 9.05 26.059999 11.95 37.540001 3.38 10.31 26.110001 23.760000 19.340000 95.570000 19.100000 111.029999 55.779999 33.540001 4.80 43.700001 15.77 34.330002 16.00 35.500000
2021-06-25 11.30 16.990000 16.950001 9.86 14.11 29.590000 49.490002 29.809999 26.299999 9.42 39.630001 13.62 92.790001 84.889999 67.699997 45.970001 16.690001 32.900002 22.469999 26.389999 2.59 23.920000 9.71 70.000000 22.750000 23.450001 12.16 48.490002 21.719999 11.91 118.269997 23.370001 73.070000 27.580000 28.480000 55.419998 10.60 9.20 13.56 68.099998 9.69 51.299999 13.34 14.66 24.230000 3.67 12.530000 9.36 4.59 27.530001 ... 52.009998 15.580000 28.440001 24.719999 19.540001 9.10 13.70 68.669998 19.590000 63.599998 24.990000 46.250000 42.099998 NaN 4.26 36.209999 37.790001 18.219999 26.299999 54.470001 47.730000 35.900002 14.87 16.110001 22.760000 9.15 34.599998 58.410000 NaN 22.440001 8.87 26.030001 11.77 36.860001 3.36 10.08 25.889999 23.450001 18.990000 92.580002 18.840000 112.400002 55.310001 32.490002 5.45 42.930000 15.72 33.560001 16.35 34.009998

85 rows × 200 columns


Como utilizaremos os preços mais recentes para avaliar a direção das médias móveis, temos que verificar se há algum valor NaN nas últimas linhas do nosso dataframe.

Para conseguirmos verificar todas as colunas do dataframe, usaremos a função de exibição: options.display.max_columns.

pd.options.display.max_columns = 200
df.iloc[-2:]
AALR3.SA ABCB4.SA ABEV3.SA AERI3.SA AESB3.SA AGRO3.SA ALPA4.SA ALSO3.SA ALUP11.SA AMAR3.SA AMBP3.SA ANIM3.SA ARZZ3.SA ASAI3.SA AURA33.SA AZUL4.SA B3SA3.SA BBAS3.SA BBDC3.SA BBDC4.SA BBRK3.SA BBSE3.SA BEEF3.SA BIDI11.SA BIDI3.SA BIDI4.SA BKBR3.SA BLAU3.SA BMOB3.SA BOAS3.SA BPAC11.SA BPAN4.SA BRAP4.SA BRDT3.SA BRFS3.SA BRKM5.SA BRML3.SA BRPR3.SA BRSR6.SA BTOW3.SA CAML3.SA CASH3.SA CCRO3.SA CEAB3.SA CESP6.SA CIEL3.SA CMIG4.SA CMIN3.SA COGN3.SA CPFE3.SA CPLE11.SA CPLE3.SA CPLE6.SA CRFB3.SA CSAN3.SA CSMG3.SA CSNA3.SA CVCB3.SA CXSE3.SA CYRE3.SA DASA3.SA DEXP3.SA DIRR3.SA DMMO3.SA DTEX3.SA ECOR3.SA EGIE3.SA ELET3.SA ELET6.SA EMBR3.SA ENAT3.SA ENBR3.SA ENEV3.SA ENGI11.SA ENJU3.SA EQTL3.SA ESPA3.SA ETER3.SA EVEN3.SA EZTC3.SA FESA4.SA FHER3.SA FLRY3.SA GFSA3.SA GGBR4.SA GGPS3.SA GMAT3.SA GNDI3.SA GOAU4.SA GOLL4.SA GRND3.SA GUAR3.SA HAPV3.SA HBOR3.SA HBSA3.SA HGTX3.SA HYPE3.SA IFCM3.SA IGTA3.SA INTB3.SA IRBR3.SA ITSA4.SA ITUB3.SA ITUB4.SA JBSS3.SA JHSF3.SA JPSA3.SA KEPL3.SA KLBN11.SA LAME3.SA LAME4.SA LAVV3.SA LCAM3.SA LEVE3.SA LIGT3.SA LINX3.SA LJQQ3.SA LOGG3.SA LOGN3.SA LREN3.SA LUPA3.SA LWSA3.SA MDIA3.SA MEAL3.SA MGLU3.SA MILS3.SA MODL11.SA MOSI3.SA MOVI3.SA MRFG3.SA MRVE3.SA MTRE3.SA MULT3.SA MYPK3.SA NEOE3.SA NGRD3.SA NTCO3.SA ODPV3.SA OIBR3.SA OMGE3.SA PCAR3.SA PETR3.SA PETR4.SA PETZ3.SA PGMN3.SA PMAM3.SA PNVL3.SA POMO4.SA POSI3.SA PRIO3.SA PSSA3.SA PTBL3.SA QUAL3.SA RADL3.SA RAIL3.SA RANI3.SA RAPT4.SA RDOR3.SA RECV3.SA RENT3.SA ROMI3.SA RRRP3.SA SANB11.SA SAPR11.SA SAPR4.SA SBFG3.SA SBSP3.SA SEER3.SA SEQL3.SA SIMH3.SA SLCE3.SA SMTO3.SA SOJA3.SA SOMA3.SA SQIA3.SA STBP3.SA SULA11.SA SUZB3.SA TAEE11.SA TASA4.SA TCSA3.SA TEND3.SA TIMS3.SA TOTS3.SA TPIS3.SA TRIS3.SA TRPL4.SA TUPY3.SA UGPA3.SA UNIP6.SA USIM5.SA VALE3.SA VAMO3.SA VIVA3.SA VIVR3.SA VIVT3.SA VVAR3.SA WEGE3.SA WIZS3.SA YDUQ3.SA
Date
2021-06-24 11.74 17.280001 17.950001 10.11 14.32 30.33 49.919998 30.799999 26.799999 9.20 39.209999 13.82 94.300003 87.309998 67.900002 47.000000 16.990000 33.919998 23.059999 27.240000 2.59 24.40 9.84 69.199997 22.66 23.459999 12.25 49.189999 22.200001 11.75 120.400002 24.450001 70.07 27.629999 28.65 56.900002 10.99 9.44 13.84 70.370003 9.84 48.389999 13.72 14.72 24.43 3.74 12.75 9.38 4.75 28.250000 30.469999 5.82 6.17 21.629999 25.190001 16.219999 44.599998 28.206032 13.02 23.530001 62.060001 43.400002 15.02 0.97 22.74 12.30 40.700001 45.889999 46.230000 19.610001 14.90 18.570000 17.49 47.700001 10.61 25.430000 19.120001 24.299999 10.80 32.48 43.439999 19.850000 26.620001 4.91 30.77 17.110001 8.06 87.379997 14.20 24.780001 9.95 21.129999 15.78 9.42 6.22 35.200001 36.560001 20.110001 43.480000 29.540001 6.02 11.76 28.16 31.809999 29.160000 7.84 35.540001 57.009998 26.370001 21.610001 22.379999 8.80 27.889999 33.270000 16.110001 37.500000 23.950001 33.849998 18.820000 45.669998 6.94 27.080000 32.68 4.36 21.650000 8.48 16.25 19.600000 19.500000 18.959999 16.980000 12.04 25.180000 15.97 17.700001 6.06 57.270000 13.05 1.57 38.139999 39.799999 29.889999 29.65 24.450001 11.71 16.059999 21.25 3.46 13.12 19.450001 53.799999 15.76 28.549999 25.600000 19.930000 9.24 13.73 68.190002 19.860001 64.500000 25.200001 46.610001 43.099998 NaN 4.28 36.959999 37.889999 18.910000 26.500000 54.990002 48.75 36.990002 14.89 16.740000 22.809999 9.33 35.990002 59.849998 NaN 22.990000 9.05 26.059999 11.95 37.540001 3.38 10.31 26.110001 23.760000 19.34 95.570000 19.10 111.029999 55.779999 33.540001 4.80 43.700001 15.77 34.330002 16.00 35.500000
2021-06-25 11.30 16.990000 16.950001 9.86 14.11 29.59 49.490002 29.809999 26.299999 9.42 39.630001 13.62 92.790001 84.889999 67.699997 45.970001 16.690001 32.900002 22.469999 26.389999 2.59 23.92 9.71 70.000000 22.75 23.450001 12.16 48.490002 21.719999 11.91 118.269997 23.370001 73.07 27.580000 28.48 55.419998 10.60 9.20 13.56 68.099998 9.69 51.299999 13.34 14.66 24.23 3.67 12.53 9.36 4.59 27.530001 30.010000 5.67 6.11 21.389999 24.730000 16.049999 43.549999 27.650000 12.94 22.870001 60.980000 42.919998 14.71 0.94 23.00 11.88 40.130001 44.320000 44.549999 19.100000 16.48 18.219999 17.09 46.700001 10.56 25.440001 18.799999 23.379999 10.55 31.57 42.849998 17.940001 26.059999 4.65 30.84 16.799999 7.81 85.059998 14.27 24.000000 9.93 20.709999 15.34 8.95 6.05 33.919998 35.299999 20.350000 42.029999 28.910000 5.99 11.48 27.41 30.799999 28.540001 7.59 34.660000 57.139999 25.860001 20.910000 21.940001 8.57 27.559999 32.669998 15.750000 37.400002 23.450001 32.610001 18.450001 45.099998 6.80 26.309999 32.27 4.30 21.389999 8.45 17.24 19.200001 19.209999 19.090000 16.809999 11.80 24.040001 15.90 17.770000 6.01 56.310001 12.97 1.53 38.419998 38.799999 29.410000 29.10 24.870001 11.50 15.920000 21.35 3.39 12.56 19.080000 52.009998 15.58 28.440001 24.719999 19.540001 9.10 13.70 68.669998 19.590000 63.599998 24.990000 46.250000 42.099998 NaN 4.26 36.209999 37.790001 18.219999 26.299999 54.470001 47.73 35.900002 14.87 16.110001 22.760000 9.15 34.599998 58.410000 NaN 22.440001 8.87 26.030001 11.77 36.860001 3.36 10.08 25.889999 23.450001 18.99 92.580002 18.84 112.400002 55.310001 32.490002 5.45 42.930000 15.72 33.560001 16.35 34.009998


Como podemos observar, os ativos SAPR11 e TAEE11 não possuem os preços de fechamento mais recentes. Para evitar quaisquer erros na hora de calcular as médias móveis, vamos excluir esses papeis do dataframe através da função drop.

df.drop(df["SAPR11.SA"], axis="columns", inplace=True)
df.drop(df["TAEE11.SA"], axis="columns", inplace=True)

Com o dataframe pronto, o próximo passo é calcular as médias móveis exponenciais de curto e longo prazo para então classificarmos os ativos entre Éden dos Traders de compra e venda.

Calculando as médias móveis e determinando o Éden dos Traders

Nesse próximo passo faremos um for loop para iterar sobre cada ativo do dataframe. Nessa iteração, realizaremos as seguintes tarefas:

  • Calcularemos as médias móveis exponenciais a partir de duas funções combinadas, ewm e mean, que serão armazenas nas variáveis mme8 e mme80;

  • Classificaremos os ativos de acordo com o Éden dos Traders para compra e venda, a partir da simples lógica:

    • O ativo estará no Éden dos Traders de compra (long = 1), se ambas médias móveis atuais (mme8[-1] e mme80[-1]) forem maiores que as respectivas médias móveis anteriores (mme8[-2] e mme80[-2]);
    • Se forem menores, o ativo se encontra no Éden dos Traders de venda (short = 1);
    • Se nenhuma das alternativas anteriores for verdade, o ativo não se encontra no Éden dos Traders (long = 0 e short = 0).
  • Armazenaremos as informações acima em um dicionário: traders_eden.

traders_eden = {}

for ticker in tickers:

    mme8 = df[ticker].ewm(span=8).mean()
    mme80 = df[ticker].ewm(span=80).mean()

    if (mme8[-1] > mme8[-2]) & (mme80[-1] > mme80[-2]):
        traders_eden[ticker] = {"long": 1, "short": 0}

    elif (mme8[-1] < mme8[-2]) & (mme80[-1] < mme80[-2]):
        traders_eden[ticker] = {"long": 0, "short": 1}
        
    else:
        traders_eden[ticker] = {"long": 0, "short": 0}

Para uma melhor visualização dos dados, transformaremos nosso dicionário em um dataframe através da função from_dict, onde estabeleceremos que as chaves (no nosso caso, os ativos) representarão as linhas do dataframe (orient='index').

traders_eden = pd.DataFrame.from_dict(traders_eden, orient='index')
traders_eden
long short
VALE3.SA 1 0
PETR4.SA 1 0
ITUB4.SA 0 0
BBDC4.SA 0 0
B3SA3.SA 0 1
... ... ...
BBRK3.SA 1 0
KEPL3.SA 1 0
IFCM3.SA 1 0
TCSA3.SA 1 0
BOAS3.SA 1 0

200 rows × 2 columns

Pronto! Temos um dataframe classificando os 200 ativos mais líquidos da bolsa entre Éden dos Traders de compra e venda. Podemos utilizá-lo para filtrar os ativos que estão mais propensos a traders de compra/venda, nos auxiliando na hora de efetuar uma operação.

Filtrando os ativos pelo Éden dos Traders de compra ou venda

Para consultar nosso dataframe é fácil: basta utilizar um filtro (filter), onde a coluna desejada (long ou short) deverá ser igual a 1.

filter = traders_eden["long"] == 1
traders_eden[filter]
long short
VALE3.SA 1 0
PETR4.SA 1 0
PETR3.SA 1 0
VVAR3.SA 1 0
MGLU3.SA 1 0
BIDI11.SA 1 0
BRDT3.SA 1 0
MRFG3.SA 1 0
BRAP4.SA 1 0
CVCB3.SA 1 0
EQTL3.SA 1 0
BIDI4.SA 1 0
CASH3.SA 1 0
ALPA4.SA 1 0
PETZ3.SA 1 0
RRRP3.SA 1 0
AMAR3.SA 1 0
VIVR3.SA 1 0
CXSE3.SA 1 0
WIZS3.SA 1 0
DTEX3.SA 1 0
PTBL3.SA 1 0
MOVI3.SA 1 0
MDIA3.SA 1 0
JHSF3.SA 1 0
VAMO3.SA 1 0
ANIM3.SA 1 0
ENAT3.SA 1 0
BKBR3.SA 1 0
TEND3.SA 1 0
BMOB3.SA 1 0
DIRR3.SA 1 0
FESA4.SA 1 0
AMBP3.SA 1 0
BIDI3.SA 1 0
POMO4.SA 1 0
PNVL3.SA 1 0
MODL11.SA 1 0
TPIS3.SA 1 0
GRND3.SA 1 0
RECV3.SA 1 0
MILS3.SA 1 0
SAPR4.SA 1 0
BLAU3.SA 1 0
SQIA3.SA 1 0
DMMO3.SA 1 0
LOGG3.SA 1 0
BBRK3.SA 1 0
KEPL3.SA 1 0
IFCM3.SA 1 0
TCSA3.SA 1 0
BOAS3.SA 1 0
short = traders_eden["short"] == 1
traders_eden[short]
long short
B3SA3.SA 0 1
ABEV3.SA 0 1
SUZB3.SA 0 1
JBSS3.SA 0 1
WEGE3.SA 0 1
... ... ...
MTRE3.SA 0 1
CAML3.SA 0 1
LOGN3.SA 0 1
CPLE3.SA 0 1
TRIS3.SA 0 1

64 rows × 2 columns

Conclusão

No artigo de hoje aprendemos não só a fazer o web scraping dos 200 ativos mais líquidos da bolsa, mas também a calcular se esse ativo está no Éden dos Traders.

Esse tipo de filtro é mais uma das diversas ferramentas que podemos utilizar para avaliar a tendência de um ativo. Além disso, você pode utilizar a lista dos ativos mais líquidos para estudar diferentes backtests de estratégias. Não se esqueça de rodar o código de tempos em tempos para atualizar a lista dos ativos de acordo com a liquidez.

Para facilitar a vida dos nossos leitores, estamos inaugurando o Éden dos Traders como nossa mais nova ferrameta, onde os dados são obtidos da plataforma MetaTrader e as informações são atualizadas periodicamente.

Se o conteúdo da QuantBrasil é revelante para você, não deixa de se inscrever na nossa newsletter e participar do nosso grupo no Telegram. Nele tiramos dúvidas dos nosso leitores, além de atender a pedidos de análises quantitativas sobre o mercado financeiro.


Ainda não é cadastrado? Crie sua conta e leia com conforto habilitando o modo noturno. É de graça!
Criar conta
Não leva nem 1 minuto!