Examples of EuropeanVanillaOption


Examples of com.opengamma.analytics.financial.model.option.pricing.analytic.formula.EuropeanVanillaOption

   

    for (int i = 0; i < 11; i++) {
      final double k = 0.7 + 0.6 * i / 10.0;
      isCall = k >= forward;
      final EuropeanVanillaOption option = new EuropeanVanillaOption(k, t, isCall);
      double[] senseFourier = modelGreekFourier.getGreeks(data, option, heston, alpha, 1e-12);

  //    System.out.print(k);
      for(int j=0;j<size;j++) {
        double senseFFT = interpolator.interpolate(db[j], k);
View Full Code Here

Examples of com.opengamma.analytics.financial.model.option.pricing.analytic.formula.EuropeanVanillaOption

    final MartingaleCharacteristicExponent heston = new HestonCharacteristicExponent(kappa, theta, vol0, omega, rho);
    final FourierPricer pricer = new FourierPricer();

    for (int i = 0; i < 21; i++) {
      final double k = 0.2 + 3.0 * i / 20.0;
      final EuropeanVanillaOption option = new EuropeanVanillaOption(k * FORWARD, T, true);
      final BlackFunctionData data = new BlackFunctionData(FORWARD, DF, 0);
      final double price = pricer.price(data, option, heston, -0.5, 1e-6);
      final double impVol = BLACK_IMPLIED_VOL.getImpliedVolatility(data, option, price);
      assertEquals(sigma, impVol, 1e-3);
    }
View Full Code Here

Examples of com.opengamma.analytics.financial.model.option.pricing.analytic.formula.EuropeanVanillaOption

    final MartingaleCharacteristicExponent heston = new HestonCharacteristicExponent(kappa, theta, vol0, omega, rho);
    final EuropeanPriceIntegrand integrand = new EuropeanPriceIntegrand(heston, alpha, true);
    final BlackFunctionData data = new BlackFunctionData(1, 1, 0.5);
    for (int i = 0; i < 201; i++) {
      final double x = -0. + i * 80. / 200.0;
      final EuropeanVanillaOption option = new EuropeanVanillaOption(2, t, true);
      final Double res = integrand.getFunction(data, option).evaluate(x);
      System.out.println(x + "\t" + res);
    }

  }
View Full Code Here

Examples of com.opengamma.analytics.financial.model.option.pricing.analytic.formula.EuropeanVanillaOption

    final FourierPricer pricer = new FourierPricer();
    final BlackFunctionData data = new BlackFunctionData(1, 1, 0);
    for (int i = 0; i < 11; i++) {
      final double k = 0.5 + 1.0 * i / 10.0;

      final EuropeanVanillaOption option = new EuropeanVanillaOption(k, t, true);
      final double price = pricer.price(data, option, heston, alpha, 1e-8);
      BLACK_IMPLIED_VOL.getImpliedVolatility(data, option, price);
      //  System.out.println(k + "\t" + impVol);
    }
  }
View Full Code Here

