---
title: "How-to xts"
output: rmarkdown::html_vignette
vignette: >
%\VignetteIndexEntry{How-to xts}
%\VignetteEngine{knitr::rmarkdown}
%\VignetteEncoding{UTF-8}
---
```{r, include = FALSE}
knitr::opts_chunk$set(
collapse = TRUE,
comment = "#>"
)
```
The following gives an example on how the process of selecting and retrieving the necessary files for processing is done. We start by specifying a target directory and target file names. Here, these are created in a directory that is named based on the download date within a folder called "data".
```{r setup, eval=TRUE, echo=FALSE, warning=FALSE, message=FALSE}
library(FFdownload)
outd <- paste0(tempdir(),"/",format(Sys.time(), "%F_%H-%M"))
outfile <- paste0(outd,"FFData_xts.RData")
listfile <- paste0(outd,"FFList.txt")
```
```{r setup2, eval=FALSE, echo=TRUE}
library(FFdownload)
outd <- paste0("data/",format(Sys.time(), "%F_%H-%M"))
outfile <- paste0(outd,"FFData_xts.RData")
listfile <- paste0(outd,"FFList.txt")
```
Next, we download a list of all available files on [Kenneth French's website](https://mba.tuck.dartmouth.edu/pages/faculty/ken.french/data_library.html). We exclude all daily files to keep the list short.
```{r xts_list_save}
FFdownload(exclude_daily=TRUE,download=FALSE,download_only=TRUE,listsave=listfile)
read.delim(listfile,sep = ",")[c(1:4,73:74),]
```
From this list we select the files to download. In our case we use the 3 Fama-French-Factors:
- "F-F_Research_Data_Factors_CSV"
- "F-F_Momentum_Factor_CSV"
and download these files without processing them (for the sake of showing how the package works).
```{r xts_download}
inputlist <- c("F-F_Research_Data_Factors_CSV","F-F_Momentum_Factor_CSV")
FFdownload(exclude_daily=TRUE, tempd=outd, download=TRUE, download_only=TRUE, inputlist=inputlist)
list.files(outd)
```
Now we process these downloaded files and create a final "RData" file with a certain list structure from it. Due to the separation of the downloading and processing stage this can be done repeatedly for any data set saved at a certain point in time in a relevant folder.
```{r xts_processing}
FFdownload(exclude_daily=TRUE, tempd=outd, download=FALSE, download_only=FALSE, inputlist=inputlist, output_file = outfile)
```
Let us check the structure of the created list (after loading into the current workspace).
```{r xts_load}
load(outfile)
ls.str(FFdata)
```
Now we process the data using code provided to me by [Joshua Ulrich (the developer of xts)](https://twitter.com/joshua_ulrich/status/1584950407335321601). Therein we merge all monthly `xts`-files, select data as off 1963, divide by $100$ because returns are given in percent, caluclate monthly returns and finally plot the resulting `xts`.
```{r xts_process, eval=FALSE, echo=TRUE}
monthly <- do.call(merge, lapply(FFdata, function(i) i$monthly$Temp2))
monthly_1960 <- na.omit(monthly)["1963/"]
monthly_returns <- cumprod(1 + monthly_1960/100) - 1
plot(monthly_returns)
```
```{r xts_process2, eval=TRUE, echo=FALSE, out.width="100%", fig.width=8, fig.height=4}
monthly <- do.call(merge, lapply(FFdata, function(i) i$monthly$Temp2))
monthly_1960 <- na.omit(monthly)["1963/"]
monthly_returns <- cumprod(1 + monthly_1960/100) - 1
plot(monthly_returns, col = viridis::viridis(5, direction = -1), legend.loc="topleft", lwd=2, main="Fama-French & Carhart Factor Wealth Index")
```