Расчет кумулятивной суммы с поиском по заданному условию
Мне необходимо посчитать кумулятивную сумму в колонке Return, но сумму нужно считать только ту которая попала под необходимые условия.
Условие такое: Если значение в колонке z_score становится меньше или равно, к примеру -0,3, то мне необходимо складывать значения в Return до тех пор пока значение в колонке z_score не станет больше или равно 0. Если после нуля в z_score снова встречается значение меньше или равное -0,3 , то нужно снова начать считать кумулятивную сумму в колонке Return до тех пор , пока значение z_score не станет больше или равно 0. И так до конца фрейма. В итоге мне нужно получить общую кумулятивную сумму колонки Return которые попали под заданное условие расчета.
Какие есть варианты решения этой задачи??
library(quantmod)
getSymbols(Symbols = 'BOH', src = 'yahoo', from = "2017-01-01")
getSymbols(Symbols = 'VLY', src = 'yahoo', from = "2017-01-01")
boh <- data.frame(BOH$BOH.Open, BOH$BOH.High, BOH$BOH.Low, BOH$BOH.Close,
BOH$BOH.Adjusted)
colnames(boh) <- c('Open', 'High', 'Low', 'Close', 'AdjClose')
return_boh <- diff(boh$AdjClose)
return_boh <- data.frame(return_boh)
colnames(return_boh) <- c('Return,$')
return_boh <- rbind(0, return_boh)
boh <- cbind(boh, return_boh)
vly <- data.frame(VLY$VLY.Open, VLY$VLY.High, VLY$VLY.Low, VLY$VLY.Close,
VLY$VLY.Adjusted)
colnames(vly) <- c('Open', 'High', 'Low', 'Close', 'AdjClose')
return_vly <- diff(vly$AdjClose)
return_vly <- data.frame(return_vly)
colnames(return_vly) <- c('Return,$')
return_vly <- rbind(0, return_vly)
vly <- cbind(vly, return_vly)
spread <- data.frame(log(boh$AdjClose) - log(vly$AdjClose) * 8.07)
colnames(spread) <- c('spread')
x <- 20
spread_avg <- data.frame(SMA(spread, x))
colnames(spread_avg) <- c('spread_avg')
z_score <- data.frame((spread$spread -
spread_avg$spread_avg)/sd(spread$spread))
colnames(z_score) <- c('z_score')
boh <- cbind(boh, z_score)
vly <- cbind(vly, z_score)
boh_long <- data.frame(ifelse(z_score <= -0.3, 1, 0))
colnames(boh_long) <- c('boh_long')
boh <- cbind(boh, boh_long)