/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.model.option.definition; import org.threeten.bp.ZonedDateTime; import com.opengamma.analytics.financial.model.interestrate.curve.YieldAndDiscountCurve; import com.opengamma.analytics.financial.model.volatility.surface.VolatilitySurface; /** * */ public class SkewKurtosisOptionDataBundle extends StandardOptionDataBundle { private final double _annualizedSkew; private final double _annualizedPearsonKurtosis; private final double _annualizedFisherKurtosis; public SkewKurtosisOptionDataBundle(final YieldAndDiscountCurve discountCurve, final double b, final VolatilitySurface volatilitySurface, final double spot, final ZonedDateTime date, final double annualizedSkew, final double annualizedPearsonKurtosis) { super(discountCurve, b, volatilitySurface, spot, date); _annualizedSkew = annualizedSkew; _annualizedPearsonKurtosis = annualizedPearsonKurtosis; _annualizedFisherKurtosis = _annualizedPearsonKurtosis - 3; } public SkewKurtosisOptionDataBundle(final SkewKurtosisOptionDataBundle data) { super(data); _annualizedSkew = data.getAnnualizedSkew(); _annualizedPearsonKurtosis = data.getAnnualizedPearsonKurtosis(); _annualizedFisherKurtosis = _annualizedPearsonKurtosis - 3; } public SkewKurtosisOptionDataBundle(final StandardOptionDataBundle data, final double annualizedSkew, final double annualizedPearsonKurtosis) { super(data); _annualizedSkew = annualizedSkew; _annualizedPearsonKurtosis = annualizedPearsonKurtosis; _annualizedFisherKurtosis = annualizedPearsonKurtosis - 3; } public double getAnnualizedSkew() { return _annualizedSkew; } public double getAnnualizedFisherKurtosis() { return _annualizedFisherKurtosis; } public double getAnnualizedPearsonKurtosis() { return _annualizedPearsonKurtosis; } @Override public SkewKurtosisOptionDataBundle withInterestRateCurve(final YieldAndDiscountCurve curve) { return new SkewKurtosisOptionDataBundle(curve, getCostOfCarry(), getVolatilitySurface(), getSpot(), getDate(), getAnnualizedSkew(), getAnnualizedPearsonKurtosis()); } @Override public SkewKurtosisOptionDataBundle withCostOfCarry(final double costOfCarry) { return new SkewKurtosisOptionDataBundle(getInterestRateCurve(), costOfCarry, getVolatilitySurface(), getSpot(), getDate(), getAnnualizedSkew(), getAnnualizedPearsonKurtosis()); } @Override public SkewKurtosisOptionDataBundle withVolatilitySurface(final VolatilitySurface surface) { return new SkewKurtosisOptionDataBundle(getInterestRateCurve(), getCostOfCarry(), surface, getSpot(), getDate(), getAnnualizedSkew(), getAnnualizedPearsonKurtosis()); } @Override public SkewKurtosisOptionDataBundle withDate(final ZonedDateTime date) { return new SkewKurtosisOptionDataBundle(getInterestRateCurve(), getCostOfCarry(), getVolatilitySurface(), getSpot(), date, getAnnualizedSkew(), getAnnualizedPearsonKurtosis()); } @Override public SkewKurtosisOptionDataBundle withSpot(final double spot) { return new SkewKurtosisOptionDataBundle(getInterestRateCurve(), getCostOfCarry(), getVolatilitySurface(), spot, getDate(), getAnnualizedSkew(), getAnnualizedPearsonKurtosis()); } public SkewKurtosisOptionDataBundle withSkew(final double skew) { return new SkewKurtosisOptionDataBundle(getInterestRateCurve(), getCostOfCarry(), getVolatilitySurface(), getSpot(), getDate(), skew, getAnnualizedPearsonKurtosis()); } public SkewKurtosisOptionDataBundle withKurtosis(final double kurtosis) { return new SkewKurtosisOptionDataBundle(getInterestRateCurve(), getCostOfCarry(), getVolatilitySurface(), getSpot(), getDate(), getAnnualizedSkew(), kurtosis); } @Override public int hashCode() { final int prime = 31; int result = super.hashCode(); long temp; temp = Double.doubleToLongBits(_annualizedPearsonKurtosis); result = prime * result + (int) (temp ^ (temp >>> 32)); temp = Double.doubleToLongBits(_annualizedSkew); result = prime * result + (int) (temp ^ (temp >>> 32)); return result; } @Override public boolean equals(final Object obj) { if (this == obj) { return true; } if (!super.equals(obj)) { return false; } if (getClass() != obj.getClass()) { return false; } final SkewKurtosisOptionDataBundle other = (SkewKurtosisOptionDataBundle) obj; if (Double.doubleToLongBits(_annualizedPearsonKurtosis) != Double.doubleToLongBits(other._annualizedPearsonKurtosis)) { return false; } if (Double.doubleToLongBits(_annualizedSkew) != Double.doubleToLongBits(other._annualizedSkew)) { return false; } return true; } }