Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
braverock
GitHub Repository: braverock/portfolioanalytics
Path: blob/master/demo/demo_turnover.R
1433 views
1
## ----- turnover --------------------------------------------------------------
2
3
library(PCRA)
4
library(data.table)
5
# Select 10 midcap stocks and risk-free rate
6
stockItems <- c("Date", "TickerLast", "CapGroupLast", "Return",
7
"MktIndexCRSP", "Ret13WkBill")
8
dateRange <- c("1997-01-31", "2001-12-31")
9
ret <- selectCRSPandSPGMI(periodicity = "monthly",
10
dateRange = dateRange,
11
stockItems = stockItems,
12
factorItems = NULL,
13
subsetType = "CapGroupLast",
14
subsetValues = "MidCap",
15
outputType = "xts")
16
dim(ret)
17
# names(ret)[68:69] # 68 is the Market return and 69 is the RiskFree return
18
k <- 5 # The next line is for users to experiment with different stocks
19
nset <- seq(k,k+45,by = 5)
20
length(nset)
21
midcap10andRF <- ret[,c(nset,69)]
22
midcap10 <- midcap10andRF[,1:10]
23
riskFree <- mean(midcap10andRF[,11])
24
print(riskFree)
25
funds <- colnames(midcap10)
26
27
## ----echo=F-------------------------------------------------------------------
28
# obj ES, given weight initial
29
pspec = portfolio.spec(assets=funds)
30
pspec.fi = add.constraint(pspec,type = "full_investment")
31
pspec.lo = add.constraint(pspec.fi, type="long_only")
32
pspec.TO20default = add.constraint(pspec.lo, type="turnover", turnover_target = 0.2, weight_initial = c(1, rep(0, 9)))
33
pspec.TO20default = add.objective(portfolio=pspec.TO20default, type="risk", name="ES")
34
optTO20default = optimize.portfolio(midcap10, pspec.TO20default, optimize_method="CVXR")
35
round(optTO20default$weights, 4)
36
optTO20default$opt_values
37
38
# obj var, default weight initial
39
pspec = portfolio.spec(assets=funds)
40
pspec.fi = add.constraint(pspec,type = "full_investment")
41
pspec.lo = add.constraint(pspec.fi, type="long_only")
42
pspec.TO50default = add.constraint(pspec.lo, type="turnover", turnover_target = 0.5)
43
pspec.TO50default = add.objective(portfolio=pspec.TO50default, type="risk", name="var")
44
optTO50default = optimize.portfolio(midcap10, pspec.TO50default, optimize_method="CVXR")
45
round(optTO50default$weights, 4)
46
optTO50default$opt_values
47
48
# obj CSM, given weight initial
49
pspec = portfolio.spec(assets=funds)
50
pspec.fi = add.constraint(pspec,type = "full_investment")
51
pspec.lo = add.constraint(pspec.fi, type="long_only")
52
pspec.TO10w = add.constraint(pspec.lo, type="turnover", turnover_target = 0.1, weight_initial = optTO50default$weights)
53
pspec.TO10w = add.objective(portfolio=pspec.TO10w , type="risk", name="CSM")
54
optTO10w = optimize.portfolio(midcap10, pspec.TO10w, optimize_method="CVXR")
55
round(optTO10w$weights, 4)
56
optTO10w$opt_values
57
58