1 Pacote BatchGetSymbols

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

2 A programação inicial

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

3 Fazendo gráficos

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()

4 Baixando mais de uma ação

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()

5 Baixando todas as séries do S&P 500 ou Bovespa

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.

6 Conclusão

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.