gpt4 book ai didi

r - 计算一段时间内的返回

转载 作者:行者123 更新时间:2023-12-04 02:51:08 26 4
gpt4 key购买 nike

我试图获得在特定时间持有某种 Assets 的时间序列返回。

我的数据框如下所示:

Date          Price
1998-01-01 20
1998-01-02 22
1998-01-03 21
1998-01-04 25
...
1998-01-20 25
1998-01-21 19
1998-01-21 20
....
1998-02-01 30
1998-02-02 28
1998-02-03 25
1998-02-04 26
etc.

我每天有 1 次观察,我的时间序列从 1998 年到 1999 年。

我现在想要做的是计算持有我的 Assets 20 天的返回(即在第一天买入并在第 20 天卖出),并且每天都这样做。所以我想计算一下:

1.天:返回(20天)=日志(价格(t = 20)/价格(t = 0)),

2.天:返回(20天)=日志(价格(t = 21)/价格(t = 1)),

3.天:返回(20天)=日志(价格(t = 22)/价格(t = 2))

等等,即在我的样本中每天都这样做。

因此,我生成的数据框将如下所示:
Date          Return
1998-01-01 0.2
1998-01-02 0.4
1998-01-03 0.6
1998-01-04 0.1
...
1998-01-20 0.1
1998-01-21 0.2
1998-01-21 0.5
....
1998-02-01 0.1
1998-02-02 0.2
1998-02-03 0.5
1998-02-04 0.01
etc.

R 中有没有办法说:取前 20 个观察值,计算返回。取观察2-21,计算 yield 。采取观察3-22,计算返回等?

我完全被困住了,希望得到一些帮助。谢谢!
达尼

最佳答案

我建议切换到时间序列类,例如 xtszoo .但是,如果您只是想完成它,并在以后了解更多信息,则可以将其作为数据框轻松完成。请注意,我必须用 NA 填充返回向量s 使其正确对齐,并且 hold的 20 真正买入 1 并卖出 1 + 20:

> library(xts) 
> set.seed(2001)
> n <- 50
> hold <- 20
> price <- rep(55, n)
> walk <- rnorm(n)
> for (i in 2:n) price[i] <- price[i-1] + walk[i]
> data <- data.frame(date=as.Date("2001-05-25") + seq(n), price=price)
> data <- transform(data, return=c(diff(log(price), lag=hold), rep(NA, hold)))

如果您准备好 xtszoo (这应该适用于任何一种),然后我建议使用 rollapply获得前瞻性(假设您想要前瞻性返回,这使得今天形成投资组合并了解它在 future 如何运作变得更加容易):
> data.xts <- xts(data[, -1], data[, 1])
> f <- function(x) log(tail(x, 1)) - log(head(x, 1))
> data.xts$returns.xts <- rollapply(data.xts$price, FUN=f, width=hold+1, align="left", na.pad=T)

这两种方法是一样的:
> head(data.xts, hold+2)
price return returns.xts
[1,] 55.00000 0.026746496 0.026746496
[2,] 54.22219 0.029114744 0.029114744
[3,] 53.19811 0.047663206 0.047663206
[4,] 53.50088 0.046470723 0.046470723
[5,] 53.85202 0.041843116 0.041843116
[6,] 54.75061 0.018464467 0.018464467
[7,] 55.52704 -0.001105607 -0.001105607
[8,] 56.15930 -0.024183803 -0.024183803
[9,] 56.61779 -0.010757559 -0.010757559
[10,] 55.51042 0.005494771 0.005494771
[11,] 55.17217 0.044864991 0.044864991
[12,] 56.07005 0.025411005 0.025411005
[13,] 55.47287 0.052408720 0.052408720
[14,] 56.10754 0.034089602 0.034089602
[15,] 56.35584 0.075726190 0.075726190
[16,] 56.40290 0.072824657 0.072824657
[17,] 56.05761 0.070589032 0.070589032
[18,] 55.93916 0.069936575 0.069936575
[19,] 56.50367 0.081570964 0.081570964
[20,] 56.12105 0.116041931 0.116041931
[21,] 56.49091 0.095520517 0.095520517
[22,] 55.82406 0.137245367 0.137245367

关于r - 计算一段时间内的返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4472691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com