CME Smart Stream on GCP JSON

With CME Smart Stream on Google Cloud Platform (GCP), clients can access real-time CME Group market data feeds through native Google Cloud Platform services. CME Smart Stream on Google Cloud Platform (GCP) supports JavaScript Object Notation (JSON) formatted futures and options data, allowing customers to use an easy, low-cost, and highly scalable format to drive their business. Data available in this universal format includes top of book information, second market level depth (i.e., second best bid and offer), trade execution, and product statistics including settlement, total daily volume, and open interest.

This page provides an overview of CME Smart Stream on GCP JSON technical impacts. CME Smart Stream on GCP leverages Google Cloud Pub/Sub technology for market data distribution. For complete details regarding Google Cloud Pub/Sub, refer to Google Cloud Pub/Sub documentation. 

CME Smart Stream on GCP also offers Simple Binary Encoded (SBE) data. For more information, refer to the CME Smart Stream on GCP SBE impact documentation.

Contents

Testing and Certification

The following section outlines testing and certification for GCP.

Certification

Certification is not required for CME Smart Stream on GCP JSON.

CME Globex Test Environments

The New Release test environment allows product and new functionality testing prior to release in production. Use the New Release environment to perform:

  • New product testing

  • Development testing on new functionality


The New Release test environment has lower data rates than production.

Summary of Impacts

The following market data is published in JSON format via the Google Cloud Pub/Sub:

  • Top of Book (TOB)

  • Level 2 Order Book (LVL 2)

  • Market Statistics (OI, Settlement and Traded Volume)

  • Time and Sales (Trade Information)

Market Data Offerings via Google Cloud

JSON CME Smart Stream on GCP supports CME Globex sourced products from the following Designated Contract Markets (DCM):

  • CME

  • CBOT

  • COMEX

  • NYMEX

  • GME

Google Cloud Pub/Sub Processing Overview 

This section provides an overview of CME MDP processing for Google Cloud Pub/Sub. For complete details regarding Google Cloud Pub/Sub technology, refer to Google's online Pub/Sub documentation. For Pub/Sub libraries, refer to Google’s Pub/Sub Client Libraries. Common GCP SDK Pub/Sub processing concepts include the following:

Terminology

  • Topic: A named resource to which messages are sent by a publisher (CME Group).

  • Subscription: A named resource representing the stream of messages from a single, specific topic, to be delivered to the subscribing application (client system). 

  • Message: The combination of Google data and CME SBE data sent to a topic and delivered to subscribers.  

CME MDP on Google Cloud Pub/Sub Message Flow

The following diagram outlines the Publisher (CME Group) relationship with the Subscriber (client system) for Google Cloud Pub/Sub technology.   

  1. CME Group creates a topic in the Cloud Pub/Sub service and sends messages to the topic. To process CME MDP on Google Cloud Pub/Sub, client systems must subscribe to a topic to receive data. The Google Cloud Pub/Sub message will contain CME Group messages.

  2. Message store ensures that published messages are retained on behalf of subscriptions.

  3. Cloud Pub/Sub forwards messages from a topic to each individual subscription. Each subscription receives messages by pulling them from the service. For CME MDP on Cloud Pub/Sub there are four types of topics for a given product group that client systems can subscribe to:
    Top of Book Topic - Provides a 1-deep Market by Price (MBP) book for an instrument.
    2-Level Book Topic - Provides a 2-deep Market by Price (MBP) book for an instrument.
    Market Stats Topic - Includes Open Interest, Settlement and Traded Volume.
    Trade Information Topic - Provides trade updates for an instrument.

  4. The subscriber receives pending messages from its subscription and acknowledges each one to the Cloud Pub/Sub service. A message contains JSON messages.

  5. When a message is acknowledged by the subscriber it is removed from the subscription's message queue.

Message Structure

The following section outlines the CME MDP messaging within a Google Cloud Pub/Sub Message structure.  

CME MDP Included Data

The Google Cloud Pub/Sub data field provides the full CME JSON message. The following diagram outlines CME data within a Google Cloud Pub/Sub message:

CME MDP Included Attributes 

In addition to the full CME Group JSON message, Smart Stream on GCP provides the following quick access data in the Google Cloud Pub/Sub attributes field:

SendingTime - Sending time from CME before the message is sent to GCP.

Message Ordering

Google Cloud Pub/Sub does not guarantee message order. Therefore, the client system must ensure the correct order for processing messages via the SendingTime attribute. 

