Capítulo 3 Fontes de dados financeiros

3.1 Pacotes

Alguns pacotes do R são ótimas fontes de dados financeiros, sem haver necessidade de buscar em fontes externas.

library(quantmod)
## Warning: package 'quantmod' was built under R version 4.0.2
## Loading required package: xts
## Warning: package 'xts' was built under R version 4.0.2
## Loading required package: zoo
## Warning: package 'zoo' was built under R version 4.0.2
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## 
## Attaching package: 'xts'
## The following objects are masked from 'package:dplyr':
## 
##     first, last
## Loading required package: TTR
## Warning: package 'TTR' was built under R version 4.0.2
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## Version 0.4-0 included new data defaults. See ?getSymbols.
library(rbcb)
library(GetTDData)
## Warning: package 'GetTDData' was built under R version 4.0.2
library(tidyverse)

3.1.1 quantmod: séries de preços de ações e índices

O pacote quantmod é uma ótima ferramenta para obter dados de cotações de ações e índices. Funciona muito bem para o mercado brasileiro, apesar de, para alguns ativos, como ETF, existir alguns bugs.

Possui a função getSymbols(), que utiliza a API do Yahoo Finance para obter os dados das cotações. Veja como pode ser usada:

dolar <- getSymbols("USDBRL=x", auto.assign = FALSE)
## 'getSymbols' currently uses auto.assign=TRUE by default, but will
## use auto.assign=FALSE in 0.5-0. You will still be able to use
## 'loadSymbols' to automatically load data. getOption("getSymbols.env")
## and getOption("getSymbols.auto.assign") will still be checked for
## alternate defaults.
## 
## This message is shown once per session and may be disabled by setting 
## options("getSymbols.warning4.0"=FALSE). See ?getSymbols for details.
## Warning: USDBRL=x contains missing values. Some functions will not work if
## objects contain missing values in the middle of the series. Consider using
## na.omit(), na.approx(), na.fill(), etc to remove or replace them.

Na tabela abaixo vemos uma amostra dos dados:

head(dolar)
##            USDBRL=X.Open USDBRL=X.High USDBRL=X.Low USDBRL=X.Close
## 2007-01-01        2.1310        2.1325       2.1310         2.1325
## 2007-01-02        2.1335        2.1432       2.1295         2.1310
## 2007-01-03        2.1310        2.1351       2.1278         2.1345
## 2007-01-04        2.1345        2.1430       2.1345         2.1390
## 2007-01-05        2.1390        2.1525       2.1345         2.1470
## 2007-01-08        2.1485        2.1492       2.1425         2.1465
##            USDBRL=X.Volume USDBRL=X.Adjusted
## 2007-01-01               0            2.1325
## 2007-01-02               0            2.1310
## 2007-01-03               0            2.1345
## 2007-01-04               0            2.1390
## 2007-01-05               0            2.1470
## 2007-01-08               0            2.1465

A função retornou uma tabela com colunas de preço de abertura, maior e menor preço do dia, preço de fechamento, volume negociado e preço ajustado (por conta de fatores como dividendos, split, etc).

Na verdade, o objeto acima não é um data.frame. Veja a classe dele:

class(dolar)
## [1] "xts" "zoo"

O objeto é das classes xts e zoo, que eram muito usadas no passado. Atualmente, tem-se preferido usar dados na classe data.frame. Contudo, muitos pacotes ainda usam o xts como classe principal, sendo assim importante conhecer essas classes. Voltaremos a falar sobre xts em breve.

Para obter cotações de uma ação do mercado brasileiro, deve-se usar o sufixo “.SA” com o código da ação. Além disso, pode-se alterar outros parâmetros da função, como a data de início da série, para modificar o objeto de retorno:

itausa <- getSymbols("ITSA4.SA", 
                     auto.assign = FALSE, 
                     from = "2019-01-01",
                     to = "2020-01-02", 
                     periodicity = "monthly")
itausa
##            ITSA4.SA.Open ITSA4.SA.High ITSA4.SA.Low ITSA4.SA.Close
## 2019-01-01         12.08         13.71        12.08          13.50
## 2019-02-01         13.50         13.80        12.33          12.37
## 2019-03-01         12.40         13.04        11.36          11.98
## 2019-04-01         12.10         12.15        11.31          11.91
## 2019-05-01         11.91         12.45        11.02          12.39
## 2019-06-01         12.42         13.07        11.83          12.89
## 2019-07-01         13.00         13.49        12.43          12.47
## 2019-08-01         12.56         13.16        11.67          12.29
## 2019-09-01         12.27         13.44        11.90          13.18
## 2019-10-01         13.20         13.99        12.11          13.71
## 2019-11-01         13.75         14.25        13.00          13.27
## 2019-12-01         13.31         14.26        13.26          14.09
## 2020-01-01         14.09         14.38        12.72          12.86
##            ITSA4.SA.Volume ITSA4.SA.Adjusted
## 2019-01-01       601458600          12.14321
## 2019-02-01       717154000          11.12678
## 2019-03-01       455097200          11.14858
## 2019-04-01       371836700          11.10139
## 2019-05-01       479823200          11.54880
## 2019-06-01       498662200          12.01485
## 2019-07-01       358912200          11.64216
## 2019-08-01       533774500          11.47411
## 2019-09-01       422719300          12.64130
## 2019-10-01       391134100          13.17108
## 2019-11-01       334994100          12.74837
## 2019-12-01       338858800          13.53614
## 2020-01-01       407079600          12.37855

3.1.2 rbcb: séries de preços de moedas: Mostrar helpers bid e ask

O pacote rbcb foi criado para permitir que o R interaja com a API do Banco Central do Brasil, o Sistema Gerenciador de Séries Temporais (SGS). Para saber quais séries temporais podem ser obtidas com o pacote, recomenda-se ler a documentação do SGS.

Vamos aos principais usos do pacote:

  • Função get_series()

Essa função é usada para baixar dados de uma série temporal. É necessário informar o código da série temporal na API do Bacen. Caso seja desconhecida, você pode usar a função search_series():

rbcb::search_series("dólar diário")
## 
## Dataset: Taxa de câmbio - Livre - Dólar americano (venda) - diário 
## Code: 1 
## Conceito: Para efeito das séries temporais, as taxas de câmbio foram agrupadas em dois módulos: I - Taxas administradas ou taxas livres, abrangendo todo o período, desde 1899 e,... 
## URL: http://dadosabertos.bcb.gov.br/dataset/1-taxa-de-cambio---livre---dolar-americano-venda---diario 
## 
## Dataset: Taxas de Câmbio - todos os boletins diários 
## Code: NA 
## Conceito:
## Séries de boletins diários de taxas de câmbio disponíveis desde 2 de janeiro de 2002, para o euro, e desde 28 de novembro de 1984, para as demais moedas. Para o dólar,... 
## URL: http://dadosabertos.bcb.gov.br/dataset/taxas-de-cambio-todos-os-boletins-diarios 
## 
## Dataset: Dólar comercial (venda e compra) - cotações diárias 
## Code: NA 
## Disponível desde 28.11.1984, refere-se às taxas administradas até março de 1990 e às taxas livres a partir de então (Resolução 1690, de 18.3.1990). As taxas administradas são... 
## URL: http://dadosabertos.bcb.gov.br/dataset/dolar-americano-usd-todos-os-boletins-diarios 
## 
## 3 results 
## Pagination 1 / 1

Vemos, portanto, que o código da série temporal do dólar é 1. Portanto, a usamos como input de get_series():

x <- rbcb::get_series(code = c(dolar = 1))
class(x)
## [1] "tbl_df"     "tbl"        "data.frame"
tail(x)
## # A tibble: 6 x 2
##   date       dolar
##   <date>     <dbl>
## 1 2020-12-31  5.20
## 2 2021-01-04  5.16
## 3 2021-01-05  5.33
## 4 2021-01-06  5.32
## 5 2021-01-07  5.34
## 6 2021-01-08  5.37

