This document describes the properties that can be used to construct Volatility Surfaces for Exchange-Traded Instruments (ETIs), which include equities, indices, and futures.
For the general guidelines on how to structure a request to construct a volatility surface please refer to the Volatility Surfaces Getting Started page.
This page explains how to build the underlying definition section, define your own surface parameters and layout preferences, and what fields can be returned for ETI Volatility Surface.
The table below lists the root object properties that should be defined in the request body.
Input Name | Type | Description | Importance | Default Value |
outputs | Array of strings | The list of requested output analytics. The possible values are:
|
Optional | By default, surfaceTag and properties that apply to the constructed volatility surface are returned. |
universe | Array of objects | The array of objects that describe the volatility surface and the surface preferences. For a detailed breakdown, please refer here. |
Mandatory | No default value applies. |
The table below lists the properties that can be requested in the universe object.
Input Name | Type | Description | Importance | Default Value |
underlyingType |
String (enumeration) | The type of underlying used to generate the volatility surface. The possible value is:
|
Mandatory | No default value applies. |
surfaceTag | String | A user-defined string to identify the volatility surface. It can be used to link output results to the requested definition. Limited to 40 characters. Only alphabetic, numeric and '- _.#=@' characters are supported. | Optional | No default value applies. |
underlyingDefinition | Object | The definition of the volatility surface. For a detailed breakdown, please refer here. | Mandatory | No default value applies. |
surfaceParameters | Object | The pricing parameters to be applied to the volatility surface. For a detailed breakdown, please refer here. | Optional | If not provided, default values of parameters are used. |
surfaceLayout | Object | The list of properties used to modify the layout of the volatility surface in outputs. For a detailed breakdown, please refer here. | Optional | If not provided, default values of parameters are used. |
shiftScenarios | Array of objects | The list of attributes applied to the shift scenarios. Mandatory for shifting. For a detailed breakdown, please refer here. |
Optional | No default value applies. |
The table below lists the properties that can be requested in the underlyingDefinition object.
Input Name | Type | Description | Importance | Default Value |
instrumentCode | String | The code used to define the underlying asset. The value is expressed in the following formats:
|
Mandatory | No default value applies. |
exchange | String | Specifies the exchange to be used to retrieve the underlying data. | Optional | By default, it is the main exchange where the underlying equity is quoted. |
The table below lists the properties that can be requested in the surfaceParameters object.
Note: Either xAxis or yAxis properties should be set to 'Date' or 'Tenor', 'Date' and 'Tenor' values cannot be set at a time for xAxis and yAxis properties, 'Strike' and 'Moneyness' values cannot be set at a time for xAxis and yAxis properties.
Input Name | Type | Description | Importance | Default value |
xAxis | String (enumeration) | The unit for the 'x' axis. The possible values are:
|
Optional | The default value is 'Date'. |
yAxis | String (enumeration) | The unit for the 'y' axis. The possible values are:
|
Optional | The default value is 'Strike'. |
calculationDate | DateTime | The date at which the volatility surface is constructed. The value is expressed in ISO 8601 format: YYYY-MM-DDT[hh]:[mm]:[ssZ (e.g., '2021-01-01T00:00:00Z'). It can not be a future date. | Optional | The default value is today's date. |
volatilityModel | String (enumeration) | The model used to build the surface. The possible values are:
|
Optional | The default value is 'SVI'. |
inputVolatilityType | String (enumeration) | The type of volatility used to construct the surface. The possible values are:
|
Optional | The default value is 'Implied'. |
priceSide | String (enumeration) | The quoted price side of options used to construct the surface. The possible values are:
|
Optional | The default value is 'Mid'. |
timeStamp | String (enumeration) | The mode of selecting the timestamp of options used to construct the surface. The possible values are:
Note: For most cases, only the 'Default' value may be available when pricing a historical surface. |
Optional | The default value is 'Default'. |
moneynessType | String (enumeration) | The enumerate that specifies how moneyness is computed for the calibration. The possible values are:
|
Optional | The default value is 'Spot'. |
sviAlphaExtrapolation | Boolean | The indicator that determines if svi extrapolation should be used to construct the surface. The possible values are:
|
Optional | The default value is 'True'. |
smileBySmileArbitrageCheck | Boolean | The indicator of whether smile by smile arbitrage check is applied when constructing the volatility surface. The possible values are:
|
Optional | The default value is 'True'. |
filters | Object | The parameters of options that should be used to construct the volatility surface. For a detailed breakdown, please refer here. |
Optional | If not provided, default values of parameters are used. |
weights | Array of objects | The list of calibration weights that should be applied to different moneyness ranges. For a detailed breakdown, please refer here. |
Optional | If not provided, default values of parameters are used. |
Input Name | Type | Description | Importance | Default value |
minMoneyness | Double | The lower bound of the moneyness range of options to which the specified weight should be applied for surface construction. The value is expressed in percentages (call option moneyness = UnderlyingPrice / Strike * 100; put option moneyness = Strike / UnderlyingPrice * 100). The value of 100 corresponds to at-the-money option. | Optional | No default value applies. |
maxMoneyness | Double | The upper bound of the moneyness range of options to which the specified weight should be applied for surface construction. The value is expressed in percentages (call option moneyness = UnderlyingPrice / Strike * 100; put option moneyness = Strike / UnderlyingPrice * 100). The value of 100 corresponds to at-the-money option. | Optional | No default value applies. |
weight | Double | The weight which should be applied to the options in the specified range of the moneyness. The value is expressed in absolute numbers. The contribution of a specific option is computed by the dividing the weight of the option by the sum of weights of all constituent options. Mandatory if the weights array of objects is used. |
Optional | The default value is '1.0' for all constituent options. |
The table below lists the properties of surfaceParameters → filters object.
Input Name | Type | Description | Importance | Default value |
atmToleranceIntervalPercent | Double | The width of the at-the-money interval. The value is expressed in percentages. For example, when it's set to 1 (the default value), call options with moneyness <99% and put options with moneyness>101% will be excluded. In-the-money options are excluded from the list of input options. |
Optional | The default value is '1.0'. |
ensurePricesMonotonicity | Boolean | The indicator of whether the filter on the monotonicity of price options is used to construct the surface. The possible values are:
|
Optional | The default value is 'True'. |
useWeeklyOptions | Boolean | The indicator of whether the filter on the weekly options is used to construct the surface. The possible values are:
|
Optional | The default value is 'False'. |
useOnlyCalls | Boolean | The indicator of whether only call options should be used to construct the surface. The possible values are:
|
Optional | The default value is 'False'. |
useOnlyPuts | Boolean | The indicator of whether only put options should be used to construct the surface. The possible values are:
|
Optional | The default value is 'False'. |
exerciseStyle |
String (enumeration) |
A filter on the exercise of options to be used for the surface calculation. The possible values are :
|
Optional |
The default value is 'AMER' if constituents contain an American option else it is 'EURO'. |
maxStalenessDays | Integer | The value specifies the maximum staleness past days to use to construct the surface. | Optional | The default value is '5.0'. |
maxOfMedianBidAskSpread | Double | The value specifies the spread multiplier used to filter the options with the same expiry but high bid-ask spread. Upper bound of the spread is computed as maxOfMedianBidAskSpread multiplied by median spread. | Optional | The default value is '4.0'. |
strikeRange | Object | The range allows to exclude strike levels that have implied volatilities which exceed upper bound or below lower bound. For a detailed breakdown, please refer here. | Optional | If not provided, default values of parameters are used. |
maturityFilterRange | Object | The object allows to specify the range of expiry periods of options that are used to construct the surface. For a detailed breakdown, please refer here. | Optional | If not provided, default values of parameters are used. |
The table below lists the properties of surfaceParameters → filters → strikeRange object.
Input Name | Type | Description | Importance | Default value |
minOfMedianImpliedVolPercent | Double | The value can be used to exclude strikes with implied volatilities less than lower bound. The lower bound is computed as MinOfMedianImpliedVolPercent multiplied by median implied volatility and divided by 100. The value is expressed in percentages. | Optional | The default value is '30.0'. |
maxOfMedianImpliedVolPercent | Double | The value can be used to exclude strikes with implied volatilities larger than upper bound. The upper bound is computed as MaxOfMedianImpliedVolPercent multiplied by median implied volatility and divided by 100. The value is expressed in percentages. Mandatory if strikeRange object is used. |
Optional | The default value is '500.0'. |
The table below lists the properties of surfaceParameters → filters → maturityFilterRange object.
Input Name | Type | Description | Importance | Default value |
minOfMedianNbOfStrikesPercent | Double | The value is used to set the minimum number of strikes that should be available for maturities that are used to construct the surface. The minimum threshold is computed as MinOfMedianNbOfStrikesPercent multiplied by the median number of Strikes and divided by 100. The value is expressed in percentages. | Optional | The default value is '20.0'. |
minMaturity | String | The period code used to set the minimal maturity of options used to construct the surface (e.g., '1M', '1Y'). | Optional | The default value is '7D'. |
maxMaturity | String | The period code used to set the maximal maturity of options used to construct the surface (e.g., '1M', '1Y'). | Optional | No default value applies. |
The table below lists the properties that can be requested in the surfaceLayout object.
Input Name | Type | Description | Importance | Default value |
format | String (enumeration) | The format of the returned volatility surface. The possible values are:
|
Optional | The default value is 'Matrix'. |
xValues | Array of strings | The list of values of discrete data points on the x-axis. The possible values are determined by value of xAxis. It is used only if format = 'Matrix'. |
Optional | No default value applies. |
yValues | Array of strings | The list of values of discrete data points on the y-axis. The possible values are determined by the value of yAxis. It is used only if format = 'Matrix'. |
Optional | No default value applies. |
xPointCount | Integer | The number of data points that will be generated along the x-axis. These values will be distributed depending on the available input data and the type of volatility. It is used only if format = 'Matrix'. |
Optional | No default value applies. |
yPointCount | Integer | The number of data points that will be generated along the y-axis. These values will distributed depending on the available input data and the type of volatility. It is used only if format = 'Matrix'. |
Optional | No default value applies. |
dataPoints | Array of objects | The list of specific data points to be returned. Mandatory if format = 'List'. For a detailed breakdown, please refer here. |
Optional | No default value applies. |
The table below lists the properties of surfaceLayout → dataPoints object.
Input Name | Type | Description | Importance | Default value |
x | String | A value of a point to be returned on x-axis. | Optional | No default value applies. |
y | String | A value of a point to be returned on y-axis. | Optional | No default value applies. |
The table below lists properties returned in the response, including properties requested in the outputs object.
Output Name | Type | Description |
surfaceTag | String | A user-defined string to identify the volatility surface. |
headers |
Array of strings | The names of the properties that apply to the constructed volatility surface. It is returned if the surface layout's format is set to 'List'. |
surface | Array of arrays | The values of the properties that apply to the constructed volatility surface. |
discountCurve | Object | The list of the zero-coupon discount curve attributes used to construct the volatility surface. For a detailed breakdown, please refer here. |
dividends | Object | The description of dividend yield of the underlying equity instrument. For a detailed breakdown, please refer here. |
underlyingSpot | Array of objects | The list of properties of the underlying’s spot and/or the futures values used to construct the volatility surface. For a detailed breakdown, please refer here. |
moneynessStrike | Array of objects | The strike values corresponding to moneyness levels defined. It is returned in response only if one of the axis is set to Moneyness. For a detailed breakdown, please refer here. |
shiftedSurfaces | Array of objects | The list of attributes applied to the shifted volatility surface. It is returned in response only if shiftScenarios is requested. For a detailed breakdown, please refer here. |
The table below lists the discountCurve object properties.
Output Name | Type | Description |
marketDataId | String | The identifier of the curve that is used to reference the market data item (e.g. 'IRCurve_EUR-DepoIRSvs6MEuribor_2022-06-17T00:00:00'). |
curveDefinition | Object | The definition of attributes for the curve. For the detailed breakdown please refer here. |
curveParameters | Object | The list of parameters used to construct the curve. For the detailed breakdown please refer here. |
points | Array of objects | The description of curve points. For the detailed breakdown please refer here. |
currency | String | The currency code of the curve (e.g., 'EUR'). The possible values are listed here. |
The table below lists the properties of discountCurve → curveDefinition object.
Output Name | Type | Description |
chainRic | String | The chain RIC including the instruments to build the curve (e.g., '0#EURZ=R'). |
indexTenor | String | The code indicating the tenor applied to the curve (e.g., '6M', '1Y'). |
currency | String | The currency code of the curve (e.g., 'EUR'). The possible values are listed here. |
name | String | The name of the curve (e.g., 'EUR - Depo IRS vs 6M Euribor'). |
The table below lists the properties of discountCurve → curveParameters object.
Output Name | Type | Description |
dayCountBasis | String | The day count basis method used to calculate the interest payments when constructing the curve. The possible values are listed here. |
parallelShiftBp | Double | The amount by which every curve point is shifted. The value is expressed in basis points. At this moment it is equal to 0. |
compoundingType | String | The yield type of the curve (e.g., 'Compounded'). |
interpolationMode | String | The interpolation method used in the curve bootstrapping (e.g., 'CubicSpline'). |
extrapolationMode | String | The extrapolation method used in the curve bootstrapping (e.g., 'Constant'). |
marketDataDate | Date-time | The date at which the market data is retrieved. The value is expressed in ISO 8601 format: YYYY-MM-DDT[hh]:[mm]:[ss]Z (e.g., '2021-01-01T00:00:00Z'). |
The table below lists the properties of discountCurve → points array of objects.
Output Name | Type | Description | ||||||
startDate | Date | The start date of the curve point tenor. The value is expressed in ISO 8601 format: YYYY-MM-DD (e.g., '2021-01-01'). | ||||||
endDate | Date | The end date of the curve point tenor. The value is expressed in ISO 8601 format: YYYY-MM-DD (e.g., '2021-01-01'). | ||||||
ratePercent | Double | The rate percent of the curve computed for the given curve point. | ||||||
instruments | Array of objects | The list of instruments used for the curve points computation.
|
||||||
tenor | String | The code indicating the period between startDate and endDate of the curve points (e.g., '1M', '6M', '4Y'). | ||||||
instrument | String | The code used to define the instrument which is used for the curve point computation (e.g., 'EUR6MZ=R'). | ||||||
discountFactor | Double | The ratio used to calculate the present value of future cash flows at valuationDate. It is derived from ratePercent which corresponds to the curve point tenor. |
The table below lists the dividends object properties.
Output Name | Type | Description |
curveDefinition | Object | The description of the dividend yield curve. For a detailed breakdown, please refer here. |
curveParameters | Object | The description of dividend yield curve structure. For a detailed breakdown, please refer here. |
points | Array of objects | The description of points on the dividend yield curve. For a detailed breakdown, please refer here. |
The table below lists the properties of dividends -> curveDefinition object.
Output Name | Type | Description |
instrumentCode | String | The code (a RIC) used to define the underlying asset. |
type | String | The type of the dividend yield. The possible values are:
For more details, please refer here. |
ric | String | The code used to define the underlying asset's dividend cash flows. |
Depending on the underlying type (stock, ETF, index) and the availability of the data, dividends can be of the following types.
Note: The logic around the default dividend type for a particular Ric or underlying type might have changed since the calculation date.
Dividend Type |
Calculation Mode |
Dividend Values for Stocks |
Dividend Values for Indices |
Comment |
HistoricalYield |
Calculated for:
|
Dividends are expressed in percentages. |
Dividends are expressed in percentages. |
Historical requests with default parameters use pre-calculated SVI calibration parameters in order to improve performance. |
ForecastTable |
Calculated for:
|
Dividends are expressed in cash amount. |
Dividends are expressed in percentages and index points. |
Coverage:
|
ImpliedYield |
Calculated for:
|
n/a |
Dividends are expressed in percentages. |
Coverage: indices in <INDEX/DIVCF>. |
The table below lists the properties of dividends -> curveParameters object.
Output Name |
Type |
Description |
structure |
String |
The description of the internal structure of the dividend yield curve. |
The table below lists the properties of dividends -> points object.
Output Name | Type | Description |
exDate | Date-time | The date from which the stock starts trading without the value of its dividend payment. The value is expressed in ISO 8601 format: YYYY-MM-DDT[hh]:[mm]:[ss]Z (e.g., '2021-01-01T00:00:00Z'). |
dividendYieldPercent | Double | The ratio of annualized dividends to the underlying asset's price. The value is expressed in percentages. |
dividendCashAmount | Double | The cash amount of dividends. The value is expressed in the instrument's currency. |
The table below lists the underlyingSpot array of objects properties.
Output Name | Type | Description |
instrumentCode | String | The code used to define the underlying (e.g., 'BNPP.PA'). |
timeStamp | String | The timestamp of the underlying’s price. The possible values are:
|
priceSide | String | The price side of the underlying instrument. The possible values are:
|
price | Double | The price of the underlying instrument. |
The table below lists the moneynessStrike array of objects properties.
Output Name | Type | Description |
Moneyness | Double | The moneyness value is either requested from the surface layout or computed by default. |
Strike | Double | The strike price associated with the moneyness level of the constructed volatility surface. |
Error Code | Error Message | Description |
8002. VolSurf.10006 | Invalid input: Instrument code must end with @RIC, @RICROOT or @TICKER | instrumentCode missing @RIC. |
8003. VolSurf.10004 | Invalid input: SurfaceDefinition is empty. Please fill it! | UnderlyingDefinition is null. |
8004 | Invalid input: SurfaceParameters is empty. Please fill it! | SurfaceParameters is null. |
8005 | Invalid input: SurfaceLayout is empty. Please fill it! | SurfaceLayout is null. |
VolSurf.10005 | Invalid input: InstrumentCode is empty. Please fill it! | InstrumentCode is null. |
Invalid input: Instrument code is not recognized. 'xxx@RIC' is not valid underlying. | Wrong instrument code. | |
No error returned | Invalid input: The service only supports today as a calculation date. Historical volatility will be available soon. | Calculation date is in the past. |
VolSurf.10200 | Market data: The service failed to retrieve the necessary data to build the volatility surface. | Global DPS error. |
VolSurf.10102 | Market data: The service failed to gather enough options to build the volatility surface. | Static filter returned no option. |
VolSurf.10201 | Market data: The options available for xxx can't be used to build an accurate volatility surface. | The Prepare returns no filtered RICs (dynamic filter). |
VolSurf.10300 | The service failed to build the volatility surface. | Global VolSurf error. |
8006 | Market data: No rate curve available to build an accurate volatility surface. | The Prepare returns no rate curve. |
8007 | Pricer: The service failed to build the volatility surface. | Global Pricer error. |
8007 | Pricer: The service failed to build the volatility surface. | Adfin error when calibrating the surface. Adfin error message: "Calibration failed" "SVI automatic guess failed". |
8007 | Pricer: The service failed to build the volatility surface with the specified calibration parameters. | Adfin error due to invalid surface parameters. Adfin error message:Invalid calibrated params. |
8007 | Pricer: The service failed to build the volatility surface. | Adfin error due to invalid options. Adfin error message:Invalid options input. |
8008 | Invalid input: Same value has been entered in XAxis and YAxis! | The same value has been set in xAxis nad yAxis. |
8009 | Invalid input: Either XAxis or YAxis should contain either 'Date' or 'Tenor'. | At least one axis should contain 'Date' or 'Tenor'. |
8010 | Invalid input: Both XAxis and YAxis should not contain 'Date' and 'Tenor'. | Both axis contains 'Date' and 'Tenor'. |
8011 | Market data: No Dividend curve available to build an accurate volatility surface. | Impossible to rebuild a surface because no dividend curve has been saved. |
8012 | Market data: No Discount curve available to build an accurate volatility surface. | Impossible to rebuild a surface because no discount curve has been saved. |
8013 | Market data: No Forward curve available to build an accurate volatility surface. | Impossible to rebuild a surface because no forward curve has been saved. |
8014 | Market data: No Calibration Parameter available to build an accurate volatility surface. | Impossible to rebuild a surface because no calibration parameter has been saved. |
8018 | Invalid inputVolatilityType: neither surface nor ATM volatility market data has this inputVolatilityType. | Impossible to identify volatility of this type with available Vol market data. |
VolSurf.10102 | The volatility surface cannot be calculated at the requested date. | Surface requested at a historical date on which we don't have any calibration parameters. |
VolSurf.10008 | Unknown instrument. | Instrument is unknown. |