我正在尝试做的概述:我目前正在使用我在R中设法编写的特定函数来模拟股票价格:
for(i in 2:252){
X[1]<- 83.26
X[i] <- X[i-1]*(1+mu*dt)+sigma*X[i-1]*sqrt(dt)*rnorm(1)}
我模拟这个252天来生成一个轨迹。以上工作完美。
我现在需要使用上面的代码生成100个轨迹,并且已被告知在上面添加额外的for循环以生成100个轨迹并将结果保存在矩阵中。
到目前为止,我有:
Y<- matrix(NA, nrow=100, ncol=252)
for(j in 1:dim(X)[1]){
for(i in 2:dim(X)[2]){
X[1]<- 83.26
X[i] <- X[i-1]*(1+mu*dt)+sigma*X[i-1]*sqrt(dt)*rnorm(1)}
}
哪个不起作用也不起作用。
基本上我想要做的是创建一个包含252列(代表不同股票价格的天数)的矩阵,包含100行(代表100个不同生成的路径)
任何有关如何做到这一点的帮助将不胜感激。
mu=0.0009646
sigma=0.0001471
dt=0.00796813
编辑:
我现在需要能够在图形上绘制作为单独线条创建的矩阵的每一行。即绘制每个轨迹与时间t。
重温布雷特的解决方案,
Y<- matrix(NA, nrow=100, ncol=252)
for(j in 1:dim(Y)[1]){
for(i in 2:dim(Y)[2]){
X[1]<- 83.26
X[i] <- X[i-1]*(1+mu*dt)+sigma*X[i-1]*sqrt(dt)*rnorm(1)}
Y[j, ] <- X
}
你遇到的一个问题就是要求R计算dim(X)
,看起来,给出你的第一个代码块,就像它应该是一个向量,因此有一个length()
而不是dim()
。
因此,此解决方案使用矩阵Y
生成用于迭代的维度。
另一个问题是在你迭代每个X 252次后,你没有存储这些值。因此,当您放置Y[j, ] <- X
时,您将获取为X
创建的所有值并将它们存储在j
排的Y
中。
我相信其他人会使用更流畅的解决方案,但这个解决方案使用了你已编写的大部分代码。
干杯。
mu <- 0.0009646
sigma <- 0.0001471
dt <- 0.00796813
X <- matrix(NA, nrow = 100, ncol = 252)
for (j in 1:dim(X)[2]) {
X[1, j] <- 83.26
for (i in 2:dim(X)[1]) {
X[i, j] <-
X[i - 1, j] * (1 + mu * dt) + sigma * X[i - 1, j] * sqrt(dt) * rnorm(1)
}
}
qazxsw poi是独立的日子和qazxsw poi的独立轨迹,因此每一列都是行的不同天的轨迹。
绘制数据的方法:
i
每条线都是不同的轨迹
j