Skip to end of banner
Go to start of banner

MDP 3.0 - SBE Decoding Example

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

This topic provides an example of a fully decoded of SBE message.

 

SBE Schema 

The following SBE Schema will be used for the SBE decoding example in the next section.

<?xml version="1.0" encoding="UTF-8" standalone="true"?>

<ns2:messageSchema xsi:schemaLocation="http://www.fixtradingcommunity.org/pg/file/fplpo/read/1196759/simple-binary-encoding-rc2xsd SimpleBinary-RC2.xsd" byteOrder="littleEndian" description="20210310" semanticVersion="FIX5SP2" version="9" id="1" package="mktdata" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns2="http://www.fixprotocol.org/ns/simple/1.0">

<types>

<type name="uInt32" description="uInt32" primitiveType="uint32"/>

<type name="Int32" description="int32" primitiveType="int32"/>

<type name="uInt64" description="uInt64" primitiveType="uint64"/>

<type description="MDUpdateActionNew" primitiveType="int8" name="MDUpdateActionNew" presence="constant">0</type>

<type description="MDEntryTypeLimits" primitiveType="char" name="MDEntryTypeLimits" presence="constant">g</type>

<composite description="Repeating group dimensions" semanticType="NumInGroup" name="groupSize">

<type primitiveType="uint16" name="blockLength"/>

<type primitiveType="uint8" name="numInGroup"/>

</composite>

<composite description="Optional Price with constant exponent -9" name="PRICENULL9" sinceVersion="9">

<type description="mantissa" primitiveType="int64" name="mantissa" presence="optional" nullValue="9223372036854775807"/>

<type description="exponent" primitiveType="int8" name="exponent" presence="constant">-9</type>

</composite>

<set name="MatchEventIndicator" encodingType="uInt8">

<choice description="1=Last trade message for the event, 0=Not last" name="LastTradeMsg">0</choice>

<choice description="1=Last electronic volume message, 0=Not last" name="LastVolumeMsg">1</choice>

<choice description="1=Last real quote message, 0=Not last" name="LastQuoteMsg">2</choice>

<choice description="1=Last statistics message, 0=Not last" name="LastStatsMsg">3</choice>

<choice description="1=Last implied quote message, 0=Not last" name="LastImpliedMsg">4</choice>

<choice description="1=Message is sent during recovery process" name="RecoveryMsg">5</choice>

<choice description="0=Reserved for future use" name="Reserved">6</choice>

<choice description="1=Last message for the event, 0=Not last" name="EndOfEvent">7</choice>

</set>

<types>

<ns2:message description="MDIncrementalRefreshLimitsBanding" id="50" semanticType="X" name="MDIncrementalRefreshLimitsBanding50" sinceVersion="9" blockLength="11">

<field description="Start of event processing time in number of nanoseconds since Unix epoch" id="60" semanticType="UTCTimestamp" name="TransactTime" offset="0" type="uInt64"/>

<field description="Bitmap field of eight Boolean type indicators reflecting the end of updates for a given Globex event" id="5799" semanticType="MultipleCharValue" name="MatchEventIndicator" offset="8" type="MatchEventIndicator"/>

<group description="Number of entries in Market Data message" id="268" name="NoMDEntries" blockLength="32" dimensionType="groupSize">

<field description="Upper price threshold for the instrument" id="1149" semanticType="Price" name="HighLimitPrice" offset="0" type="PRICENULL9"/>

<field description="Lower price threshold for the instrument" id="1148" semanticType="Price" name="LowLimitPrice" offset="8" type="PRICENULL9"/>

<field description="Differential static value for price banding" id="1143" semanticType="Price" name="MaxPriceVariation" offset="16" type="PRICENULL9"/>

<field description="Security ID " id="48" semanticType="int" name="SecurityID" offset="24" type="Int32"/>

<field description="MD Entry sequence number per instrument update" id="83" semanticType="int" name="RptSeq" offset="28" type="uInt32"/>

<field description="Market Data entry update action. In order to delete banding value, high or low limit, the deleted price field is populated with a NULL " id="279" semanticType="int" name="MDUpdateAction" type="MDUpdateActionNew"/>

