--- title: "B3 Indexes" output: rmarkdown::html_vignette vignette: > %\VignetteIndexEntry{B3 Indexes} %\VignetteEngine{knitr::rmarkdown} %\VignetteEncoding{UTF-8} --- ```{r, include = FALSE} knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) ``` `rb3` comes with a diverse range of functions to explore the index delivered by the B3 Exchange. These functions will be presented here. ```{r setup, message=FALSE, warning=FALSE} library(rb3) library(ggplot2) library(dplyr) library(stringr) ``` ## B3 Indexes The function `rb3::indexes_get` list the names of available indexes. ```{r indexes-get, eval=FALSE} indexes_get() ``` ```{r indexes-get-load, message=FALSE, warning=FALSE, echo=FALSE} indexes_get_ <- try(indexes_get(), silent = TRUE) if (is(indexes_get_, "try-error")) { load("indexes_get.rda") } indexes_get_ ``` ## Indexes Composition and Weights The composition of B3 indexes are available through the function `rb3::index_weights_get`. This function returns a data.frame with the current compostion of the requested index, all symbols that compound the index, their weights and theoretical position. Here the IBOVESPA (`IBOV`) Index has its composition listed. ```{r ibov-weights-get, eval=FALSE} index_weights_get("IBOV") ``` ```{r ibov-weights-get-load, message=FALSE, warning=FALSE, echo=FALSE} ibov_weights_get_ <- try(index_weights_get("IBOV"), silent = TRUE) if (is(ibov_weights_get_, "try-error")) { load("indexes_data.rda") } ibov_weights_get_ ``` The IBr100 Index (`IBXX`) ```{r ibxx-weights-get, eval=FALSE} index_weights_get("IBXX") ``` ```{r ibxx-weights-get-load, message=FALSE, warning=FALSE, echo=FALSE} ibxx_weights_get_ <- try(index_weights_get("IBXX"), silent = TRUE) if (is(ibxx_weights_get_, "try-error")) { load("indexes_data.rda") } ibxx_weights_get_ ``` The Small Caps Index (`SMLL`) ```{r smll-weights-get, eval=FALSE} index_weights_get("SMLL") ``` ```{r smll-weights-get-load, message=FALSE, warning=FALSE, echo=FALSE} smll_weights_get_ <- try(index_weights_get("SMLL"), silent = TRUE) if (is(smll_weights_get_, "try-error")) { load("indexes_data.rda") } smll_weights_get_ ``` ### Index Composition `rb3::index_comp_get` returns a vector with symbols that compound the given index. ```{r smll-comp-get, eval=FALSE} index_comp_get("SMLL") ``` ```{r smll-comp-get-load, message=FALSE, warning=FALSE, echo=FALSE} smll_comp_get_ <- try(index_comp_get("SMLL"), silent = TRUE) if (is(smll_comp_get_, "try-error")) { load("indexes_data.rda") } smll_comp_get_ ``` ### Index by Segment `rb3::index_by_segment_get` returns a data.frame with all stocks that are in the index, their economic segment, weights, position and segment weight in the index. ```{r ibov-by-segment-get, eval=FALSE} index_by_segment_get("IBOV") ``` ```{r ibov-by-segment-get-load, message=FALSE, warning=FALSE, echo=FALSE} ibov_by_segment_get_ <- try(index_by_segment_get("IBOV"), silent = TRUE) if (is(ibov_by_segment_get_, "try-error")) { load("indexes_data.rda") } ibov_by_segment_get_ ``` ## Indexes Time Series `rb3` downloads data from B3 website to build time series for B3 indexes. The function `rb3::index_get` downloads data from B3 for the given index name and returns data structured in a data.frame. The index names are obtained with `rb3::indexes_get` function. ```{r ibov-get-2019-load, message=FALSE, warning=FALSE, echo=FALSE} index_name <- "IBOV" index_data <- try(index_get(index_name, as.Date("2019-01-01")), silent = TRUE) if (is(index_data, "try-error")) { load("indexes_data.rda") index_data <- ibov_data_1 } ``` ```{r ibov-get-2019, eval=FALSE} index_name <- "IBOV" index_data <- index_get(index_name, as.Date("2019-01-01")) ``` ```{r ibov-get-2019-echo} head(index_data) ``` The returned data.frame has three columns: `refdate`, `index_name` and `value`. ```{r ibov-get-2019-plot, fig.width=7, fig.height=3} index_data |> ggplot(aes(x = refdate, y = value)) + geom_line() + labs( x = NULL, y = "Index", title = str_glue("{index_name} Historical Data"), caption = str_glue("Data imported using rb3") ) ``` The IBOVESPA index starts at 1968 and the series is adjusted for all economic events the that affected the Brazilian currency in the 80-90's decades. ```{r ibov-get-1968-load, message=FALSE, warning=FALSE, echo=FALSE} index_name <- "IBOV" index_data <- try(index_get(index_name, as.Date("1968-01-01")), silent = TRUE) if (is(index_data, "try-error")) { load("indexes_data.rda") index_data <- ibov_data_2 } ``` ```{r ibov-get-1968, eval=FALSE} index_data <- index_get(index_name, as.Date("1968-01-01")) index_data |> ggplot(aes(x = refdate, y = value)) + geom_line() + scale_y_log10() + labs( x = NULL, y = "Index (log scale)", title = str_glue("{index_name} Historical Data - since 1968"), caption = str_glue("Data imported using rb3") ) ``` ```{r ibov-get-1968-plot, message=FALSE, warning=FALSE, echo=FALSE, fig.width=7, fig.height=3} index_data |> ggplot(aes(x = refdate, y = value)) + geom_line() + scale_y_log10() + labs( x = NULL, y = "Index (log scale)", title = str_glue("{index_name} Historical Data - since 1968"), caption = str_glue("Data imported using rb3") ) ``` The y-axis was transformed to log scale in order to get the visualization improved. Change `index_name` to get data for other indexes, for example, the Small Caps Index SMLL. ```{r smll-get-2010-load, message=FALSE, warning=FALSE, echo=FALSE} index_name <- "SMLL" index_data <- try(index_get(index_name, as.Date("2010-01-01")), silent = TRUE) if (is(index_data, "try-error")) { load("indexes_data.rda") index_data <- smll_data } ``` ```{r smll-get-2010, eval=FALSE} index_name <- "SMLL" index_data <- index_get(index_name, as.Date("2010-01-01")) ``` ```{r smll-get-2010-plot, fig.width=7, fig.height=3} index_data |> ggplot(aes(x = refdate, y = value)) + geom_line() + labs( x = NULL, y = "Index", title = str_glue("{index_name} Historical Data"), caption = str_glue("Data imported using rb3") ) ``` ## Indexes Last Update `rb3::indexes_last_update` returns the date where the indexes have been last updated. ```{r indexes-last-update, eval=FALSE} indexes_last_update() ```