Finite differences and discrete dividends

classic Classic list List threaded Threaded
2 messages Options
Reply | Threaded
Open this post in threaded view
|

Finite differences and discrete dividends

Mndaweni, M. (Menzi)
Finite differences and discrete dividends

Hi everyone!

I have been trying to calcualte options on equity instruments using the FDDividend engine. I include some source code to show what I did. The example calculates 2 options, one without dividends and one with 2 discrete dividends. The option with no dividends returned 13.279, which is where I expect it to be, but the option with discrete dividends returned 13.688 (vanilla european call with higher value than without the dividends!). I expected a value in the region of 8.73. What am I doing wrong?

        Date evalDate = Date(9,March,2006);
      Date exDate(9,March,2007);
      Settings::instance().evaluationDate() = evalDate;
     
      Size timeSteps = 100;
      Size gridPoints = 100;
     
      boost::shared_ptr<PricingEngine> engine(new FDDividendEuropeanEngine(timeSteps, gridPoints));
      boost::shared_ptr<Exercise> exercise(new EuropeanExercise(exDate));
     
      DayCounter dc = Actual365Fixed();
      boost::shared_ptr<SimpleQuote> spot(new SimpleQuote(100.00));
      Handle<YieldTermStructure> rTS(boost::shared_ptr<YieldTermStructure>(new FlatForward(evalDate, 0.1, dc)));
      Handle<YieldTermStructure> qTS(boost::shared_ptr<YieldTermStructure>(new FlatForward(evalDate, 0.0, dc)));
      Handle<BlackVolTermStructure> volTS(boost::shared_ptr<BlackConstantVol>(new BlackConstantVol(evalDate, 0.20, dc)));

     
      boost::shared_ptr<BlackScholesProcess> process(new BlackScholesProcess(Handle<Quote>(spot), qTS, rTS, volTS));
      boost::shared_ptr<StrikedTypePayoff> payoff(new PlainVanillaPayoff(Option::Call, 100.0));

      //add discrete dividends
      std::vector<Rate> dividends;
      std::vector<Date> dividendDates;

      DividendVanillaOption option1(process, payoff, exercise, dividendDates, dividends, engine);
      Real refValue = option1.NPV();
     
      dividends.push_back(2.5);
      dividends.push_back(5.0);
      dividendDates.push_back(Date(1, June, 2006));
      dividendDates.push_back(Date(1, September, 2006));
     
      DividendVanillaOption option2(process, payoff, exercise, dividendDates, dividends, engine);
      Real value = option2.NPV();


        Menzi
        Thank You


Nedbank Limited Reg No 1951/000009/06. The following link displays the names of the Nedbank Board of Directors and Company Secretary.
This email is confidential and is intended for the addressee only. The following link will take you to Nedbank's legal notice.

Reply | Threaded
Open this post in threaded view
|

Re: Finite differences and discrete dividends

Luigi Ballabio
On 03/22/2006 07:57:17 AM, Mndaweni, M. (Menzi) wrote:
> I have been trying to calcualte options on equity instruments using  
> the FDDividend engine. I include some source code to show what I did.
> The example calculates 2 options, one without dividends and one with  
> 2 discrete dividends. The option with no dividends returned 13.279,  
> which is where I expect it to be, but the option with discrete  
> dividends returned 13.688 (vanilla european call with higher value  
> than without the dividends!). I expected a value in the region of  
> 8.73. What am I doing wrong?

Apologies for the delay---I've been a bit busy getting out the 0.3.12  
release. Speaking of which, your code seems ok: I've tested it with the  
new release and the two options return 13.279 and 8.520, respectively.
Perhaps a bug in the old version---you might want to upgrade to the new  
one and check the results yourself.

Luigi


----------------------------------------

The young man knows the rules, but the old man knows the exceptions.
-- O. W. Holmes