Skip to main content
Version: Upcoming

Schema: LiveSurfaceComposite (ID: 1037)

METADATA

AttributeValue
Topic1000-analytics
MLink TokenInternal
MLink EndpointMLink-Live
SRSE ProductSRAnalytics

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

BODY

#FieldTypeDefault ValueComment
10=ekeyExpiryKey
100tickerTickerKeyunderlying stock key that this option expiration attaches to
103fkeyExpiryKeyunderlying future key (if any)
106uPrcdoubleeffective uPrc used for surface fitting
109uBiddoubleeffective bid
112uAskdoubleeffective ask
115yearsfloattime to expiration (in years)
118ratefloataverage interest rate to expiration (SR global rate curve)
121ddivfloat(expected) cumulative discrete dividend $ amounts prior to expiration
122ddivPvfloat(expected) cumulative npv of discrete dividend $ amounts prior to expiration (SR global rate curve)
124symbolRatiofloatunderlier price ratio (usually 1.0 or a multi-hedge option price ratio; if one exists)
127exTypeenum : ExerciseTypeexercise type (American or European)
130modelTypeenum : CalcModelTypeoption pricing model used for price calcs (Normal, LogNormal, etc.)
133prcFrameworkenum : PricingFrameworkSpot (Equity), Forward (Cash), Future, Physical
136earnCntfloatnumber of qualifying earnings events prior to expiration [can be fractional] (from StockEarningsCalendar)
139earnCntAdjfloatnumber of qualifying earnings events prior to expiration [adjusted] (from StockEarningsCalendar + LiveSurfaceTerm)
142axisVolRTfloataxis volatility x sqrt(years) (used to compute xAxis)
145axisFUPrcfloataxis FwdUPrc (fwd underlying price used to compute xAxis)
146synSpotdoubleSynthetic spot price (market-derived spot when the underlying is not a traded instrument)
147synCarrydoubleSynthetic carry rate; corresponds to the relationship between uPrc and synSpot (set when the underlying is not a traded instrument)
148atmStrikefloatsynthetic strike with cPrice = pPrice
151moneynessTypeenum : MoneynessTypemoneyness (xAxis) convention
154underlierModeenum : UnderlierModeunderlier pricing mode (None=use spot/stock market; FrontMonth=use front month future market * uPrcRatio; Actual = use actual underlier future market)
157cpAdjTypeenum : CPAdjTypeadjustment used to align calls/puts (if any)
160priceQuoteTypeenum : PriceQuoteTypePrice or Vol
163atmVolfloatatm vol (xAxis = 0)
166atmCenfloatatm vol (xAxis = 0) (eMove/earnCntAdj censored)
169atmVolHistfloathistorical realized volatility (includes eMoveHist x earnCntAdj adjustment). Note that this is the default atmVol if no implied markets existed previous day.
172atmCenHistfloatcensored (earnings events removed) historical realized volatility. Trailing periods is 2x forward time to expiration. From HistoricalVolatility(windowType=hlCen).mv_nnn
175minAtmVolfloatminimum estimated atm vol
178maxAtmVolfloatmaximum estimated atm vol
181minCPAdjValdoubleminimum CP adjust value (sdiv or uPrcRatio)
184maxCPAdjValdoublemaximum CP adjust value (sdiv or uPrcRatio)
193iEMovefloatimplied earnings move (from LiveSurfaceTerm)
196hEMovefloathistorical earnings move (avg of trailing 8 moves). From StockEarningsCalendar.eMoveHist
200uPrcRatiodoubleuPrc = uPrcDriver * uPrcRatio
205sdivfloatstock dividend (borrow rate)
211atmFixedMovefloatfixed strike atm move from prior period
214atmPhifloatsurface phi @ xAxis = 0
215atmRhofloatsurface rho @ xAxis = 0
217atmVegafloatsurface vega @ xAxis = 0
220slopefloatvolatility surface slope (dVol / dXAxis) @ ATM (xAxis=0)
223varSwapFVfloatvariance swap fair value (estimated by numerical integration over OTM price surface)
226gridTypeenum : GridTypegridType defines skew curve coeff points + spline type
229knotShiftfloatconstant that should be added to each base knot location [-3.0 - +3.0]
232minXAxisfloatminimum xAxis value; xAxis values to the left extrapolate horizontally
235maxXAxisfloatmaximum xAxis value; xAxis values to the right extrapolate horizontally
238minCurvValuefloatminimum curvature (2nd derivative) of skew curve (can be negative if curve is not strictly convex)
241minCurvXAxisfloatxAxis of minimum curvature point
244maxCurvValuefloatmaximum curvature (2nd derivative) of skew curve
247maxCurvXAxisfloatxAxis of maximum curvature point
250skewMinXfloatxAxis = (effStrike / effAxisFUPrc - 1.0) / axisVolRT; effStrike = strike * strikeRatio; effAxisFUPrc = axisFUPrc * symbolRatio
253skewMinYfloatskewMinX / skewMinY are the skew curve minimum point (usually a positive x value and a negative y value)
256surfaceFitenum : SurfaceFit
259skewC00floatcurve coeff[0]
262skewC01floatcurve coeff[1]
265skewC02float
268skewC03float
271skewC04float
274skewC05float
277skewC06float
280skewC07float
283skewC08float
286skewC09float
289skewC10float
292skewC11float
295skewC12float
298skewC13float
301skewC14float
304skewC15float
307skewC16float
310skewC17float
313skewC18float
316skewC19float
319skewC20float
322skewC21float
325skewC22float
328skewC23float
331skewC24float
334skewC25float
337skewC26float
340skewC27float
343skewC28float
346ivAdjD07floatxAxis = -5.0
349ivAdjD06floatxAxis = -4.0
352ivAdjD05floatxAxis = -3.0
355ivAdjD04floatxAxis = -2.0
358ivAdjD03floatxAxis = -1.5
361ivAdjD02floatxAxis = -1.0
364ivAdjD01floatxAxis = -0.5
367ivAdjU01floatxAxis = +0.5
370ivAdjU02floatxAxis = +1.0
373ivAdjU03floatxAxis = +1.5
376ivAdjU04floatxAxis = +2.0
379ivAdjU05floatxAxis = +3.0
382ivAdjU06floatxAxis = +4.0
385ivAdjU07floatxAxis = +5.0
388cpAdjD04floatxAxis = -4.0
391cpAdjD03floatxAxis = -3.0
394cpAdjD02floatxAxis = -2.0
397cpAdjD01floatxAxis = -1.0
400cpAdjU01floatxAxis = +1.0
403cpAdjU02floatxAxis = +2.0
406cpAdjU03floatxAxis = +3.0
409cpAdjU04floatxAxis = +4.0
412pwidthfloatminimum mkt premium width
415vwidthfloatminimum mkt volatility width
418cCntbytenum call strikes in base fit
421pCntbytenum put strikes in base fit
424cBidMissbytenumber of call bid violations (surface outside the market)
427cAskMissbytenumber of call ask violations (surface outside the market)
430pBidMissbytenumber of put bid violations
433pAskMissbytenumber of put ask violations
436fitAvgErrfloataverage error (sPrc - midPrc)
439fitAvgAbsErrfloataverage absolute error (sPrc - midPrc)
442fitMaxPrcErrfloatworst case surface premium violation
445fitErrXXfloatokey_xx of the option with the largest fit error in this expiration
448fitErrCPenum : CallPutokey_cp of the option with the largest fit error in this expiration
451fitErrDefloatdelta of fixErrXX
454fitErrBidfloatbid of the option with the largest fit error in this expiration
457fitErrAskfloatask of the option with the largest fit error in this expiration
460fitErrPrcfloatsurface prc of the option with the largest fit error in this expiration
463fitErrVolfloatsurface vol of the option with the largest fit error in this expiration
466tradingSessionenum : TradingSessiontrading session this surface is from
469tradeableStatusenum : TradeableStatusindicates whether the surface is currently tradeable or not (all server surface integrity checks pass)
472surfaceAdjResultenum : SurfaceAdjResult
475adjTimestampDateTime
478surfaceResultenum : SurfaceResult
481timestampDateTime

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 = 'LiveSurfaceComposite'