Project Names and Topic Naming Methodology

CME Smart Stream JSON on Google Cloud Platform (GCP) has data per product. Project names have the following methodology:

Project Name

Type

Environment

Project Name

Type

Environment

cmegroup-marketdata-js-nr

Futures

New Release

cmegroup-marketdata-js-opt-nr

Options

New Release

cmegroup-marketdata-js

Futures

Production

cmegroup-marketdata-js-opt

Options

Production

Topic names have the following methodology:  

Name

Valid Values

Description

Name

Valid Values

Description

EnvType

PROD = Production

NR = New Release

CERT = Certification 

Environment

ServiceName

SSCL = Smart Stream Cloud Link

Cloud service provider

Provider

GCP = Google Cloud Products

Name of the cloud provider

ContentType

MD = Market Data

Type of content

Content Timing

RT = Real Time

Time data is sent

ContentOwner

CMEG = CME Group Owned Market Data

DME = Gulf Mercantile Exchange

Reference to exchange

Format

JSON = JavaScript Object Notation

Feed Type

Version

v01000

The version of the message format for a topic

Topic Type

TOB = Top of Book

LVL2 = Top Two Book Levels

TRD = Time and Sales (Trade Information)

STAT = Statistic Information 

Defines the type of topic

SecurityExchange

Security Exchange:

XCBT = Chicago Board of Trade
XCME = Chicago Mercantile Exchange
XNYM = New York Mercantile Exchange
XCEC= COMEX (Commodities Exchange Center)
DUMX = Gulf Mercantile Exchange

Security Exchange for JSON Topics

Product Group

Examples:

CL = Crude Oil Futures 

Product Group. JSON topics only

Product and instrument referential data for CME Smart Stream on GCP can be obtained via CME Reference Data API.

Topic Name Examples

The following are topic name examples:

  • Production JSON 30-Year U.S. Treasury Bond Futures Top of Book Information: PROD.SSCL.GCP.MD.RT.CMEG.JSON.v01000.TOB.XCBT.ZB

  • New Release JSON Crude Oil Futures Trade Information: NR.SSCL.GCP.MD.RT.CMEG.JSON.v01000.TRD.XNYM.CL

Additional Product and Instrument Information

Product and instrument referential data for CME Smart Stream on GCP can be obtained via CME Reference Data API.

Message Specification 

The following section outlines the full message specification for Smart Stream JSON messages.

Trade Message

This message is generated for the Trade topic.

Key

Attribute

Type

Enumeration

Description

Key

Attribute

Type

Enumeration

Description

1

header

messageType

String

TS

Denotes trade summary message.

2

header

sentTime

String

ex "2020-05-11T11:22:12.208530531"

CME MDP gateway sends the message (UTC).

Format: "yyyy-MM-dd'T'HH:mm:ss.n"

3

header

version

String

1.0

API version

4

payload

lastUpdateTime

String



ex "2020-05-11T11:22:12.208530531"

Last update  processing time (UTC). 

Format: "yyyy-MM-dd'T'HH:mm:ss.n"

5

payload.tradeSummary

aggressorSide

short 

0 = No aggressor

1 = Buy

2 = Sell

255 = Null Value

Indicates which side is aggressor of the trade. If there is a zero value present, then there is no aggressor.

Trades without aggressors occur:

  • at Market Open

  • after a Pre-Open or after a Pause

  • when the event includes customer order participation in a trade with a CME Globex-generated implied bid or offer.

6

payload.tradeSummary

mdTradeEntryId

uInt32



Common Trade ID that links each trade execution.

7

payload.tradeSummary

tradePrice

PRICE



Trade price.

8

payload.tradeSummary

tradeQty

int32



Total traded quantity.

9

payload.tradeSummary

tradeOrderCount

int32



Identifies the total number of non-implied orders per instrument that participated in a match event.

10

payload.tradeSummary

tradeUpdateAction

String

NEW

CHANGE

DELETE

Trade market data update action.

11

payload.tradeSummary.orderQty

orderId

int32



Unique ID assigned by CME Globex to identify orders.

12

payload.tradeSummary.orderQty

lastOrdQty

int32



Quantity of trade

13

payload.Instrument

definitionSource

String

E = exchange defined

U = user defined

Identifies user-defined instruments. If the tag is not present, the instrument is not user-defined.

14

payload.Instrument

exchangeMic

String

XCBT = Chicago Board of Trade
XCME = Chicago Mercantile Exchange
XNYM = New York Mercantile Exchange
XCEC= COMEX (Commodities Exchange Center)
DUMX = Gulf Mercantile Exchange

