# knitr::opts_chunk$set(echo = TRUE)
library(dplyr)
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
library(ggplot2)
library(tidyr)
# Read all csv files in the directory and save as df with the same name of the file
lst_csv = list.files(pattern = '.csv')
for (i in lst_csv) {
temp_df = read.csv(i)
assign(gsub('.csv','',i),temp_df)
}
df = Portfolios_Formed_on_ME_monthly_EW |>
mutate(X = paste(as.character(X), "01",sep = "")) |>
mutate(X = as.Date(X,"%Y%m%d")) |>
select(X, Lo.10, Hi.10) |>
mutate(
across(
.cols = ends_with("10"),
.fns = ~ .x / 100
)
)
ggplot(df, aes(X)) +
geom_line(aes(y = Lo.10, colour = "Lo.10")) +
geom_line(aes(y = Hi.10, colour = "Hi.10"))

df = df |>
mutate(
across(
.cols = ends_with(".10"),
.fns = ~ .x + 1
)
) |>
mutate(
across(
.cols = ends_with(".10"),
.fns = cumprod,
.names = "{.col}_cumsum"
)
)
ggplot(df, aes(X)) +
geom_line(aes(y = Hi.10_cumsum, colour = "Hi.10_cumsum"))

ggplot(df, aes(X)) +
geom_line(aes(y = Lo.10_cumsum, colour = "Lo.10_cumsum"))

df = df |>
mutate(
across(
.cols = ends_with("cumsum"),
.fns = cummax,
.names = "{.col}_max"
))
ggplot(df, aes(X)) +
geom_line(aes(y = Hi.10_cumsum_max, colour = "Hi.10_cumsum_max"))

df = df |>
mutate(drawdown = (Hi.10_cumsum - Hi.10_cumsum_max)/Hi.10_cumsum_max)
ggplot(df, aes(X)) +
geom_line(aes(y = drawdown, colour = "Hi.10_cumsum_max"))

head(df)
## X Lo.10 Hi.10 Lo.10_cumsum Hi.10_cumsum Lo.10_cumsum_max
## 1 1926-07-01 0.9855 1.0329 0.9855000 1.032900 0.985500
## 2 1926-08-01 1.0512 1.0370 1.0359576 1.071117 1.035958
## 3 1926-09-01 1.0093 1.0067 1.0455920 1.078294 1.045592
## 4 1926-10-01 0.9516 0.9757 0.9949854 1.052091 1.045592
## 5 1926-11-01 0.9922 1.0270 0.9872245 1.080498 1.045592
## 6 1926-12-01 0.9734 1.0301 0.9609643 1.113021 1.045592
## Hi.10_cumsum_max drawdown
## 1 1.032900 0.0000
## 2 1.071117 0.0000
## 3 1.078294 0.0000
## 4 1.078294 -0.0243
## 5 1.080498 0.0000
## 6 1.113021 0.0000
df |>
filter(drawdown == min(drawdown))
## X Lo.10 Hi.10 Lo.10_cumsum Hi.10_cumsum Lo.10_cumsum_max
## 1 1932-05-01 0.9455 0.7494 0.4912403 0.4057691 2.941573
## Hi.10_cumsum_max drawdown
## 1 2.536652 -0.8400375
df[df$drawdown == min(df$drawdown),]
## X Lo.10 Hi.10 Lo.10_cumsum Hi.10_cumsum Lo.10_cumsum_max
## 71 1932-05-01 0.9455 0.7494 0.4912403 0.4057691 2.941573
## Hi.10_cumsum_max drawdown
## 71 2.536652 -0.8400375
df |>
filter(drawdown == min(drawdown)) |>
select(X,drawdown)
## X drawdown
## 1 1932-05-01 -0.8400375
ggplot(df, aes(X)) +
geom_line(aes(y = Hi.10_cumsum, colour = "Hi.10_cumsum"))+
geom_line(aes(y = Hi.10_cumsum_max, colour = "Hi.10_cumsum_max"))

ggplot(df |> filter(X < as.Date("1950-01-01")), aes(X)) +
geom_line(aes(y = Hi.10_cumsum, colour = "Hi.10_cumsum")) +
geom_line(aes(y = Hi.10_cumsum_max, colour = "Hi.10_cumsum_max"))
