#' 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)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.