Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
braverock
GitHub Repository: braverock/portfolioanalytics
Path: blob/master/inst/tests/test_all_constraints.R
1433 views
1
2
require(testthat)
3
require(PortfolioAnalytics)
4
5
context("constraints")
6
7
N <- 4
8
init.portf <- portfolio.spec(assets=N)
9
# Weight_sum constraint
10
init.portf <- add.constraint(portfolio=init.portf,
11
type="weight_sum",
12
min_sum=0.99,
13
max_sum=1.01)
14
# Box constraint
15
init.portf <- add.constraint(portfolio=init.portf,
16
type="box",
17
min=0,
18
max=1)
19
# Group constraint
20
init.portf <- add.constraint(portfolio=init.portf,
21
type="group",
22
groups=list(c(1, 3), c(2, 4)),
23
group_min=c(0.15, 0.25),
24
group_max=c(0.65, 0.55))
25
# Turnover constraint
26
init.portf <- add.constraint(portfolio=init.portf,
27
type="turnover",
28
turnover_target=0.6)
29
# Diversification constraint
30
init.portf <- add.constraint(portfolio=init.portf,
31
type="diversification",
32
div_target=0.55)
33
# Position limit constraint
34
init.portf <- add.constraint(portfolio=init.portf,
35
type="position_limit",
36
max_pos=3,
37
max_pos_long=2,
38
max_pos_short=1)
39
# Return constraint
40
init.portf <- add.constraint(portfolio=init.portf,
41
type="return",
42
return_target=0.007)
43
# Factor exposure constraint
44
init.portf <- add.constraint(portfolio=init.portf,
45
type="factor_exposure",
46
B=rep(1, N),
47
lower=0.9,
48
upper=1.1)
49
50
tmp_constraints <- PortfolioAnalytics:::get_constraints(init.portf)
51
52
test_that("weight_sum constraint is consistent", {
53
expect_that(tmp_constraints$min_sum, equals(0.99))
54
expect_that(tmp_constraints$max_sum, equals(1.01))
55
})
56
57
test_that("box constraint is consistent", {
58
expect_that(as.numeric(tmp_constraints$min), equals(rep(0, N)))
59
expect_that(as.numeric(tmp_constraints$max), equals(rep(1, N)))
60
})
61
62
test_that("group constraint is consistent", {
63
expect_that(is.list(tmp_constraints$groups), is_true())
64
expect_that(tmp_constraints$groups[[1]], equals(c(1, 3)))
65
expect_that(tmp_constraints$groups[[2]], equals(c(2, 4)))
66
expect_that(tmp_constraints$group_labels, equals(c("group1", "group2")))
67
expect_that(tmp_constraints$cLO, equals(c(0.15, 0.25)))
68
expect_that(tmp_constraints$cUP, equals(c(0.65, 0.55)))
69
})
70
71
test_that("turnover constraint is consistent", {
72
expect_that(tmp_constraints$turnover_target, equals(0.6))
73
})
74
75
test_that("diversification constraint is consistent", {
76
expect_that(tmp_constraints$div_target, equals(0.55))
77
})
78
79
test_that("position limit constraint is consistent", {
80
expect_that(tmp_constraints$max_pos, equals(3))
81
expect_that(tmp_constraints$max_pos_long, equals(2))
82
expect_that(tmp_constraints$max_pos_short, equals(1))
83
})
84
85
test_that("return constraint is consistent", {
86
expect_that(tmp_constraints$return_target, equals(0.007))
87
})
88
89
B <- matrix(1, ncol=1, nrow=N)
90
rownames(B) <- paste("Asset", 1:N, sep=".")
91
colnames(B) <- "factor1"
92
93
test_that("factor exposure constraint is consistent", {
94
expect_that(tmp_constraints$B, equals(B))
95
expect_that(tmp_constraints$lower, equals(0.9))
96
expect_that(tmp_constraints$upper, equals(1.1))
97
})
98
99