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.
BlackProcess
is not actually used: on the contrary,BlackScholesMertonProcess
is taken, for which using spot as $x_{0}$ is theoretically correct. $\endgroup$