# 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 = 'LiveSurfaceComposite'

# 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 = 'ticker|fkey|uPrc|uBid|uAsk|years|rate|ddiv|ddivPv|symbolRatio|exType|modelType|prcFramework|earnCnt|earnCntAdj|axisVolRT|axisFUPrc|synSpot|synCarry|atmStrike|moneynessType|underlierMode|cpAdjType|priceQuoteType|atmVol|atmCen|atmVolHist|atmCenHist|minAtmVol|maxAtmVol|minCPAdjVal|maxCPAdjVal|iEMove|hEMove|uPrcRatio|sdiv|atmFixedMove|atmPhi|atmRho|atmVega|slope|varSwapFV|gridType|knotShift|minXAxis|maxXAxis|minCurvValue|minCurvXAxis|maxCurvValue|maxCurvXAxis|skewMinX|skewMinY|surfaceFit|skewC00|skewC01|skewC02|skewC03|skewC04|skewC05|skewC06|skewC07|skewC08|skewC09|skewC10|skewC11|skewC12|skewC13|skewC14|skewC15|skewC16|skewC17|skewC18|skewC19|skewC20|skewC21|skewC22|skewC23|skewC24|skewC25|skewC26|skewC27|skewC28|ivAdjD07|ivAdjD06|ivAdjD05|ivAdjD04|ivAdjD03|ivAdjD02|ivAdjD01|ivAdjU01|ivAdjU02|ivAdjU03|ivAdjU04|ivAdjU05|ivAdjU06|ivAdjU07|cpAdjD04|cpAdjD03|cpAdjD02|cpAdjD01|cpAdjU01|cpAdjU02|cpAdjU03|cpAdjU04|pwidth|vwidth|cCnt|pCnt|cBidMiss|cAskMiss|pBidMiss|pAskMiss|fitAvgErr|fitAvgAbsErr|fitMaxPrcErr|fitErrXX|fitErrCP|fitErrDe|fitErrBid|fitErrAsk|fitErrPrc|fitErrVol|tradingSession|tradeableStatus|surfaceAdjResult|adjTimestamp|surfaceResult|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 = 'LiveSurfaceComposite'