Exchange used to identify a security.

15

payload.Instrument

id

int32



Unique instrument ID as qualified by the exchange per market segment.

The unique instrument ID value will not be reused until the next trade date following an instrument expiration or deletion.

16

payload.Instrument

marketSegmentId

int32



Identifies the market segment.

Populated for all CME Globex instruments.

17

payload.Instrument

periodCode

String 

ex "202106"

This field provides the calendar month reflected in the instrument symbol. Format YYYYMM (e.g., 201912) 

For futures spreads, this field contains the first leg's calendar month reflected in the instrument symbol.

18

payload.Instrument

productCode

String



String field that indicates the underlying asset code (Product Code). Example: SR1 (SOFR), ES (E-Minis).

19

payload.Instrument

productType

String

FUT = Future or Future Spread

Product Type

20

payload.Instrument

productGroup

String



Product Group Code.

21

payload.Instrument

symbol

String

e.g. ‘6EN2 P1220’, 6AZ4

Instrument Name or Symbol.

22

payload.Instrument

PutCallIndicator

INT

1 = Call

0 = Put

Indicates whether an option instrument is a put or call.

23

payload.Instrument

Strike

Price



Strike Price for an option instrument.

24

payload.Instrument

UnderlyingSymbol

String



Underlying Instrument Symbol (Contract Name) * this value will be the same as that contained in Leg Instrument's Security Definition Tag 55-Symbol.



Book Message

This message is generated for top of book and level 2 book topics.

Key

Attribute

Type

Enumeration

Description

Key

Attribute

Type

Enumeration

Description

1

header

messageType

String

OBTS = top of book

LVL2 = level 2 book depth

Denotes trade book message

2

header

sentTime

String



ex "2020-05-11T11:22:12.208530531"

Time CME MDP gateway sends the message (UTC).

Format: "yyyy-MM-dd'T'HH:mm:ss.n"

3

header

version

String



API version

4

payload

tradingStatus

String

2=Trading Halt

4=Close

15=New Price Indication

17=Ready To Trade (start of session)

18=Not Available For Trading

20=Unknown or Invalid

21=Pre-Open

24=Pre-Cross

25=Cross

26=Post Close

103=No Change           

Identifies the trading status applicable to the instrument or product group.

5

payload.Instrument

definitionSource

String

E = exchange-defined

U = user-defined

Identifies user-defined instruments. If the tag is not present, the instrument is not user-defined.

6

payload.Instrument

exchangeMic

String

XCBT = Chicago Board of Trade
XCME = Chicago Mercantile Exchange
XNYM = New York Mercantile Exchange
XCEC= COMEX (Commodities Exchange Center)
DUMX = Gulf Mercantile Exchange

Exchange used to identify a security.

7

payload.Instrument

marketSegmentId

int32



Identifies the market segment.

Populated for all CME Globex instruments.

8

payload.instrument

periodCode

String

ex "202106"

The calendar month reflected in the instrument symbol.

For futures spreads, this field contains the first leg's calendar month reflected in the instrument symbol.

9

payload.instrument

productCode

String



An exchange-specific code assigned to a group of related securities, which are concurrently affected by market events.

10

payload.instrument

productGroup

String



Product group

11

payload.instrument

productType

String

FUT = Future or Future Spread

Product type

12

payload.instrument

symbol

String



Instrument Name or Symbol.

13

payload.askLevel

lastUpdateTime

String



ex "2020-05-11T11:22:12.208530531"

Last update time for ask price

Format: "yyyy-MM-dd'T'HH:mm:ss.n"

14

payload.askLevel

orderCnt

int32



Aggregate number of orders at the given price level.

15

payload.askLevel

price

long



Price of the MD Entry. 

16

payload.askLevel

qty

int32



Order quantity.

17

payload.bidLevel

lastUpdateTime

String

ex "2020-05-11T11:22:12.208530531"

Last update time for bid price.

Format: "yyyy-MM-dd'T'HH:mm:ss.n"

18

payload.bidLevel

orderCnt

int32



Aggregate number of orders at the given price level.

19

payload.bidLevel

price

long



Price of the MD Entry. 

20

payload.bidLevel

qty

int32



Order quantity

21

payload.Instrument

PutCallIndicator

INT

1 = Call

0 = Put

Indicates whether an option instrument is a put or call.

22

payload.Instrument

Strike

Price



