R 中的 Log-Return 模拟不会导致预期结果

Log-Return simulation in R does not lead to expected result

我目前正在尝试在 R 中模拟 log-returns 并计算一项简单投资的预期损益。我的代码可以正常工作,但我无法理解为什么预期利润不等于:

(exp(annual_mean * (holding_period/253)) * investment) - investment

在我的示例中等于 5350。然而,运行下面的模拟总是导致利润在 5580 左右:

investment <- 1000000
holding_period <- 45
annual_mean <- 0.03
annual_sd <- 0.05
simulations <- 1000000

  # Create Matrix for log-returns
  Paths <- matrix(data = NA, nrow = holding_period, ncol = simulations); 

  # feed matrix with log-returns
  for (k in 1:simulations) 
  {
  Returns <- rnorm(holding_period, mean = annual_mean/253, 
  sd = annual_sd/sqrt(253));
  Paths[, k] <- investment * exp(cumsum(Returns));
  }

  # calculate EPnL
  EPnL <- mean(Paths[holding_period, ] - investment);
  print(EPnL)

考虑到大量的模拟,我预计不会与预期利润有如此大的偏差。我也尝试了更多的模拟,但结果还是一样。

我试图通过这个模拟表明,模拟次数越多,实际值越接近预期值。

我希望你们理解我的问题。我知道这更像是一个与金融相关的话题,但我想我这边的代码有一些误解。

非常感谢!

我认为问题出在您对 cumsum 的使用上 - 您将 returns 视为利率相加而不是 multiply/compound。如果您稍微更改代码并改用 cumprod,它似乎会给出正确的结果...

# feed matrix with log-returns
for (k in 1:simulations) 
{
Returns <- rnorm(holding_period, mean = annual_mean/253, sd = annual_sd/sqrt(253))
Returns <- 1 + Returns
Paths[, k] <- investment * cumprod(Returns)
}

# calculate EPnL
EPnL <- mean(Paths[holding_period, ] - investment)
print(EPnL)

我终于找到了这个问题的答案。我完全忽略了一个事实,即我正在通过将正态分布 return 与初始投资相乘并不断复利来改变它。 虽然乘法使 return 服从正态分布,但指数函数变换随机变量,使其服从对数正态分布。因此,均值等于 exp(μ+σ^2/2),其中 μ 和 σ^2 等于相关正态分布的均值和标准差。