# Load packages

# Core
library(tidyverse)
library(tidyquant)

Goal

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

Choose your stocks.

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

1 Import stock prices

symbols <- c("TSLA", "META", "XOM", "AAPL", "PG", "AMZN")

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     = "quarterly", 
                 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] "AAPL" "AMZN" "META" "PG"   "TSLA" "XOM"
# weights
weights <- c(0.2, 0.2, 0.2, 0.1, 0.2, 0.1)
weights
## [1] 0.2 0.2 0.2 0.1 0.2 0.1
w_tbl <- tibble(symbols, weights)
w_tbl
## # A tibble: 6 × 2
##   symbols weights
##   <chr>     <dbl>
## 1 AAPL        0.2
## 2 AMZN        0.2
## 3 META        0.2
## 4 PG          0.1
## 5 TSLA        0.2
## 6 XOM         0.1

4 Build a portfolio

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

portfolio_returns_tbl
## # A tibble: 20 × 2
##    date       portfolio.returns
##    <date>                 <dbl>
##  1 2013-03-28          0.00902 
##  2 2013-06-28          0.192   
##  3 2013-09-30          0.315   
##  4 2013-12-31          0.0741  
##  5 2014-03-31          0.0399  
##  6 2014-06-30          0.0849  
##  7 2014-09-30          0.0511  
##  8 2014-12-31         -0.000382
##  9 2015-03-31          0.0212  
## 10 2015-06-30          0.107   
## 11 2015-09-30         -0.0157  
## 12 2015-12-31          0.0870  
## 13 2016-03-31          0.00299 
## 14 2016-06-30          0.0128  
## 15 2016-09-30          0.0815  
## 16 2016-12-30         -0.0302  
## 17 2017-03-31          0.171   
## 18 2017-06-30          0.0806  
## 19 2017-09-29          0.0336  
## 20 2017-12-29          0.0515

5 Plot: Portfolio Histogram and Density

portfolio_returns_tbl %>%
    
    ggplot(mapping = aes(x = portfolio.returns)) +
    geom_histogram(fill     = "cornflowerblue", 
                   binwidth = 0.02) + 
    
    geom_density(bw = 0.015) + # Adjusting bindwidth
    
    # 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?

I will answer this question with the help of the follwing code chunk:

expected_return <- mean(portfolio_returns_tbl$portfolio.returns)
expected_return
## [1] 0.06842967
maximum_return <- max(portfolio_returns_tbl$portfolio.returns)
maximum_return
## [1] 0.3147789
minimum_return <- min(portfolio_returns_tbl$portfolio.returns)
minimum_return
## [1] -0.03021344

Conclusion

Based on the results provided, the expected return from the portfolio in a typical quarter is 0.06842966, or simply said, positive. This indicates that, on average, the portfolio is expected to generate a positive return of 6.8% in a typical quarter.

The maximum return observed in the portfolio is 31.5%. This represents the highest return achieved in a single quarter, indicating the potential for significant positive returns in certain periods.

On the other hand, the minimum return observed in the portfolio is -3.0%. This represents the lowest return experienced in a single quarter, indicating the possibility of negative returns in certain periods.

Based on these results, I can conclude that it is more likely for the portfolio to generate postive returns than negative ones. Also, the biggest positive returns will likely be higher than the biggest negative returns, based on the history of the portfolio.