R/bse_adjust.R

#' Get Adjusted BSE Stock price.
#'
#' @description Adjusted BSE Price data
#' @param stock_code A bse code, for multiple codes refer example at end
#' @param start_date Start Date in dd-Mmm-yy format. Should not be before 01-Jan-2000
#' @param end_date End Date in dd-Mmm-yy format.
#' @param refresh Do you want to refresh data. Should be used as TRUE during first call
#' @param ... Other arguments 
#'
#' @return A dataframe with adjusted BSE price.
#' @export
#'
#' @examples
#' #500870 Castrol India had announced a 1:1 bonus on 21-Dec-2017.
#' 
#' data <- bse_adjust('500870',
#'   start_date = '18-Dec-2017',
#'   end_date = '24-Dec-2017',
#'   refresh = FALSE)
#'   #For Multiple stocks
#' stocks_list <- list(stock1 = '500034', stock2 = '532540')
#'
#' stocks_list <- stocks_list %>%
#'     map_df(bse_adjust,
#'            start_date = '01-Jan-2018',
#'            end_date = '06-Feb-2018')
#' 
#' @import dplyr
#' @import tidyr
#' @import purrr
#' @import readr
#' @import tibble
#' @import magrittr
#' @import lubridate
#'
#' @export


bse_adjust <- function(stock_code, start_date, end_date, refresh = FALSE, ...) {
  
  
  
  #Warnings
  # Start date should not be before 2000/01/01. use stopifnot() # uSe on.Load()
  # if gsheet date has 2019 present udpate warning. Mention this pack was build for year 2018.
  # if 2018 files date is not sysdate then message
  
  if (refresh == TRUE) {
    
    #Sheets are in view only mode - INFO
    
    # For system to access file use system.file() check documentation
    # Hadley's book R package page no 172
    
    #Bonus gsheet
    suppressMessages(read_csv('https://docs.google.com/spreadsheets/d/e/2PACX-1vSoiyumiWvua7a98gx3ZEbwEFSjB_bQ9T9GljMuW8bBjfSjcn9r6X6AVx5I7nTvaWXF516ID3bruEJK/pub?output=csv&gid=508460019&single=true') %>%
                       write_csv(system.file("extdata/Bonus", "Bonus2018.csv", package = "bsepRice")))
    
    #Splits gsheet
    suppressMessages(read_csv('https://docs.google.com/spreadsheets/d/e/2PACX-1vSoiyumiWvua7a98gx3ZEbwEFSjB_bQ9T9GljMuW8bBjfSjcn9r6X6AVx5I7nTvaWXF516ID3bruEJK/pub?output=csv&gid=1240619036&single=true') %>%
                       write_csv(system.file("extdata/Splits", "Splits2018.csv", package = "bsepRice")))
  }
  
  # Duplicates in Bonus for the same year. Hence, limit to year 2000
  
  #write_csv(iris, './iris.csv')
  
  start_date <- format.Date(dmy(start_date), foramt = "%m/%d/%Y")
  end_date <- format.Date(dmy(end_date), foramt = "%m/%d/%Y")
  
  
  #stock_data <- Quandl(paste0("BSE/BOM", stock_code),
  #                    start_date = start_date, end_date = end_date, ...) %>%
  
  #mm/dd/yyyy
  url <- paste0("http://www.bseindia.com/stockinfo/stockprc2_excel.aspx?scripcd=", stock_code ,"&FromDate=", start_date, "&ToDate=", end_date, "&OldDMY=D")
  
  suppressMessages(stock_data <- read_csv(url) %>% 
    mutate(Date = dmy(.$Date)) %>% 
    arrange(desc(Date)))
  
  #Bonus adjustment
  
  bonus_df <- suppressMessages(
    list.files(system.file("extdata/Bonus", "", package = "bsepRice"), full.names = TRUE) %>%
      map_df(read_csv, col_names = FALSE) %>%
      filter(X1 == paste0("BSE: ", stock_code))
  )
  
  if(nrow(bonus_df) > 0) {
    bonus_df <- bonus_df %>%
      mutate(X3 = dmy(X3)-1) %>%
      arrange(desc(X3)) %>%
      mutate(bonus_multiplier = cumprod(X4)) %>%
      rename(Date = X3) %>%
      select(Date, bonus_multiplier)
    
    stock_data <- suppressMessages(
      stock_data %>%
        left_join(bonus_df) %>%
        fill(bonus_multiplier, .direction = "down") %>%
        replace_na(list(bonus_multiplier = 1)) %>%
        mutate_at(2:6, "/", .$bonus_multiplier) %>%
        select(-bonus_multiplier))
  }
  
  #Splits adjustments
  splits_df <- suppressMessages(
    list.files(system.file("extdata/Splits", "", package = "bsepRice"), full.names = TRUE) %>%
      map_df(read_csv, skip=0, col_names = FALSE) %>%
      filter(X1 == paste0("BSE: ", stock_code))
  )
  
  if(nrow(splits_df) > 0) {
    splits_df <- splits_df %>%
      mutate(X3 = dmy(X3)-1) %>%
      arrange(desc(X3)) %>%
      mutate(split_multiplier = cumprod(X4)) %>%
      rename(Date = X3) %>%
      select(Date, split_multiplier)
    
    stock_data <- suppressMessages(
      stock_data %>%
        left_join(splits_df) %>%
        fill(split_multiplier, .direction = "down") %>%
        replace_na(list(split_multiplier = 1)) %>%
        mutate_at(2:6, "/", .$split_multiplier) %>%
        select(-split_multiplier))
  }
  
  stock_data <- stock_data %>%
    arrange(Date) %>%
    mutate(BSE_code = stock_code) %>%
    select(1, 12, everything())
  
  return(stock_data)
}
vasim07/bsepRice documentation built on May 15, 2019, 4:19 p.m.