def AsianFwdGamma(Fwd, strike, RlzAvg, Vol, Texp, AvgPeriod, Rd):
Fwd = float(Fwd)
strike = float(strike)
RlzAvg = float(RlzAvg)
if AvgPeriod > Texp:
x = strike * (AvgPeriod / Texp) - RlzAvg * (AvgPeriod - Texp) / Texp
else:
x = strike
tau = numpy.max([0, Texp - AvgPeriod])
if AvgPeriod > 0:
volA = asian_vol_adj(Vol, Texp, tau)
else:
volA = Vol
if x < 0:
return 0
else:
if Texp < AvgPeriod:
multi = Texp / AvgPeriod
else:
multi = 1.0
Asiand1 = (log(Fwd / x) + (volA * volA * 0.5) * Texp) / (volA * sqrt(Texp))
ND = exp(-(Asiand1 * Asiand1 * 0.5)) / sqrt(2 * pi)
return multi * exp(- Rd * Texp) * ND / (Fwd * volA * sqrt(Texp))
评论列表
文章目录