Schema: LiveExpirySurface (ID: 1132)
LiveExpirySurface (surfaceType = 'Live') records are computed and publish continuously during trading hours and represent a current best implied volatility market fit.
SurfaceType = 'PriorDay' records contain the `closing surface record from the prior trading period (usually from just before the last main session close).
METADATA
Attribute | Value |
---|---|
Topic | 1000-analytics |
MLink Token | SRMLinkAnalytics |
SRSE Product | SRAnalytics |
Note: The symbol
=
next to a field number indicates that it is a primary key.
BODY
# | Field | Type | Comment |
---|---|---|---|
10= | ekey | ExpiryKey | |
11= | surfaceType | enum : SurfaceCurveType | |
100 | uPrc | double | effective uPrc used for surface fitting |
101 | uPrcDriver | double | underlier driver (mid-market) |
154 | iDays | int | interest days to expiry |
102 | years | float | volatility time to expiration (in years) |
103 | rate | float | term interest rate to expiry (discount rate) |
105 | atmVol | float | atm surface volatility (xAxis = 0) |
155 | atmCen | float | censored atm surface volatility (xAxis = 0) |
106 | atmSlope | float | volatility surface slope (dVol / dXAxis) (xAxis=0) |
156 | atmSkewYY | float | skewFn @ xAxis = 0 (sticky surface static point) |
157 | atmVResidual | float | vResidual @ xAxis = 0 (sticky surface static point) |
158 | atmSDiv | float | atm continous stock dividend (borrow rate) (xAxis = 0) |
159 | basisEKey | ExpiryKey | LiveBasisCurve.pkey.ekey record that defines BasisSkewFn below. |
160 | basisTimestamp | DateTime | LiveBasisCurve.timestamp |
108 | axisFUPrc | float | axis FwdUPrc (fwd underlying price used to compute xAxis) |
109 | axisVolRT | float | axis VolRT value used to compute xAxis (usually equal to skewMult) (value at curve min point) |
111 | xMult | float | |
112 | xShift | float | |
110 | skewMult | float | sVol = skewMult * BasisSkewFn(xMult * (xAxis - xShift)) |
164 | maxResidualErr | float | largest remain residual error (in premium points) |
165 | cpAdjA | float | cpAdj = cpAdjA + cpXDe * cpAdjB + cpXDe * cpXDe * cpAdjC [cpAdj is either sdiv or uPrcRatio] |
166 | cpAdjB | float | |
167 | cpAdjC | float | |
168 | cpAdjRefVol | float | cpXDe = 0.5 - BS_cDe(uPrc, strike, cpAdjRefVol, years, rate, sdiv=0) |
169 | ticker | TickerKey | underlying stock key that this option expiration attaches to |
170 | fkey | ExpiryKey | underlying future key (if any) |
171 | uPrcDriverKey | ExpiryKey | underlier driver key |
172 | uPrcDriverType | enum : SpdrKeyType | underlier driver key type (stock or future) |
173 | ddiv | float | (expected) cumulative discrete dividend $ amounts prior to expiration |
174 | ddivPv | float | (expected) cumulative npv of discrete dividend $ amounts prior to expiration (SR global rate curve) |
175 | ddivSource | enum : DDivSource | Forecast if any of the dividends prior to expiry are forecast rather than announced |
176 | symbolRatio | float | underlier price ratio (usually 1.0 or a multi-hedge option price ratio; if one exists) |
177 | exType | enum : ExerciseType | exercise type (American or European) |
178 | modelType | enum : CalcModelType | option pricing model used for price calcs (Normal, LogNormal, etc.) |
179 | priceType | enum : CalcPriceType | Equity has independent sdiv and rate, Future has sdiv = rate |
180 | earnCnt | float | number of qualifying earnings events prior to expiration [can be fractional] (from StockEarningsCalendar) |
181 | earnCntAdj | float | number of qualifying earnings events prior to expiration [adjusted] (from StockEarningsCalendar + LiveSurfaceTerm) |
182 | moneynessType | enum : MoneynessType | moneyness (xAxis) convention |
183 | priceQuoteType | enum : PriceQuoteType | Price or Vol |
184 | atmVolHist | float | historical realized volatility (includes eMoveHist x earnCntAdj adjustment). Note that this is the default atmVol if no implied markets existed previous day. |
185 | atmCenHist | float | censored (earnings events removed) historical realized volatility. Trailing periods is 2x forward time to expiration. From HistoricalVolatility(windowType=hlCen).mv_nnn |
186 | uBetaHist | float | beta (this underlier vs basis underlier; T + 1 week) |
187 | eMove | float | implied earnings move (from LiveSurfaceTerm) |
188 | eMoveHist | float | historical earnings move (avg of trailing 8 moves). From StockEarningsCalendar.eMoveHist |
189 | minXAxis | float | minimum xAxis value; left most point with a valid supporting strike |
190 | maxXAxis | float | maximum xAxis value; right most point with a valid supporting strike |
191 | synSpot | float | synthetic spot price (future style pricing) |
192 | synCarry | float | synthetic carry rate (future style pricing) |
193 | uPrcRatio | double | uPrcAdj = uPrc * uPrcRatioFit |
194 | pWidth | float | minimum mkt premium width |
195 | vWidth | float | minimum mkt volatility width |
196 | cCnt | ushort | num call strikes in base fit |
197 | pCnt | ushort | num put strikes in base fit |
198 | hasBracketMin | enum : YesNo | |
199 | hasMinPoint | enum : YesNo | |
200 | hasXMultABFit | enum : YesNo | |
201 | xMultABFitError | double | |
202 | hasSkewMultFit | enum : YesNo | |
203 | skewMultFitError | double | |
204 | cBidMiss | byte | number of call bid violations (surface outside the market) |
205 | cAskMiss | byte | number of call ask violations (surface outside the market) |
206 | pBidMiss | byte | number of put bid violations |
207 | pAskMiss | byte | number of put ask violations |
208 | fitScore | float | |
209 | cumFitScore | float | |
212 | numPrintsDD | int | cpXDe < -0.45 |
213 | avgPrtErrDD | float | avg: prtPrc - surfacePrc (AUTO ONLY) |
214 | stdPrtErrDD | float | std: prtPrc - surfacePrc (AUTO ONLY) |
215 | numPrintsDN | int | cpXDe: [-0.45, -0.15) |
216 | avgPrtErrDN | float | |
217 | stdPrtErrDN | float | |
218 | numPrintsAT | int | cpXDe: [-0.15, +0.15] |
219 | avgPrtErrAT | float | |
220 | stdPrtErrAT | float | |
221 | numPrintsUP | int | cpXDe: (+0.15, +0.45] |
222 | avgPrtErrUP | float | |
223 | stdPrtErrUP | float | |
224 | numPrintsDU | int | cpXDe > +0.45 |
225 | avgPrtErrDU | float | |
226 | stdPrtErrDU | float | |
210 | fitCounter | int | number of fit/count passes (current trade date / market open) |
150 | tradeableStatus | enum : TradeableStatus | indicates whether the surface is currently tradeable or not (all server surface integrity checks pass) |
227 | marketPhase | enum : MarketPhase | market phase this surface is from |
211 | surfaceFitResult | enum : SurfaceFitResult | |
153 | timestamp | DateTime |
REPEATING FIELDS
Residual
Field | Type | Comment |
---|---|---|
162 | x | float |
163 | y | float |
Get Schema API Call
- Python
- cUrl
import requests
# Replace with your desired MLINK URL
MLINK_PROD_URL = 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json'
# Replace with your MLINK API Key
API_KEY = 'XXXX-XXXX-XXXX-XXXX'
# Replace with your desired MsgType.
MSG_TYPE = 'LiveExpirySurface'
# Request Parameters for Get Schema Of The MsgType
params = {
#Required Parameters
"apiKey": API_KEY,
"cmd": 'getschema',
"msgType": MSG_TYPE,
}
response = requests.get(MLINK_PROD_URL, params=params)
curl -G 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json' \
--data-urlencode 'apiKey=XXXX-XXXX-XXXX-XXXX' \
--data-urlencode 'cmd=getschema' \
--data-urlencode 'msgType=LiveExpirySurface'
Get Msg API Call
- Python
- cUrl
import requests
# Replace with your desired MLINK URL
MLINK_PROD_URL = 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json'
# Replace with your MLINK API Key
API_KEY = 'XXXX-XXXX-XXXX-XXXX'
# Replace with your desired MsgType.
MSG_TYPE = 'LiveExpirySurface'
# Replace with your pkey value for getting the specific message desired
PKEY = 'ReplaceThisValueForTheQueryToWork'
# Replace with your desired view. A "|" separated list of views can be provided
# If no view is provided, all views will be returned.
VIEW = 'uPrc|uPrcDriver|iDays|years|rate|atmVol|atmCen|atmSlope|atmSkewYY|atmVResidual|atmSDiv|basisEKey|basisTimestamp|axisFUPrc|axisVolRT|xMult|xShift|skewMult|maxResidualErr|cpAdjA|cpAdjB|cpAdjC|cpAdjRefVol|ticker|fkey|uPrcDriverKey|uPrcDriverType|ddiv|ddivPv|ddivSource|symbolRatio|exType|modelType|priceType|earnCnt|earnCntAdj|moneynessType|priceQuoteType|atmVolHist|atmCenHist|uBetaHist|eMove|eMoveHist|minXAxis|maxXAxis|synSpot|synCarry|uPrcRatio|pWidth|vWidth|cCnt|pCnt|hasBracketMin|hasMinPoint|hasXMultABFit|xMultABFitError|hasSkewMultFit|skewMultFitError|cBidMiss|cAskMiss|pBidMiss|pAskMiss|fitScore|cumFitScore|numPrintsDD|avgPrtErrDD|stdPrtErrDD|numPrintsDN|avgPrtErrDN|stdPrtErrDN|numPrintsAT|avgPrtErrAT|stdPrtErrAT|numPrintsUP|avgPrtErrUP|stdPrtErrUP|numPrintsDU|avgPrtErrDU|stdPrtErrDU|fitCounter|tradeableStatus|marketPhase|surfaceFitResult|timestamp'
# Replace with your desired where clause.
# a string in the form "field1:eq:valuse" or "(field1:ne:value1 & field1:ne:value2)
# "WHERE" clauses can contain the following comparison symbols:
# :gt: is greater than
# :ge: is greater than or equal to
# :lt: is less than
# :le: is less than or equal to
# :eq: is equal
# :ne: is not equal
# %26 is an AND statement
# | is an OR statement
# :sw: is starts with
# :ew: is ends with
# :cv: is contains values
# :nv: is does not contain value
# :cb: is contained between (two dates for instance) separated by '$'
WHERE = ''
# Request Parameters for getmsg Of The MsgType
params = {
# Required Parameters
"apiKey": API_KEY,
"cmd": 'getmsg',
"pkey": PKEY,
"msgType": MSG_TYPE,
# Optional Parameters
"view": VIEW,
"where": WHERE
}
response = requests.get(MLINK_PROD_URL, params=params)
curl -G 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json' \
--data-urlencode 'apiKey=XXXX-XXXX-XXXX-XXXX' \
--data-urlencode 'cmd=getmsg' \
--data-urlencode 'pkey=ReplaceThisValueForTheQueryToWork' \
--data-urlencode 'msgType=LiveExpirySurface' \
--data-urlencode 'view=uPrc|uPrcDriver|iDays|years|rate|atmVol|atmCen|atmSlope|atmSkewYY|atmVResidual|atmSDiv|basisEKey|basisTimestamp|axisFUPrc|axisVolRT|xMult|xShift|skewMult|maxResidualErr|cpAdjA|cpAdjB|cpAdjC|cpAdjRefVol|ticker|fkey|uPrcDriverKey|uPrcDriverType|ddiv|ddivPv|ddivSource|symbolRatio|exType|modelType|priceType|earnCnt|earnCntAdj|moneynessType|priceQuoteType|atmVolHist|atmCenHist|uBetaHist|eMove|eMoveHist|minXAxis|maxXAxis|synSpot|synCarry|uPrcRatio|pWidth|vWidth|cCnt|pCnt|hasBracketMin|hasMinPoint|hasXMultABFit|xMultABFitError|hasSkewMultFit|skewMultFitError|cBidMiss|cAskMiss|pBidMiss|pAskMiss|fitScore|cumFitScore|numPrintsDD|avgPrtErrDD|stdPrtErrDD|numPrintsDN|avgPrtErrDN|stdPrtErrDN|numPrintsAT|avgPrtErrAT|stdPrtErrAT|numPrintsUP|avgPrtErrUP|stdPrtErrUP|numPrintsDU|avgPrtErrDU|stdPrtErrDU|fitCounter|tradeableStatus|marketPhase|surfaceFitResult|timestamp' \
--data-urlencode 'where='
Get Msgs API Call
- Python
- cUrl
import requests
# Replace with your desired MLINK URL
MLINK_PROD_URL = 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json'
# Replace with your MLINK API Key
API_KEY = 'XXXX-XXXX-XXXX-XXXX'
# Replace with your desired MsgType.
MSG_TYPE = 'LiveExpirySurface'
# Replace with your desired view. A "|" separated list of views can be provided
# If no view is provided, all views will be returned
VIEW = 'uPrc|uPrcDriver|iDays|years|rate|atmVol|atmCen|atmSlope|atmSkewYY|atmVResidual|atmSDiv|basisEKey|basisTimestamp|axisFUPrc|axisVolRT|xMult|xShift|skewMult|maxResidualErr|cpAdjA|cpAdjB|cpAdjC|cpAdjRefVol|ticker|fkey|uPrcDriverKey|uPrcDriverType|ddiv|ddivPv|ddivSource|symbolRatio|exType|modelType|priceType|earnCnt|earnCntAdj|moneynessType|priceQuoteType|atmVolHist|atmCenHist|uBetaHist|eMove|eMoveHist|minXAxis|maxXAxis|synSpot|synCarry|uPrcRatio|pWidth|vWidth|cCnt|pCnt|hasBracketMin|hasMinPoint|hasXMultABFit|xMultABFitError|hasSkewMultFit|skewMultFitError|cBidMiss|cAskMiss|pBidMiss|pAskMiss|fitScore|cumFitScore|numPrintsDD|avgPrtErrDD|stdPrtErrDD|numPrintsDN|avgPrtErrDN|stdPrtErrDN|numPrintsAT|avgPrtErrAT|stdPrtErrAT|numPrintsUP|avgPrtErrUP|stdPrtErrUP|numPrintsDU|avgPrtErrDU|stdPrtErrDU|fitCounter|tradeableStatus|marketPhase|surfaceFitResult|timestamp'
# Replace with your desired where clause.
# a string in the form "field1:eq:value" or "(field1:ne:value1 & field1:ne:value2)
# "WHERE" clauses can contain the following comparison symbols:
# :gt: is greater than
# :ge: is greater than or equal to
# :lt: is less than
# :le: is less than or equal to
# :eq: is equal
# :ne: is not equal
# %26 is an AND statement
# | is an OR statement
# :sw: is starts with
# :ew: is ends with
# :cv: is contains values
# :nv: is does not contain value
# :cb: is contained between (two dates for instance) separated by '$'
WHERE = ''
# Replace with your desired limit of how many messages you receive. The default limit is 500
LIMIT = 500
# Order clause eg. "(field1:DESC | field1:ASC | field2:DESC:ABS | field2:ASC:ABS" (default is unordered; default is faster)
ORDER = 'uPrc:ASC'
# Request Parameters for getmsgs Of The MsgType
params = {
# Required Parameters
"apiKey": API_KEY,
"cmd": 'getmsgs',
"msgType": MSG_TYPE,
# Optional Parameters
"view": VIEW,
"where": WHERE,
"limit": LIMIT,
"order": ORDER
}
response = requests.get(MLINK_PROD_URL, params=params)
curl -G 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json' \
--data-urlencode 'apiKey=XXXX-XXXX-XXXX-XXXX' \
--data-urlencode 'cmd=getmsgs' \
--data-urlencode 'msgType=LiveExpirySurface' \
--data-urlencode 'view=uPrc|uPrcDriver|iDays|years|rate|atmVol|atmCen|atmSlope|atmSkewYY|atmVResidual|atmSDiv|basisEKey|basisTimestamp|axisFUPrc|axisVolRT|xMult|xShift|skewMult|maxResidualErr|cpAdjA|cpAdjB|cpAdjC|cpAdjRefVol|ticker|fkey|uPrcDriverKey|uPrcDriverType|ddiv|ddivPv|ddivSource|symbolRatio|exType|modelType|priceType|earnCnt|earnCntAdj|moneynessType|priceQuoteType|atmVolHist|atmCenHist|uBetaHist|eMove|eMoveHist|minXAxis|maxXAxis|synSpot|synCarry|uPrcRatio|pWidth|vWidth|cCnt|pCnt|hasBracketMin|hasMinPoint|hasXMultABFit|xMultABFitError|hasSkewMultFit|skewMultFitError|cBidMiss|cAskMiss|pBidMiss|pAskMiss|fitScore|cumFitScore|numPrintsDD|avgPrtErrDD|stdPrtErrDD|numPrintsDN|avgPrtErrDN|stdPrtErrDN|numPrintsAT|avgPrtErrAT|stdPrtErrAT|numPrintsUP|avgPrtErrUP|stdPrtErrUP|numPrintsDU|avgPrtErrDU|stdPrtErrDU|fitCounter|tradeableStatus|marketPhase|surfaceFitResult|timestamp' \
--data-urlencode 'where=' \
--data-urlencode 'limit=500' \
--data-urlencode 'order=uPrc:ASC'
Get Aggregate API Call
- Python
- cUrl
import requests
# Replace with your desired MLINK URL
MLINK_PROD_URL = 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json'
# Replace with your MLINK API Key
API_KEY = 'XXXX-XXXX-XXXX-XXXX'
# Replace with your desired MsgType.
MSG_TYPE = 'LiveExpirySurface'
# Replace with fields you want to see aggregate values for. A "|" separated list of measures should be provided
MEASURE = 'uPrc|uPrcDriver|iDays|years|rate|atmVol|atmCen|atmSlope|atmSkewYY|atmVResidual|atmSDiv|basisEKey|basisTimestamp|axisFUPrc|axisVolRT|xMult|xShift|skewMult|maxResidualErr|cpAdjA|cpAdjB|cpAdjC|cpAdjRefVol|ticker|fkey|uPrcDriverKey|uPrcDriverType|ddiv|ddivPv|ddivSource|symbolRatio|exType|modelType|priceType|earnCnt|earnCntAdj|moneynessType|priceQuoteType|atmVolHist|atmCenHist|uBetaHist|eMove|eMoveHist|minXAxis|maxXAxis|synSpot|synCarry|uPrcRatio|pWidth|vWidth|cCnt|pCnt|hasBracketMin|hasMinPoint|hasXMultABFit|xMultABFitError|hasSkewMultFit|skewMultFitError|cBidMiss|cAskMiss|pBidMiss|pAskMiss|fitScore|cumFitScore|numPrintsDD|avgPrtErrDD|stdPrtErrDD|numPrintsDN|avgPrtErrDN|stdPrtErrDN|numPrintsAT|avgPrtErrAT|stdPrtErrAT|numPrintsUP|avgPrtErrUP|stdPrtErrUP|numPrintsDU|avgPrtErrDU|stdPrtErrDU|fitCounter|tradeableStatus|marketPhase|surfaceFitResult|timestamp'
# Replace with fields you want to see aggregated. A "|" separated list of fields should be provided
GROUP = 'uPrcDriverType|ddivSource|exType|modelType|priceType|moneynessType|priceQuoteType|hasBracketMin|hasMinPoint|hasXMultABFit|hasSkewMultFit|tradeableStatus|marketPhase|surfaceFitResult'
# Replace with your desired where clause.
# a string in the form "field1:eq:value" or "(field1:ne:value1 & field1:ne:value2)
# "WHERE" clauses can contain the following comparison symbols:
# :gt: is greater than
# :ge: is greater than or equal to
# :lt: is less than
# :le: is less than or equal to
# :eq: is equal
# :ne: is not equal
# %26 is an AND statement
# | is an OR statement
# :sw: is starts with
# :ew: is ends with
# :cv: is contains values
# :nv: is does not contain value
# :cb: is contained between (two dates for instance) separated by '$'
WHERE = ''
# Request Parameters for getaggregate Of The MsgType
params = {
# Required Parameters
"apiKey": API_KEY,
"cmd": 'getaggregate',
"msgType": MSG_TYPE,
"measure": MEASURE,
"group": GROUP,
# Optional Parameters
"where": WHERE,
}
response = requests.get(MLINK_PROD_URL, params=params)
curl -G 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json' \
--data-urlencode 'apiKey=XXXX-XXXX-XXXX-XXXX' \
--data-urlencode 'cmd=getaggregate' \
--data-urlencode 'msgType=LiveExpirySurface' \
--data-urlencode 'measure=uPrc|uPrcDriver|iDays|years|rate|atmVol|atmCen|atmSlope|atmSkewYY|atmVResidual|atmSDiv|basisEKey|basisTimestamp|axisFUPrc|axisVolRT|xMult|xShift|skewMult|maxResidualErr|cpAdjA|cpAdjB|cpAdjC|cpAdjRefVol|ticker|fkey|uPrcDriverKey|uPrcDriverType|ddiv|ddivPv|ddivSource|symbolRatio|exType|modelType|priceType|earnCnt|earnCntAdj|moneynessType|priceQuoteType|atmVolHist|atmCenHist|uBetaHist|eMove|eMoveHist|minXAxis|maxXAxis|synSpot|synCarry|uPrcRatio|pWidth|vWidth|cCnt|pCnt|hasBracketMin|hasMinPoint|hasXMultABFit|xMultABFitError|hasSkewMultFit|skewMultFitError|cBidMiss|cAskMiss|pBidMiss|pAskMiss|fitScore|cumFitScore|numPrintsDD|avgPrtErrDD|stdPrtErrDD|numPrintsDN|avgPrtErrDN|stdPrtErrDN|numPrintsAT|avgPrtErrAT|stdPrtErrAT|numPrintsUP|avgPrtErrUP|stdPrtErrUP|numPrintsDU|avgPrtErrDU|stdPrtErrDU|fitCounter|tradeableStatus|marketPhase|surfaceFitResult|timestamp' \
--data-urlencode 'group=uPrcDriverType|ddivSource|exType|modelType|priceType|moneynessType|priceQuoteType|hasBracketMin|hasMinPoint|hasXMultABFit|hasSkewMultFit|tradeableStatus|marketPhase|surfaceFitResult' \
--data-urlencode 'where='
Get Count API Call
- Python
- cUrl
import requests
# Replace with your desired MLINK URL
MLINK_PROD_URL = 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json'
# Replace with your MLINK API Key
API_KEY = 'XXXX-XXXX-XXXX-XXXX'
# Replace with your desired MsgType.
MSG_TYPE = 'LiveExpirySurface'
# Replace with your desired where clause.
# a string in the form "field1:eq:value" or "(field1:ne:value1 & field1:ne:value2)
# "WHERE" clauses can contain the following comparison symbols:
# :gt: is greater than
# :ge: is greater than or equal to
# :lt: is less than
# :le: is less than or equal to
# :eq: is equal
# :ne: is not equal
# %26 is an AND statement
# | is an OR statement
# :sw: is starts with
# :ew: is ends with
# :cv: is contains values
# :nv: is does not contain value
# :cb: is contained between (two dates for instance) separated by '$'
WHERE = ''
# Request Parameters for getCount Of The MsgType
params = {
# Required Parameters
"apiKey": API_KEY,
"cmd": 'getcount',
"msgType": MSG_TYPE,
# Optional Parameters
"where": WHERE,
}
response = requests.get(MLINK_PROD_URL, params=params)
curl -G 'https://mlink-live.nms.saturn.spiderrockconnect.com/rest/json' \
--data-urlencode 'apiKey=XXXX-XXXX-XXXX-XXXX' \
--data-urlencode 'cmd=getcount' \
--data-urlencode 'msgType=LiveExpirySurface' \
--data-urlencode 'where='