Forward

BlackProcess 的建構子X0X0x0x_{0}QuantLib 中的參數

  • November 17, 2014

I am currently using BlackProcess to price options and I have a doubt related to the $ x_{0} $ argument of the constructor: I’ve figured out it should be the forward price of the security, because Black’s model uses that to take into account e.g. implied dividend yield and in the end it uses risk free term structure to discount options’ prices.

This is my snippet of code:

 // ...
 // Exercise
 boost::shared_ptr< Exercise > europeanExercise(
     new EuropeanExercise(maturity));

 // Select underlying price according to maturity date
 boost::shared_ptr< Quote > underlyingQ;
 for(int i = 0; i < maturityArray_.size(); i++)
 {
     if(maturity == maturityArray_[i])
     {
         underlyingQ.reset(new SimpleQuote(forwardPrices[i]));
         break;
     }
 }
 if (!underlyingQ)
     return -1.0; // Error?
 Handle< Quote > underlyingH(underlyingQ);

 // Bootstrap interest rates curve
 Handle< YieldTermStructure > riskFreeTSH(riskFreeTS);

 // Payoff
 boost::shared_ptr< StrikedTypePayoff > payoff(
     new PlainVanillaPayoff(type, strike));

 // Process
 boost::shared_ptr< BlackProcess > blackProcess(
     new BlackProcess(underlyingH, riskFreeTSH, Handle< BlackVolTermStructure >(forwardVolSurface_)));

 // Options
 VanillaOption europeanOption(payoff, europeanExercise);
 europeanOption.setPricingEngine(boost::shared_ptr< PricingEngine >(
                                      new AnalyticEuropeanEngine(blackProcess)));
 //...

maturityArray_ and forwardPrices are arrays of the same length that have forward dates and forward prices inside.

As you can see, underlyingQ is chosen from an array of forward prices by matching maturity date from maturityArray_ array, and then used in BlackProcess constructor as $ x_{0} $ : is this correct? Or is $ x_{0} $ supposed to be the underlying spot price?

I ask this because pricing some hundreds of options using Bloomberg’s inputs (mid implied volatility, implied forward prices and deposit rates curve) returns fair values that are slightly different than what I see on books. I am currently working on EURO STOXX 50® Index Options (OESX) and the kind of pricing error is something like a parallel shift: this suggests me an issue related to term structures, not implied volatilities or other inputs.

The process must contain the spot price. The AnalyticEuropeanEngine will take care of calculating the forward price from the data you’re passing in the process (in this case spot and risk-free-rate) and the maturity of the option.

As implemented in QuantLib, though, The BlackProcess class assumes there’s no dividend yield. If you want to model some kind of implied yield, you’ll probably have to use a more generic class (such as BlackScholesMertonProcess) and pass it the dividend yield you’ve estimated.

引用自:https://quant.stackexchange.com/questions/15477