Example of a simple option with Quantlib ?

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

Example of a simple option with Quantlib ?

gilles herzog
Good afternoon,
I just want to price a simple option with quantlib
I know the maturity, the strike, s0, Sigma and r and I want to use Black and
scholes.
It must be very easy to do that with Quantlib but the example
europeanOption.cpp causes a lot of problems to me.
Could someone give me a simple example ??
Thank you very much

NB: in EuropeanOption, what means
return std::exp(-r_*maturity_)
               *PlainVanillaPayoff(type_, strike_)(s0_*std::exp(x))
               *std::exp(-(x - nuT)*(x -nuT)/(2*sigma_*sigma_*maturity_))
               /std::sqrt(2.0*M_PI*sigma_*sigma_*maturity_);
in the operator().
Why a PI ? why multiply the payoff with a exp ?

_________________________________________________________________
http://desktop.msn.fr/



Reply | Threaded
Open this post in threaded view
|

Re: Example of a simple option with Quantlib ?

Luigi Ballabio
On 1/23/06, gilles herzog <[hidden email]> wrote:
> NB: in EuropeanOption, what means
> return std::exp(-r_*maturity_)
>                *PlainVanillaPayoff(type_, strike_)(s0_*std::exp(x))
>                *std::exp(-(x - nuT)*(x -nuT)/(2*sigma_*sigma_*maturity_))
>                /std::sqrt(2.0*M_PI*sigma_*sigma_*maturity_);
> in the operator().
> Why a PI ? why multiply the payoff with a exp ?

Gilles,
    forget that class. It's not used in the example. You might as well
delete it.

The rest of the example, i.e., the main() body, should give you some
hints on how to price an option. Write back if there are any problems.

Later,
    Luigi


Reply | Threaded
Open this post in threaded view
|

Re: Example of a simple option with Quantlib ?

Fred Nastos
In reply to this post by gilles herzog
On Monday 23 January 2006 12:13, gilles herzog wrote:
> I just want to price a simple option with quantlib
> I know the maturity, the strike, s0, Sigma and r and I want to use Black
> and scholes.
> It must be very easy to do that with Quantlib but the example
> europeanOption.cpp causes a lot of problems to me.
> Could someone give me a simple example ??

Gilles,

In case it helps, here is the EuropeanOption.cpp example stripped to
its most basics:

#include <ql/quantlib.hpp>
#include <iostream>
using namespace QuantLib;

int main()
{
  Option::Type type(Option::Call);
  Real underlying = 7.00, strike = 8.00;
  Spread dividendYield = 0.05;
  Rate riskFreeRate = 0.05;
  Volatility volatility = 0.10;
  Date todaysDate(15, May, 1998);
  Date settlementDate(17, May, 1998), exerciseDate(17, May, 1999);
  Settings::instance().evaluationDate() = todaysDate;
  DayCounter dayCounter = Actual365Fixed();
  Time maturity = dayCounter.yearFraction(settlementDate,exerciseDate);
 
  boost::shared_ptr<Exercise> exercise(new EuropeanExercise(exerciseDate));
  Handle<Quote> underlyingH(boost::shared_ptr<Quote>(new
         SimpleQuote(underlying)));
 
  Handle<YieldTermStructure>
      flatTermStructure(boost::shared_ptr<YieldTermStructure>(
         new FlatForward(settlementDate, riskFreeRate, dayCounter)));
  Handle<YieldTermStructure>
      flatDividendTS(boost::shared_ptr<YieldTermStructure>(
         new FlatForward(settlementDate, dividendYield, dayCounter)));
  Handle<BlackVolTermStructure>
      flatVolTS(boost::shared_ptr<BlackVolTermStructure>(
         new BlackConstantVol(settlementDate, volatility, dayCounter)));

  boost::shared_ptr<StrikedTypePayoff> payoff(
         new PlainVanillaPayoff(type, strike));
 
  boost::shared_ptr<BlackScholesProcess> stochasticProcess(
         new BlackScholesProcess(underlyingH, flatDividendTS,
                                 flatTermStructure, flatVolTS));
 
  EuropeanOption option(stochasticProcess, payoff, exercise);
 
  option.setPricingEngine(boost::shared_ptr<PricingEngine>(
         new AnalyticEuropeanEngine()));
 
  std::cout << "Black-Scholes value: " << option.NPV() << std::endl;
 
  return 0;
}


> Thank you very much
>
> NB: in EuropeanOption, what means
> return std::exp(-r_*maturity_)
>                *PlainVanillaPayoff(type_, strike_)(s0_*std::exp(x))
>                *std::exp(-(x - nuT)*(x -nuT)/(2*sigma_*sigma_*maturity_))
>                /std::sqrt(2.0*M_PI*sigma_*sigma_*maturity_);
> in the operator().
> Why a PI ? why multiply the payoff with a exp ?