/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.analytics.financial.model.option.pricing.tree; import com.opengamma.analytics.financial.greeks.GreekResultCollection; import com.opengamma.analytics.financial.model.option.definition.StandardOptionDataBundle; /** * */ public abstract class TreeOptionPricingModel { /** * Compute option price on one asset with constant volatility, interest rate and dividend * @param lattice {@link LatticeSpecification} * @param function {@link OptionFunctionProvider1D} * @param spot Spot price of underlying * @param volatility Volatility * @param interestRate Interest rate * @param dividend Dividend * @return Option price */ public abstract double getPrice(final LatticeSpecification lattice, final OptionFunctionProvider1D function, final double spot, final double volatility, final double interestRate, final double dividend); /** * Compute option price on one asset with time-varying volatility, interest rate and dividend * The condition (number of steps) = (volatility length) = (interest rate length) = (dividend length) Should hold * @param function {@link OptionFunctionProvider1D} * @param spot Spot price of underlying * @param volatility Volatility * @param interestRate Interest rate * @param dividend Dividend * @return Option price */ public abstract double getPrice(final OptionFunctionProvider1D function, final double spot, final double[] volatility, final double[] interestRate, final double[] dividend); /** * Compute option price on one asset with volatility, interest rate and discrete dividends * @param lattice {@link LatticeSpecification} * @param function {@link OptionFunctionProvider1D} * @param spot Spot price of underlying * @param volatility Volatility * @param interestRate Interest rate * @param dividend {@link DividendFunctionProvider} * @return Option price */ public abstract double getPrice(final LatticeSpecification lattice, final OptionFunctionProvider1D function, final double spot, final double volatility, final double interestRate, final DividendFunctionProvider dividend); /** * Compute option price on two assets with constant volatilities, correlation, interest rate and dividends * @param function {@link OptionFunctionProvider2D} * @param spot1 Spot price of asset 1 * @param spot2 Spot price of asset 2 * @param volatility1 Volatility of asset 1 * @param volatility2 Volatility of asset 2 * @param correlation Correlation between asset 1 and asset 2 * @param interestRate Interest rate * @param dividend1 Dividend of asset 1 * @param dividend2 Dividend of asset 2 * @return Option price */ public abstract double getPrice(final OptionFunctionProvider2D function, final double spot1, final double spot2, final double volatility1, final double volatility2, final double correlation, final double interestRate, final double dividend1, final double dividend2); /** * Compute option Greeks on one asset with constant volatility, interest rate and dividend * @param lattice {@link LatticeSpecification} * @param function {@link OptionFunctionProvider1D} * @param spot Spot price of underlying * @param volatility Volatility * @param interestRate Interest rate * @param dividend Dividend * @return Option Greeks as {@link GreekResultCollection} */ public abstract GreekResultCollection getGreeks(final LatticeSpecification lattice, final OptionFunctionProvider1D function, final double spot, final double volatility, final double interestRate, final double dividend); /** * Compute option Greeks on one asset with time-varying volatility, interest rate and dividend * The condition (number of steps) = (volatility length) = (interest rate length) = (dividend length) Should hold * @param function {@link OptionFunctionProvider1D} * @param spot Spot price of underlying * @param volatility Volatility * @param interestRate Interest rate * @param dividend Dividend * @return Option Greeks as {@link GreekResultCollection} */ public abstract GreekResultCollection getGreeks(final OptionFunctionProvider1D function, final double spot, final double[] volatility, final double[] interestRate, final double[] dividend); /** * Compute option Greeks on one asset with volatility, interest rate and discrete dividends * @param lattice {@link LatticeSpecification} * @param function {@link OptionFunctionProvider1D} * @param spot Spot price of underlying * @param volatility Volatility * @param interestRate Interest rate * @param dividend {@link DividendFunctionProvider} * @return Option Greeks as {@link GreekResultCollection} */ public abstract GreekResultCollection getGreeks(final LatticeSpecification lattice, final OptionFunctionProvider1D function, final double spot, final double volatility, final double interestRate, final DividendFunctionProvider dividend); /** * Compute option Greeks on two assets with constant volatilities, correlation, interest rate and dividends * @param function {@link OptionFunctionProvider2D} * @param spot1 Spot price of asset 1 * @param spot2 Spot price of asset 2 * @param volatility1 Volatility of asset 1 * @param volatility2 Volatility of asset 2 * @param correlation Correlation between asset 1 and asset 2 * @param interestRate Interest rate * @param dividend1 Dividend of asset 1 * @param dividend2 Dividend of asset 2 * @return Option Greeks as an array {option price, delta for asset 1, delta for asset 2, theta, gamma for asset 1, gamma for asset 2, cross gamma} */ public abstract double[] getGreeks(final OptionFunctionProvider2D function, final double spot1, final double spot2, final double volatility1, final double volatility2, final double correlation, final double interestRate, final double dividend1, final double dividend2); /** * Compute option price by using implied tree * @param function {@link OptionFunctionProvider1D} * @param data Market data * @return Option price */ public abstract double getPrice(final OptionFunctionProvider1D function, final StandardOptionDataBundle data); }