1
$\begingroup$

The QuantLib's version in my os:

import QuantLib as ql
ql.__version__
'1.34'

All the arguments related to the put option:

settlementDate = ql.Date(11, ql.July, 2019)
maturity = ql.Date(19, ql.July, 2019)
stock = 0.28
strike = 0.5
riskFreeRate = 0.05
volatility = 1.7

The other part of price valuation:

calendar = ql.UnitedStates(ql.UnitedStates.NYSE)
dayCounter = ql.Actual365Fixed(ql.Actual365Fixed.Standard)
ql.Settings.instance().evaluationDate = todayDate
AmericanExercise(earliestDate, latestDate, payoffAtExpiry=False)
AmericanExercise = ql.AmericanExercise(todayDate,maturity)
optionType = ql.Option.Put    
payoff = ql.PlainVanillaPayoff(type=optionType, strike=strike)
AmericanOption = ql.VanillaOption(payoff=payoff,exercise=AmericanExercise)

underlying = ql.SimpleQuote(stock)
underlyingH = ql.QuoteHandle(underlying)
flatRiskFreeTS = ql.YieldTermStructureHandle(
    ql.FlatForward(
        settlementDate, riskFreeRate, dayCounter))
flatVolTS = ql.BlackVolTermStructureHandle(
    ql.BlackConstantVol(
        settlementDate, calendar,
        volatility, dayCounter))
bsProcess = ql.BlackScholesProcess(
    s0=underlyingH,
    riskFreeTS=flatRiskFreeTS,
    volTS=flatVolTS)
 
steps = 200
binomial_engine = ql.BinomialVanillaEngine(bsProcess, "crr", steps)
AmericanOption.setPricingEngine(binomial_engine)

The put option's price:

print("Option value =", AmericanOption.NPV())
Option value = 0.22013426651607249

Other Greeks(Delta,Gamma,theta)value:

print("Delta value  =", AmericanOption.delta())
Delta value  = -0.988975537620728
print("Gamma value  =", AmericanOption.gamma())
Gamma value  = 0.5635976654806573
print("Theta value  =", AmericanOption.theta())
Theta value  = -0.03899648147441449

It can't get American put option's vega,rho:

print("Theta value  =", AmericanOption.theta())
Theta value  = -0.03899648147441449
>>> print("Vega value   =", AmericanOption.vega())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/debian/mydoc/lib/python3.11/site-packages/QuantLib/QuantLib.py", line 17245, in vega
    return _QuantLib.OneAssetOption_vega(self)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: vega not provided
>>> print("Rho value    =", AmericanOption.rho())
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/debian/mydoc/lib/python3.11/site-packages/QuantLib/QuantLib.py", line 17249, in rho
    return _QuantLib.OneAssetOption_rho(self)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
RuntimeError: rho not provided

The AmericanOption contains vega and rho:

'vega' and 'rho' in dir(AmericanOption)
True

Why 'vega' and 'rho' are not provided in runtime?
How can calculate the American put option's vega,rho?
Are there other python libs can work for American BS model?

$\endgroup$
1
  • 1
    $\begingroup$ This question has been adressed here stackoverflow.com/questions/48535148/… Entry points for Vega and Rho of Options are always declared, but there is no code provided in cases (such as American options) where there is no closed formula for Vega and Rho. In these cases you can "bump" the vol or the interest rate to approximately calculate these greeks. $\endgroup$
    – nbbo2
    Commented Jul 9 at 16:15

0

Browse other questions tagged or ask your own question.