Program s30nafe
! S30NAF Example Program Text
! Mark 30.1 Release. NAG Copyright 2024.
! .. Use Statements ..
Use nag_library, Only: nag_wp, s30naf
! .. Implicit None Statement ..
Implicit None
! .. Parameters ..
Integer, Parameter :: nin = 5, nout = 6
! .. Local Scalars ..
Real (Kind=nag_wp) :: corr, eta, grisk, kappa, q, r, s, &
sigmav, var0
Integer :: i, ifail, j, ldp, m, n
Character (1) :: calput
! .. Local Arrays ..
Real (Kind=nag_wp), Allocatable :: p(:,:), t(:), x(:)
! .. Executable Statements ..
Write (nout,*) 'S30NAF Example Program Results'
! Skip heading in data file
Read (nin,*)
Read (nin,*) calput
Read (nin,*) s, r, q
Read (nin,*) kappa, eta, var0, sigmav, corr, grisk
Read (nin,*) m, n
ldp = m
Allocate (p(ldp,n),t(n),x(m))
Read (nin,*)(x(i),i=1,m)
Read (nin,*)(t(i),i=1,n)
ifail = 0
Call s30naf(calput,m,n,x,s,t,sigmav,kappa,corr,var0,eta,grisk,r,q,p,ldp, &
ifail)
Write (nout,*)
Write (nout,*) 'Heston''s Stochastic volatility Model'
Select Case (calput)
Case ('C','c')
Write (nout,*) 'European Call :'
Case ('P','p')
Write (nout,*) 'European Put :'
End Select
Write (nout,99998) ' Spot = ', s
Write (nout,99998) ' Volatility of vol = ', sigmav
Write (nout,99998) ' Mean reversion = ', kappa
Write (nout,99998) ' Correlation = ', corr
Write (nout,99998) ' Variance = ', var0
Write (nout,99998) ' Mean of variance = ', eta
Write (nout,99998) ' Risk aversion = ', grisk
Write (nout,99998) ' Rate = ', r
Write (nout,99998) ' Dividend = ', q
Write (nout,*)
Write (nout,*) ' Strike Expiry Option Price'
Do i = 1, m
Do j = 1, n
Write (nout,99999) x(i), t(j), p(i,j)
End Do
End Do
99999 Format (1X,2(F9.4,1X),6X,F9.4)
99998 Format (A,1X,F8.4)
End Program s30nafe