Why QuantLib May Not Provide American Put Vega and Rho
Summary
The document asks why QuantLib’s American put option object exposes vega and rho methods but raises runtime errors when they are called. It presents a valuation setup using a binomial Cox–Ross–Rubinstein engine and reports that price, delta, gamma, and theta are available, while vega and rho are not.
The post provides no accepted explanation, workaround, numerical differentiation procedure, or comparison with another Python library. It is therefore mainly a troubleshooting question rather than a complete method for calculating these sensitivities. Its example illustrates that an API method can exist while the selected pricing engine does not supply the corresponding Greek; the engine and library version may matter, and the document does not establish whether another engine or library would calculate them.
Key ideas
- The example prices an American put with a binomial tree engine.
- The selected engine returns several Greeks but raises errors for vega and rho.
- An exposed Greek method does not guarantee that the chosen pricing engine implements it.
- The document asks for a workaround but does not provide one.
Tags
Full text
# How can calculate the American put option's vega,rho?
# How can calculate the American put option's vega,rho?
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?Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.