R/bse_adjust_quandl.R

#' Get Adjusted BSE Stock price.
#' @description Adjusted BSE Price data
#' @author Vasim Shaikh
#' @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 apikey Quandl API key
#' @param refresh Do you want to refresh data. Should be used as TRUE during first call
#' @param ... Other arguments of Quandl
#'
#' @return A dataframe with adjusted BSE price.
#' @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
#'

#utils::globalVariables(c("."))

# Don't use this as Quandl is not updating.

bse_adjust_quandl <- function(stock_code, start_date, end_date, refresh = FALSE, apikey = NULL, ...) {


  #Quandl.api_key(qapi)

  #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.
  # use here package for working directory set (4 places)
  # 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 <- dmy(start_date)
  end_date <- dmy(end_date)


  stock_data <- Quandl::Quandl(paste0("BSE/BOM", stock_code),
                       start_date = start_date, end_date = end_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, 14, everything())

  return(stock_data)
}
vasim07/bsepRice documentation built on May 15, 2019, 4:19 p.m.