Outro item interessante que pode ser baixado é o IPCA. Além disso, outros paràmetros da função podem ser manipulados:

df_ipca <- get_series(code = c(ipca = 433),
                      start_date = "2019-06-01",
                      end_date = "2019-12-01")
df_ipca
## # A tibble: 7 x 2
##   date        ipca
##   <date>     <dbl>
## 1 2019-06-01  0.01
## 2 2019-07-01  0.19
## 3 2019-08-01  0.11
## 4 2019-09-01 -0.04
## 5 2019-10-01  0.1 
## 6 2019-11-01  0.51
## 7 2019-12-01  1.15

Também é possível baixar mais de uma série temporal em apenas uma chamada da função:

inflacao <- get_series(c(IPCA = 433, IGPM = 189), last = 12, as = "tibble")

Nesse caso, contudo, o objeto retornado é uma lista de data frames:

class(inflacao)
## [1] "list"
map(inflacao, class)
## $IPCA
## [1] "tbl_df"     "tbl"        "data.frame"
## 
## $IGPM
## [1] "tbl_df"     "tbl"        "data.frame"
map(inflacao, head)
## $IPCA
## # A tibble: 6 x 2
##   date        IPCA
##   <date>     <dbl>
## 1 2019-12-01  1.15
## 2 2020-01-01  0.21
## 3 2020-02-01  0.25
## 4 2020-03-01  0.07
## 5 2020-04-01 -0.31
## 6 2020-05-01 -0.38
## 
## $IGPM
## # A tibble: 6 x 2
##   date        IGPM
##   <date>     <dbl>
## 1 2020-01-01  0.48
## 2 2020-02-01 -0.04
## 3 2020-03-01  1.24
## 4 2020-04-01  0.8 
## 5 2020-05-01  0.28
## 6 2020-06-01  1.56

Caso você deseje que o objeto de output acima seja um tibble, pode-se usar a função customizada abaixo:

df_inflacao <- reduce(inflacao, left_join, by = "date")
head(df_inflacao)
## # A tibble: 6 x 3
##   date        IPCA  IGPM
##   <date>     <dbl> <dbl>
## 1 2019-12-01  1.15 NA   
## 2 2020-01-01  0.21  0.48
## 3 2020-02-01  0.25 -0.04
## 4 2020-03-01  0.07  1.24
## 5 2020-04-01 -0.31  0.8 
## 6 2020-05-01 -0.38  0.28

3.1.3 GetTDData: séries de preços do tesouro direto

O pacote GetTDData facilita a obtenção de dados históricos do Tesouro Direto, que disponibiliza, em seu site, arquivos xlsx de seus ativos de renda fixa.

Os ativos que podem ser baixados com o pacote são os dos códigos LFT, LTN, NTN-C, NTN-B, NTN-B Principal e NTN-F.

No exemplo abaixo, obtemos

ativo <- "LFT"
# baixar arquivo
x <- download.TD.data(ativo)
## 
## Downloading html page (attempt = 1|10)
## Downloading file TD Files/LFT_2021.xls (1-20) Downloading...
## Downloading file TD Files/LFT_2020.xls (2-20) Found file in folder, skipping it.
## Downloading file TD Files/LFT_2019.xls (3-20) Found file in folder, skipping it.
## Downloading file TD Files/LFT_2018.xls (4-20) Found file in folder, skipping it.
## Downloading file TD Files/LFT_2017.xls (5-20) Found file in folder, skipping it.
## Downloading file TD Files/LFT_2016.xls (6-20) Found file in folder, skipping it.
## Downloading file TD Files/LFT_2015.xls (7-20) Found file in folder, skipping it.
## Downloading file TD Files/LFT_2014.xls (8-20) Found file in folder, skipping it.
## Downloading file TD Files/LFT_2013.xls (9-20) Found file in folder, skipping it.
## Downloading file TD Files/LFT_2012.xls (10-20) Found file in folder, skipping it.
## Downloading file TD Files/LFT_2011.xls (11-20) Found file in folder, skipping it.
## Downloading file TD Files/LFT_2010.xls (12-20) Found file in folder, skipping it.
## Downloading file TD Files/LFT_2009.xls (13-20) Found file in folder, skipping it.
## Downloading file TD Files/LFT_2008.xls (14-20) Found file in folder, skipping it.
## Downloading file TD Files/LFT_2007.xls (15-20) Found file in folder, skipping it.
## Downloading file TD Files/LFT_2006.xls (16-20) Found file in folder, skipping it.
## Downloading file TD Files/LFT_2005.xls (17-20) Found file in folder, skipping it.
## Downloading file TD Files/LFT_2004.xls (18-20) Found file in folder, skipping it.
## Downloading file TD Files/LFT_2003.xls (19-20) Found file in folder, skipping it.
## Downloading file TD Files/LFT_2002.xls (20-20) Found file in folder, skipping it.

