ソリューション私はので、私はインプライド・ボラティリティと、行列、Zを入力する必要が行うにはR.で「パースビュー」を使用してボラティリティ表面をプロットしようとしています行列に値を代入しようとすると、エラーがfsolveになります。説明および/または解決策を探して
が見つかりました。
私は、ストライク価格、時間および市場価格のデータフレームを持っています。データにはコールオプションのみが含まれています。
AAPL <- #data
df <- data.frame(AAPL$Strike.Price,AAPL$Time.Left,AAPL$Market.Price)
私は現在、それはいくつかのことに注意することが重要である株式の最初の列での価格、列2でのヘッダと、それぞれの市場価格倍、3と4を持つ行列、ZZを、持っています市場価格の価値が失われている(NA)。私のX、Y軸の
zz <- cast(df, df.Strike.Price ~ df.Time.Left)
、Iはベクトルを定義し:今
x0 <- zz$df.Strike.Price #Strike prices for calculation of imp. vol.
x <- zz$df.Strike.Price/153.06 #Axis for plotting
y <- c(time1, time2, time3)
インプライド・ボラティリティをプロットするためのZ行列。
:私はz = matrix(data=NA,nrow=length(x0),ncol=length(y))
空行列で始まりそして、私は、エラーメッセージを取得するコードのこの部分を実行する際に
for(i in 1:length(x0)){
for(j in 1:length(y)){
#Formula for Black-Scholes call option price (no dividends)
BS = function(X,T,sigma){
#Parameters
S=153.06; r=0.05 #Stock value is same for all options, r is arbitrarily selected to be some constant.
d1 = (log(S/X) + (r + sigma^2/2)*T)/(sigma*sqrt(T))
d2 = d1 - sigma*sqrt(T)
#Price for call options
price = S*pnorm(d1) - X*exp(-r*T)*pnorm(d2)
return(price)
}
#To address NA entries in zz
if(is.na(zz[i,j+1] == TRUE)){
z[i,j] = NA
}
#This is the part of the code that causes issues
else{
#Function for fsolve, the Black-Scholes price minus the market price.
A = function(sigma){
a = BS(x0[i], y[j], sigma) - zz[i,j+1]
return(a)
}
V = fsolve(A, 0.5) #Should give me the implied volatility from market data.
z[i,j] = V
}
}
}
を算出することができない値のNAを残して、マトリックスを充填しようとします
エラーであれば(規範(S、 "F")< TOL ||規範(ynew as.matrix()、 "F")< TOL)休憩:FALSE/TRUEが必要 欠損値
私はこのエラーについて何か分かりません。この問題や、代わりに暗黙のボラティリティを得る代わりの方法を克服する方法はありますかfsolve?
ソリューションを回答として投稿し、それを受け入れることができますか(質問に編集するのではなく)?これはStack OverflowのQ&Aフォーマットに沿ったものです。 – EJoshuaS
@EJoshuaS Will。私はここに投稿するのが初めてだ、私の間違い。 –