将代码转换为函数

时间:2017-07-10 19:13:25

标签: r normal-distribution simulation function

对任何可能知道的人来说,只是一个简单的问题, 我在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改变成我喜欢的任何东西? 希望这是有道理的...基本上问题是将此代码转换为函数。 谢谢 所有建议都表示赞赏。

2 个答案:

答案 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)