Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
braverock
GitHub Repository: braverock/portfolioanalytics
Path: blob/master/sandbox/paper_analysis/R_interpretation/findDrawdowns.R
1433 views
1
2
library(PerformanceAnalytics)
3
z = rnorm(50)
4
z = xts( z , order.by = as.Date(c(1:50)))
5
table.Drawdowns(z)
6
7
8
findDrawdowns =
9
function (R, geometric = TRUE, ...)
10
{
11
x = checkData(R[, 1, drop = FALSE], method = "matrix")
12
drawdowns = Drawdowns(x, geometric = geometric)
13
draw = c()
14
begin = c()
15
end = c()
16
length = c(0)
17
trough = c(0)
18
index = 1
19
if (drawdowns[1] >= 0)
20
priorSign = 1
21
else priorSign = 0
22
from = 1
23
sofar = drawdowns[1]
24
to = 1
25
dmin = 1
26
for (i in 1:length(drawdowns)) {
27
thisSign <- ifelse(drawdowns[i] < 0, 0, 1)
28
if (thisSign == as.numeric(priorSign)) {
29
#if (drawdowns[i] < sofar) {
30
if (drawdowns[i] < as.numeric(sofar)) {
31
sofar = drawdowns[i]
32
dmin = i
33
}
34
to = i + 1
35
}
36
else {
37
draw[index] = sofar
38
begin[index] = from
39
trough[index] = dmin
40
end[index] = to
41
from = i
42
sofar = drawdowns[i]
43
to = i + 1
44
dmin = i
45
index = index + 1
46
priorSign = thisSign
47
}
48
}
49
draw[index] = sofar
50
begin[index] = from
51
trough[index] = dmin
52
end[index] = to
53
list(return = draw, from = begin, trough = trough, to = end,
54
length = (end - begin + 1), peaktotrough = (trough -
55
begin + 1), recovery = (end - trough))
56
}
57