# 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"))