Using Monte Carlo method to price European Basket Options

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

Using Monte Carlo method to price European Basket Options

Pedro Milet

Hi all,


I’m trying to use Quantlib’s MCEuropeanBasketEngine to price a simple basket option put so far have not been able to do so.

I’m using a C# SWIG compilation of Quantlib, and tried the following:


            _exercise = new EuropeanExercise(_maturity);


            var stochasticVector = new StochasticProcessVector((int)numAssets);

            for (int i = 0; i < numAssets; i++)


                stochasticVector.Add(new GeneralizedBlackScholesProcess(

                    new QuoteHandle(_spotQuotes[i]),

                    new YieldTermStructureHandle(_dividendCurves[i].TermStructure),

                    new YieldTermStructureHandle(_riskFreeCurves[0].TermStructure),

                    new BlackVolTermStructureHandle(_volMatrices[i].TermStructure)




            var stochasticProcessArray = new StochasticProcessArray(stochasticVector, _correlationMatrix);


            //Since quantlib uses the exponential formula for the Monte Carlo, only one time step is needed for european options.

            uint timeSteps = 1;

            uint QL_NULL_INTEGER = 0x7fffffff;

            bool brownianBridge = false;

            //Increases precision by sampling -x whenever x is sampled.

            bool antitheticVariate = true;

            int requiredSamples = 10000;

            double requiredTolerance = 1e-3;

            int maxSamples = 1000000;

            //int seed;


            _engine = new MCEuropeanBasketEngine(stochasticProcessArray, "pseudorandom", timeSteps, QL_NULL_INTEGER,

                brownianBridge, antitheticVariate, requiredSamples, requiredTolerance, maxSamples);

            _basketOption = new BasketOption(_payoff, _exercise);




This compiles fine, but using _basketOption.NPV() for a basket of a single asset (when it should approximately match the Black & Scholes price) consistently overpriced the option (i.e., the average of a large number of runs was consistently above the B&S price). I suspected it either had to do with the single time step (but since it’s an European option I thought this should work anyway) or with something I did not do regarding the random number generation.


What am I doing wrong?




Pedro Milet






Developer Access Program for Intel Xeon Phi Processors
Access to Intel Xeon Phi processor-based developer platforms.
With one year of Intel Parallel Studio XE.
Training and support from Colfax.
Order your platform today.
QuantLib-users mailing list
[hidden email]