StandardBarrierPriceNGreeks
Updated: 31 Oct 2013
Use the table-valued function StandardBarrierPriceNGreeks to calculate the price and Greeks of a European-style Knock-In or Knock-Out option. StandardBarrierPriceNGreeks valuations are based on the formulae published by Mark Rubinstein and Eric Reiner in 1991.
Syntax
SELECT * FROM [wctOptions].[wct].[StandardBarrierPriceNGreeks](
<@CallPut, nvarchar(4000),>
,<@BarrierType, nvarchar(4000),>
,<@AssetPrice, float,>
,<@StrikePrice, float,>
,<@BarrierPrice, float,>
,<@Rebate, float,>
,<@TimeToMaturity, float,>
,<@RiskFreeRate, float,>
,<@DividendRate, float,>
,<@Volatility, float,>)
Arguments
@CallPut
identifies the option as being a call ('C') or a put ('P'). @CallPut is an expression of type nvarchar or of a type that can be implicitly converted to nvarchar.
@BarrierType
identifies the type of barrier as 'UI' (Up-and-In), 'UO' (Up-and-Out), 'DI' (Down-and-In), or 'DO' (Down-and-out). @BarrierType must be of a type nvarchar or of a type that implicitly converts to nvarchar.
@AssetPrice
the price of the underlying asset. @AssetPrice is an expression of type float or of a type that can be implicitly converted to float.
@StrikePrice
the exercise price of the option. @StrikePrice is an expression of type float or of a type that can be implicitly converted to float.
@BarrierPrice
For a knock-in option, @BarrierPrice is the value at which the option comes into existence if the @AssetPrice crosses the barrier. For a knock-out option, @BarrierPrice is the value at which the option is extinguished if the @AssetPrice crosses the barrier. @BarrierPrice must be of a type float or of a type that implicitly converts to float.
@Rebate
An amount paid to the buyer of the option in the event that the barrier is never breached. @Rebate must be of a type float or of a type that implicitly converts to float.
@TimeToMaturity
the time to expiration of the option, expressed in years. @TimeToMaturity is an expression of type float or of a type that can be implicitly converted to float.
@RiskFreeRate
the continuously compounded zero coupon risk-free rate over the life of the option. @RiskFreeRate is an expression of type float or of a type that can be implicitly converted to float.
@DividendRate
the continuously compounded zero coupon dividend rate over the life of the option. For currency options @DividendRate should be the foreign risk-free zero coupon rate. @DividendRate is an expression of type float or of a type that can be implicitly converted to float.
@Volatility
the volatility of the relative price change of the underlying asset. @Volatility is an expression of type float or of a type that can be implicitly converted to float.
Return Type
RETURNS TABLE (
[Price] [float] NULL,
[Delta] [float] NULL,
[Gamma] [float] NULL,
[Theta] [float] NULL,
[Vega] [float] NULL,
[Rho] [float] NULL,
[Lambda] [float] NULL,
[GammaP] [float] NULL,
[DdeltaDtime] [float] NULL,
[DdeltaDvol] [float] NULL,
[DdeltaDvolDvol] [float] NULL,
[DgammaDvol] [float] NULL,
[DvegaDvol] [float] NULL,
[VegaP] [float] NULL,
[PhiRho2] [float] NULL,
[RhoFuturesOption] [float] NULL,
[CarrySensitivity] [float] NULL,
[DgammaDspot] [float] NULL,
[DeltaX] [float] NULL,
[RiskNeutralDensity] [float] NULL,
[DvommaDvol] [float] NULL,
[DgammaDtime] [float] NULL,
[DvegaDtime] [float] NULL,
[ForwardPrice] [float] NULL,
[ForwardPoints] [float] NULL
Unless otherwise specified, the columns returned by StandardBarrierPriceNGreeks are measuring the sensitivity of the theoretical value of the option.
Column
|
Description
|
Price
|
The theoretical value of the option.
|
Delta
|
The sensitivity to small changes in the asset price; the first derivative of the option with respect to price.
|
Gamma
|
The rate of change in Delta with respect to small changes in the asset price; the second derivative of the option with respect to price.
|
Theta
|
The sensitivity to small changes in time; the first derivative of the option with respect to time.
|
Vega
|
The sensitivity to small changes in volatility; the first derivative of the option with respect to volatility.
|
Rho
|
The sensitivity to small changes in the risk-free rate; the first derivative of the option with respect to the risk-free rate.
|
Lambda
|
Delta multiplied by the asset price divided by the theoretical value. If the theoretical value is zero, then lambda is set to zero.
|
GammaP
|
Gamma multiplied by asset price divided by strike price.
|
DdeltaDtime
|
The instantaneous change in delta over the passage of time; the second derivative, once to asset price and once to time.
|
DdeltaDvol
|
The sensitivity of delta with respect to volatility; the second derivative, once to asset price and once to volatility.
|
DdeltaDvolDvol
|
The second derivative of delta with respect to volatility; the third derivative, once to asset price and twice to volatility.
|
DgammaDvol
|
The rate of change in gamma with respect to changes in volatility; the third derivative, twice to asset price and once to volatility.
|
DvegaDvol
|
The rate of change to Vega as the volatility changes; the second derivative with respect to volatility.
|
VegaP
|
The percentage change in theoretical value for a 10 per cent change in volatility.
|
PhiRho2
|
The sensitivity to a change in the dividend yield (foreign interest rate for a currency option); the first derivative with respect to dividend yield.
|
RhoFuturesOption
|
The sensitivity to a change in the cost-of carry; the first derivative with respect to the cost-of-carry.
|
CarrySensitivity
|
-PhiRho2
|
DgammaDspot
|
The rate of change in gamma with respect to change in the asset price; the third derivative with respect to price.
|
DeltaX
|
The sensitivity to a change in the strike price; the first derivative with respect to strike price.
|
RiskNeutralDensity
|
The sensitivity of DeltaX; the second derivative with respect to strike price.
|
DvommaDvol
|
The sensitivity of DvegaDvol to changes in volatility; the third derivative, twice to asset price and once to volatility.
|
DgammaDtime
|
The sensitivity of Gamma to the passage of time; the third derivative, twice to asset price and once to time.
|
DvegaDtime
|
The sensitivity of Vega to the passage of time; the second derivative, once to volatility and once to time.
|
ForwardPrice
|
The value of the underlying asset at the expiration date of the option.
|
ForwardPoints
|
The difference between the ForwardPrice and the asset price.
|
Remarks
· @Volatility must be greater than zero (@Volatility > 0).
· @TimeToMaturity must be greater than zero (@TimeToMaturity > 0).
· @AssetPrice must be greater than zero (@AssetPrice > 0).
· @StrikePrice must be greater than zero (@StrikePrice > 0).
· If @ReturnValue is NULL, then @ReturnValue is set to 'P'.
· If @DividendRate is NULL then @DividendRate = 0.
· If @RiskFreeRate is NULL @RiskFreeRate = 0.
· @BarrierPrice must be greater than zero (@BarrierPrice > 0).
· @Rebate must be greater than or equal to zero (@Rebate >= 0).
· If @Rebate is NULL, then @Rebate = 0.
· @BarrierPrice assumes continuous monitoring.
· To convert a non-continuous @BarrierPrice use the AdjustedBarrier function.
Example
A down-and-in call
SELECT *
FROM wct.StandardBarrierPriceNGreeks(
'C' --PutCall
,'DI' --BarrierType
,100 --Asset Price
,90 --Strike Price
,97 --Barrier
,2 --Rebate
,0.5 --Time-to-expiry
,.10 --Risk Free Rate
,.05 --Dividend Rate
,.20 --Volatility
)
Here are the first few columns of the resultant table.
In this SELECT we un-pivot the columns returned by the function for ease of viewing the results.
SELECT n.*
FROM wct.StandardBarrierPriceNGreeks(
'C' --PutCall
,'DI' --BarrierType
,100 --Asset Price
,90 --Strike Price
,97 --Barrier
,2 --Rebate
,0.5 --Time-to-expiry
,.10 --Risk Free Rate
,.05 --Dividend Rate
,.20 --Volatility
)
CROSS APPLY(VALUES
('Price',Price)
,('Delta',Delta)
,('Gamma',Gamma)
,('Theta',Theta)
,('Vega',Vega)
,('Rho',Rho)
,('Lambda',Lambda)
,('GammaP',GammaP)
,('DdeltaDtime',DdeltaDtime)
,('DdeltaDvol',DdeltaDvol)
,('DdeltaDvolDvol',DdeltaDvolDvol)
,('DgammaDvol',DgammaDvol)
,('DvegaDvol',DvegaDvol)
,('VegaP',VegaP)
,('PhiRho2',PhiRho2)
,('RhoFuturesOption',RhoFuturesOption)
,('CarrySenstivity',CarrySensitivity)
,('DgammaDspot',DgammaDspot)
,('DeltaX',DeltaX)
,('RiskNeutralDensity',RiskNeutralDensity)
,('DvommaDvol',DvommaDvol)
,('DgammaDtime',DgammaDtime)
,('DvegaDtime',DvegaDtime)
,('ForwardPrice',ForwardPrice)
,('ForwardPoints',ForwardPoints)
)n([Return Value], Value)
This produces the following result.
Return Value Value
------------------ ----------------------
Price 8.59507043337689
Delta -0.649025843078022
Gamma 0.052092730129516
Theta -0.0173153378580135
Vega 0.258665904443234
Rho 0.156984606562283
Lambda -7.55114048347627
GammaP 0.052092730129516
DdeltaDtime 0.000306086723699144
DdeltaDvol 0.0135552546964846
DdeltaDvolDvol -0.650285444002208
DgammaDvol -0.00416152983184759
DvegaDvol -0.00199687541169169
VegaP 0.517331808886468
PhiRho2 -0.199959958365525
RhoFuturesOption -0.0379626818828527
CarrySenstivity 0.199959958365525
DgammaDspot 12980.5178819264
DeltaX -0.582783834275347
RiskNeutralDensity 0.0207577954824956
DvommaDvol 0.000564868690799969
DgammaDtime -5.04370755206702E-05
DvegaDtime -0.0699760427380625
ForwardPrice 102.531512052443
ForwardPoints 2.53151205244289
Use CROSS APPLY to with StandardBarrierPriceNGreeks when there are multiple rows of input data.
SELECT n.rn
,k.*
FROM (VALUES
(1,'C','DI',100,97,95,2,0.75,0.005,0.009,0.16)
,(2,'P','DI',100,97,95,2,0.75,0.005,0.009,0.16)
,(3,'C','DO',100,97,95,2,0.75,0.005,0.009,0.16)
,(4,'P','DO',100,97,95,2,0.75,0.005,0.009,0.16)
,(5,'C','UI',100,103,105,2,0.75,0.005,0.009,0.16)
,(6,'P','UI',100,103,105,2,0.75,0.005,0.009,0.16)
,(7,'C','UO',100,103,105,2,0.75,0.005,0.009,0.16)
,(8,'P','UO',100,103,105,2,0.75,0.005,0.009,0.16)
)n(rn,z,bt,S,X,H,K,T,Rf,Rd,Vol)
CROSS APPLY wct.StandardBarrierPriceNGreeks(z,bt,S,X,H,K,T,Rf,Rd,Vol)k
Here are the first few columns of (re-formatted) data in the resultant table.
rn
|
Price
|
Delta
|
Gamma
|
Theta
|
Vega
|
Rho
|
Lambda
|
GammaP
|
1
|
3.0785
|
-0.1703
|
0.0203
|
-0.0073
|
0.2571
|
0.1310
|
-5.5304
|
0.0203
|
2
|
4.6988
|
-0.2909
|
0.0250
|
-0.0090
|
0.2975
|
-0.3016
|
-6.1919
|
0.0250
|
3
|
5.7811
|
0.7711
|
0.0074
|
-0.0017
|
0.0742
|
0.2617
|
13.3384
|
0.0074
|
4
|
1.4704
|
-0.1015
|
0.0027
|
-0.0010
|
0.0338
|
-0.0304
|
-6.9007
|
0.0027
|
5
|
4.6802
|
0.3178
|
0.0252
|
-0.0084
|
0.3057
|
0.2600
|
6.7906
|
0.0252
|
6
|
3.4500
|
0.2268
|
0.0246
|
-0.0083
|
0.2793
|
-0.1727
|
6.5750
|
0.0246
|
7
|
1.4028
|
0.1140
|
0.0030
|
-0.0009
|
0.0330
|
0.0259
|
8.1272
|
0.0030
|
8
|
5.9202
|
-0.7883
|
0.0037
|
-0.0021
|
0.0594
|
-0.3110
|
-13.3153
|
0.0037
|