对任何可能知道的人来说,只是一个简单的问题, 我在R中有以下代码定价选项:
X = 1.05
r = .85
n = 250
nsim = 2000
ctot = 0
for( i in 1:nsim){ # begining of loop
u1=rnorm(n,0,1)
u2=rnorm(n,0,1)
x=u1
y=r*u1+sqrt(1-r*r)*u2
x=0.25/sqrt(250)*x + (0.03-0.5*0.25*0.25)/250; y= 0.25/sqrt(250)*y + (0.03-0.5*0.25*0.25)/250
ShareA = 100*cumprod(exp(x))
ShareB = 100*cumprod(exp(y))
c = max(ShareA[n]-X*ShareB[n],0)
ctot=ctot+c
} # end of loop
c=ctot/nsim
c=c*exp(-0.03)
c
我的问题是我怎么能把它变成一个函数,我把相关的r改变成我喜欢的任何东西? 希望这是有道理的...基本上问题是将此代码转换为函数。 谢谢 所有建议都表示赞赏。
答案 0 :(得分:0)
将此调用选项转换为接受相关性作为参数的函数:
callOptionEval<-function(r=0.85){
X = 1.05 ; n = 250; nsim = 2000; ctot = 0;
for( i in 1:nsim){ # begining of loop
u1=rnorm(n,0,1);
u2=rnorm(n,0,1);
x=u1;
y=r*u1+sqrt(1-r*r)*u2;
x=0.25/sqrt(250)*x + (0.03-0.5*0.25*0.25)/250;
y= 0.25/sqrt(250)*y + (0.03-0.5*0.25*0.25)/250;
ShareA = 100*cumprod(exp(x));
ShareB = 100*cumprod(exp(y));
c = max(ShareA[n]-X*ShareB[n],0);
ctot=ctot+c;
} # end of loop c=ctot/nsim
c=c*exp(-0.03);
return(c)
}
callOptionEval(0.85)# gives 0
callOptionEval(0.5)# gives 12.45512
请注意,此代码不执行功能应该检查输入是否在$( - 1,1)$等之间的有用的东西。这对于当前用户来说更像是一个便利功能。
答案 1 :(得分:0)
mycorr <- function(x, r, n, nsim, ctot) {
Your remaining lines and loops here
}
将其用作
mycorr(X = 1.05, r = .85, n = 250, nsim = 2000, ctot = 0)