Veja que o código nos avisa que foi criada uma pasta chamada TD Files onde foram baixados os arquivos do ativo.

Para importar esses arquivos para o R, usamos uma outra função do pacote:

## 
## Reading xls data and saving to data.frame
##  Reading File = TD Files/LFT_2002.xls
##     Reading Sheet LFT 210104
##     Reading Sheet LFT 160205
##     Reading Sheet LFT 180106
##     Reading Sheet LFT 170107
##  Reading File = TD Files/LFT_2003.xls
##     Reading Sheet LFT 210104
##     Reading Sheet LFT 160205
##     Reading Sheet LFT 180106
##     Reading Sheet LFT 170107
##     Reading Sheet LFT 180608
##  Reading File = TD Files/LFT_2004.xls
##     Reading Sheet LFT 210104
##     Reading Sheet LFT 160205
##     Reading Sheet LFT 180106
##     Reading Sheet LFT 170107
##     Reading Sheet LFT 180608
##     Reading Sheet LFT 180309
##  Reading File = TD Files/LFT_2005.xls
##     Reading Sheet LFT 160205
##     Reading Sheet LFT 180106
##     Reading Sheet LFT 170107
##     Reading Sheet LFT 180608
##     Reading Sheet LFT 180309
##     Reading Sheet LFT 170310
##  Reading File = TD Files/LFT_2006.xls
##     Reading Sheet LFT 180106
##     Reading Sheet LFT 170107
##     Reading Sheet LFT 180608
##     Reading Sheet LFT 180309
##     Reading Sheet LFT 170310
##     Reading Sheet LFT 160311
##     Reading Sheet LFT 070312
##  Reading File = TD Files/LFT_2007.xls
##     Reading Sheet LFT 170107
##     Reading Sheet LFT 180608
##     Reading Sheet LFT 180309
##     Reading Sheet LFT 170310
##     Reading Sheet LFT 160311
##     Reading Sheet LFT 070312
##     Reading Sheet LFT 070313
##  Reading File = TD Files/LFT_2008.xls
##     Reading Sheet LFT 180608
##     Reading Sheet LFT 180309
##     Reading Sheet LFT 170310
##     Reading Sheet LFT 160311
##     Reading Sheet LFT 070312
##     Reading Sheet LFT 070313
##     Reading Sheet LFT 070314
##  Reading File = TD Files/LFT_2009.xls
##     Reading Sheet LFT 180309
##     Reading Sheet LFT 170310
##     Reading Sheet LFT 160311
##     Reading Sheet LFT 070312
##     Reading Sheet LFT 070313
##     Reading Sheet LFT 070314
##  Reading File = TD Files/LFT_2010.xls
##     Reading Sheet LFT 170310
##     Reading Sheet LFT 160311
##     Reading Sheet LFT 070312
##     Reading Sheet LFT 070313
##     Reading Sheet LFT 070314
##     Reading Sheet LFT 070315
##  Reading File = TD Files/LFT_2011.xls
##     Reading Sheet LFT 160311
##     Reading Sheet LFT 070312
##     Reading Sheet LFT 070313
##     Reading Sheet LFT 070314
##     Reading Sheet LFT 070315
##     Reading Sheet LFT 070317
##  Reading File = TD Files/LFT_2012.xls
##     Reading Sheet LFT 070312
##     Reading Sheet LFT 070313
##     Reading Sheet LFT 070314
##     Reading Sheet LFT 070315
##     Reading Sheet LFT 070317
##  Reading File = TD Files/LFT_2013.xls
##     Reading Sheet LFT 070313
##     Reading Sheet LFT 070314
##     Reading Sheet LFT 070315
##     Reading Sheet LFT 070317
##  Reading File = TD Files/LFT_2014.xls
##     Reading Sheet LFT 070314
##     Reading Sheet LFT 070315
##     Reading Sheet LFT 070317
##  Reading File = TD Files/LFT_2015.xls
##     Reading Sheet LFT 070315
##     Reading Sheet LFT 070317
##     Reading Sheet LFT 010321
##  Reading File = TD Files/LFT_2016.xls
##     Reading Sheet LFT 070317
##     Reading Sheet LFT 010321
##  Reading File = TD Files/LFT_2017.xls
##     Reading Sheet LFT 070317
##     Reading Sheet LFT 010321
##     Reading Sheet LFT 010323
##  Reading File = TD Files/LFT_2018.xls
##     Reading Sheet LFT 010321
##     Reading Sheet LFT 010323
##  Reading File = TD Files/LFT_2019.xls
##     Reading Sheet LFT 010321
##     Reading Sheet LFT 010323
##     Reading Sheet LFT 010325
##  Reading File = TD Files/LFT_2020.xls
##     Reading Sheet LFT 010321
##     Reading Sheet LFT 010323
##     Reading Sheet LFT 010325
##  Reading File = TD Files/LFT_2021.xls
##     Reading Sheet LFT 010321
##     Reading Sheet LFT 010323
##     Reading Sheet LFT 010325
class(lft)
## [1] "data.frame"
head(lft)
##     ref.date yield.bid price.bid asset.code matur.date
## 4 2002-01-07    0.0024   1263.01 LFT 210104 2004-01-21
## 5 2002-01-08    0.0024   1263.90 LFT 210104 2004-01-21
## 6 2002-01-09    0.0024   1264.79 LFT 210104 2004-01-21
## 7 2002-01-10    0.0024   1265.67 LFT 210104 2004-01-21
## 8 2002-01-11    0.0023   1266.82 LFT 210104 2004-01-21
## 9 2002-01-14    0.0023   1267.71 LFT 210104 2004-01-21

