O pacote BatchGetSymbols foi criado pelo professor Marcelo Perlin (http://professor.ufrgs.br/marceloperlin/) e é uma ótima ferramente para baixar cotações das ações listadas na Bovespa (B3). Vamos mostrar com funcionar e fazer alguns gráficos:
require(BatchGetSymbols)
require(tidyverse)
require(ggplot2)
require(Amelia)
require(reshape2)
require(ggthemes)
require(plyr)
### tente usar esses pacotes, serão necessários para os gráficos e depois para manipualr os dados
Esses são os comandos básicos, você pode dar os nomes que quiser para os objetos
acao<-c('PETR4.SA') #aqui é o nome da ação
bg<-'2014-01-01' #o período inicial, geralmente após os anos 2000
lst<-Sys.Date() #aqui coloquei a data de hoje, mas poderia ser qualquer outra
bench<-'^BVSP'
data<-BatchGetSymbols(tickers = acao,bench.ticker = bench,
first.date = bg,last.date = lst) #comando que irá baixar os dados no Yahoo Finance
##
## Running BatchGetSymbols for:
## tickers = PETR4.SA
## Downloading data for benchmark ticker | Found cache file
## PETR4.SA | yahoo (1|1) | Found cache file - Good stuff!
data1<-data$df.tickers #irá armazenar nessa nova base apenas as informações que interessam
O problema é que alguma séries não baixam de forma completas, apresentando os famosos NA’s. Uma forma de filtar isso é usando o comando abaixo:
data2<-data1[complete.cases(data1),]
head(data2) #para você verificar como os dados estão organizados e o tipo de informação disponível, como preço de abertura, de fechamento, máximo, mínimo, retornos.
## price.open price.high price.low price.close volume price.adjusted
## 2 16.74 16.78 16.41 16.50 17837600 15.34375
## 3 16.45 16.64 16.16 16.62 20526500 15.45534
## 4 16.65 16.83 16.12 16.16 19052500 15.02758
## 5 16.27 16.39 16.14 16.19 15874600 15.05547
## 6 16.19 16.29 15.65 15.70 25871700 14.59981
## 7 15.76 16.30 15.66 15.97 30221300 14.85089
## ref.date ticker ret.adjusted.prices ret.closing.prices
## 2 2014-01-03 PETR4.SA -0.014925499 -0.014925373
## 3 2014-01-06 PETR4.SA 0.007272930 0.007272788
## 4 2014-01-07 PETR4.SA -0.027677552 -0.027677555
## 5 2014-01-08 PETR4.SA 0.001856387 0.001856498
## 6 2014-01-09 PETR4.SA -0.030265541 -0.030265656
## 7 2014-01-10 PETR4.SA 0.017197416 0.017197452
Bem, agora podemos brincar de qualquer forma com as séries. Vamos fazer um gráfico, com o padrão da FiveThirtyEight (https://fivethirtyeight.com/)
p<-ggplot(data2,aes(ref.date,price.close))+geom_line(color='#006600')
p + labs(x = "",y='Preço Fechamento',title="Cotação Diária da PETR4",
subtitle = "Período: de 01/01/2014 a 23/11/2018",
caption = "Fonte: B3 Elaboração: Arthur Lula Mota")+
theme_fivethirtyeight()
Também é possível baixar informações de um grupo de ações de uma vez só, de forma muito fácil.
acao1<-c('PETR4.SA','VALE3.SA','GGBR4') #aqui são os nomes dos papeis, vou dar 3 como exemplo, mas podem ser vários
bg<-'2014-01-01' #o período inicial, geralmente após os anos 2000
lst<-Sys.Date() #aqui coloquei a data de hoje, mas poderia ser qualquer outra
bench<-'^BVSP'
data2<-BatchGetSymbols(tickers = acao1,bench.ticker = bench,
first.date = bg,last.date = lst) #comando que irá baixar os
##
## Running BatchGetSymbols for:
## tickers = PETR4.SA, VALE3.SA, GGBR4
## Downloading data for benchmark ticker | Found cache file
## PETR4.SA | yahoo (1|3) | Found cache file - Good stuff!
## VALE3.SA | yahoo (2|3) | Found cache file - Good job!
## GGBR4 | yahoo (3|3) | Found cache file - Error in download..
data3<-data2$df.tickers
data4<-data3[complete.cases(data3),] # tirando os NA's
As séries baixadas estão empilhadas, uma em cima da outra. Dependendo do tipo de trabalho que você está fazendo, isso pode ser muito útil. Por outro lado, se você quiser selecionar e verificar ações específicas, basta usar o comando abaixo:
data5<-dlply(data4, .(ticker), function(x) {rownames(x) = x$row;x$row = NULL;x})
vale3<-data5$VALE3.SA #vamos pegar a cotação da VALE3, por exemplo
p1<-ggplot(vale3,aes(ref.date,price.close))+geom_line(color='#006600')
p1 + labs(x = "",y='Preço Fechamento',title="Cotação Diária da VALE3",
subtitle = "Período: de 01/01/2014 a 23/11/2018",
caption = "Fonte: B3 Elaboração: Arthur Lula Mota")+
theme_fivethirtyeight()
Por fim, se você precisa de TODOS os papeis do Ibovespa ou S&P 500, a forma mais fácil é usando so seguintes comandos naquele campo “ações”
acoes<-GetIbovStocks()$tickers # no caso do Bovespa
# OU
acoes1<-GetSP500Stocks()$tickers #no caso do S&P
head(acoes) # para você ver alguns exemplos dessa sua nova base
## [1] "ABEV3" "B3SA3" "BBAS3" "BBDC3" "BBDC4" "BBSE3"
Depois disso é só usar os comandos da seção 4 para selecionar qual papel você deseja analisar.
Bom, foram apresentado rapidamente uma função bastante prática do R para baixar cotações históricas de ações brasileiras, bem como a manipulação para elaborar gráficos. Naturalmente você pode utilzar as bases para regressões, projeções ou qualquer outra análise desejada.