Расчет кумулятивной суммы с поиском по заданному условию

Мне необходимо посчитать кумулятивную сумму в колонке 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)

Ответы (0 шт):