@@ -361,9 +361,66 @@ MCEuropeanEngine
361
361
362
362
steps = 2
363
363
rng = " pseudorandom" # could use "lowdiscrepancy"
364
- num_paths = 100000
364
+ numPaths = 100000
365
365
366
- engine = ql.MCEuropeanEngine(process, rng, steps, requiredSamples = num_paths)
366
+ engine = ql.MCEuropeanEngine(process, rng, steps, requiredSamples = numPaths)
367
+
368
+
369
+ AnalyticDiscreteGeometricAveragePriceAsianEngine
370
+ ************************************************
371
+
372
+ .. function :: ql.AnalyticDiscreteGeometricAveragePriceAsianEngine(GeneralizedBlackScholesProcess)
373
+
374
+ .. code-block :: python
375
+
376
+ today = ql.Date().todaysDate()
377
+ riskFreeTS = ql.YieldTermStructureHandle(ql.FlatForward(today, 0.05 , ql.Actual365Fixed()))
378
+ dividendTS = ql.YieldTermStructureHandle(ql.FlatForward(today, 0.01 , ql.Actual365Fixed()))
379
+ volatility = ql.BlackVolTermStructureHandle(ql.BlackConstantVol(today, ql.NullCalendar(), 0.1 , ql.Actual365Fixed()))
380
+ initialValue = ql.QuoteHandle(ql.SimpleQuote(100 ))
381
+ process = ql.BlackScholesMertonProcess(initialValue, riskFreeTS, dividendTS, volatility)
382
+
383
+ engine = ql.AnalyticDiscreteGeometricAveragePriceAsianEngine(process)
384
+
385
+
386
+ MCDiscreteGeometricAPEngine
387
+ ***************************
388
+
389
+ .. function :: ql.MCDiscreteGeometricAPEngine(GeneralizedBlackScholesProcess, traits, brownianBridge=False, antitheticVariate=False, requiredSamples=None, requiredTolerance=None, maxSamples=None, seed=0)
390
+
391
+ .. code-block :: python
392
+
393
+ today = ql.Date().todaysDate()
394
+ riskFreeTS = ql.YieldTermStructureHandle(ql.FlatForward(today, 0.05 , ql.Actual365Fixed()))
395
+ dividendTS = ql.YieldTermStructureHandle(ql.FlatForward(today, 0.01 , ql.Actual365Fixed()))
396
+ volatility = ql.BlackVolTermStructureHandle(ql.BlackConstantVol(today, ql.NullCalendar(), 0.1 , ql.Actual365Fixed()))
397
+ initialValue = ql.QuoteHandle(ql.SimpleQuote(100 ))
398
+ process = ql.BlackScholesMertonProcess(initialValue, riskFreeTS, dividendTS, volatility)
399
+
400
+ traits = ' pr'
401
+ numPaths = 100000
402
+
403
+ engine = ql.MCDiscreteGeometricAPEngine(process, traits, requiredSamples = numPaths)
404
+
405
+
406
+ MCDiscreteArithmeticAPEngine
407
+ ****************************
408
+
409
+ .. function :: ql.MCDiscreteArithmeticAPEngine(GeneralizedBlackScholesProcess, traits, brownianBridge=False, antitheticVariate=False, controlVariate=False, requiredSamples=None, requiredTolerance=None, maxSamples=None, seed=0)
410
+
411
+ .. code-block :: python
412
+
413
+ today = ql.Date().todaysDate()
414
+ riskFreeTS = ql.YieldTermStructureHandle(ql.FlatForward(today, 0.05 , ql.Actual365Fixed()))
415
+ dividendTS = ql.YieldTermStructureHandle(ql.FlatForward(today, 0.01 , ql.Actual365Fixed()))
416
+ volatility = ql.BlackVolTermStructureHandle(ql.BlackConstantVol(today, ql.NullCalendar(), 0.1 , ql.Actual365Fixed()))
417
+ initialValue = ql.QuoteHandle(ql.SimpleQuote(100 ))
418
+ process = ql.BlackScholesMertonProcess(initialValue, riskFreeTS, dividendTS, volatility)
419
+
420
+ traits = ' pr'
421
+ numPaths = 100000
422
+
423
+ engine = ql.MCDiscreteArithmeticAPEngine(process, traits, requiredSamples = numPaths)
367
424
368
425
369
426
AnalyticHestonEngine
@@ -412,7 +469,35 @@ MCEuropeanHestonEngine
412
469
413
470
steps = 2
414
471
rng = " pseudorandom" # could use "lowdiscrepancy"
415
- num_paths = 100000
472
+ numPaths = 100000
473
+
474
+ engine = ql.MCEuropeanHestonEngine(hestonProcess, rng, steps, requiredSamples = numPaths)
475
+
476
+
477
+ FdHestonVanillaEngine
478
+ *********************
479
+
480
+ .. function :: ql.FdHestonVanillaEngine(HestonModel, tGrid=100, xGrid=100, vGrid=50, dampingSteps=0, FdmSchemeDesc==FdmSchemeDesc::Hundsdorfer(), leverageFct=LocalVolTermStructure())
481
+
482
+ .. code-block :: python
483
+
484
+ today = ql.Date().todaysDate()
485
+ riskFreeTS = ql.YieldTermStructureHandle(ql.FlatForward(today, 0.05 , ql.Actual365Fixed()))
486
+ dividendTS = ql.YieldTermStructureHandle(ql.FlatForward(today, 0.01 , ql.Actual365Fixed()))
487
+
488
+ initialValue = ql.QuoteHandle(ql.SimpleQuote(100 ))
489
+ v0 = 0.005
490
+ kappa = 0.8
491
+ theta = 0.008
492
+ rho = 0.2
493
+ sigma = 0.1
494
+
495
+ hestonProcess = ql.HestonProcess(riskFreeTS, dividendTS, initialValue, v0, kappa, theta, sigma, rho)
496
+ hestonModel = ql.HestonModel(hestonProcess)
497
+
498
+ tGrid, xGrid, vGrid = 100 , 100 , 50
499
+ dampingSteps = 0
500
+ fdScheme = ql.FdmSchemeDesc.ModifiedCraigSneyd()
416
501
417
- engine = ql.MCEuropeanHestonEngine(hestonProcess, rng, steps, requiredSamples = num_paths )
502
+ engine = ql.FdHestonVanillaEngine(hestonModel, tGrid, xGrid, vGrid, dampingSteps, fdScheme )
418
503
0 commit comments