Cenová voľba americkej jednoduchej vanilky s binomickým cenovým motorom a modelom Cox-Rubinstein. Pri pokuse o načítavanie vega dostávam predmetovú chybu:
Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/opt/conda/lib/python3.6/site-packages/QuantLib.py", line 10506, in vega
return _QuantLib.VanillaOption_vega(self)
RuntimeError: vega not provided
Napriek tomu vega
ako metóda american_option
:
>>> dir(american_option) # scroll to the right -->
["NPV", "__class__", "__del__", "__delattr__", "__deref__", "__dict__", "__dir__", "__doc__", "__eq__", "__format__", "__ge__", "__getattribute__", "__gt__", "__hash__", "__init__", "__init_subclass__", "__le__", "__lt__", "__module__", "__ne__", "__new__", "__nonzero__", "__reduce__", "__reduce_ex__", "__repr__", "__setattr__", "__sizeof__", "__str__", "__subclasshook__", "__swig_destroy__", "__weakref__", "asObservable", "delta", "dividendRho", "errorEstimate", "freeze", "gamma", "impliedVolatility", "isExpired", "priceCurve", "recalculate", "rho", "setPricingEngine", "strikeSensitivity", "theta", "thetaPerDay", "this", "thisown", "unfreeze", "vega"]
Tu je kód, ktorý je založený na niekoľkých online príkladoch:
>>> from QuantLib import *
>>> maturity_date = Date(15, 1, 2016)
>>> spot_price = 127.62
>>> strike_price = 130
>>> volatility = 0.20 # the historical vols for a year
>>> dividend_rate = 0.0163
>>> option_type = Option.Call
>>> risk_free_rate = 0.001
>>> day_count = Actual365Fixed()
>>> calendar = UnitedStates()
>>> calculation_date = Date(8, 5, 2015)
>>> Settings.instance().evaluationDate = calculation_date
>>> payoff = PlainVanillaPayoff(option_type, strike_price)
>>> settlement = calculation_date
>>> am_exercise = AmericanExercise(settlement, maturity_date)
>>> american_option = VanillaOption(payoff, am_exercise)
>>> spot_handle = QuoteHandle(
... SimpleQuote(spot_price)
... )
>>> flat_ts = YieldTermStructureHandle(
... FlatForward(calculation_date,
... risk_free_rate,
... day_count)
... )
>>> dividend_yield = YieldTermStructureHandle(
... FlatForward(calculation_date,
... dividend_rate,
... day_count)
... )
>>> flat_vol_ts = BlackVolTermStructureHandle(
... BlackConstantVol(calculation_date,
... calendar,
... volatility,
... day_count)
... )
>>> bsm_process = BlackScholesMertonProcess(spot_handle,
... dividend_yield,
... flat_ts,
... flat_vol_ts)
>>>
>>>
>>> binomial_engine = BinomialVanillaEngine(bsm_process, "crr", 100)
>>> american_option.setPricingEngine(binomial_engine)
>>> print(american_option.vega())
prevedenie:
>>> import QuantLib
>>> print(QuantLib.__version__)
1.11
Python 3.6.3 |Anaconda, Inc.| (default, Oct 13 2017, 12:02:49)
Otázkou je, prečo nie je vega poskytovaná? Čo spôsobuje chybu?
odpovede:
1 pre odpoveď č. 1Na VanillaOption
Trieda vyhlasuje vega
metóda, ale ten len vrátiť výsledok, ak vybraný motor vypočíta.
Vo všeobecnosti motory, ktoré používajú analytické vzorec schopní vrátiť Gréci lacno, pretože majú tiež analytické vyjadrenie; engine založený na binomického stromu, ako ten ste "re využitím, Copak" t majú jednoduchý spôsob, ako spočítať vega.Aby to mali vykonať operáciu drahé, (ktorý je prepočítať s rozrušený volatility a získajte vega číselne), a preto ho kaucia sa a necháva na vám umožní vykonávať drahé výpočet explicitne.
V tomto prípade môžete vypočítať vega zvýšením volatility, výpočet novú možnosť cenu a číselne vypočítať derivátu.
Spracovať viac na túto tému a poskytnúť pár základných príkladov v toto video.