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