Real GeneralizedBlackScholesProcess::stdDeviation(Time t0, Real x0, Time dt) const {
     localVolatility(); // trigger update
     if(isStrikeIndependent_ && !forceDiscretization_) {
         // exact value for curves
         return std::sqrt(variance(t0,x0,dt));
     }
     else{
         return discretization_->diffusion(*this,t0,x0,dt);
     }
 }
 Real GeneralizedBlackScholesProcess::variance(Time t0, Real x0, Time dt) const {
     localVolatility(); // trigger update
     if(isStrikeIndependent_ && !forceDiscretization_) {
         // exact value for curves
         return blackVolatility_->blackVariance(t0 + dt, 0.01) -
                blackVolatility_->blackVariance(t0, 0.01);
     }
     else{
         return discretization_->variance(*this,t0,x0,dt);
     }
 }
 Real GeneralizedBlackScholesProcess::expectation(Time t0,
                                                  Real x0,
                                                  Time dt) const {
     localVolatility(); // trigger update
     if(isStrikeIndependent_ && !forceDiscretization_) {
         // exact value for curves
         return x0 *
             std::exp(dt * (riskFreeRate_->forwardRate(t0, t0 + dt, Continuous,
                                                       NoFrequency, true) -
                          dividendYield_->forwardRate(
                              t0, t0 + dt, Continuous, NoFrequency, true)));
     } else {
         QL_FAIL("not implemented");
     }
 }
 Real GeneralizedBlackScholesProcess::evolve(Time t0, Real x0,
                                             Time dt, Real dw) const {
     localVolatility(); // trigger update
     if (isStrikeIndependent_ && !forceDiscretization_) {
         // exact value for curves
         Real var = variance(t0, x0, dt);
         Real drift = (riskFreeRate_->forwardRate(t0, t0 + dt, Continuous,
                                                  NoFrequency, true) -
                       dividendYield_->forwardRate(t0, t0 + dt, Continuous,
                                                   NoFrequency, true)) *
                          dt -
                      0.5 * var;
         return apply(x0, std::sqrt(var) * dw + drift);
     } else
         return apply(x0, discretization_->drift(*this, t0, x0, dt) +
                              stdDeviation(t0, x0, dt) * dw);
 }
Beispiel #5
0
 Real VarianceGammaProcess::diffusion(Time t, Real x) const
 {
     return localVolatility()->localVol(t, x, true);
 }
 Real GeneralizedBlackScholesProcess::diffusion(Time t, Real x) const {
     return localVolatility()->localVol(t, x, true);
 }