Skip to main content
Version: 8.6.10.4

Schema: CCodeDefinitionV3 (ID: 9115)

Commodity code (product code) definitions for all futures, and the ccode -> SpiderRock ticker map. Sourced from listing exchange product definitions. Also covers exchange and user-defined spreads, including spreads used as option underliers; SpiderRock uses a compact form of the exchange spread product ID as the ccode where no human-readable exchange ticker exists. A family head begins with '@'; no product key or uplink does.

Two links. Field 103 ticker is the LINE the product derives from: a single-name product names its equity line

(the EquityDefinitionV3 9106 row with the ISIN), an index product its index line (IndexDefinitionV3 9109), a

dividend product its parent's dividend line; a commodity, rate, FX or futures-on-futures product, and any product

its region cannot resolve, names itself. Never a @ head. Nothing hangs on an obligor. Field 250 familyHead is

the FAMILY: one venue's products on one underlier, @[underlier]-[venue]-FUT, a head a loader names after its

outright (@ES), or a declared family (the common US families: ES and MES under @ES, VXM and its TAS under

@VIXMIN), whose Primary is declared with it. Every product is its own complex; a head answers through the family's Primary.

DOMAIN TERMS ARE ATTACHED RECORDS on the same ccode pkey, not fields here: RepoTermsDefinitionV3 9245, TbaTermsDefinitionV3 9248, SwapTermsDefinitionV3 9251, ReceiptBasketDefinitionV3 9254.

READ symbolType TO CLASSIFY THE CCODE (CCode | RepoProduct | TbaContract | SwapProduct | CommodityProduct), never the presence of a terms record.

METADATA​

AttributeValue
Topic9100-product-def-core
MLink TokenFutureDefinition
MLink EndpointMLink-Live
SRSE ProductSRReference

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

BODY​

#FieldTypeDefault ValueComment
10=ccodeTickerKeythe futures product code; AT and TS identify the universe it belongs to
100micstring(4)ISO 10383 listing venue
103tickerTickerKeythe line the product derives from and settles into, else the product itself; never a @ head
106settleTimeenum : SettleTimeSettlement time: None; PM; AM
109positionLimitintmax contract limit
112tickValuefloat$NLV value of a single tick change in display premium (pointValue = tickValue / tickSize)
115pointValuefloat$NLV value of a single point change in display premium (pointValue = tickValue / tickSize)
118pointCurrencystring(3)ISO 4217 currency pointValue is denominated in
121priceScalingfloatunderlying price scale factor - products where the underlying quotes in cents will have 0.01
124underliersPerCnintthe product's standard contract size: shares, index units or currency units per contract
127underlierTypeenum : UnderlierTypewhat the product derives from: Equity, Index, Rate, Commodity, FX; Other = unclassified
190contractUnitenum : ContractUnitBBL, MMBTU, LBS, CTRCT, ...
196tradeCurrstring(3)unit the contract is quoted in: ISO 4217, or GBX where the venue quotes pence; money is pointCurrency
199settleCurrstring(3)ISO 4217 currency the contract settles in
202strikeCurrstring(3)unit strikes are quoted in: ISO 4217, or GBX for pence strikes
205priceFormatenum : PriceFormatthe quote convention for this product
130clearingCodestring(6)GMI/Clearing code
151displayPriceScalingfloatinternal display price scale factor override
154strikeScalingfloatinternal strike price scale factor override
157descriptionstring(48)product description
160marketCenterstring(48)market center, eg "ICE Market Type", "CME MarketGroup"
165tradingPeriodenum : TradingPeriodthe rotation rule that sets this product's trade date - TradingPeriodDefinitionV3 9015
170isHftTaxLiableenum : YesNoif Yes futures in this ccode grouping are liable for high frequency taxation and require hft throttling for maker algos
175hftTaxTriggerTimedoublevalue in seconds that any order activity (new, cancel, update) needs witheld for to prevent triggering hft (default .5 seconds per Italian tax)
185clearVenuestring(8)ClearVenueDefinitionV3 - where contracts in this ccode clear
900v3Sourceenum : V3SourceBridge = projected from a legacy record; Loader = written natively. None reads as Loader
163timestampDateTimewhen this row was last written
208scheduleGroupstring(6)-> ScheduleDefinitionV3 9057; empty = '*'
211marketSegmentIdstring(24)venue market segment id
214productGroupstring(6)venue product group (CME Asset)
217securityGroupstring(6)venue security group (CME SecurityGroup)
220settlementDaysbyteT+n of the current regime; 0 means T+0, never unknown
223flexTypeFlagflag : FlexTypeFlagFLEX series types that may be MINTED on this underlier; None = no FLEX. A FLEX order mints a root before any root exists
226bbgYrCodeenum : BbgYrCodeBloomberg year-code convention for this product; history and the FIX symbol builders read it
229hasOptionsenum : YesNoHINT: options list on this product; subscription filter only, never a pricing or risk branch
235liveRateKeyTickerKeyempty = $MRGN-<pointCurrency>-RATE
238minTickSizedoublethe product's tick: the smallest its contracts state
241roleenum : FamilyRole
244defaultRootTickerKey
247productKindenum : FuturesProductKindOutright, Physical, DividendAdjusted, TotalReturn, Dividend, Variance, Volatility, TradeAtSettlement, TradeAtMarker, BasisTradeAtClose (a BTIC quotes a basis to the index close; none of the last three is ever a Primary)
250familyHeadTickerKey

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

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