<field description="Market Data entry type " id="269" semanticType="char" name="MDEntryType" type="MDEntryTypeLimits"/>

</group>

</ns2:message>

</ns2:messageSchema>

Message Example

The table below decodes a Limits and Banding message. The following SBE hexadecimal message will be decoded:

A6 BB 0A 00 5B 19 01 72 1E EF A9 16 38 00 0B 00 32 00 01 00 09 00 4B 52 E8 71 1E EF A9 16 00 00 00 20 00 01 FF FF FF FF FF FF FF 7F 00 90 CD 79 2F 08 00 00 00 E4 0B 54 02 00 00 00 F4 15 00 00 4D 07 00 00

CME Globex MDP uses little-endian byte ordering. Therefore, in the example below a hexadecimal value of A6 BB 0A 00 is inputted as 00 0A BB A6 in most conversion calculators.

Hexadecimal FIX TagNamePrimitive TypeValueBlock LengthDescription
Technical Header
A6 BB 0A 00

-

MsgSeqNum

uInt32

703398-

This example uses a UDP technical header within the packet structure .  The TCP technical header includes an additional field named encodingType.


The epoch SendingTime value of 1633099253939247451 converts to October 1, 2021 14:40:53.939 in UTC.

5B 19 01 72 1E EF A9 16-SendingTimeuInt64

1633099253939247451

-
Message Header
38 00-MsgSizeuInt1656-MsgSize is the first field in the the SBE message header.
0B 00-BlockLengthuInt1611 -
32 00-TemplateIDuInt1650-
01 00-SchemaIDuInt1601-
09 00-VersionuInt1609-
SBE Encoded FIX Message
4B 52 E8 71 1E EF A9 1660TransactTimeuInt64

1633099253937623627

11 

TransactTimeThe epoch SendingTime value of 1633099253937623627 converts to October 1, 2021 14:40:53.937 UTC.

The value of 11 maps to BlockLength in the message header field.

005799MatchEventIndicatoruInt80

The MatchEventIndicator type uses binary values from the type section of the schema.  In this example the binary value is equal to 0000 0000.  

00 00-Block Alignment Padding--

Two byte padding due to block alignment.   

11 bytes (BlockLength) - 8 (TransactTime) - 1 (MatchEventIndicator) = 2 (Block Alignment Padding)

20 00268

NoMDEntries

→BlockLength

uInt16

3232

Beginning of the repeating group.

01

→NumInGroup

uInt81

The repeating group has one iteration. 

FF FF FF FF FF FF FF 7F


1149

→HighLimitPrice

Mantissa

Int64

9223372036854775807

(null)

This field has an SBE type of PRICENULL9.  The type PRICENULL9 in the SBE schema defines a null value as 9223372036854775807 for the mantissa. 

Exponent

int8

-9

00 90 CD 79 2F 08 00 001148

→LowLimitPrice

Mantissa

Int649000000000000

A mantissa value of 9000000000000 and a exponent of -9 combine to make a value of 9000.000000000.

The exponent is defined as a constant of -9 for the type PRICENULL9 in the SBE schema and is not sent in the SBE message on the wire and is not part of the block length calculation.

Exponent 

int8-9
00 E4 0B 54 02 00 00 001143

→MaxPriceVariation

Mantissa

Int64

10000000000

A mantissa value of 10000000000 and a exponent of -9 combine to make a value of 10.000000000.

The exponent is defined as a constant of -9 for the type PRICENULL9 in the SBE schema and is not sent in the SBE message on the wire and is not part of the block length calculation.  

Exponent

int8

-9
F4 15 00 0048

→SecurityID

Int325620
4D 07 00 0083

→RptSeq

uInt321869
-279

→MDUpdateAction

uInt80This field is defined as a constant value of zero for the type MDUpdateActionNew in the SBE schema and is not sent in the SBE message on the wire.  Therefore, this field is not part of the block length calculation. 
-269

→MDEntryType

char

g

This field is defined as a constant value of "g" for the type MDEntryTypeLimits in the SBE schema and is not sent in the SBE message on the wire.  Therefore, this field is not part of the block length calculation.  



  • No labels