Login     Register

        Contact Us     Search

XLeratorDB/financial-options Documentation

SQL Server Bjerksund-Stensland function for American option pricing


BjerksundStensland

Updated: 31 Oct 2013


Use BjerksundStensland to calculate the price or Greeks of an American-style option using the Bjerksund and Stensland 2002 option pricing formula.
Syntax
SELECT [wctOptions].[wct].[BjerksundStensland] (
  <@CallPut, nvarchar(4000),>
 ,<@AssetPrice, float,>
 ,<@StrikePrice, float,>
 ,<@TimeToMaturity, float,>
 ,<@RiskFreeRate, float,>
 ,<@DividendRate, float,>
 ,<@Volatility, float,>
 ,<@ReturnValue, nvarchar(4000),>)
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.
@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.
@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 risk-free rate of return 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 dividend rate over the life of the option. For currency options, @DividendRate should be the foreign risk-free interest 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.
@ReturnValue
identifies the calculation to be performed. @ReturnValue is an expression of type nvarchar or of a type that can be implicitly converted to nvarchar. For a full description of the return values, see BjerksundStenslandPriceNGreeks. @ReturnValue is not case-sensitive. The following values are acceptable for @ReturnValue

@ReturnValue
Returns
'P','PRICE'
Price
'D','DELTA'
Delta
'G','GAMMA'
Gamma
'T','THETA'
Theta
'V','VEGA'
Vega
'R','RHO'
Rho
'L','LAMBDA'
Lambda
'DDDV','VANNA','DVEGADSPOT','DDELTADVOL'
DdeltaDvol
'DVV','DDELTADVOLDVOL'
DdeltaDvolDvol
'DT','CHARM','DDELTADTIME'
DdeltaDtime
'GV','ZOMMA','DGAMMADVOL'
DgammaDvol
'GP','GAMMAP'
GammaP
'DVDV','VOMMA','VOLGA','DVEGADVOL'
DvegaDvol
'VP','VEGAP'
VegaP
'PR2','PHIRHO2'
PhiRho2
'S','SPEED','DGAMMADSPOT'
DgammaDspot
'DX','DELTAX'
Delta X
'RND','RISKNEUTRALDENSITY'
Risk Neutral Density
'VVV','ULTIMA','DVOMMADVOL'
DvommaDvol
'VT','VETA','DVEGADTIME'
DvegaDtime
'GT','COLOR','DGAMMADTIME'
DgammaDtime

 
Return Type
float
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 then @RiskFreeRate = 0.
·         For pricing European options, use BlackScholesMerton or BinomialEuro.
·         To use the binomial method for American options, use BinomialAmerican.
·         To get the implied volatility (given price), use BjerksundStenslandIV.
·         To calculate the price and all the Greeks, use BjerksundStenslandPriceNGreeks.
Example
Calculate the price for a put option on 2012-09-04, expiring on 2012-12-15, with a current asset price of 99.5, a strike price of 100 and a volatility of 20%. The risk free rate is 2% and the dividend rate is 0.5%.
SELECT ROUND(wct.BjerksundStensland(
      'P'         --PutCall
      ,99.5       --Asset Price
      ,100        --Strike Price
      ,datediff(d,'2012-09-04','2012-12-15') / 365.0000     --Time-to-expiry
      ,.02        --Risk Free Rate
      ,.005       --Dividend Rate
      ,.20        --Volatility
      ,NULL       --Return Value
      ), 4) as Price
This produces the following result.
                 Price
----------------------
                4.2531
To calculate the delta for the same option:
SELECT ROUND(wct.BjerksundStensland(
      'P'         --PutCall
      ,99.5       --Asset Price
      ,100        --Strike Price
      ,datediff(d,'2012-09-04','2012-12-15') / 365.0000     --Time-to-expiry
      ,.02        --Risk Free Rate
      ,.005       --Dividend Rate
      ,.20        --Volatility
      ,'D'        --Return Value
      ), 4) as Delta
This produces the following result.
                 Delta
----------------------
               -0.4856
