bug in FdDividendAmericanOption ?

classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

bug in FdDividendAmericanOption ?

Vadim Ogranovich-3
Hi, It seems like one should be very careful with the choice of the number
of time steps in FdDividendAmericanOption when the time of the first
dividend is small, say few days away. I set dividend time to be three days
from now and the dividend to ZERO, i.e. effectively no dividend. I priced a
one-year option using different number of time steps. Here is what I got
(the option is roughly at-money and the number of asset steps is 20):

timeSteps=20 value=31.4584 delta=132.089 vega=-413.866
timeSteps=25 value=13.7421 delta=0.459811 vega=26.0437
timeSteps=30 value=11.8448 delta=0.68109 vega=12.8412
timeSteps=35 value=11.829 delta=0.689197 vega=12.5606
timeSteps=40 value=11.829 delta=0.689197 vega=12.5606
timeSteps=45 value=11.829 delta=0.689197 vega=12.5606
timeSteps=50 value=11.829 delta=0.689197 vega=12.5606
timeSteps=55 value=11.829 delta=0.689197 vega=12.5606

This is particularly worrisome since the dividend value was set to zero and
thus the dividend shouldn't have had any effect.

Any suggestions?

Thanks, Vadim

P.S. Here is how to reproduce the results


#include <ql/quantlib.hpp>


using namespace std;
using namespace QuantLib;
using namespace QuantLib::Pricers;


int main() {
  const unsigned assetSteps = 20;


  vector<double> dividendTimeA;
  dividendTimeA.push_back(3.0/365);

  vector<double> dividendA;
  dividendA.push_back(0.0);

  double under=35.563;
  double strike=35;
  double dividendYield=0;
  double interestRate=0.0640948;
  double expirationTime=1.0;
  double sigma=0.782562;


  for (int timeSteps=20; timeSteps<60; timeSteps+=5) {
    FdDividendAmericanOption opt(Option::Call, under,
                                 strike,
                                 dividendYield, interestRate,
                                 expirationTime, sigma,
                                 dividendA, dividendTimeA,
                                 timeSteps, assetSteps);


    cout << "timeSteps=" << timeSteps
         << " value=" << opt.value() << " delta=" << opt.delta() << " vega="
<< opt.vega() << '\n';
  }
  return 0;
}


--------------------------------------------------
DISCLAIMER
This e-mail, and any attachments thereto, is intended only for use by the
addressee(s) named herein and may contain legally privileged and/or
confidential information.  If you are not the intended recipient of this
e-mail, you are hereby notified that any dissemination, distribution or
copying of this e-mail, and any attachments thereto, is strictly prohibited.
If you have received this e-mail in error, please immediately notify me and
permanently delete the original and any copy of any e-mail and any printout
thereof.

E-mail transmission cannot be guaranteed to be secure or error-free.  The
sender therefore does not accept liability for any errors or omissions in
the contents of this message which arise as a result of e-mail transmission.

NOTICE REGARDING PRIVACY AND CONFIDENTIALITY

Knight Trading Group may, at its discretion, monitor and review the content
of all e-mail communications.