Strike Price for an option instrument.

23

payload.Instrument

UnderlyingSymbol

String



Underlying Instrument Symbol (Contract Name) * this value will be the same as that contained in Leg Instrument's Security Definition Tag 55-Symbol.



Statistic Message

This message is generated for statistic topics.

See CME Group Settlements for more information.

Key

Attribute

Type

Enumeration

Description

Key

Attribute

Type

Enumeration

Description

1

header

messageType

String

TSTAT

Denotes statistic message.

2

header

sentTime

String

ex "2020-05-11T11:22:12.208530531"

Time CME MDP gateway sends the message (UTC).

Format: "yyyy-MM-dd'T'HH:mm:ss.n"

3

header

version

String



API version

4

payload

lastUpdateTime

long

ex "2020-05-11T11:22:12.208530531"

Last update  processing time (UTC). 

Format: "yyyy-MM-dd'T'HH:mm:ss.n"

5

payload.tradeStatistics

settlementPrice

PRICENULL



Settlement price.

6

payload.tradeStatistics

settlementPriceDate

String

ex "2020-05-13"

Date of trade session corresponding to a statistic entry. 

Format: "YYYY-MM-DD"

7

payload.tradeStatistics

settlementPriceTimestamp

String 

ex "2020-05-11T11:22:12.208530531"

Time of trade session corresponding to a statistic entry. 

Format: "yyyy-MM-dd'T'HH:mm:ss.n"

8

payload.tradeStatistics

settlementFinal

boolean



Final settlement price

9

payload.tradeStatistics

settlementActual

boolean



Actual settlement price

10

payload.tradeStatistics

settlementRounded

boolean



Rounded settlement price

11

payload.tradeStatistics

openInterest

int32



The total open interest for the market at the close of the prior trading session.

12

payload.tradeStatistics

openInterestDate

String 

ex "2020-05-13"

Open interest trade date

Format: "YYYY-MM-DD"

13

payload.tradeStatistics

openInterestTimestamp

String 

ex "2020-05-11T11:22:12.208530531"

Open interest update time.

14

payload.tradeStatistics

clearedVolume

int32



Cleared volume quantity.

15

payload.tradeStatistics

clearedVolumeDate

String



Cleared volume date.

16

payload.tradeStatistics

clearedVolumeTimestamp

String



Cleared volume time.

17

payload.Instrument

definitionSource

String

E = exchange-defined

U = user-defined

Identifies user-defined instruments. If the tag is not present, the instrument is not user-defined.

18

payload.Instrument

exchangeMic

String

XCBT = Chicago Board of Trade
XCME = Chicago Mercantile Exchange
XNYM = New York Mercantile Exchange
XCEC= COMEX (Commodities Exchange Center)
DUMX = Gulf Mercantile Exchange

Exchange used to identify a security.

19

payload.Instrument

id

int



Unique instrument ID as qualified by the exchange per market segment.

The unique instrument ID value will not be reused until the next trade date following an instrument expiration or deletion.

20

payload.Instrument

marketSegmentId

int



Identifies the market segment.

Populated for all CME Globex instruments.

21

payload.Instrument

periodCode

String 

ex "202106"

The calendar month reflected in the instrument symbol. Format YYYYMM (e.g., 201912) 

For futures spreads, this field contains the first leg's calendar month reflected in the instrument symbol.

22

payload.Instrument

productCode

String



String field that indicates the underlying asset code (Product Code). Example: SR1 (SOFR), ES (E-Minis).

23

payload.Instrument

productType

String

FUT = Future or Future Spread

Product Type.

24

payload.Instrument

productGroup

String



Product Group Code.

25

payload.Instrument

symbol

String

e.g. ‘6EN2 P1220’, 6AZ4

Instrument Name or Symbol.

26

payload.Instrument

PutCallIndicator

INT

1 = Call

0 = Put

Indicates whether an option instrument is a put or call.

27

payload.Instrument

Strike

Price



Strike Price for an option instrument.

28

payload.Instrument

UnderlyingSymbol

String



Underlying Instrument Symbol (Contract Name) * this value will be the same as that contained in Leg Instrument's Security Definition Tag 55-Symbol.

Contact Information

For technical development support, contact Certification Support for Electronic Trading (CSET).

For production requests, please contact the Global Command Center (GCC).

For all other inquiries, please contact Global Account Management (GAM).






How was your Client Systems Wiki Experience? Submit Feedback

Copyright © 2024 CME Group Inc. All rights reserved.