Расчет ежемесячной доходности фонда - PullRequest
0 голосов
/ 14 июля 2020
ln_f5 <- log(Fund_5, base = exp(1))
n <- nrow(Date)
ln_returns_f5 <- ((ln_f5[2:(n+1), 1] - ln_f5[1:n, 1])/ln_f5[1:n, 1])

Здесь я сузил выборку фондов до одного фонда и взял журналы (ln_f5).

Затем я пытаюсь вычислить доходность на основе формулы выше, которую я нашел в Интернете.

Когда я просматриваю результаты ln_returns_f5, не должно быть записи возврата ячейки для дня n (так как нет результатов для n-1).

Вместо этого возврат для дня n + 1 находится в ячейка для дня n.

Как мне эффективно переместить все результаты ячеек на один период вперед, чтобы моя возвращаемая запись для n была бы пустой?

Большое спасибо

Ответы [ 2 ]

1 голос
/ 14 июля 2020

Я не знаю, как вы структурировали данные и какую прибыль вы хотите рассчитать, но, возможно, это может послужить источником вдохновения:


library(data.table)
# For long data:
dt_long<-ggplot2::economics_long
setDT(dt_long)[order(date),return:=(value/shift(value,n=1, type = 'lag')-1)*100,by=variable]

# For wide data
dt<-ggplot2::economics
setDT(dt)
return_columns<-names(dt[,-"date"])
dt[,paste("return_",return_columns):=lapply(.SD,function(x){(x/shift(x,n=1, type = 'lag')-1)*100}),.SDcols=return_columns]

0 голосов
/ 14 июля 2020

Вы можете использовать dplyr

y <- c(8,10,12,14,16,18)

my_return <- ifelse(is.na((y-lag(y))/lag(y)), 0, (y-lag(y))/lag(y))

, который возвращает

[1] 0.0000000 0.2500000 0.2000000 0.1666667 0.1428571 0.1250000

Вы можете пропустить всю ifelse(is.na()) часть, если вас устраивает NA в начале .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...