# Load packages

# Core
library(tidyverse)
library(tidyquant)

Goal

Collect individual returns into a portfolio by assigning a weight to each stock

Choose your stocks. “MSFT”, “GOOG”

from 2012-12-31 to 2017-12-31

1 Import stock prices

symbols <- c("MSFT", "GOOG")
prices <- tq_get(x = symbols, 
                 get = "stock.prices",
                 from = "2012-12-31",
                 to = "2017-12-31")

2 Convert prices to returns (quarterly)

asset_returns_tbl <- prices %>%
    
    group_by(symbol) %>%
    
    tq_transmute(select     = adjusted,
                 mutate_fun = periodReturn,
                 period     = "monthly",
                 type       = "log") %>%
    
    slice(-1) %>%
    
    ungroup() %>%
    
    set_names(c("asset", "date", "returns"))

3 Assign a weight to each asset (change the weigting scheme)

# symbols

symbols <- asset_returns_tbl %>%
    distinct(asset) %>% 
    pull()
symbols
## [1] "GOOG" "MSFT"
# weights
weights <- c(0.5, 0.5)
weights
## [1] 0.5 0.5
w_tbl <- tibble(symbols, weights)
w_tbl
## # A tibble: 2 × 2
##   symbols weights
##   <chr>     <dbl>
## 1 GOOG        0.5
## 2 MSFT        0.5

4 Build a portfolio

#?tq_portfolio
portfolio_returns_tbl <- asset_returns_tbl %>%
    tq_portfolio(assets_col = asset, 
                 returns_col = returns, 
                 weights = w_tbl, 
                 rebalance_on = "months")

portfolio_returns_tbl
## # A tibble: 60 × 2
##    date       portfolio.returns
##    <date>                 <dbl>
##  1 2013-01-31         0.0467   
##  2 2013-02-28         0.0397   
##  3 2013-03-28         0.00997  
##  4 2013-04-30         0.0917   
##  5 2013-05-31         0.0575   
##  6 2013-06-28         0.0000395
##  7 2013-07-31        -0.0365   
##  8 2013-08-30         0.00387  
##  9 2013-09-30         0.0150   
## 10 2013-10-31         0.112    
## # … with 50 more rows

5 Plot: Portfolio Histogram and Density

portfolio_returns_tbl %>%
    
    ggplot(mapping = aes(x=portfolio.returns)) +
    geom_histogram(fill = "cornflowerblue", 
                   binwidth = 0.01) +
    geom_density() +
    
    #Formatting
    scale_x_continuous(labels = scales::percent_format())+
    
    labs(x = "returns",
         y = "distribution",
         title = "Portfolio Histogram & Density")

What return should you expect from the portfolio in a typical quarter? GOOG and MSFT can expect returns commonly around -5% ranging to over 10%. There is however some risk as there are extreme returns of well over 10% and even nearly -10%. Risk taking investors should see GOOG and MSFT as there is a good chance you will see positive quarterly returns ranging from above 1% to over 10%. Overall, MSFT and GOOG are solid buys for even conservative investors as tech stocks can see volatility, but these two tend to do pretty well as their worst quarterly returns usually range from 0 - 6%.