com.opengamma.analytics.financial.model.option.pricing.analytic.formula.BlackFunctionData.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.analytics.financial.model.option.pricing.analytic.formula.BlackFunctionData.java

Source

/**
 * 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.pricing.analytic.formula;

import org.apache.commons.lang.Validate;

import com.opengamma.analytics.financial.model.option.definition.BlackOptionDataBundle;
import com.opengamma.analytics.financial.model.option.definition.EuropeanVanillaOptionDefinition;

/**
 * 
 */
public class BlackFunctionData {
    private final double _f;
    private final double _numeraire;
    private final double _sigma;

    /**
     * Data bundle for pricing in a Black framework. That is, the forward value of the underlying asset is a martingale in the chosen numeraire measure. 
     * @param forward The forward value of the underlying asset (i.e. the forward value of a stock, the forward Libor rate, etc)
     * @param numeraire The present value of the instrument used to discount the payoff (e.g. the zero coupon bond in the T-forward measure, the swap annuity for pricing 
     * swaptions, etc)
     * @param sigma The Black volatility 
     */
    public BlackFunctionData(final double forward, final double numeraire, final double sigma) {
        _f = forward;
        _numeraire = numeraire;
        _sigma = sigma;
    }

    public double getForward() {
        return _f;
    }

    public double getDiscountFactor() {
        return _numeraire;
    }

    public double getBlackVolatility() {
        return _sigma;
    }

    public static BlackFunctionData fromDataBundle(final BlackOptionDataBundle bundle,
            final EuropeanVanillaOptionDefinition definition) {
        Validate.notNull(bundle, "bundle");
        Validate.notNull(definition, "definition");
        final double t = definition.getTimeToExpiry(bundle.getDate());
        final double k = definition.getStrike();
        return new BlackFunctionData(bundle.getForward(), bundle.getDiscountFactor(t), bundle.getVolatility(t, k));
    }

    @Override
    public String toString() {
        final StringBuilder sb = new StringBuilder("BlackFunctionData[");
        sb.append("f=");
        sb.append(getForward());
        sb.append(", numeraire=");
        sb.append(getDiscountFactor());
        sb.append(", sigma=");
        sb.append(getBlackVolatility());
        sb.append("]");
        return sb.toString();
    }

    @Override
    public int hashCode() {
        final int prime = 31;
        int result = 1;
        long temp;
        temp = Double.doubleToLongBits(_numeraire);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        temp = Double.doubleToLongBits(_f);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        temp = Double.doubleToLongBits(_sigma);
        result = prime * result + (int) (temp ^ (temp >>> 32));
        return result;
    }

    @Override
    public boolean equals(final Object obj) {
        if (this == obj) {
            return true;
        }
        if (obj == null) {
            return false;
        }
        if (getClass() != obj.getClass()) {
            return false;
        }
        final BlackFunctionData other = (BlackFunctionData) obj;
        if (Double.doubleToLongBits(_numeraire) != Double.doubleToLongBits(other._numeraire)) {
            return false;
        }
        if (Double.doubleToLongBits(_f) != Double.doubleToLongBits(other._f)) {
            return false;
        }
        return Double.doubleToLongBits(_sigma) == Double.doubleToLongBits(other._sigma);
    }

}