3.2 Manipulação de dados com xts e quantmod

Conforme foi mencionado, objetos retornados pelo pacote quantmod (e por outros importantes pacotes R para Finanças) são da classe xts, por isso é importante conhecer alguns principios básicos de manipulação de dados com o pacote xts.

library(xts)

Vamos voltar a usar um objeto dessa classe do pacote quantmod:

itausa <- getSymbols("ITSA4.SA", 
                     auto.assign = FALSE, 
                     from = "2018-01-01",
                     to = "2020-01-01", 
                     periodicity = "daily")
## Warning: ITSA4.SA contains missing values. Some functions will not work if
## objects contain missing values in the middle of the series. Consider using
## na.omit(), na.approx(), na.fill(), etc to remove or replace them.
head(itausa)
##            ITSA4.SA.Open ITSA4.SA.High ITSA4.SA.Low ITSA4.SA.Close
## 2018-01-02       9.88182       10.0273      9.86364        10.0273
## 2018-01-03       9.98182       10.1818      9.94545        10.1455
## 2018-01-04      10.17270       10.3636     10.15450        10.3364
## 2018-01-05      10.33640       10.3545     10.22730        10.3545
## 2018-01-08      10.30000       10.3455     10.25450        10.3455
## 2018-01-09      10.35450       10.3545     10.17270        10.1818
##            ITSA4.SA.Volume ITSA4.SA.Adjusted
## 2018-01-02        14040950          8.365980
## 2018-01-03        13498870          8.464596
## 2018-01-04        14303520          8.623869
## 2018-01-05        10845010          8.638971
## 2018-01-08        11024750          8.631462
## 2018-01-09        24859010          8.494882

Um objeto xts possui dois principais elementos:

  • coredata: o vetor ou matriz referente aos dados.
head(coredata(itausa))
##      ITSA4.SA.Open ITSA4.SA.High ITSA4.SA.Low ITSA4.SA.Close ITSA4.SA.Volume
## [1,]       9.88182       10.0273      9.86364        10.0273        14040950
## [2,]       9.98182       10.1818      9.94545        10.1455        13498870
## [3,]      10.17270       10.3636     10.15450        10.3364        14303520
## [4,]      10.33640       10.3545     10.22730        10.3545        10845010
## [5,]      10.30000       10.3455     10.25450        10.3455        11024750
## [6,]      10.35450       10.3545     10.17270        10.1818        24859010
##      ITSA4.SA.Adjusted
## [1,]          8.365980
## [2,]          8.464596
## [3,]          8.623869
## [4,]          8.638971
## [5,]          8.631462
## [6,]          8.494882
  • index: vetor referente às datas
head(index(itausa))
## [1] "2018-01-02" "2018-01-03" "2018-01-04" "2018-01-05" "2018-01-08"
## [6] "2018-01-09"

3.2.1 Funções úteis para objetos xts

Para estimar a periocidade:

periodicity(itausa)
## Daily periodicity from 2018-01-02 to 2019-12-30

Converter a periodicidade:

# para anual
to.yearly(itausa)
## Warning in to.period(x, "years", name = name, ...): missing values removed from
## data
##            itausa.Open itausa.High itausa.Low itausa.Close itausa.Volume
## 2018-12-28     9.88182     13.1182       8.51        12.08    5109065710
## 2019-12-30    12.11000     14.2600      11.02        14.09    5488006700
##            itausa.Adjusted
## 2018-12-28        10.86592
## 2019-12-30        13.56250
# para mensal
head(to.monthly(itausa))
## Warning in to.period(x, "months", indexAt = indexAt, name = name, ...): missing
## values removed from data
##          itausa.Open itausa.High itausa.Low itausa.Close itausa.Volume
## jan 2018     9.88182     12.2909    9.86364      12.0455     374224180
## fev 2018    12.04550     13.1182   11.30000      11.9273     427770310
## mar 2018    11.97270     12.7182   11.90000      12.5364     302971900
## abr 2018    12.54550     12.6909   11.71820      12.3727     257677200
## mai 2018    12.29090     12.2909   10.06360      10.2091     525804620
## jun 2018    10.50000     10.6800    8.51000       9.1800     578588000
##          itausa.Adjusted
## jan 2018       10.049807
## fev 2018       10.436929
## mar 2018       10.982476
## abr 2018       10.839067
## mai 2018        8.943650
## jun 2018        8.052867
# para trimestral
head(to.quarterly(itausa))
## Warning in to.period(x, "quarters", indexAt = indexAt, name = name, ...):
## missing values removed from data
##         itausa.Open itausa.High itausa.Low itausa.Close itausa.Volume
## 2018 Q1     9.88182     13.1182    9.86364      12.5364    1104966390
## 2018 Q2    12.54550     12.6909    8.51000       9.1800    1362069820
## 2018 Q3     9.16000     11.0500    9.13000      10.1000    1219208900
## 2018 Q4    10.11000     12.6300    9.92000      12.0800    1422820600
## 2019 Q1    12.11000     13.8000   11.36000      11.9800    1757291600
## 2019 Q2    12.10000     13.0700   11.02000      12.8900    1350322100
##         itausa.Adjusted
## 2018 Q1       10.982476
## 2018 Q2        8.052867
## 2018 Q3        9.063995
## 2018 Q4       10.865923
## 2019 Q1       11.166636
## 2019 Q2       12.034278

Para converter um xts para data.frame:

