【问题标题】:Fiscal-year return and standard deviation from daily returns财政年度回报和每日回报的标准差
【发布时间】:2015-12-07 23:05:55
【问题描述】:

我想计算大量公司的财政年度回报和每日回报的标准差。我对 R 比较陌生,以前使用 SAS 来计算回报等。但是,我想在短期/中期切换到 R。

我有两个文件:1) 包含公司标识符、日期、每日收益 (df.1) 和 2) 我想汇总收益的样本 (df.2)

firm      date        ret
   1   01/01/1992     0.024
   1   02/01/1992     0.010
   .        .           .
   .        .           .
   1   31/12/2014     0.002 
   2   01/01/1992     0.004
   2   02/01/1992     0.012

文件非常大,大约有 1M 行。

第二个文件是这样的:

firm  fiscal_year_start fiscal_year_end 
    1 01/01/1992        31/12/1992   
    1 01/01/1993        31/12/1993
    1 01/01/1994        31/12/1994

我想计算财政年度回报和年化标准差。两个 .csv 文件都作为数据帧加载到 R 中。我不确定如何最好地处理日期变量以及如何构造 for 循环以遍历每日返回文件。

任何帮助将不胜感激。

编辑1

我可以使用这个函数对大数据框进行子集化:

myfunc <- function(x,y,z){df.1(df.1$date1 >= x & df.1$date1 < y & df.1$firm == firm1,]}          
firm1  <- df.2$firm[1]
start_date <- df.2$StartDate[1]
end_date  <- df.2$EndDate[1]
Test <- myfunc(start_date,end_date, firm1)

对于这个子集,我可以获得财政年度回报和标准:

# return
fiscal_year_ret  <- with(Test, sum(Test$ret))

# annualized variance
var <- with(Test, var(Test$ret))
annualized_var  <- var*length(Test)
annualized_st.dev <- sqrt(annualized_var)

我的大问题是将它嵌入到一个循环中,让我可以遍历 df.2 中的不同公司标识符和日期

EDIT2

所以我有这样的东西

df.output <- data.frame(returns=as.numeric(),
             std.deviation=as.numeric(), 
             stringsAsFactors=FALSE) 

我想用结果填充上述数据框。

for (i in sample) {
myfunc <- function(x,y,z){df.1[df.1$date1 >= x & df.1$date1 < y & df.1$firm == firm1,]}        
firm1  <- df.2$firm[i]
start_date <- df.2$StartDate[i]
end_date  <- df.2$EndDate[i]
subset <- myfunc(start_date,end_date, firm1) 

# return
fiscal_year_ret    <- with(subset, sum(subset$ret))
df.output$returns  <-fiscal_year_ret 
# variance
var <- with(subset, var(subset$ret))
annualized_var  <- var*length(subset)
annualized_st.dev <- sqrt(annualized_var)

}

类似的东西。

【问题讨论】:

  • 查看quantmod

标签: r financial


【解决方案1】:

这是一种方法:

library(lubridate)

data %>%
  mutate(year =
           date %>%
           mdy %>%
           floor_date(unit = "year") )
  group_by(year) %>%
  summarize(
    mean_return = mean(ret),
    sd_return = sd(ret))

【讨论】:

  • 嗯,每年应该是cumprod(1+ret),但正如 OP 所说,一些公司在不同的日期开始他们的财政年度。请参阅包PerformanceAnalytics。但是,我不是免费做金融的 :)
  • 感谢您的回复。我需要更多有关 for 循环结构的帮助,以从一个数据帧访问信息以及开始和结束日期,并使用该信息循环遍历大文件。计算本身很简单。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-07-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-02
  • 1970-01-01
  • 1970-01-01
  • 2021-01-14
相关资源
最近更新 更多