0

私は研究を続けており、さまざまなことを試してきましたが、この関数にプログラムの X、td、D0 のベクトル入力を取得させることに失敗しました。最終的には、権利行使価格、ex 配当、および配当額が同時にではなく 1 つずつ変化したときに、オプションの価値がどのように変化するかを確認したいと考えています。これは個別の配当のためのもので、利回りは考慮していません。これは私の最初の実際のプログラムであり、r を電卓としてしか使用していないため、耳の後ろが濡れているだけでなく、頭からつま先まで滴り落ちています。私は本当に助けていただければ幸いです。

DivADJBSM<-function(S, X, rf, T,td, sigma,D0) {
values <- matrix(,3,2)
Dd<-(D0*exp(-rf*T))    #discounted dividend#
Sd<-(S-Dd)      #Stock adjusted for present value of dividends#
Xd1=(X-D0)      #Strike adjusted after dividend paid#
K=td/T      #dividend payment to terminal date impact#
SigA=(sigma*S)/(Sd)     #adjusted volatility full#
    WSig=(sigma*S)/(S-(Dd*K)) #volatility adjustment impact of payment date#

     d1 <- (log(Sd/Xd1)+(rf*T))/(SigA*sqrt(T)) +((SigA*sqrt(T))/2)
     d2 <- d1 - (SigA * sqrt(T))
     d3 <- (log(Sd/Xd1)+(rf*T))/(WSig*sqrt(T)) +((WSig*sqrt(T))/2)
     d4 <- d3 - (WSig * sqrt(T))
     d5 <- (log(S/X)+(rf*T))/(sigma*sqrt(T)) +((sigma*sqrt(T))/2)
     d6 <- d5 - (sigma * sqrt(T))

     values[1] <- (Sd)*pnorm(d1) - (Xd1)*exp(-rf*T)*pnorm(d2)
     values[4] <- (Xd1)*exp(-rf*T)*pnorm(-d2)-(Sd)*pnorm(-d1)  
     values[2] <- (Sd)*pnorm(d3) - (Xd1)*exp(-rf*T)*pnorm(d4)
     values[5] <- (Xd1)*exp(-rf*T)*pnorm(-d4)-(Sd)*pnorm(-d3)
    values[3] <- (S)*pnorm(d5) - (X)*exp(-rf*T)*pnorm(d6)
     values[6] <- (X)*exp(-rf*T)*pnorm(-d6)-(S)*pnorm(-d5)          

print("Calls COL=1, Puts COL=2, Full Vol ADJ ROW=1, Weighted Vol ROW=2, Std BSM ROW=3") 
   values
}
4

1 に答える 1

1

でやりたいことを実現できますlapply。簡単な例を次に示します。

> fun<-function(x) x^2
> lapply(1:3,fun)
[[1]]
[1] 1

[[2]]
[1] 4

[[3]]
[1] 9

複数の引数がある場合、デフォルトでは最初の引数を繰り返し処理しますが、lapply呼び出しの最後に残りの引数に名前を付けることで、どれを繰り返し処理するかを指定できます。

> fun<-function(x,y,z) c(x,y^2,z^3)
> lapply(1:3,fun,2,3)
[[1]]
[1]  1  4 27

[[2]]
[1]  2  4 27

[[3]]
[1]  3  4 27

> lapply(1:3,fun,x=2,z=3)
[[1]]
[1]  2  1 27

[[2]]
[1]  2  4 27

[[3]]
[1]  2  9 27

> lapply(1:3,fun,x=2,y=3)
[[1]]
[1] 2 9 1

[[2]]
[1] 2 9 8

[[3]]
[1]  2  9 27

これを関数で使用するには、X引数の名前を変更する必要があります。これXは、 への引数の 1 つでもあり、lapply混乱を招くからです。

于 2013-10-12T17:25:52.750 に答える