In this example we calculate the Call and Put prices for the same option with a series of different asset prices.
SELECT cast(n.S as money) as [Underlying]
,cast(wct.BjerksundStensland(
      'C'         --PutCall
      ,n.s        --Asset Price
      ,100        --Strike Price
      ,datediff(d,'2012-09-04','2012-12-15') / 365.0000     --Time-to-expiry
      ,.02        --Risk Free Rate
      ,.005       --Dividend Rate
      ,.20        --Volatility
      ,'P'        --Return Value
      ) as money) as [Call Price]
,cast(wct.BjerksundStensland(
      'P'         --PutCall
      ,n.s        --Asset Price
      ,100        --Strike Price
      ,datediff(d,'2012-09-04','2012-12-15') / 365.0000     --Time-to-expiry
      ,.02        --Risk Free Rate
      ,.005       --Dividend Rate
      ,.20        --Volatility
      ,'P'        --Return Value
      ) as money) as [Put Price]
FROM (
      SELECT 98.5 UNION ALL
      SELECT 99.0 UNION ALL
      SELECT 99.5 UNION ALL
      SELECT 100 UNION ALL
      SELECT 100.5 UNION ALL
      SELECT 101
      ) n(S)

This produces the following result.
           Underlying            Call Price             Put Price
--------------------- --------------------- ---------------------
                98.50                3.6518                4.7581
                99.00                3.8961                4.5007
                99.50                  4.15                4.2531
               100.00                4.4134                4.0151
               100.50                4.6861                3.7866
               101.00                4.9681                3.5676
In this example we show all of the return values for an option (which can be more easily done using BjerksundStensland PriceNGreeks).
SELECT n.rv as [Description]
,wct.BjerksundStensland(
      'P'               --PutCall
      ,99.5       --Asset Price
      ,100        --Strike Price
      ,datediff(d,'2012-09-04','2012-12-15') / 365.0000     --Time-to-expiry
      ,.02        --Risk Free Rate
      ,.005       --Dividend Rate
      ,.20        --Volatility
      ,n.rv       --Return Value
      ) as [Value]
FROM (
      SELECT 'Price' UNION ALL
      SELECT 'Delta' UNION ALL
      SELECT 'Gamma' UNION ALL
      SELECT 'Theta' UNION ALL
      SELECT 'Vega' UNION ALL
      SELECT 'Rho' UNION ALL
      SELECT 'Lambda' UNION ALL
      SELECT 'DdeltaDvol' UNION ALL
      SELECT 'DdeltaDvolDvol' UNION ALL
      SELECT 'DdeltaDtime' UNION ALL
      SELECT 'DgammaDvol' UNION ALL
      SELECT 'GammaP' UNION ALL
      SELECT 'DvegaDvol' UNION ALL
      SELECT 'VegaP' UNION ALL
      SELECT 'PhiRho2' UNION ALL
      SELECT 'DgammaDspot' UNION ALL
      SELECT 'DeltaX' UNION ALL
      SELECT 'RiskNeutralDensity' UNION ALL
      SELECT 'DvommaDvol' UNION ALL
      SELECT 'DvegaDtime' UNION ALL
      SELECT 'DgammaDtime')n(rv)
This produces the following result.
Description                         Value
------------------ ----------------------
Price                      4.253097294231
Delta                  -0.485618954151334
Gamma                  0.0385703913252655
Theta                 -0.0186272357466564
Vega                    0.209275569007161
Rho                    -0.129024971220559
Lambda                  -11.3609171376349
DdeltaDvol            0.00144318512695918
DdeltaDvolDvol      -4.27457528928699E-05
DdeltaDtime         -0.000250644436712482
DgammaDvol           -0.00198143290219832
GammaP                 0.0383775393686392
DvegaDvol           -8.10871370049426E-06
VegaP                   0.418551138014323
PhiRho2                 0.120224721192841
DgammaDspot         -0.000643179731696364
DeltaX                  0.525721831898807
RiskNeutralDensity     0.0381909615043696
DvommaDvol          -6.06312403661491E-06
DvegaDtime             -0.101735880237712
DgammaDtime          0.000185778630226844
 

 



Copyright 2008-2013 WestClinTech LLC         Privacy Policy        Terms of Service