knitr::opts_chunk$set(
  collapse = TRUE,echo = FALSE,
  message = FALSE,warning = FALSE,
  comment = "#>"
)
library(tidyverse)

library(xts)

library(lubridate)

library(stargazer)

devtools::load_all()

# library(MiscImport)
ta_125 = read_csv(paste0(Sys.getenv("USERPROFILE"),
                         "\\OneDrive - Bank Of Israel\\Data",
                         "\\TASE liquidity\\michael files",
                         "\\TA125.csv"),
                  show_col_types = FALSE) %>% 
  mutate(date = dmy(date))
market_df_filepath = paste0(Sys.getenv("USERPROFILE"),
                                "\\OneDrive - Bank Of Israel\\Data",
                                "\\TASE liquidity\\Rdata files",
                                "\\market_data_2022-12-12.rds")

market_df = import_boi_market_data(market_df_filepath) %>% 
  calculate_adjusted_price() %>% 
  filter(date <= max(ta_125$date))

rm(market_df_filepath)
stocks_ipo = read_csv(paste0(Sys.getenv("USERPROFILE"),
                             "\\OneDrive - Bank Of Israel",
                             "\\Data\\TASE liquidity",
                             "\\michael files\\stocks_ipo.csv"),
                      show_col_types = FALSE) %>% 
  mutate(tase_id = as.character(tase_id))

stocks_ipo = stocks_ipo %>% 
  mutate(tase_id = recode(tase_id,
                          `456` = "259"))

ipo_trade_dur_df = market_df %>% 
  group_by(tase_id, sec_id) %>% 
  summarise(tibble(first_trade_year = year(min(date)),
                   trade_years = (max(date) - min(date)) %/% dyears(1)),
            .groups = "drop")

stocks_ipo = stocks_ipo %>% 
  left_join(ipo_trade_dur_df, by = "tase_id") %>% 
  arrange(tase_id) %>% 
  filter(!is.na(trade_years))



num_ipo = stocks_ipo %>% 
  count(tase_id, sort = TRUE)


stocks_ipo = stocks_ipo %>% 
  inner_join(num_ipo %>% 
               filter(n == 1) %>% 
               select(tase_id), by = "tase_id")

rm(ipo_trade_dur_df)
tase_sector_df = read_csv(paste0(Sys.getenv("USERPROFILE"),
                                 "\\OneDrive - Bank Of Israel\\Data",
                                 "\\TASE liquidity\\michael files",
                                 "\\tase_sector_classification.csv"),
                          show_col_types = FALSE) %>% 
  select(-comp_name_hebrew) %>% 
  filter(!tase_sector == "#N/A") %>% 
  mutate(date = as.yearmon(date, format = "%d/%m/%Y")) %>% 
  mutate(across(-date, as.character)) %>% 
  select(-tase_sub_sector)


ipo_control_match_df = match_control_group(market_df,
                                           tase_sector_df,stocks_ipo)
price_df = make_price_df(market_df,ipo_control_match_df,ta_125)
ret_df = calculate_return_df(price_df)

ret_df = ret_df %>% 
  mutate(tase_id = str_extract(id,"^[0-9]+")) %>% 
  left_join(stocks_ipo %>% 
              select(tase_id, tase_sector), by = "tase_id") %>% 
  select(-tase_id)

cum_ret_df = ret_df %>% 
  calculate_cum_return()
hold_ret = calculate_holding_return(ret_df)
stocks_ipo %>% 
  count(year) %>% 
  left_join(ta_125 %>% 
              group_by(year = year(date)) %>% 
              summarise(ta_125 = mean(ta_125), .groups = "drop"),
            by = "year") %>% 
  write_csv(paste0(Sys.getenv("USERPROFILE"),
                   "\\OneDrive - Bank Of Israel\\current_work",
                   "\\annual_report\\2022\\data",
                   "\\plots\\ipo_vs_ta_125.csv"))
ret_df %>% 
  filter(month < 120) %>% 
  count(month,adjustment_type, sort = TRUE) %>%
  tail()
  ggplot(aes(month, n, fill = adjustment_type)) + 
  geom_col(position = "dodge")
cum_ret_df %>% 
  ggplot(aes(month, value, color = adjustment_type)) +
  geom_line() +
  geom_hline(yintercept = 0, linetype = "dashed") +
  scale_y_continuous(labels = scales::percent_format()) +
  facet_wrap( ~ summary_measure, scales = "free") +
  # scale_x_continuous(breaks = seq(0,10,2)) +
  xlab("Months since IPO") + ylab(NULL) +
  ggtitle("Cumulative returns since IPO") +
  theme(legend.title = element_blank())


cum_ret_df %>% 
  filter(!adjustment_type == "Control group returns") %>% 
  filter(summary_measure == "median") %>% 
  select(-summary_measure) %>% 
  pivot_wider(names_from = adjustment_type) %>% 
  write_csv(paste0(Sys.getenv("USERPROFILE"),
                   "\\OneDrive - Bank Of Israel\\current_work",
                   "\\annual_report\\2022\\data",
                   "\\plots\\cum_ret_ipo.csv"))
hold_ret %>% 
  filter(!adjustment_type == "control_ret") %>% 
  mutate(tase_id = str_extract(id, "^[0-9]+")) %>% 
  left_join(stocks_ipo %>% 
              select(tase_id, tase_sector), by = "tase_id") %>% 
  count(tase_sector, adjustment_type, sort = TRUE)
  group_by(tase_sector, adjustment_type) %>% 
  summarise(avg_ret = mean(hold_ret, na.rm = TRUE),
            .groups = "drop") %>% 
  ggplot(aes(x = avg_ret, y = reorder(tase_sector, avg_ret),
         fill = adjustment_type)) + 
  geom_col(position = "dodge")
hold_ret %>% 
  filter(!adjustment_type == "control_ret") %>% 
  mutate(tase_id = str_extract(id, "^[0-9]+")) %>% 
  left_join(stocks_ipo %>% 
              select(tase_id, year), by = "tase_id") %>% 
  group_by(year, adjustment_type) %>% 
  summarise(avg_ret = mean(hold_ret, na.rm = TRUE),
            .groups = "drop") %>% 
  ggplot(aes(x = as.character(year), y = avg_ret,
         fill = adjustment_type)) + 
  geom_col(position = "dodge")


hold_ret %>% 
  filter(!adjustment_type == "control_ret") %>% 
  mutate(tase_id = str_extract(id, "^[0-9]+")) %>% 
  left_join(stocks_ipo %>% 
              select(tase_id, year), by = "tase_id") %>% 
  group_by(year, adjustment_type) %>% 
  summarise(avg_ret = mean(hold_ret, na.rm = TRUE),
            .groups = "drop") %>% 
  pivot_wider(names_from = "adjustment_type",
              values_from = "avg_ret") %>% 
  write_csv(paste0(Sys.getenv("USERPROFILE"),
                   "\\OneDrive - Bank Of Israel\\current_work",
                   "\\annual_report\\2022\\data",
                   "\\plots\\hold_return_by_year.csv"))


MichaelGurkov/TASE documentation built on Jan. 1, 2023, 1:27 p.m.