模拟随机资产价格路径的R代码

R code for simulating stochastic asset price path

考虑以下资产价格演变模型:

这是我(在 R 中)所做的。我找不到随机输出 +1 或 -1 的函数,所以我决定修改内置的 rbinom 函数。

## This code is in R

rm(list = ls())

library(dplyr)
library(dint)
library(magrittr)
library(stats)

path  = 
  function(T, mu, sigma, p, x0) {
    x    = rep(NA, T)
    x[1] = x0
    
    for(i in 2:T){
    z    = if_else(rbinom(1,1,p) == 0, -1, 1)
    x[i] = x[i-1] * exp(mu + sigma*z)
    }
    return(x)
  }

## Just some testing
x_sim = path(T = 4, mu = 0, sigma = 0.01, p = 0.5, x0 = 100)

## Actual answer
Np = 10000
mc = matrix(nrow = 17, ncol = Np)
for(j in 1:Np){
  mc[,j] = path(T = 17, mu = 0, sigma = 0.01, p = 0.5, x0 = 100)
}
test     = mc[2:nrow(mc), ] >= 100
sum_test = colSums(test)
comp     = sum(sum_test >= 1)/length(sum_test)
prob     = 1 - comp

这有意义吗?任何 help/tips/advice 将不胜感激。谢谢!

密切关注您的代码,我想到了这个。直觉上,如果你考虑一下,由于参数的原因,概率应该相当低,我得到的概率约为 6.7%,这大致是我 运行 你的代码和赋值参数时得到的概率。

simpath <- function(t, mu, sigma, p, x0, seed){
  # set seed
  if(!missing(seed)){
    set.seed(seed)  
  }
  # set up matrix for storing the results
  res <- matrix(c(1:t, rep(NA, t*2)), ncol = 3)
  colnames(res) <- c('t', 'z_t', 'x_t')
  res[, 'z_t'] <- sample(c(1, -1), size = t, prob = c(p, 1-p), replace = TRUE)
  res[1, 3] <- x0
  for(i in 2:t){
    res[i, 3] <- res[i-1, 3] * exp(mu+sigma*res[i, 2])
  }
  return(res)
}

x_sim <- simpath(t = 4, mu = 0, sigma = 0.01, p = 0.5, x0 = 100, seed = 123)
x_sim2 <- simpath(t = 36, mu = 0, sigma = 0.03, p = 0.5, x0 = 100, seed = 123)

## Actual answer
Np <- 100000
mc <- matrix(nrow = 36, ncol = Np)
for (j in 1:Np){
  mc[, j] <- simpath(t = 36, mu = 0, sigma = 0.03, p = 0.5, x0 = 100)[, 3]
}
test <- mc > 100
sum_test <- colSums(test)
comp     = sum(sum_test == 0)/length(sum_test)
prob     = comp
> prob
[1] 0.06759