/* *
* Title:
* Description:
* Copyright: Copyright (c)
* Company:
* @author
* @version 1.0
*/
package umontreal.iro.lecuyer.stochprocess;
import umontreal.iro.lecuyer.rng.*;
import umontreal.iro.lecuyer.probdist.*;
import umontreal.iro.lecuyer.randvar.*;
/**
* .
*
* The geometric normal inverse gaussian (GNIG) process
* is the exponentiation of a {@link NormalInverseGaussianProcess}:
*
*
*
* S(t) = S0exp[(r - ωRN)t + NIG(t;α, β, μ, δ)],
*
* where r is the interest rate.
* It is a strictly positive process, which is useful in finance.
* There is also a neutral
* correction in the exponential,
* ωRN = μ + δγ - δ(α^2-(1+β)^2)1/2,
* which takes into account the market price of risk.
* The underlying NIG process must start at zero, NIG(t0) = 0
* and the initial time should also be set to zero, t0 = 0,
* both for the NIG and GNIG.
*
*/
public class GeometricNormalInverseGaussianProcess extends
GeometricLevyProcess {
/**
* Constructs a new GeometricNormalInverseGaussianProcess.
* The parameters of the NIG process will be overwritten by the parameters
* given to the GNIG, with the initial value of the NIG set to 0.
* The observation times of the NIG will also be changed to
* those of the GNIG.
*
*/
public GeometricNormalInverseGaussianProcess (
double s0, double muGeom,
double alpha, double beta,
double mu, double delta,
RandomStream streamBrownian,
NormalInverseGaussianProcess nigP) {
levyProcess = nigP;
((NormalInverseGaussianProcess)levyProcess).setParams(0.0, alpha, beta, mu, delta);
this.x0 = s0;
this.muGeom = muGeom;
omegaRiskNeutralCorrection =
mu + delta*((NormalInverseGaussianProcess)levyProcess).getGamma() -
delta*Math.sqrt(alpha*alpha - (1.+beta)*(1.+beta));
}
/**
* Constructs a new GeometricNormalInverseGaussianProcess.
* The process igP
* will be used internally by the underlying {@link NormalInverseGaussianProcess}.
*
*/
public GeometricNormalInverseGaussianProcess (
double s0, double muGeom,
double alpha, double beta,
double mu, double delta,
RandomStream streamBrownian,
InverseGaussianProcess igP) {
levyProcess = new NormalInverseGaussianProcess (0.0, alpha, beta, mu,
delta, streamBrownian, igP);
this.x0 = s0;
this.muGeom = muGeom;
omegaRiskNeutralCorrection =
mu + delta*((NormalInverseGaussianProcess)levyProcess).getGamma() -
delta*Math.sqrt(alpha*alpha - (1.+beta)*(1.+beta));
}
/**
* Constructs a new GeometricNormalInverseGaussianProcess.
* The drift of the geometric term, muGeom, is usually the interest rate r.
* s0 is the initial value of the process and the other four parameters
* are the parameters of the underlying {@link NormalInverseGaussianProcess} process.
*
*/
public GeometricNormalInverseGaussianProcess (
double s0, double muGeom,
double alpha, double beta,
double mu, double delta,
RandomStream streamBrownian,
RandomStream streamNIG1,
RandomStream streamNIG2,
String igType) {
levyProcess = new NormalInverseGaussianProcess (0.0, alpha, beta, mu, delta,
streamBrownian, streamNIG1,
streamNIG2, igType);
this.x0 = s0;
this.muGeom = muGeom;
omegaRiskNeutralCorrection =
mu + delta*((NormalInverseGaussianProcess)levyProcess).getGamma() -
delta*Math.sqrt(alpha*alpha - (1.+beta)*(1.+beta));
}
/**
* Constructs a new GeometricNormalInverseGaussianProcess.
* The String igType corresponds to the type of {@link InverseGaussianProcess}
* that will be used by the underlying {@link NormalInverseGaussianProcess}.
* All {@link umontreal.iro.lecuyer.rng.RandomStream RandomStream}'s used to generate the underlying
* {@link NormalInverseGaussianProcess} and its underlying {@link InverseGaussianProcess}
* are set to the same given streamAll.
*
*/
public GeometricNormalInverseGaussianProcess (
double s0, double muGeom,
double alpha, double beta,
double mu, double delta,
RandomStream streamAll,
String igType) {
this(s0,muGeom,alpha,beta,mu,delta,streamAll,streamAll,streamAll,igType);
}
}
Ads help maintain this website.