Examples of com.opengamma.analytics.financial.model.option.pricing.analytic.formula.EuropeanVanillaOption

    boolean isCall;
    for (int i = 0; i < 11; i++) {
      final double k = 0.7 + 0.6 * i / 10.0;
      isCall = k >= forward;
      final EuropeanVanillaOption option = new EuropeanVanillaOption(k, t, isCall);
      final double[] sense = modelGreek.getGreeks(data, option, heston, alpha, 1e-12);

      final double price = pricer.price(data, option, heston, alpha, 1e-8);
      final double[] fdSense = finiteDifferenceModelGreeks((HestonCharacteristicExponent) heston, pricer, data, option);
//      System.out.println(k + "\t" + price + "\t" + fdSense[0] / price + "\t" + fdSense[1] / price + "\t" + fdSense[2] / price + "\t" + fdSense[3] / price + "\t" + fdSense[4] / price
View Full Code Here

Examples of com.opengamma.analytics.financial.model.option.pricing.analytic.formula.EuropeanVanillaOption

   * Test if the Hagan volatility function implementation around ATM is numerically stable enough (the finite difference slope should be small enough).
   */
  public void testATMSmoothness() {
    final double timeToExpiry = 1;
    final boolean isCall = true;
    EuropeanVanillaOption option;
    final double alpha = 0.05;
    final double beta = 0.5;
    final double nu = 0.50;
    final double rho = -0.25;
    final int nbPoints = 100;
    final double forward = 0.05;
    final double[] sabrVolatilty = new double[2 * nbPoints + 1];
    final double range = 5E-9;
    final double strike[] = new double[2 * nbPoints + 1];
    for (int looppts = -nbPoints; looppts <= nbPoints; looppts++) {
      strike[looppts + nbPoints] = forward + ((double) looppts) / nbPoints * range;
      option = new EuropeanVanillaOption(strike[looppts + nbPoints], timeToExpiry, isCall);
      final SABRFormulaData SabrData = new SABRFormulaData(alpha, beta, rho, nu);
      sabrVolatilty[looppts + nbPoints] = FUNCTION.getVolatilityFunction(option, forward).evaluate(SabrData);
    }
    for (int looppts = -nbPoints; looppts < nbPoints; looppts++) {
      assertTrue(Math.abs(sabrVolatilty[looppts + nbPoints + 1] - sabrVolatilty[looppts + nbPoints]) / (strike[looppts + nbPoints + 1] - strike[looppts + nbPoints]) < 20.0);
View Full Code Here

Examples of com.opengamma.analytics.financial.model.option.pricing.analytic.formula.EuropeanVanillaOption

    final double startStrike = 0.0001;
    final double endStrike = 0.2500;
    final SABRFormulaData SabrData = new SABRFormulaData(alpha, beta, rho, nu);
    final double[] strikes = new double[nbpoints + 1];
    final double[] sabrVolatilty = new double[nbpoints + 1];
    EuropeanVanillaOption option;
    for (int loopstrike = 0; loopstrike <= nbpoints; loopstrike++) {
      strikes[loopstrike] = startStrike + loopstrike * (endStrike - startStrike) / nbpoints;
      option = new EuropeanVanillaOption(strikes[loopstrike], timeToExpiry, true);
      sabrVolatilty[loopstrike] = FUNCTION.getVolatilityFunction(option, forward).evaluate(SabrData);
    }
  }
View Full Code Here

Examples of com.opengamma.analytics.financial.model.option.pricing.analytic.formula.EuropeanVanillaOption

    final double volatilityFM = FUNCTION.getVolatilityFunction(option, F - deltaF).evaluate(DATA);
    final double derivativeFF_FD = (volatilityFP + volatilityFM - 2 * volatility) / (deltaF * deltaF);
    assertEquals("SABR adjoint order 2: forward-forward", derivativeFF_FD, volD2[0][0], tolerance2);
    // Derivative strike-strike
    final double deltaK = 0.000001;
    final EuropeanVanillaOption optionKP = new EuropeanVanillaOption(option.getStrike() + deltaK, T, true);
    final EuropeanVanillaOption optionKM = new EuropeanVanillaOption(option.getStrike() - deltaK, T, true);
    final double volatilityKP = FUNCTION.getVolatilityFunction(optionKP, F).evaluate(DATA);
    final double volatilityKM = FUNCTION.getVolatilityFunction(optionKM, F).evaluate(DATA);
    final double derivativeKK_FD = (volatilityKP + volatilityKM - 2 * volatility) / (deltaK * deltaK);
    assertEquals("SABR adjoint order 2: strike-strike", derivativeKK_FD, volD2[1][1], tolerance2);
    // Derivative strike-forward
View Full Code Here

Examples of com.opengamma.analytics.financial.model.option.pricing.analytic.formula.EuropeanVanillaOption

    final double rho = -0.4;
    final double nu = 0.4;
    final SABRFormulaData sabrData = new SABRFormulaData(alpha, beta, rho, nu);

    final SABRHaganVolatilityFunction sabr = new SABRHaganVolatilityFunction();
    final double[] vol = sabr.getVolatilityAdjoint(new EuropeanVanillaOption(k, t, true), f, sabrData);
    final double bsDelta = BlackFormulaRepository.delta(f, k, t, vol[0], true);
    final double bsVega = BlackFormulaRepository.vega(f, k, t, vol[0]);
    final double volForwardSense = vol[1];
    final double delta = bsDelta + bsVega * volForwardSense;

    final double volUp = sabr.getVolatility(f + eps, k, t, alpha, beta, rho, nu);
    final double volDown = sabr.getVolatility(f - eps, k, t, alpha, beta, rho, nu);
    final double priceUp = BlackFormulaRepository.price(f + eps, k, t, volUp, true);
    final double price = BlackFormulaRepository.price(f, k, t, vol[0], true);
    final double priceDown = BlackFormulaRepository.price(f - eps, k, t, volDown, true);
    final double fdDelta = (priceUp - priceDown) / 2 / eps;
    assertEquals(fdDelta, delta, 1e-6);

    final double bsVanna = BlackFormulaRepository.vanna(f, k, t, vol[0]);
    final double bsGamma = BlackFormulaRepository.gamma(f, k, t, vol[0]);

    final double[] volD1 = new double[5];
    final double[][] volD2 = new double[2][2];
    sabr.getVolatilityAdjoint2(new EuropeanVanillaOption(k, t, true), f, sabrData, volD1, volD2);
    final double d2Sigmad2Fwd = volD2[0][0];
    final double gamma = bsGamma + 2 * bsVanna * vol[1] + bsVega * d2Sigmad2Fwd;
    final double fdGamma = (priceUp + priceDown - 2 * price) / eps / eps;

    final double d2Sigmad2FwdFD = (volUp + volDown - 2 * vol[0]) / eps / eps;
View Full Code Here

Examples of com.opengamma.analytics.financial.model.option.pricing.analytic.formula.EuropeanVanillaOption

        sigmaM[loopfact] += alphaM[loopcf + 1] * muM[loopcf][loopfact];
      }
      normSigmaM += sigmaM[loopfact] * sigmaM[loopfact];
    }
    final double impliedBlackVol = Math.sqrt(normSigmaM * meanReversionImpact);
    final EuropeanVanillaOption option = new EuropeanVanillaOption(bK, 1, isCall);
    final BlackPriceFunction blackFunction = new BlackPriceFunction();
    final BlackFunctionData dataBlack = new BlackFunctionData(b0, 1.0, impliedBlackVol);
    final Function1D<BlackFunctionData, Double> func = blackFunction.getPriceFunction(option);
    final double pv = dfLMM[0] * func.evaluate(dataBlack);
    return CurrencyAmount.of(swaption.getUnderlyingSwap().getFirstLeg().getCurrency(), pv * (swaption.isLong() ? 1.0 : -1.0));
View Full Code Here
TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.