library(quantmod)
## Loading required package: xts
## Loading required package: zoo
## 
## Attaching package: 'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
## Registered S3 method overwritten by 'xts':
##   method     from
##   as.zoo.xts zoo
## Loading required package: TTR
## Registered S3 method overwritten by 'quantmod':
##   method            from
##   as.zoo.data.frame zoo
## Version 0.4-0 included new data defaults. See ?getSymbols.
library(dplyr)
## 
## Attaching package: 'dplyr'
## The following objects are masked from 'package:xts':
## 
##     first, last
## The following objects are masked from 'package:stats':
## 
##     filter, lag
## The following objects are masked from 'package:base':
## 
##     intersect, setdiff, setequal, union
library(tibbletime)
## Warning: package 'tibbletime' was built under R version 3.6.3
## 
## Attaching package: 'tibbletime'
## The following object is masked from 'package:stats':
## 
##     filter
library(timetk)
library(pacman)
## Warning: package 'pacman' was built under R version 3.6.3
p_load(quantmod, quadprog, lpSolve)

#1. Download 10 industry portfolio returns (average value-weighted monthly returns) from Fama French data library

data <-  read.csv('/Users/Anand/Desktop/10_Industry_Portfolios.CSV')
head(data)
##   Average.Value.Weighted.Returns....Monthly     X   X.1   X.2   X.3   X.4
## 1                                           NoDur Durbl Manuf Enrgy HiTec
## 2                                    192607  1.45 15.55  4.69 -1.18   2.9
## 3                                    192608  3.97  3.68  2.81  3.47  2.66
## 4                                    192609  1.14   4.8  1.15 -3.39 -0.38
## 5                                    192610 -1.24 -8.23 -3.63 -0.78 -4.58
## 6                                    192611   5.2 -0.19   4.1  0.01  4.71
##     X.5   X.6   X.7   X.8   X.9
## 1 Telcm Shops Hlth  Utils Other
## 2  0.83  0.11  1.77  7.04  2.16
## 3  2.17 -0.71  4.25 -1.69  4.38
## 4  2.41  0.21  0.69  2.04  0.29
## 5 -0.11 -2.29 -0.57 -2.63 -2.85
## 6  1.63  6.43  5.42  3.71  2.11
str(data)
## 'data.frame':    4905 obs. of  11 variables:
##  $ Average.Value.Weighted.Returns....Monthly: Factor w/ 1228 levels "","  Average Equal Weighted Returns -- Annual",..: 1 10 11 12 13 14 15 17 18 19 ...
##  $ X                                        : Factor w/ 2860 levels "","-0.01","-0.02",..: 2860 720 1739 689 110 2393 657 58 1685 1389 ...
##  $ X.1                                      : Factor w/ 2892 levels "","-0.02","-0.03",..: 2892 1201 1658 1954 660 17 2836 74 2731 844 ...
##  $ X.2                                      : Factor w/ 3048 levels "","-0.02","-0.04",..: 3048 1952 1230 724 370 1902 1645 5 2232 749 ...
##  $ X.3                                      : Factor w/ 2950 levels "","-0.01","-0.03",..: 2950 93 1621 376 61 668 1412 789 803 536 ...
##  $ X.4                                      : Factor w/ 3247 levels "","-0.01","-0.02",..: 3247 1485 1466 31 464 2212 3 84 2195 809 ...
##  $ X.5                                      : Factor w/ 2740 levels "","-0.01","-0.03",..: 2740 692 1402 1424 11 769 796 785 1715 2018 ...
##  $ X.6                                      : Factor w/ 3010 levels "","-0.01","-0.03",..: 3010 627 49 635 244 2443 676 264 1646 28 ...
##  $ X.7                                      : Factor w/ 2951 levels "","-0.01","-0.02",..: 2951 779 1815 691 50 2205 635 2181 775 716 ...
##  $ X.8                                      : Factor w/ 2629 levels "","-0.01","-0.02",..: 2629 2297 147 1252 292 1590 15 154 1882 610 ...
##  $ X.9                                      : Factor w/ 3144 levels "","-0.01","-0.02",..: 3144 1618 2346 649 311 1614 2027 765 2513 742 ...
date <- as.Date(as.character(data$date), "%m-%Y")
str(data)
## 'data.frame':    4905 obs. of  11 variables:
##  $ Average.Value.Weighted.Returns....Monthly: Factor w/ 1228 levels "","  Average Equal Weighted Returns -- Annual",..: 1 10 11 12 13 14 15 17 18 19 ...
##  $ X                                        : Factor w/ 2860 levels "","-0.01","-0.02",..: 2860 720 1739 689 110 2393 657 58 1685 1389 ...
##  $ X.1                                      : Factor w/ 2892 levels "","-0.02","-0.03",..: 2892 1201 1658 1954 660 17 2836 74 2731 844 ...
##  $ X.2                                      : Factor w/ 3048 levels "","-0.02","-0.04",..: 3048 1952 1230 724 370 1902 1645 5 2232 749 ...
##  $ X.3                                      : Factor w/ 2950 levels "","-0.01","-0.03",..: 2950 93 1621 376 61 668 1412 789 803 536 ...
##  $ X.4                                      : Factor w/ 3247 levels "","-0.01","-0.02",..: 3247 1485 1466 31 464 2212 3 84 2195 809 ...
##  $ X.5                                      : Factor w/ 2740 levels "","-0.01","-0.03",..: 2740 692 1402 1424 11 769 796 785 1715 2018 ...
##  $ X.6                                      : Factor w/ 3010 levels "","-0.01","-0.03",..: 3010 627 49 635 244 2443 676 264 1646 28 ...
##  $ X.7                                      : Factor w/ 2951 levels "","-0.01","-0.02",..: 2951 779 1815 691 50 2205 635 2181 775 716 ...
##  $ X.8                                      : Factor w/ 2629 levels "","-0.01","-0.02",..: 2629 2297 147 1252 292 1590 15 154 1882 610 ...
##  $ X.9                                      : Factor w/ 3144 levels "","-0.01","-0.02",..: 3144 1618 2346 649 311 1614 2027 765 2513 742 ...