head(fortify.zoo(itausa))
##        Index ITSA4.SA.Open ITSA4.SA.High ITSA4.SA.Low ITSA4.SA.Close
## 1 2018-01-02       9.88182       10.0273      9.86364        10.0273
## 2 2018-01-03       9.98182       10.1818      9.94545        10.1455
## 3 2018-01-04      10.17270       10.3636     10.15450        10.3364
## 4 2018-01-05      10.33640       10.3545     10.22730        10.3545
## 5 2018-01-08      10.30000       10.3455     10.25450        10.3455
## 6 2018-01-09      10.35450       10.3545     10.17270        10.1818
##   ITSA4.SA.Volume ITSA4.SA.Adjusted
## 1        14040950          8.365980
## 2        13498870          8.464596
## 3        14303520          8.623869
## 4        10845010          8.638971
## 5        11024750          8.631462
## 6        24859010          8.494882

3.3 Helpers do quantmod: Cl, Op, Hi, Lo

O pacote quantmod possui funções para auxiliar a extração de dados de objetos retornados por getSymbols():

# Obter apenas a serie de fechamento
head(Cl(itausa))
##            ITSA4.SA.Close
## 2018-01-02        10.0273
## 2018-01-03        10.1455
## 2018-01-04        10.3364
## 2018-01-05        10.3545
## 2018-01-08        10.3455
## 2018-01-09        10.1818
# serie de abertura
head(Op(itausa))
##            ITSA4.SA.Open
## 2018-01-02       9.88182
## 2018-01-03       9.98182
## 2018-01-04      10.17270
## 2018-01-05      10.33640
## 2018-01-08      10.30000
## 2018-01-09      10.35450
# serie do maior preço do período
head(Hi(itausa))
##            ITSA4.SA.High
## 2018-01-02       10.0273
## 2018-01-03       10.1818
## 2018-01-04       10.3636
## 2018-01-05       10.3545
## 2018-01-08       10.3455
## 2018-01-09       10.3545
# serie de preços ajustados
head(Ad(itausa))
##            ITSA4.SA.Adjusted
## 2018-01-02          8.365980
## 2018-01-03          8.464596
## 2018-01-04          8.623869
## 2018-01-05          8.638971
## 2018-01-08          8.631462
## 2018-01-09          8.494882

3.4 Funções de gráficos xts

Plotar um objeto xts é muito simples, basta usar a função plot():

plot(itausa)

O pacote quantmod possui outras funções interessantes para produzir gráficos de ativos financeiros:

chartSeries(itausa)

# candleChart dos 30 últitmos dias de itausa:
candleChart(tail(itausa, 30), type = "candlesticks")

Também é possível fazer rapidamente gráficos de indicadores de análise técnica:

chartSeries(itausa)

addSMA()

addMACD()

3.5 Juntar múltiplas séries temporais: fazer merge das séries de fechamento.

A função merge() é usada para juntar dois objetos xts em um só:

petr3 <- getSymbols("PETR3.SA", 
                     auto.assign = FALSE, 
                     from = "2018-01-01",
                     to = "2020-01-01", 
                     periodicity = "monthly")
petr3 <- Ad(petr3)

bbdc <- getSymbols("BBDC4.SA", 
                     auto.assign = FALSE, 
                     from = "2018-01-01",
                     to = "2020-01-01", 
                     periodicity = "monthly")
bbdc <- Ad(bbdc)

ibov <- getSymbols("^BVSP", 
                     auto.assign = FALSE, 
                     from = "2018-01-01",
                     to = "2020-01-01", 
                     periodicity = "monthly")
ibov <- Ad(ibov)
portfolio <- merge(petr3, bbdc, ibov)
head(portfolio)
##            PETR3.SA.Adjusted BBDC4.SA.Adjusted BVSP.Adjusted
## 2018-01-01          16.25078          30.52362         84913
## 2018-02-01          21.70834          25.92376         85481
## 2018-03-01          21.90526          26.42335         85366
## 2018-04-01          23.09617          25.44926         86115
## 2018-05-01          20.80812          21.48437         76754
## 2018-06-01          18.24192          19.82268         72763

3.6 Case

Calcular o IBOVESPA em Dólar

Dicas : Obter ^BVSP com quantmod, obter USDBRL com rbcb usando preço de venda (Ask) e fazer a conversão do IBOVESPA em dólar.