# Replace with your desired view. A "|" separated list of views can be provided
# If no view is provided, all views will be returned
VIEW = 'ticker|fkey|uPrc|uBid|uAsk|years|rate|ddiv|ddivPv|symbolRatio|exType|modelType|prcFramework|earnCnt|earnCntAdj|axisVolRT|axisFUPrc|synSpot|synCarry|atmStrike|moneynessType|underlierMode|cpAdjType|priceQuoteType|atmVol|atmCen|atmVolHist|atmCenHist|minAtmVol|maxAtmVol|minCPAdjVal|maxCPAdjVal|iEMove|hEMove|uPrcRatio|sdiv|atmFixedMove|atmPhi|atmRho|atmVega|slope|varSwapFV|gridType|knotShift|minXAxis|maxXAxis|minCurvValue|minCurvXAxis|maxCurvValue|maxCurvXAxis|skewMinX|skewMinY|surfaceFit|skewC00|skewC01|skewC02|skewC03|skewC04|skewC05|skewC06|skewC07|skewC08|skewC09|skewC10|skewC11|skewC12|skewC13|skewC14|skewC15|skewC16|skewC17|skewC18|skewC19|skewC20|skewC21|skewC22|skewC23|skewC24|skewC25|skewC26|skewC27|skewC28|ivAdjD07|ivAdjD06|ivAdjD05|ivAdjD04|ivAdjD03|ivAdjD02|ivAdjD01|ivAdjU01|ivAdjU02|ivAdjU03|ivAdjU04|ivAdjU05|ivAdjU06|ivAdjU07|cpAdjD04|cpAdjD03|cpAdjD02|cpAdjD01|cpAdjU01|cpAdjU02|cpAdjU03|cpAdjU04|pwidth|vwidth|cCnt|pCnt|cBidMiss|cAskMiss|pBidMiss|pAskMiss|fitAvgErr|fitAvgAbsErr|fitMaxPrcErr|fitErrXX|fitErrCP|fitErrDe|fitErrBid|fitErrAsk|fitErrPrc|fitErrVol|tradingSession|tradeableStatus|surfaceAdjResult|adjTimestamp|surfaceResult|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 = 'ticker: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 = 'LiveSurfaceComposite'

# Replace with fields you want to see aggregate values for. A "|" separated list of measures should be provided
MEASURE = 'ticker|fkey|uPrc|uBid|uAsk|years|rate|ddiv|ddivPv|symbolRatio|exType|modelType|prcFramework|earnCnt|earnCntAdj|axisVolRT|axisFUPrc|synSpot|synCarry|atmStrike|moneynessType|underlierMode|cpAdjType|priceQuoteType|atmVol|atmCen|atmVolHist|atmCenHist|minAtmVol|maxAtmVol|minCPAdjVal|maxCPAdjVal|iEMove|hEMove|uPrcRatio|sdiv|atmFixedMove|atmPhi|atmRho|atmVega|slope|varSwapFV|gridType|knotShift|minXAxis|maxXAxis|minCurvValue|minCurvXAxis|maxCurvValue|maxCurvXAxis|skewMinX|skewMinY|surfaceFit|skewC00|skewC01|skewC02|skewC03|skewC04|skewC05|skewC06|skewC07|skewC08|skewC09|skewC10|skewC11|skewC12|skewC13|skewC14|skewC15|skewC16|skewC17|skewC18|skewC19|skewC20|skewC21|skewC22|skewC23|skewC24|skewC25|skewC26|skewC27|skewC28|ivAdjD07|ivAdjD06|ivAdjD05|ivAdjD04|ivAdjD03|ivAdjD02|ivAdjD01|ivAdjU01|ivAdjU02|ivAdjU03|ivAdjU04|ivAdjU05|ivAdjU06|ivAdjU07|cpAdjD04|cpAdjD03|cpAdjD02|cpAdjD01|cpAdjU01|cpAdjU02|cpAdjU03|cpAdjU04|pwidth|vwidth|cCnt|pCnt|cBidMiss|cAskMiss|pBidMiss|pAskMiss|fitAvgErr|fitAvgAbsErr|fitMaxPrcErr|fitErrXX|fitErrCP|fitErrDe|fitErrBid|fitErrAsk|fitErrPrc|fitErrVol|tradingSession|tradeableStatus|surfaceAdjResult|adjTimestamp|surfaceResult|timestamp'

# Replace with fields you want to see aggregated. A "|" separated list of fields should be provided
GROUP = 'exType|modelType|prcFramework|moneynessType|underlierMode|cpAdjType|priceQuoteType|gridType|surfaceFit|fitErrCP|tradingSession|tradeableStatus|surfaceAdjResult|surfaceResult'

# 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 = 'LiveSurfaceComposite'

# 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)