# 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 = 'mic|ticker|settleTime|positionLimit|tickValue|pointValue|pointCurrency|priceScaling|underliersPerCn|underlierType|contractUnit|tradeCurr|settleCurr|strikeCurr|priceFormat|clearingCode|displayPriceScaling|strikeScaling|description|marketCenter|tradingPeriod|isHftTaxLiable|hftTaxTriggerTime|clearVenue|v3Source|timestamp|scheduleGroup|marketSegmentId|productGroup|securityGroup|settlementDays|flexTypeFlag|bbgYrCode|hasOptions|liveRateKey|minTickSize|role|defaultRoot|productKind|familyHead'

# 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 = 'mic:eq:ExampleString'

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

# Replace with your desired view. A "|" separated list of views can be provided
# If no view is provided, all views will be returned
VIEW = 'mic|ticker|settleTime|positionLimit|tickValue|pointValue|pointCurrency|priceScaling|underliersPerCn|underlierType|contractUnit|tradeCurr|settleCurr|strikeCurr|priceFormat|clearingCode|displayPriceScaling|strikeScaling|description|marketCenter|tradingPeriod|isHftTaxLiable|hftTaxTriggerTime|clearVenue|v3Source|timestamp|scheduleGroup|marketSegmentId|productGroup|securityGroup|settlementDays|flexTypeFlag|bbgYrCode|hasOptions|liveRateKey|minTickSize|role|defaultRoot|productKind|familyHead'

# 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 = 'mic:eq:ExampleString'

# 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 = 'mic: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 = 'CCodeDefinitionV3'

# Replace with fields you want to see aggregate values for. A "|" separated list of measures should be provided
MEASURE = 'mic|ticker|settleTime|positionLimit|tickValue|pointValue|pointCurrency|priceScaling|underliersPerCn|underlierType|contractUnit|tradeCurr|settleCurr|strikeCurr|priceFormat|clearingCode|displayPriceScaling|strikeScaling|description|marketCenter|tradingPeriod|isHftTaxLiable|hftTaxTriggerTime|clearVenue|v3Source|timestamp|scheduleGroup|marketSegmentId|productGroup|securityGroup|settlementDays|flexTypeFlag|bbgYrCode|hasOptions|liveRateKey|minTickSize|role|defaultRoot|productKind|familyHead'

# Replace with fields you want to see aggregated. A "|" separated list of fields should be provided
GROUP = 'settleTime|underlierType|contractUnit|priceFormat|tradingPeriod|isHftTaxLiable|v3Source|bbgYrCode|hasOptions|role|productKind'

# 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 = 'mic:eq:ExampleString'

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

# 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 = 'mic:eq:ExampleString'

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