Uma aplicação importante de técnicas de machine learning e inteligência artificial é o trading. Mas, as aplicações destas técnicas devem ser feitas apenas após os algoritmos terem sido testados exaustivamente com dados do mercado em situações controladas. Portanto, a obtenção de dados é uma etapa essencial em machine learning e outras técnicas de inteligência artificial. Neste post, vamos explicar como é possível obter facilmente dados do mercado financeiro com o Yahoo Finance acessado através do Python.
Yahoo Finance é um portal e API que oferece uma gama excelente de dados de mercado sobre ações, moedas, criptomoedas, entre outros. Ele possibilita a obtenção tanto de informações sobre diferentes empresas quanto de dados históricos de mercado e tudo isso sem nenhum custo.
Como acessar os dados do Yahoo Finance com Python?
Instalação
Para instalar através do pip:
pip install yfinance
Para instalar através do conda:
conda install -c conda-forge yfinance
Baixando dados
Primeiro, a biblioteca precisa ser importada.
import yfinance as yf
Para obter dados, é possível fazer download de um único ticker com o objeto Ticker ou de múltiplos tickers com o método download. Abaixo mostramos como acessar um único ticker usando como exemplo a Microsoft (MSFT):
msft = yf.Ticker("MSFT")
Existem vários métodos que podem ser usados para obter dados do objeto retornado como mostrado na imagem abaixo.
No exemplo abaixo, selecionamos o método history. A maioria dos métodos tem significado bem intuitivo. No caso do history, ele retorna o histórico de dados de um ticker. Ele pode ser usado com um período especificado como no exemplo, mas também tem várias outras opções como intervalo e ajustes.
hist = msft.history('MSFT', start='2010-1-1', end='2020-1-1', auto_adjust=True)
print(hist)
Esse é o resultado obtido para o código acima.
Open High Low Close Volume Dividends Stock Splits
Date
2010-01-04 00:00:00-05:00 23.271758 23.636566 23.248957 23.522564 38409100 0.0 0.0
2010-01-05 00:00:00-05:00 23.446569 23.636574 23.286965 23.530170 49749600 0.0 0.0
2010-01-06 00:00:00-05:00 23.469362 23.621367 23.195757 23.385761 58182400 0.0 0.0
2010-01-07 00:00:00-05:00 23.279353 23.332556 22.944947 23.142551 50559700 0.0 0.0
2010-01-08 00:00:00-05:00 23.013348 23.469358 22.982947 23.302155 51197400 0.0 0.0
... ... ... ... ... ... ... ...
2019-12-24 00:00:00-05:00 152.061699 152.283797 151.714085 151.965149 8989200 0.0 0.0
2019-12-26 00:00:00-05:00 152.138975 153.268718 151.984477 153.210785 14520600 0.0 0.0
2019-12-27 00:00:00-05:00 153.963915 154.060480 152.776239 153.490784 18412800 0.0 0.0
2019-12-30 00:00:00-05:00 153.519732 153.548699 151.337481 152.167892 16348400 0.0 0.0
2019-12-31 00:00:00-05:00 151.376159 152.341753 151.067162 152.274155 18369400 0.0 0.0
[2516 rows x 7 columns]
Abaixo mostramos como especificar o período com intervalos de um mês usando o ticker da Google.
goog = yf.Ticker('goog')
data = goog.history(interval='1mo', start='2022-01-03', end='2022-07-03')
print(data)
Esse é o resultado obtido.
Open High Low Close Volume Dividends Stock Splits
Date
2022-02-01 00:00:00-05:00 137.835007 152.100006 124.764503 134.891006 732650000 0.0 0.0
2022-03-01 00:00:00-05:00 134.479996 144.162506 125.860748 139.649506 637420000 0.0 0.0
2022-04-01 00:00:00-04:00 140.009995 144.043747 113.124252 114.966499 564940000 0.0 0.0
2022-05-01 00:00:00-04:00 113.906502 123.142998 102.208000 114.039001 717486000 0.0 0.0
2022-06-01 00:00:00-04:00 114.931503 119.398499 105.628548 109.372498 627132000 0.0 0.0
2022-07-01 00:00:00-04:00 108.336998 120.434998 104.760002 116.639999 638766600 0.0 0.0
Baixando múltiplos tickers simultaneamente
O processo para baixar dados de vários tickes simultaneamente é bem simples também. Abaixo mostramos em exemplo com os tickers da Google e Meta.
data = yf.download(['GOOG','META'], period='1mo')
print(data.head())
Adj Close Close High Low Open Volume
GOOG META GOOG META GOOG META GOOG META GOOG META GOOG META
Date
2023-09-18 138.960007 302.549988 138.960007 302.549988 139.929993 303.600006 137.630005 297.799988 137.630005 298.190002 16233600 14234200
2023-09-19 138.830002 305.070007 138.830002 305.070007 139.175003 306.170013 137.500000 299.809998 138.250000 302.480011 15479100 15924400
2023-09-20 134.589996 299.670013 134.589996 299.670013 138.839996 308.059998 134.520004 299.429993 138.830002 305.049988 21473500 19379500
2023-09-21 131.360001 295.730011 131.360001 295.730011 133.190002 300.260010 131.089996 293.269989 132.389999 295.700012 22042700 21300500
2023-09-22 131.250000 299.079987 131.250000 299.079987 133.009995 305.380005 130.509995 298.269989 131.679993 299.299988 17348700 25369600
Existem várias outras informações que podem ser obtidas com o yfinance. Se você tem interesse, consulte a documentação oficial.