Skip to main content
Version: Upcoming

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

AttributeValue
Topic1000-analytics
MLink TokenSRMLinkAnalytics
SRSE ProductSRAnalytics

Note: The symbol = next to a field number indicates that it is a primary key.

BODY

#FieldTypeComment
10=ekeyExpiryKey
11=surfaceTypeenum : SurfaceCurveType
100uPrcdoubleeffective uPrc used for surface fitting
101uPrcDriverdoubleunderlier driver (mid-market)
154iDaysintinterest days to expiry
102yearsfloatvolatility time to expiration (in years)
103ratefloatterm interest rate to expiry (discount rate)
105atmVolfloatatm surface volatility (xAxis = 0)
155atmCenfloatcensored atm surface volatility (xAxis = 0)
106atmSlopefloatvolatility surface slope (dVol / dXAxis) (xAxis=0)
156atmSkewYYfloatskewFn @ xAxis = 0 (sticky surface static point)
157atmVResidualfloatvResidual @ xAxis = 0 (sticky surface static point)
158atmSDivfloatatm continous stock dividend (borrow rate) (xAxis = 0)
159basisEKeyExpiryKeyLiveBasisCurve.pkey.ekey record that defines BasisSkewFn below.
160basisTimestampDateTimeLiveBasisCurve.timestamp
108axisFUPrcfloataxis FwdUPrc (fwd underlying price used to compute xAxis)
109axisVolRTfloataxis VolRT value used to compute xAxis (usually equal to skewMult) (value at curve min point)
111xMultfloat
112xShiftfloat
110skewMultfloatsVol = skewMult * BasisSkewFn(xMult * (xAxis - xShift))
164maxResidualErrfloatlargest remain residual error (in premium points)
165cpAdjAfloatcpAdj = cpAdjA + cpXDe * cpAdjB + cpXDe * cpXDe * cpAdjC [cpAdj is either sdiv or uPrcRatio]
166cpAdjBfloat
167cpAdjCfloat
168cpAdjRefVolfloatcpXDe = 0.5 - BS_cDe(uPrc, strike, cpAdjRefVol, years, rate, sdiv=0)
169tickerTickerKeyunderlying stock key that this option expiration attaches to
170fkeyExpiryKeyunderlying future key (if any)
171uPrcDriverKeyExpiryKeyunderlier driver key
172uPrcDriverTypeenum : SpdrKeyTypeunderlier driver key type (stock or future)
173ddivfloat(expected) cumulative discrete dividend $ amounts prior to expiration
174ddivPvfloat(expected) cumulative npv of discrete dividend $ amounts prior to expiration (SR global rate curve)
175ddivSourceenum : DDivSourceForecast if any of the dividends prior to expiry are forecast rather than announced
176symbolRatiofloatunderlier price ratio (usually 1.0 or a multi-hedge option price ratio; if one exists)
177exTypeenum : ExerciseTypeexercise type (American or European)
178modelTypeenum : CalcModelTypeoption pricing model used for price calcs (Normal, LogNormal, etc.)
179priceTypeenum : CalcPriceTypeEquity has independent sdiv and rate, Future has sdiv = rate
180earnCntfloatnumber of qualifying earnings events prior to expiration [can be fractional] (from StockEarningsCalendar)
181earnCntAdjfloatnumber of qualifying earnings events prior to expiration [adjusted] (from StockEarningsCalendar + LiveSurfaceTerm)
182moneynessTypeenum : MoneynessTypemoneyness (xAxis) convention
183priceQuoteTypeenum : PriceQuoteTypePrice or Vol
184atmVolHistfloathistorical realized volatility (includes eMoveHist x earnCntAdj adjustment). Note that this is the default atmVol if no implied markets existed previous day.
185atmCenHistfloatcensored (earnings events removed) historical realized volatility. Trailing periods is 2x forward time to expiration. From HistoricalVolatility(windowType=hlCen).mv_nnn
186uBetaHistfloatbeta (this underlier vs basis underlier; T + 1 week)
187eMovefloatimplied earnings move (from LiveSurfaceTerm)
188eMoveHistfloathistorical earnings move (avg of trailing 8 moves). From StockEarningsCalendar.eMoveHist
189minXAxisfloatminimum xAxis value; left most point with a valid supporting strike
190maxXAxisfloatmaximum xAxis value; right most point with a valid supporting strike
191synSpotfloatsynthetic spot price (future style pricing)
192synCarryfloatsynthetic carry rate (future style pricing)
193uPrcRatiodoubleuPrcAdj = uPrc * uPrcRatioFit
194pWidthfloatminimum mkt premium width
195vWidthfloatminimum mkt volatility width
196cCntushortnum call strikes in base fit
197pCntushortnum put strikes in base fit
198hasBracketMinenum : YesNo
199hasMinPointenum : YesNo
200hasXMultABFitenum : YesNo
201xMultABFitErrordouble
202hasSkewMultFitenum : YesNo
203skewMultFitErrordouble
204cBidMissbytenumber of call bid violations (surface outside the market)
205cAskMissbytenumber of call ask violations (surface outside the market)
206pBidMissbytenumber of put bid violations
207pAskMissbytenumber of put ask violations
208fitScorefloat
209cumFitScorefloat
212numPrintsDDintcpXDe < -0.45
213avgPrtErrDDfloatavg: prtPrc - surfacePrc (AUTO ONLY)
214stdPrtErrDDfloatstd: prtPrc - surfacePrc (AUTO ONLY)
215numPrintsDNintcpXDe: [-0.45, -0.15)
216avgPrtErrDNfloat
217stdPrtErrDNfloat
218numPrintsATintcpXDe: [-0.15, +0.15]
219avgPrtErrATfloat
220stdPrtErrATfloat
221numPrintsUPintcpXDe: (+0.15, +0.45]
222avgPrtErrUPfloat
223stdPrtErrUPfloat
224numPrintsDUintcpXDe > +0.45
225avgPrtErrDUfloat
226stdPrtErrDUfloat
210fitCounterintnumber of fit/count passes (current trade date / market open)
150tradeableStatusenum : TradeableStatusindicates whether the surface is currently tradeable or not (all server surface integrity checks pass)
227marketPhaseenum : MarketPhasemarket phase this surface is from
211surfaceFitResultenum : SurfaceFitResult
153timestampDateTime

REPEATING FIELDS

Residual

FieldTypeComment
162xfloat
163yfloat

Get Schema API Call

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)

Get Msg API Call

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)

Get Msgs API Call

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)

Get Aggregate API Call

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)

Get Count API Call

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)