/** * 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; /** * */ public class TianLatticeSpecification extends LatticeSpecification { @Override public double[] getParameters(final double spot, final double strike, final double timeToExpiry, final double volatility, final double interestRate, final int nSteps, final double dt) { final double sigSqT = volatility * volatility * dt; final double rv = Math.exp(interestRate * dt + sigSqT); final double v = Math.exp(sigSqT); final double upFactor = 0.5 * rv * (v + 1. + Math.sqrt(v * v + 2. * v - 3.)); final double downFactor = 0.5 * rv * (v + 1. - Math.sqrt(v * v + 2. * v - 3.)); final double upProbability = (Math.exp(interestRate * dt) - downFactor) / (upFactor - downFactor); return new double[] {upFactor, downFactor, upProbability, 1 - upProbability }; } @Override public double[] getParametersTrinomial(final double spot, final double strike, final double timeToExpiry, final double volatility, final double interestRate, final int nSteps, final double dt) { final double m = Math.exp(interestRate * dt); final double v = Math.exp(volatility * volatility * dt); final double k = m * (v + 3.) / 4.; final double middleFactor = 0.5 * m * (3. - v); final double part = Math.sqrt(k * k - middleFactor * middleFactor); final double upFactor = k + part; final double downFactor = k - part; return new double[] {upFactor, middleFactor, downFactor, 1. / 3., 1. / 3., 1. / 3. }; } }