簡體   English   中英

計算滾動回報

[英]Calculating a rolling return

我有一個包含 3 列的數據框。 我想要做的是計算每個月期間(或換句話說,每一行)(如果可用)在選定月份滾動期間的回報率的乘積。 這是數據的基本結構。

set.seed = 100
assets <- c("A", "B", "C", "D", "E", "F", "G", "H", "I")
FileDate <- seq(as.Date("2011-12-30"), as.Date("2019-01-31"), by="months")
df <- merge(x = assets, y = FileDate, all.x = TRUE)
df$return <- runif(774, min=0, max=1)

它應該以 dataframe 結尾,其中添加了一個新列,其中包含該時間范圍內的選定期間累計回報。 例如,我在下面顯示了四個月的回報。 根據數據計算 2012 年 3 月 30 日的 4 個月回報率為:((1+0.81/100) (1+0.715/100) (1+0.27/100)*(1+0.80/100) -1)*100

這將對 X 列下的每個值重復。

在此處輸入圖像描述

我最終使用了 mutate function 在那里你可以設置滯后寬度。 我想要的最終版本

    library(dplyr)
    library(zoo)

    # Create Test Dataframe
    set.seed = 100
    assets <- c("A", "B", "C", "D", "E", "F", "G", "H", "I")
    FileDate <- seq(as.Date("2011-12-30"), as.Date("2019-01-31"), by="months")
    df <- merge(x = assets, y = FileDate, all.x = TRUE)
    df$performance <- runif(774, min=0, max=1)

這個特定的代碼在滾動的基礎上創建了 5 個月的平均值。 如果按 X 列排序,您可以在 excel 中看到並重新創建它。

    df <- df %>% 
          group_by(x) %>% 
          mutate(x_mean = rollmean(performance, 5, fill = NA, align = 'right'))

我還找到了一種創建滯后的方法,這樣我就可以將 4 個先驗值用於觀察並計算平均值:

    df2 = df %>%
          mutate(perf.4.previous = rollapply(data = perf.1.previous, width = 4, FUN = 
    mean, align = "right", fill = NA, na.rm = T))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM