# Class BlackScholesModel

java.lang.Object
net.finmath.montecarlo.model.AbstractProcessModel
net.finmath.montecarlo.assetderivativevaluation.models.BlackScholesModel
All Implemented Interfaces:
ProcessModel

public class BlackScholesModel extends AbstractProcessModel
This class implements a Black Scholes Model, that is, it provides the drift and volatility specification and performs the calculation of the numeraire (consistent with the dynamics, i.e. the drift). The model is $dS = r S dt + \sigma S dW, \quad S(0) = S_{0},$ $dN = r N dt, \quad N(0) = N_{0},$ The class provides the model of S to an MonteCarloProcess via the specification of $$f = exp$$, $$\mu = r - \frac{1}{2} \sigma^2$$, $$\lambda_{1,1} = \sigma$$, i.e., of the SDE $dX = \mu dt + \lambda_{1,1} dW, \quad X(0) = \log(S_{0}),$ with $$S = f(X)$$. See MonteCarloProcess for the notation.
Version:
1.0
Author:
Christian Fries
The interface for numerical schemes., The interface for models provinding parameters to numerical schemes.
• ## Constructor Details

• ### BlackScholesModel

public BlackScholesModel(RandomVariable initialValue, RandomVariable riskFreeRate, RandomVariable volatility, RandomVariableFactory randomVariableFactory)
Create a Black-Scholes specification implementing AbstractProcessModel.
Parameters:
initialValue - Spot value.
riskFreeRate - The risk free rate.
volatility - The log volatility.
randomVariableFactory - The random variable factory used to create random variables from constants.
• ### BlackScholesModel

public BlackScholesModel(double initialValue, double riskFreeRate, double volatility, RandomVariableFactory randomVariableFactory)
Create a Monte-Carlo simulation using given time discretization.
Parameters:
initialValue - Spot value.
riskFreeRate - The risk free rate.
volatility - The log volatility.
randomVariableFactory - The random variable factory used to create random variables from constants.
• ### BlackScholesModel

public BlackScholesModel(double initialValue, double riskFreeRate, double volatility)
Create a Black-Scholes model from given parameters.
Parameters:
initialValue - Spot value.
riskFreeRate - The risk free rate.
volatility - The log volatility.
• ## Method Details

• ### getInitialState

public  getInitialState(MonteCarloProcess process)
Description copied from interface: ProcessModel
Returns the initial value of the state variable of the process Y, not to be confused with the initial value of the model X (which is the state space transform applied to this state value.
Parameters:
process - The discretization process generating this model. The process provides call backs for TimeDiscretization and allows calls to getProcessValue for timeIndices less or equal the given one.
Returns:
The initial value of the state variable of the process Y(t=0).
• ### getDrift

public  getDrift(MonteCarloProcess process, int timeIndex, RandomVariable[] realizationAtTimeIndex, RandomVariable[] realizationPredictor)
Description copied from interface: ProcessModel
This method has to be implemented to return the drift, i.e. the coefficient vector
μ = (μ1, ..., μn) such that X = f(Y) and
dYj = μj dt + λ1,j dW1 + ... + λm,j dWm
in an m-factor model. Here j denotes index of the component of the resulting process. Since the model is provided only on a time discretization, the method may also (should try to) return the drift as $$\frac{1}{t_{i+1}-t_{i}} \int_{t_{i}}^{t_{i+1}} \mu(\tau) \mathrm{d}\tau$$.
Parameters:
process - The discretization process generating this model. The process provides call backs for TimeDiscretization and allows calls to getProcessValue for timeIndices less or equal the given one.
timeIndex - The time index (related to the model times discretization).
realizationAtTimeIndex - The given realization at timeIndex
realizationPredictor - The given realization at timeIndex+1 or null if no predictor is available.
Returns:
The drift or average drift from timeIndex to timeIndex+1, i.e. $$\frac{1}{t_{i+1}-t_{i}} \int_{t_{i}}^{t_{i+1}} \mu(\tau) \mathrm{d}\tau$$ (or a suitable approximation).

Description copied from interface: ProcessModel
This method has to be implemented to return the factor loadings, i.e. the coefficient vector
λj = (λ1,j, ..., λm,j) such that X = f(Y) and
dYj = μj dt + λ1,j dW1 + ... + λm,j dWm
in an m-factor model. Here j denotes index of the component of the resulting process.
Parameters:
process - The discretization process generating this model. The process provides call backs for TimeDiscretization and allows calls to getProcessValue for timeIndices less or equal the given one.
timeIndex - The time index (related to the model times discretization).
component - The index j of the driven component.
realizationAtTimeIndex - The realization of X at the time corresponding to timeIndex (in order to implement local and stochastic volatlity models).
Returns:
• ### applyStateSpaceTransform

public RandomVariable applyStateSpaceTransform(MonteCarloProcess process, int timeIndex, int componentIndex, RandomVariable randomVariable)
Description copied from interface: ProcessModel
Applies the state space transform fi to the given state random variable such that Yi → fi(Yi) =: Xi.
Parameters:
process - The discretization process generating this model. The process provides call backs for TimeDiscretization and allows calls to getProcessValue for timeIndices less or equal the given one.
timeIndex - The time index (related to the model times discretization).
componentIndex - The component index i.
randomVariable - The state random variable Yi.
Returns:
New random variable holding the result of the state space transformation.
• ### applyStateSpaceTransformInverse

public RandomVariable applyStateSpaceTransformInverse(MonteCarloProcess process, int timeIndex, int componentIndex, RandomVariable randomVariable)
Description copied from interface: ProcessModel
Applies the inverse state space transform f-1i to the given random variable such that Xi → f-1i(Xi) =: Yi.
Parameters:
process - The discretization process generating this model. The process provides call backs for TimeDiscretization and allows calls to getProcessValue for timeIndices less or equal the given one.
timeIndex - The time index (related to the model times discretization).
componentIndex - The component index i.
randomVariable - The state random variable Xi.
Returns:
New random variable holding the result of the state space transformation.
• ### getNumeraire

public RandomVariable getNumeraire(MonteCarloProcess process, double time)
Description copied from interface: ProcessModel
Return the numeraire at a given time index. Note: The random variable returned is a defensive copy and may be modified.
Parameters:
process - The discretization process generating this model. The process provides call backs for TimeDiscretization and allows calls to getProcessValue for timeIndices less or equal the given one.
time - The time t for which the numeraire N(t) should be returned.
Returns:
The numeraire at the specified time as RandomVariable
• ### getNumberOfComponents

public int getNumberOfComponents()
Description copied from interface: ProcessModel
Returns the number of components
Returns:
The number of components
• ### getNumberOfFactors

public int getNumberOfFactors()
Description copied from interface: ProcessModel
Returns the number of factors m, i.e., the number of independent Brownian drivers.
Returns:
The number of factors.
• ### getRandomVariableForConstant

public RandomVariable getRandomVariableForConstant(double value)
Description copied from interface: ProcessModel
Return a random variable initialized with a constant using the models random variable factory.
Parameters:
value - The constant value.
Returns:
A new random variable initialized with a constant value.
• ### getCloneWithModifiedData

public BlackScholesModel getCloneWithModifiedData(Map<String,​Object> dataModified)
Description copied from interface: ProcessModel
Returns a clone of this model where the specified properties have been modified. Note that there is no guarantee that a model reacts on a specification of a properties in the parameter map dataModified. If data is provided which is ignored by the model no exception may be thrown.
Parameters:
dataModified - Key-value-map of parameters to modify.
Returns:
A clone of this model (or this model if no parameter was modified).
• ### getInitialValue

public  getInitialValue(MonteCarloProcess process)
Return the initial value of this model.
Overrides:
getInitialValue in class AbstractProcessModel
Parameters:
process - The discretization process generating this model. The process provides call backs for TimeDiscretization and allows calls to getProcessValue for timeIndices less or equal the given one.
Returns:
the initial value of this model.
• ### getRiskFreeRate

public RandomVariable getRiskFreeRate()
Returns the risk free rate parameter of this model.
Returns:
Returns the riskFreeRate.
• ### getVolatility

public RandomVariable getVolatility()
Returns the volatility parameter of this model.
Returns:
Returns the volatility.
• ### toString

public String toString()
Overrides:
toString in class Object