Package com.opengamma.analytics.financial.model.option.definition

Examples of com.opengamma.analytics.financial.model.option.definition.Barrier


  private static final ProbabilityDistribution<Double> NORMAL = new NormalDistribution(0, 1);

  @Override
  public Function1D<StandardOptionDataBundle, Double> getPricingFunction(final EuropeanStandardBarrierOptionDefinition definition) {
    Validate.notNull(definition, "definition");
    final Barrier barrier = definition.getBarrier();
    final boolean isKnockIn = barrier.getKnockType() == KnockType.IN;
    final boolean isDown = barrier.getBarrierType() == BarrierType.DOWN;
    final double h = barrier.getBarrierLevel();
    final int phi = definition.isCall() ? 1 : -1;
    final double eta = isDown ? 1 : -1;
    return new Function1D<StandardOptionDataBundle, Double>() {

      @SuppressWarnings("synthetic-access")
View Full Code Here


        final double h = SPOT * (0.9 + j * 0.05);
        for (int k = 0; k < 2; k++) {
          final boolean isCall = k == 0;
          final BarrierType bt = SPOT > h ? BarrierType.DOWN : BarrierType.UP;
        final double anPrice = ANAL_PRICER.getPrice(new EuropeanVanillaOption(strike, EXPIRY, isCall),
            new Barrier(KnockType.OUT, bt, ObservationType.CONTINUOUS, h), REBATE, SPOT, B, R, SIGMA);
        final double fdPrice = PRICER.outBarrier(SPOT, h, strike, EXPIRY, R, B, SIGMA, isCall, REBATE);

        if (PRINT) {
          final String call = isCall ? "call" : "put ";
          System.out.format(call + " x = %.0f h = %.0f\tprice = %.4f\tfdPrice = %.4f\n", strike, h, anPrice, fdPrice);
View Full Code Here

      for (int j = 0; j < 5; j++) {
        final double h = SPOT * (0.9 + j * 0.05);
        for (int k = 0; k < 2; k++) {
          final boolean isCall = k == 0;
          final BarrierType bt = SPOT > h ? BarrierType.DOWN : BarrierType.UP;
        final double anPrice = ANAL_PRICER.getPrice(new EuropeanVanillaOption(strike, EXPIRY, isCall), new Barrier(KnockType.IN, bt, ObservationType.CONTINUOUS, h), REBATE, SPOT, B, R, SIGMA);
        final double fdPrice = PRICER.inBarrier(SPOT, h, strike, EXPIRY, R, B, SIGMA, isCall, REBATE);

        if (PRINT) {
          final String call = isCall ? "call" : "put ";
          System.out.format(call + " x = %.0f h = %.0f\tprice = %.4f\tfdPrice = %.4f\n", strike, h, anPrice, fdPrice);
View Full Code Here

    final double r = 0.08;
    final double b = 0.04;
    final double sigma = 0.3;

    final EuropeanVanillaOption option = new EuropeanVanillaOption(strike, expiry, isCall);
    final Barrier barrierIn = new Barrier(KnockType.IN, BarrierType.DOWN, ObservationType.CONTINUOUS, barrerLevel);
    final double p1In = PRICER.getPrice(option, barrierIn, rebate, spot, b, r, sigma);
    final double p2In = PRICER.inBarrier(spot, barrerLevel, strike, expiry, r, b, sigma, isCall, rebate);
    assertEquals(p1In, p2In, 1e-20);
    final Barrier barrierOut = new Barrier(KnockType.OUT, BarrierType.DOWN, ObservationType.CONTINUOUS, barrerLevel);
    final double p1Out = PRICER.getPrice(option, barrierOut, rebate, spot, b, r, sigma);
    final double p2Out = PRICER.outBarrier(spot, barrerLevel, strike, expiry, r, b, sigma, isCall, rebate);
    assertEquals(p1Out, p2Out, 1e-20);
  }
View Full Code Here

    final double rebate = 1.0;
    final double r = 0.0;
    final double b = 0.0;
    final double sigma = 0.3;
    final EuropeanVanillaOption option = new EuropeanVanillaOption(strike, expiry, isCall);
    final Barrier barrier = new Barrier(KnockType.OUT, BarrierType.UP, ObservationType.CONTINUOUS, barrerLevel);
    final BarrierOptionPricer pricer = new BarrierOptionPricer(100, 50, 0.5, 0.1);

    if (PRINT) {
      final double p1 = ANAL_PRICER.getPrice(option, barrier, rebate, spot, b, r, sigma);
      final double p2 = pricer.getPrice(option, barrier, rebate, spot, b, r, sigma);
View Full Code Here

    final boolean isLong = barrierOptionSecurity.isLong();
    final Currency putCurrency = barrierOptionSecurity.getPutCurrency();
    final Currency callCurrency = barrierOptionSecurity.getCallCurrency();
    final double putAmount = barrierOptionSecurity.getPutAmount();
    final double callAmount = barrierOptionSecurity.getCallAmount();
    final Barrier barrier = new Barrier(getKnockType(barrierOptionSecurity.getBarrierDirection()), getBarrierType(barrierOptionSecurity.getBarrierType()),
        getObservationType(barrierOptionSecurity.getMonitoringType()), barrierOptionSecurity.getBarrierLevel());
    // Compose underlying FXOption s.t. strike is quoted using market convention, as defined in _currencyPairs
    final CurrencyPair baseQuotePair = _currencyPairs.getCurrencyPair(putCurrency, callCurrency);
    if (baseQuotePair == null) {
      throw new OpenGammaRuntimeException("Could not get base/quote order for currency pair (" + putCurrency + ", " + callCurrency + ")");
View Full Code Here

    final Currency callCurrency = barrierOptionSecurity.getCallCurrency();
    final double putAmount = barrierOptionSecurity.getPutAmount();
    final double callAmount = barrierOptionSecurity.getCallAmount();
    final double fxRate = -putAmount / callAmount;
    final ZonedDateTime expiry = barrierOptionSecurity.getExpiry().getExpiry();
    final Barrier barrier = new Barrier(getKnockType(barrierOptionSecurity.getBarrierDirection()), getBarrierType(barrierOptionSecurity.getBarrierType()),
        getObservationType(barrierOptionSecurity.getMonitoringType()), level);
    final ZonedDateTime settlementDate = barrierOptionSecurity.getSettlementDate();
    final ForexDefinition underlying = new ForexDefinition(putCurrency, callCurrency, settlementDate, putAmount, fxRate); //TODO this needs its own converter
    final boolean isLong = barrierOptionSecurity.isLong();
    return new ForexOptionSingleBarrierDefinition(new ForexOptionVanillaDefinition(underlying, expiry, true, isLong), barrier);
View Full Code Here

    final ForexOptionSingleBarrierDefinition otherRebate = new ForexOptionSingleBarrierDefinition(UNDERLYING, BARRIER, REBATE);
    assertEquals(OPTION_REBATE, otherRebate);
    assertEquals(OPTION_REBATE.hashCode(), otherRebate.hashCode());
    other = new ForexOptionSingleBarrierDefinition(new ForexOptionVanillaDefinition(FOREX, EXPIRY, !IS_CALL, IS_LONG), BARRIER);
    assertFalse(other.equals(OPTION));
    other = new ForexOptionSingleBarrierDefinition(UNDERLYING, new Barrier(KnockType.OUT, BarrierType.DOWN, ObservationType.CLOSE, 1));
    assertFalse(other.equals(OPTION));
    assertFalse(OPTION_REBATE.equals(OPTION));
    assertFalse(OPTION_REBATE.equals(BARRIER));
    assertFalse(OPTION_REBATE.equals(null));
  }
View Full Code Here

    final ForexOptionSingleBarrier otherRebate = new ForexOptionSingleBarrier(UNDERLYING, BARRIER, REBATE);
    assertEquals(OPTION_REBATE, otherRebate);
    assertEquals(OPTION_REBATE.hashCode(), otherRebate.hashCode());
    other = new ForexOptionSingleBarrier(new ForexOptionVanilla(FOREX, EXPIRY_TIME, !IS_CALL, IS_LONG), BARRIER);
    assertFalse(other.equals(OPTION));
    other = new ForexOptionSingleBarrier(UNDERLYING, new Barrier(KnockType.OUT, BarrierType.DOWN, ObservationType.CLOSE, 1));
    assertFalse(other.equals(OPTION));
    assertFalse(OPTION_REBATE.equals(OPTION));
    assertFalse(other.equals(CCY1));
    assertFalse(other.equals(null));
  }
View Full Code Here

  @Test
  /** Tests the 'In-Out Parity' condition: The price of a Knock-In plus a Knock-Out of arbitrary barrier level must equal that of the underlying vanilla option + value of the rebate */
  public void impossibleToHitBarrierIsVanilla() {

    final Barrier veryLowKnockIn = new Barrier(KnockType.IN, BarrierType.DOWN, ObservationType.CONTINUOUS, 1e-6);
    final Barrier veryLowKnockOut = new Barrier(KnockType.OUT, BarrierType.DOWN, ObservationType.CONTINUOUS, 1e-6);
    final Barrier veryHighKnockIn = new Barrier(KnockType.IN, BarrierType.UP, ObservationType.CONTINUOUS, 1e6);
    final Barrier veryHighKnockOut = new Barrier(KnockType.OUT, BarrierType.UP, ObservationType.CONTINUOUS, 1e6);

    final double pxRebate = DF_DOM * REBATE;
    final Function1D<BlackFunctionData, Double> fcnVanillaCall = BLACK_FUNCTION.getPriceFunction(VANILLA_CALL_K100);
    final double pxVanillaCall = fcnVanillaCall.evaluate(DATA_BLACK);

View Full Code Here

TOP

Related Classes of com.opengamma.analytics.financial.model.option.definition.Barrier

Copyright © 2018 www.massapicom. 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.