All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.opengamma.strata.pricer.capfloor.IborCapletFloorletVolatilityDefinition Maven / Gradle / Ivy

The newest version!
/*
 * Copyright (C) 2016 - present by OpenGamma Inc. and the OpenGamma group of companies
 *
 * Please see distribution for license.
 */
package com.opengamma.strata.pricer.capfloor;

import java.time.LocalDate;

import com.opengamma.strata.basics.date.BusinessDayAdjustment;
import com.opengamma.strata.basics.date.BusinessDayConventions;
import com.opengamma.strata.basics.date.DayCount;
import com.opengamma.strata.basics.index.IborIndex;
import com.opengamma.strata.basics.schedule.Frequency;
import com.opengamma.strata.basics.schedule.PeriodicSchedule;
import com.opengamma.strata.basics.schedule.RollConventions;
import com.opengamma.strata.basics.schedule.StubConvention;
import com.opengamma.strata.basics.value.ValueSchedule;
import com.opengamma.strata.market.surface.SurfaceMetadata;
import com.opengamma.strata.pricer.option.RawOptionData;
import com.opengamma.strata.product.capfloor.IborCapFloorLeg;
import com.opengamma.strata.product.common.PayReceive;
import com.opengamma.strata.product.swap.IborRateCalculation;

/**
 * Definition of caplet volatilities calibration.
 */
public interface IborCapletFloorletVolatilityDefinition {

  /**
   * Gets the name of these volatilities.
   * 
   * @return the name
   */
  public abstract IborCapletFloorletVolatilitiesName getName();

  /**
   * Gets the Ibor index for which the data is valid.
   * 
   * @return the Ibor index
   */
  public abstract IborIndex getIndex();

  /**
   * Gets the day count to use.
   * 
   * @return the day count
   */
  public abstract DayCount getDayCount();

  /**
   * Creates surface metadata.
   * 
   * @param capFloorData  the cap/floor data
   * @return the surface metadata
   */
  public abstract SurfaceMetadata createMetadata(RawOptionData capFloorData);

  /**
   * Creates a standard cap from start date, end date and strike. 
   * 
   * @param startDate  the start date
   * @param endDate  the end date
   * @param strike  the strike
   * @return the cap
   */
  public default IborCapFloorLeg createCap(LocalDate startDate, LocalDate endDate, double strike) {
    IborIndex index = getIndex();
    return IborCapFloorLeg.builder()
        .calculation(IborRateCalculation.of(index))
        .capSchedule(ValueSchedule.of(strike))
        .currency(index.getCurrency())
        .notional(ValueSchedule.ALWAYS_1)
        .paymentSchedule(
            PeriodicSchedule.of(
                startDate,
                endDate,
                Frequency.of(index.getTenor().getPeriod()),
                BusinessDayAdjustment.of(BusinessDayConventions.MODIFIED_FOLLOWING, index.getFixingCalendar()),
                StubConvention.NONE,
                RollConventions.NONE))
        .payReceive(PayReceive.RECEIVE)
        .build();
  }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy