⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yuanma.txt

📁 期权的隐含波动率计算
💻 TXT
字号:

module NUMERICAL
  use IMSL
  implicit none
  real ::zero=0.1!可容忍誤差
  contains
  real function bisect(guess_a,guess_b,ca,s,k,r,q,t)
 
  real ::guess_a !區間值下界
  real ::guess_b !區間值上界
  real c !用來計算猜測值(A+B)/2
  real FA,FB,FC !用來記錄F(a),F(b),F(c)
  real ca
  real k
  real s,r,q,t
    
C=(guess_a+guess_b)/2.0 ! 先求出C, F(C)的值
    FC=func(C,ca,s,k,r,q,t)
   DO while (abs(fc)>zero) ! F(C)小於ZERO時,就視 F(C)=0,結束迴圈
    FA=func(guess_a,ca,s,k,r,q,t)
    FB=func(guess_b,ca,s,k,r,q,t)
    if(FA*FC<0) then
     guess_b=C ! f(a)*f(c)<0 ,以a,c值為新的區間
     C=(guess_a+guess_b)/2.0
    else
     guess_a=c ! 不然就是以b,c為新的區間
     C=(guess_a+guess_b)/2.0
    end if
 
     FC=FUNC(C,ca,s,k,r,q,t) ! 求出新的f(c)值
   end do
     bisect = C
    return
 end function

real function func(X,ca,s,k,r,q,t) ! 求解用的函數
implicit none
    real X
    real ca,s,k,r,q,t
  
    FUNC=S*exp(-q*t)*ANORDF((log(s/k)+(r+0.5*X**2)*t)/(x*t**0.5))-K*exp(-r*t)*ANORDF((log(s/k)+(r-0.5*X**2)*t)/(X*t**0.5))-ca
  
return
end function

end module


program main
use numerical
implicit none
  integer i
  integer,parameter:: option=5
 real::x !要求的隱含波動率
 real::guess_a=0.001 !猜測值下限
 real::guess_b=1 !猜測值上限
 real::ans(option) !最終解
 real::caa(option)=(/945,745,446,173,15/) !買權
 real,parameter::s=8355.0 !現貨價格
 real::kk(option)=(/7400,7600,7900,8200,8500/) !履約價格
 real,parameter::T=0.0383562 !存續期間
 real,parameter::r=0.02 !無風險利率
 real,parameter::q=0.05 !現金股利率
 real ca,k
  do i=1,option
ca=caa(i)
k=kk(i)
  ans(i)=bisect(guess_a,guess_b,ca,s,k,r,q,t)

   write(*,"(f14.8)") ans(i)
    ca=0
k=0
end do
stop
end program

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -