Optional Default Exponent Delta Mantissa Decimal Fields

Imported from previous forum

Heres a message from the CME:

static char anActualCMEMessage[] = {

0xc0, 0xa9, 0x10, 0x58, 0x47, 0xf6,
0x23, 0x55, 0x72, 0x76, 0x3b, 0x4b, 0x21, 0xf5, 0x09, 0x49, 0x53, 0x87, 0x8b, 0xc8, 0xb0, 0x1e,
0x53, 0xfb, 0x03, 0x4c, 0x88, 0x11, 0xfc, 0x06, 0x96, 0x3f, 0x61, 0x11, 0x80, 0x82, 0xc0, 0xb1,
0x80, 0x81, 0x03, 0xf4, 0x7e, 0x81, 0x80, 0xc0, 0xb0, 0x11, 0x4e, 0xf3, 0x59, 0xca, 0x03, 0xc2,
0xc9, 0x80, 0xc0, 0xb1, 0x80, 0x81, 0x03, 0xf4, 0x01, 0xd7, 0x80, 0xc0, 0xb0, 0x57, 0x30, 0xff,
0x28, 0x8e, 0xb2, 0x7e, 0xa9, 0x80, 0xc0, 0xb1, 0x80, 0x81, 0x03, 0xf4, 0x01, 0xa5, 0x80, 0xe8,
0xb0, 0x09, 0x67, 0x8b, 0x05, 0x24, 0xd7, 0x80, 0x7a, 0xfb, 0x80, 0x80, 0xe0, 0xb1, 0x80, 0x81,
0x80, 0x80, 0x80, 0xc8, 0xb0, 0x0f, 0x6b, 0xab, 0x77, 0x30, 0xa4, 0x5e, 0xd7, 0x03, 0xf4, 0x80,
0x81, 0xc8, 0xb1, 0x0d, 0x2d, 0x9d, 0x01, 0x5e, 0xed, 0x0a, 0xd5, 0x99, 0x80, 0x82, 0xc0, 0xb0,
0x7c, 0x22, 0x98, 0x38, 0xe6, 0x7e, 0xea, 0x02, 0xf7, 0x80
};

There are 11 Incremental Market Refreshes in here from Template 41.

The CME Java decoder outputs the following:

[34]=“35005430” [35]=“X” [49]=“CME” [52]=“20081031133712629” [75]=“20081031” [268]=“11”
[22]=“8” [48]=“502267” [83]=“58888” [MDEntryType]=“0” [MDEntryPx]=“2300” [271]=“790” [273]=“133712000” [279]=“5” [336]=“2” [NumberOfOrders]=“2” [1023]=“1”
[22]=“8” [48]=“502267” [83]=“58889” [MDEntryType]=“1” [MDEntryPx]=“2800” [271]=“535” [273]=“133712000” [279]=“5” [336]=“2” [NumberOfOrders]=“2” [1023]=“1”
[22]=“8” [48]=“790894” [83]=“53971” [MDEntryType]=“0” [MDEntryPx]=“3250” [271]=“480” [273]=“133712000” [279]=“5” [336]=“2” [NumberOfOrders]=“2” [1023]=“1”
[22]=“8” [48]=“790894” [83]=“53972” [MDEntryType]=“1” [MDEntryPx]=“3750” [271]=“695” [273]=“133712000” [279]=“5” [336]=“2” [NumberOfOrders]=“2” [1023]=“1”
[22]=“8” [48]=“125421” [83]=“59106” [MDEntryType]=“0” [MDEntryPx]=“3800” [271]=“480” [273]=“133712000” [279]=“5” [336]=“2” [NumberOfOrders]=“2” [1023]=“1”
[22]=“8” [48]=“125421” [83]=“59107” [MDEntryType]=“1” [MDEntryPx]=“4300” [271]=“645” [273]=“133712000” [279]=“5” [336]=“2” [NumberOfOrders]=“2” [1023]=“1”
[22]=“8” [48]=“286072” [83]=“145722” [MDEntryType]=“0” [271]=“0” [273]=“133712000” [279]=“5” [336]=“2” [NumberOfOrders]=“0” [1023]=“1”
[22]=“8” [48]=“286072” [83]=“145723” [MDEntryType]=“1” [271]=“0” [273]=“133712000” [279]=“5” [336]=“2” [NumberOfOrders]=“0” [1023]=“1”
[22]=“8” [48]=“545571” [83]=“4447” [MDEntryType]=“0” [MDEntryPx]=“35” [271]=“500” [273]=“133712000” [279]=“5” [336]=“2” [NumberOfOrders]=“1” [1023]=“1”
[22]=“8” [48]=“764352” [83]=“32972” [MDEntryType]=“1” [MDEntryPx]=“1400” [271]=“525” [273]=“133712000” [279]=“5” [336]=“2” [NumberOfOrders]=“2” [1023]=“1”
[22]=“8” [48]=“703192” [83]=“40242” [MDEntryType]=“0” [MDEntryPx]=“1250” [271]=“900” [273]=“133712000” [279]=“5” [336]=“2” [NumberOfOrders]=“2” [1023]=“1” [1128]=“8”

It indicates that the MDEntryPx is absent for updates 7 and 8.

Then update 9 uses the prior value from update 6.

Heres the template entry for MDEntryPx:

There are multiple things in here that are confusing to me.

1 - The PMAP Bit for the MDEntryPx fields in updates 7 and 8 are not set. This implies that I use the inital value and that the field is assigned. However I only have an initial value for the exponent not the mantissa.

2 - The CME Java Decoder indicates the MDEntryPx fields are absent for updates 7 and 8 but then uses the prior value from 6 to calculate the new mantissa. The spec says that if the prior State of a Delta Value is empty then it is a dynamic error.

3 - Optional Default Fields indicate that when they are absent the state/value should remain unchanged. This is how I have implemented it and the MDEntryPx for updates 7 and 8 then inherits the prior value from update 6 and stay assigned. Update 9 gets the correct delta value from 7 and 8 and everything looks good.

Any thoughts on the correct implementation of this would be greatly appreciated.

Cheers,

Declan

Declan:

For what it’s worth, I also get NULL values for sequence elements 7 and 8 using code unrelated to the CME Java implementation.

In both the 7th and the 8th sequence elements it looks as if the exponent was NULL. Which made the entire optional decimal NULL. The mantissa therefore never made it to the stream.

Also seems correct that the element 9 mantissa value of -4265 was applied as delta to the element 6 mantissa value of 4300.

Some spam follows. Hope this helps,

M

B: 1128 ApplVerID String 1 false false false Constant [PMap=0] [Data= ] String = [8]
B: 35 MessageType String 1 false false false Constant [PMap=0] [Data= ] String =
B: 49 SenderCompID String 1 false false false Constant [PMap=0] [Data= ] String = [CME]
B: 34 MsgSeqNum UInt32 1 false false false None [PMap=0] [Data=10 58 47 f6 ] UInt32 = [35005430]
B: 52 SendingTime UInt64 1 false false false None [PMap=0] [Data=23 55 72 76 3b 4b 21 f5 ] UInt64 = [20081031133712629]
B: 43 PosDupFlag String 1 true true true Default [PMap=0] [Data= ] String = (NULL)
B: 75 TradeDate UInt32 1 false false false None [PMap=0] [Data=09 49 53 87 ] UInt32 = [20081031]
B: 0 MDEntries Sequence 13 false false false None [PMap=0] [Data= ] Sequence = (N/A)
B: * 268 NoMDEntries UInt32 1 false false false None [PMap=0] [Data=8b ] UInt32 = [11]
B: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [5]
B: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [1]
B: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b0 ] String = [0]
B: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=0] [Data= ] UInt32 = [8]
B: * 48 SecurityID UInt32 1 false false false Delta [PMap=0] [Data=1e 53 fb ] UInt32 = [502267]
B: * 83 RptSeq UInt32 1 false false false Delta [PMap=0] [Data=03 4c 88 ] UInt32 = [58888]
B: * 270 MDEntryPx Decimal 2 true false false None [PMap=0] [Data= ] Decimal = (NULL)
B: * 0 SInt32 1 true true true Default [PMap=0] [Data= ] SInt32 = [0]
B: * 0 SInt64 1 false false false Delta [PMap=0] [Data=11 fc ] SInt64 = [2300]
B: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=06 96 ] SInt32 = [790]
B: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=3f 61 11 80 ] UInt32 = [133712000]
B: * 336 TradingSessionID String 1 false true false Default [PMap=0] [Data= ] String = [2]
B: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=1] [Data=82 ] UInt32 = [2]
B: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [5]
B: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [1]
B: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b1 ] String = [1]
B: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=0] [Data= ] UInt32 = [8]
B: * 48 SecurityID UInt32 1 false false false Delta [PMap=0] [Data=80 ] UInt32 = [502267]
B: * 83 RptSeq UInt32 1 false false false Delta [PMap=0] [Data=81 ] UInt32 = [58889]
B: * 270 MDEntryPx Decimal 2 true false false None [PMap=0] [Data= ] Decimal = (NULL)
B: * 0 SInt32 1 true true true Default [PMap=0] [Data= ] SInt32 = [0]
B: * 0 SInt64 1 false false false Delta [PMap=0] [Data=03 f4 ] SInt64 = [2800]
B: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=7e 81 ] SInt32 = [535]
B: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80 ] UInt32 = [133712000]
B: * 336 TradingSessionID String 1 false true false Default [PMap=0] [Data= ] String = [2]
B: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=0] [Data= ] UInt32 = [2]
B: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [5]
B: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [1]
B: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b0 ] String = [0]
B: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=0] [Data= ] UInt32 = [8]
B: * 48 SecurityID UInt32 1 false false false Delta [PMap=0] [Data=11 4e f3 ] UInt32 = [790894]
B: * 83 RptSeq UInt32 1 false false false Delta [PMap=0] [Data=59 ca ] UInt32 = [53971]
B: * 270 MDEntryPx Decimal 2 true false false None [PMap=0] [Data= ] Decimal = (NULL)
B: * 0 SInt32 1 true true true Default [PMap=0] [Data= ] SInt32 = [0]
B: * 0 SInt64 1 false false false Delta [PMap=0] [Data=03 c2 ] SInt64 = [3250]
B: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=c9 ] SInt32 = [480]
B: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80 ] UInt32 = [133712000]
B: * 336 TradingSessionID String 1 false true false Default [PMap=0] [Data= ] String = [2]
B: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=0] [Data= ] UInt32 = [2]
B: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [5]
B: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [1]
B: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b1 ] String = [1]
B: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=0] [Data= ] UInt32 = [8]
B: * 48 SecurityID UInt32 1 false false false Delta [PMap=0] [Data=80 ] UInt32 = [790894]
B: * 83 RptSeq UInt32 1 false false false Delta [PMap=0] [Data=81 ] UInt32 = [53972]
B: * 270 MDEntryPx Decimal 2 true false false None [PMap=0] [Data= ] Decimal = (NULL)
B: * 0 SInt32 1 true true true Default [PMap=0] [Data= ] SInt32 = [0]
B: * 0 SInt64 1 false false false Delta [PMap=0] [Data=03 f4 ] SInt64 = [3750]
B: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=01 d7 ] SInt32 = [695]
B: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80 ] UInt32 = [133712000]
B: * 336 TradingSessionID String 1 false true false Default [PMap=0] [Data= ] String = [2]
B: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=0] [Data= ] UInt32 = [2]
B: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [5]
B: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [1]
B: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b0 ] String = [0]
B: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=0] [Data= ] UInt32 = [8]
B: * 48 SecurityID UInt32 1 false false false Delta [PMap=0] [Data=57 30 ff ] UInt32 = [125421]
B: * 83 RptSeq UInt32 1 false false false Delta [PMap=0] [Data=28 8e ] UInt32 = [59106]
B: * 270 MDEntryPx Decimal 2 true false false None [PMap=0] [Data= ] Decimal = (NULL)
B: * 0 SInt32 1 true true true Default [PMap=0] [Data= ] SInt32 = [0]
B: * 0 SInt64 1 false false false Delta [PMap=0] [Data=b2 ] SInt64 = [3800]
B: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=7e a9 ] SInt32 = [480]
B: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80 ] UInt32 = [133712000]
B: * 336 TradingSessionID String 1 false true false Default [PMap=0] [Data= ] String = [2]
B: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=0] [Data= ] UInt32 = [2]
B: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [5]
B: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [1]
B: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b1 ] String = [1]
B: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=0] [Data= ] UInt32 = [8]
B: * 48 SecurityID UInt32 1 false false false Delta [PMap=0] [Data=80 ] UInt32 = [125421]
B: * 83 RptSeq UInt32 1 false false false Delta [PMap=0] [Data=81 ] UInt32 = [59107]
B: * 270 MDEntryPx Decimal 2 true false false None [PMap=0] [Data= ] Decimal = (NULL)
B: * 0 SInt32 1 true true true Default [PMap=0] [Data= ] SInt32 = [0]
B: * 0 SInt64 1 false false false Delta [PMap=0] [Data=03 f4 ] SInt64 = [4300]
B: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=01 a5 ] SInt32 = [645]
B: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80 ] UInt32 = [133712000]
B: * 336 TradingSessionID String 1 false true false Default [PMap=0] [Data= ] String = [2]
B: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=0] [Data= ] UInt32 = [2]
B: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [5]
B: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [1]
B: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b0 ] String = [0]
B: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [8]
B: * 48 SecurityID UInt32 1 false false false Delta [PMap=1] [Data=09 67 8b ] UInt32 = [286072]
B: * 83 RptSeq UInt32 1 false false false Delta [PMap=1] [Data=05 24 d7 ] UInt32 = [145722]
B: * 270 MDEntryPx Decimal 2 true false false None [PMap=1] [Data= ] Decimal = (NULL)
B: * 0 SInt32 1 true true true Default [PMap=1] [Data=80 ] SInt32 = (NULL)
B: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=7a fb ] SInt32 = [0]
B: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80 ] UInt32 = [133712000]
B: * 336 TradingSessionID String 1 false true false Default [PMap=0] [Data= ] String = [2]
B: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=1] [Data=80 ] UInt32 = [0]
B: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [5]
B: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [1]
B: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b1 ] String = [1]
B: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [8]
B: * 48 SecurityID UInt32 1 false false false Delta [PMap=1] [Data=80 ] UInt32 = [286072]
B: * 83 RptSeq UInt32 1 false false false Delta [PMap=1] [Data=81 ] UInt32 = [145723]
B: * 270 MDEntryPx Decimal 2 true false false None [PMap=1] [Data= ] Decimal = (NULL)
B: * 0 SInt32 1 true true true Default [PMap=1] [Data=80 ] SInt32 = (NULL)
B: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=80 ] SInt32 = [0]
B: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80 ] UInt32 = [133712000]
B: * 336 TradingSessionID String 1 false true false Default [PMap=0] [Data= ] String = [2]
B: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=0] [Data= ] UInt32 = [0]
B: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [5]
B: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [1]
B: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b0 ] String = [0]
B: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=0] [Data= ] UInt32 = [8]
B: * 48 SecurityID UInt32 1 false false false Delta [PMap=0] [Data=0f 6b ab ] UInt32 = [545571]
B: * 83 RptSeq UInt32 1 false false false Delta [PMap=0] [Data=77 30 a4 ] UInt32 = [4447]
B: * 270 MDEntryPx Decimal 2 true false false None [PMap=0] [Data= ] Decimal = (NULL)
B: * 0 SInt32 1 true true true Default [PMap=0] [Data= ] SInt32 = [0]
B: * 0 SInt64 1 false false false Delta [PMap=0] [Data=5e d7 ] SInt64 = [35]
B: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=03 f4 ] SInt32 = [500]
B: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80 ] UInt32 = [133712000]
B: * 336 TradingSessionID String 1 false true false Default [PMap=0] [Data= ] String = [2]
B: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=1] [Data=81 ] UInt32 = [1]
B: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [5]
B: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [1]
B: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b1 ] String = [1]
B: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=0] [Data= ] UInt32 = [8]
B: * 48 SecurityID UInt32 1 false false false Delta [PMap=0] [Data=0d 2d 9d ] UInt32 = [764352]
B: * 83 RptSeq UInt32 1 false false false Delta [PMap=0] [Data=01 5e ed ] UInt32 = [32972]
B: * 270 MDEntryPx Decimal 2 true false false None [PMap=0] [Data= ] Decimal = (NULL)
B: * 0 SInt32 1 true true true Default [PMap=0] [Data= ] SInt32 = [0]
B: * 0 SInt64 1 false false false Delta [PMap=0] [Data=0a d5 ] SInt64 = [1400]
B: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=99 ] SInt32 = [525]
B: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80 ] UInt32 = [133712000]
B: * 336 TradingSessionID String 1 false true false Default [PMap=0] [Data= ] String = [2]
B: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=1] [Data=82 ] UInt32 = [2]
B: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [5]
B: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1] [Data= ] UInt32 = [1]
B: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b0 ] String = [0]
B: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=0] [Data= ] UInt32 = [8]
B: * 48 SecurityID UInt32 1 false false false Delta [PMap=0] [Data=7c 22 98 ] UInt32 = [703192]
B: * 83 RptSeq UInt32 1 false false false Delta [PMap=0] [Data=38 e6 ] UInt32 = [40242]
B: * 270 MDEntryPx Decimal 2 true false false None [PMap=0] [Data= ] Decimal = (NULL)
B: * 0 SInt32 1 true true true Default [PMap=0] [Data= ] SInt32 = [0]
B: * 0 SInt64 1 false false false Delta [PMap=0] [Data=7e ea ] SInt64 = [1250]
B: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=02 f7 ] SInt32 = [900]
B: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80 ] UInt32 = [133712000]
B: * 336 TradingSessionID String 1 false true false Default [PMap=0] [Data= ] String = [2]
B: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=0] [Data= ] UInt32 = [2]

Heres a message from the CME:

static char anActualCMEMessage[] = { 0xc0, 0xa9, 0x10, 0x58, 0x47,
0xf6, 0x23, 0x55, 0x72, 0x76, 0x3b, 0x4b, 0x21, 0xf5, 0x09, 0x49,
0x53, 0x87, 0x8b, 0xc8, 0xb0, 0x1e, 0x53, 0xfb, 0x03, 0x4c, 0x88,
0x11, 0xfc, 0x06, 0x96, 0x3f, 0x61, 0x11, 0x80, 0x82, 0xc0, 0xb1,
0x80, 0x81, 0x03, 0xf4, 0x7e, 0x81, 0x80, 0xc0, 0xb0, 0x11, 0x4e,
0xf3, 0x59, 0xca, 0x03, 0xc2, 0xc9, 0x80, 0xc0, 0xb1, 0x80, 0x81,
0x03, 0xf4, 0x01, 0xd7, 0x80, 0xc0, 0xb0, 0x57, 0x30, 0xff, 0x28,
0x8e, 0xb2, 0x7e, 0xa9, 0x80, 0xc0, 0xb1, 0x80, 0x81, 0x03, 0xf4,
0x01, 0xa5, 0x80, 0xe8, 0xb0, 0x09, 0x67, 0x8b, 0x05, 0x24, 0xd7,
0x80, 0x7a, 0xfb, 0x80, 0x80, 0xe0, 0xb1, 0x80, 0x81, 0x80, 0x80,
0x80, 0xc8, 0xb0, 0x0f, 0x6b, 0xab, 0x77, 0x30, 0xa4, 0x5e, 0xd7,
0x03, 0xf4, 0x80, 0x81, 0xc8, 0xb1, 0x0d, 0x2d, 0x9d, 0x01, 0x5e,
0xed, 0x0a, 0xd5, 0x99, 0x80, 0x82, 0xc0, 0xb0, 0x7c, 0x22, 0x98,
0x38, 0xe6, 0x7e, 0xea, 0x02, 0xf7, 0x80 };

There are 11 Incremental Market Refreshes in here from Template 41.

The CME Java decoder outputs the following:

[34]=“35005430” [35]=“X” [49]=“CME” [52]=“20081031133712629”
[75]=“20081031” [268]=“11”
[35]=“8” [48]=“502267” [83]=“58888” [MDEntryType]=“0” [MDEntryPx]=“2300”
[271]=“790” [273]=“133712000” [279]=“5” [336]=“2”
[NumberOfOrders]=“2” [1023]=“1”
[36]=“8” [48]=“502267” [83]=“58889” [MDEntryType]=“1” [MDEntryPx]=“2800”
[271]=“535” [273]=“133712000” [279]=“5” [336]=“2”
[NumberOfOrders]=“2” [1023]=“1”
[37]=“8” [48]=“790894” [83]=“53971” [MDEntryType]=“0” [MDEntryPx]=“3250”
[271]=“480” [273]=“133712000” [279]=“5” [336]=“2”
[NumberOfOrders]=“2” [1023]=“1”
[38]=“8” [48]=“790894” [83]=“53972” [MDEntryType]=“1” [MDEntryPx]=“3750”
[271]=“695” [273]=“133712000” [279]=“5” [336]=“2”
[NumberOfOrders]=“2” [1023]=“1”
[39]=“8” [48]=“125421” [83]=“59106” [MDEntryType]=“0” [MDEntryPx]=“3800”
[271]=“480” [273]=“133712000” [279]=“5” [336]=“2”
[NumberOfOrders]=“2” [1023]=“1”
[40]=“8” [48]=“125421” [83]=“59107” [MDEntryType]=“1” [MDEntryPx]=“4300”
[271]=“645” [273]=“133712000” [279]=“5” [336]=“2”
[NumberOfOrders]=“2” [1023]=“1”
[41]=“8” [48]=“286072” [83]=“145722” [MDEntryType]=“0” [271]=“0”
[273]=“133712000” [279]=“5” [336]=“2” [NumberOfOrders]=“0”
[1023]=“1”
[42]=“8” [48]=“286072” [83]=“145723” [MDEntryType]=“1” [271]=“0”
[273]=“133712000” [279]=“5” [336]=“2” [NumberOfOrders]=“0”
[1023]=“1”
[43]=“8” [48]=“545571” [83]=“4447” [MDEntryType]=“0” [MDEntryPx]=“35”
[271]=“500” [273]=“133712000” [279]=“5” [336]=“2”
[NumberOfOrders]=“1” [1023]=“1”
[44]=“8” [48]=“764352” [83]=“32972” [MDEntryType]=“1” [MDEntryPx]=“1400”
[271]=“525” [273]=“133712000” [279]=“5” [336]=“2”
[NumberOfOrders]=“2” [1023]=“1”
[45]=“8” [48]=“703192” [83]=“40242” [MDEntryType]=“0” [MDEntryPx]=“1250”
[271]=“900” [273]=“133712000” [279]=“5” [336]=“2”
[NumberOfOrders]=“2” [1023]=“1” [1128]=“8”

It indicates that the MDEntryPx is absent for updates 7 and 8.

Then update 9 uses the prior value from update 6.

Heres the template entry for MDEntryPx:



There are multiple things in here that are confusing to me.

1 - The PMAP Bit for the MDEntryPx fields in updates 7 and 8 are not
set. This implies that I use the inital value and that the field is
assigned. However I only have an initial value for the exponent not
the mantissa.

2 - The CME Java Decoder indicates the MDEntryPx fields are absent for
updates 7 and 8 but then uses the prior value from 6 to calculate the
new mantissa. The spec says that if the prior State of a Delta Value is
empty then it is a dynamic error.

3 - Optional Default Fields indicate that when they are absent the
state/value should remain unchanged. This is how I have implemented it
and the MDEntryPx for updates 7 and 8 then inherits the prior value from
update 6 and stay assigned. Update 9 gets the correct delta value from 7
and 8 and everything looks good.

Any thoughts on the correct implementation of this would be greatly
appreciated.

Cheers,

Declan

Michael,

thanks for the response.

One of my coworkers has suggested the following : that the data is not present in the output decoded message but that the state/value remain assigned in the dictionary.

I think my confusion comes from my interpretation of the relationship that exists between the decoded message and the current dictionary.

I think I need my own state for further processing that indicates absent but assigned.

Cheers,

Declan

Declan:

For what it’s worth, I also get NULL values for sequence elements 7
and 8 using code unrelated to the CME Java implementation.

In both the 7th and the 8th sequence elements it looks as if the
exponent was NULL. Which made the entire optional decimal NULL. The
mantissa therefore never made it to the stream.

Also seems correct that the element 9 mantissa value of -4265 was
applied as delta to the element 6 mantissa value of 4300.

Some spam follows. Hope this helps,

M

B: 1128 ApplVerID String 1 false false false Constant [PMap=0]
[Data= ] String = [8]
C: 35 MessageType String 1 false false false Constant [PMap=0]
[Data= ] String =
D: 49 SenderCompID String 1 false false false Constant [PMap=0]
[Data= ] String = [CME]
E: 34 MsgSeqNum UInt32 1 false false false None [PMap=0] [Data=10
58 47 f6 ] UInt32 = [35005430]
F: 52 SendingTime UInt64 1 false false false None [PMap=0]
[Data=23 55 72 76 3b 4b 21 f5 ] UInt64 = [20081031133712629]
G: 43 PosDupFlag String 1 true true true Default [PMap=0] [Data= ]
String = (NULL)
H: 75 TradeDate UInt32 1 false false false None [PMap=0] [Data=09
49 53 87 ] UInt32 = [20081031]
I: 0 MDEntries Sequence 13 false false false None [PMap=0] [Data=
] Sequence = (N/A)
J: * 268 NoMDEntries UInt32 1 false false false None [PMap=0] [Data=8b ]
UInt32 = [11]
K: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [5]
L: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [1]
M: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b0 ]
String = [0]
N: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=0]
[Data= ] UInt32 = [8]
O: * 48 SecurityID UInt32 1 false false false Delta [PMap=0] [Data=1e 53
fb ] UInt32 = [502267]
P: * 83 RptSeq UInt32 1 false false false Delta [PMap=0] [Data=03 4c 88
] UInt32 = [58888]
Q: * 270 MDEntryPx Decimal 2 true false false None [PMap=0] [Data= ]
Decimal = (NULL)
R: * 0 SInt32 1 true true true Default [PMap=0] [Data= ] SInt32 = [0]
S: * 0 SInt64 1 false false false Delta [PMap=0] [Data=11 fc ]
SInt64 = [2300]
T: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=06
96 ] SInt32 = [790]
U: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=3f
61 11 80 ] UInt32 = [133712000]
V: * 336 TradingSessionID String 1 false true false Default [PMap=0]
[Data= ] String = [2]
W: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=1] [Data=82
] UInt32 = [2]
X: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [5]
Y: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [1]
Z: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b1 ]
String = [1]
Z: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=0]
[Data= ] UInt32 = [8]
Z: * 48 SecurityID UInt32 1 false false false Delta [PMap=0] [Data=80 ]
UInt32 = [502267]
Z: * 83 RptSeq UInt32 1 false false false Delta [PMap=0] [Data=81 ]
UInt32 = [58889]
Z: * 270 MDEntryPx Decimal 2 true false false None [PMap=0] [Data= ]
Decimal = (NULL)
Z: * 0 SInt32 1 true true true Default [PMap=0] [Data= ] SInt32 = [0]
Z: * 0 SInt64 1 false false false Delta [PMap=0] [Data=03 f4 ]
SInt64 = [2800]
Z: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=7e
81 ] SInt32 = [535]
Z: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80
] UInt32 = [133712000]
Z: * 336 TradingSessionID String 1 false true false Default [PMap=0]
[Data= ] String = [2]
Z: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=0] [Data= ]
UInt32 = [2]
Z: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [5]
Z: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [1]
Z: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b0 ]
String = [0]
Z: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=0]
[Data= ] UInt32 = [8]
Z: * 48 SecurityID UInt32 1 false false false Delta [PMap=0] [Data=11 4e
f3 ] UInt32 = [790894]
Z: * 83 RptSeq UInt32 1 false false false Delta [PMap=0] [Data=59 ca ]
UInt32 = [53971]
Z: * 270 MDEntryPx Decimal 2 true false false None [PMap=0] [Data= ]
Decimal = (NULL)
Z: * 0 SInt32 1 true true true Default [PMap=0] [Data= ] SInt32 = [0]
Z: * 0 SInt64 1 false false false Delta [PMap=0] [Data=03 c2 ]
SInt64 = [3250]
Z: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=c9
] SInt32 = [480]
Z: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80
] UInt32 = [133712000]
Z: * 336 TradingSessionID String 1 false true false Default [PMap=0]
[Data= ] String = [2]
Z: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=0] [Data= ]
UInt32 = [2]
Z: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [5]
Z: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [1]
Z: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b1 ]
String = [1]
Z: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=0]
[Data= ] UInt32 = [8]
Z: * 48 SecurityID UInt32 1 false false false Delta [PMap=0] [Data=80 ]
UInt32 = [790894]
Z: * 83 RptSeq UInt32 1 false false false Delta [PMap=0] [Data=81 ]
UInt32 = [53972]
Z: * 270 MDEntryPx Decimal 2 true false false None [PMap=0] [Data= ]
Decimal = (NULL)
Z: * 0 SInt32 1 true true true Default [PMap=0] [Data= ] SInt32 = [0]
Z: * 0 SInt64 1 false false false Delta [PMap=0] [Data=03 f4 ]
SInt64 = [3750]
Z: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=01
d7 ] SInt32 = [695]
Z: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80
] UInt32 = [133712000]
Z: * 336 TradingSessionID String 1 false true false Default [PMap=0]
[Data= ] String = [2]
Z: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=0] [Data= ]
UInt32 = [2]
Z: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [5]
Z: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [1]
Z: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b0 ]
String = [0]
Z: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=0]
[Data= ] UInt32 = [8]
Z: * 48 SecurityID UInt32 1 false false false Delta [PMap=0] [Data=57 30
ff ] UInt32 = [125421]
Z: * 83 RptSeq UInt32 1 false false false Delta [PMap=0] [Data=28 8e ]
UInt32 = [59106]
Z: * 270 MDEntryPx Decimal 2 true false false None [PMap=0] [Data= ]
Decimal = (NULL)
Z: * 0 SInt32 1 true true true Default [PMap=0] [Data= ] SInt32 = [0]
Z: * 0 SInt64 1 false false false Delta [PMap=0] [Data=b2 ]
SInt64 = [3800]
Z: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=7e
a9 ] SInt32 = [480]
Z: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80
] UInt32 = [133712000]
Z: * 336 TradingSessionID String 1 false true false Default [PMap=0]
[Data= ] String = [2]
Z: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=0] [Data= ]
UInt32 = [2]
Z: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [5]
Z: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [1]
Z: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b1 ]
String = [1]
Z: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=0]
[Data= ] UInt32 = [8]
Z: * 48 SecurityID UInt32 1 false false false Delta [PMap=0] [Data=80 ]
UInt32 = [125421]
Z: * 83 RptSeq UInt32 1 false false false Delta [PMap=0] [Data=81 ]
UInt32 = [59107]
Z: * 270 MDEntryPx Decimal 2 true false false None [PMap=0] [Data= ]
Decimal = (NULL)
Z: * 0 SInt32 1 true true true Default [PMap=0] [Data= ] SInt32 = [0]
Z: * 0 SInt64 1 false false false Delta [PMap=0] [Data=03 f4 ]
SInt64 = [4300]
Z: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=01
a5 ] SInt32 = [645]
Z: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80
] UInt32 = [133712000]
Z: * 336 TradingSessionID String 1 false true false Default [PMap=0]
[Data= ] String = [2]
Z: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=0] [Data= ]
UInt32 = [2]
Z: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [5]
Z: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [1]
Z: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b0 ]
String = [0]
Z: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [8]
Z: * 48 SecurityID UInt32 1 false false false Delta [PMap=1] [Data=09 67
8b ] UInt32 = [286072]
Z: * 83 RptSeq UInt32 1 false false false Delta [PMap=1] [Data=05 24 d7
] UInt32 = [145722]
Z: * 270 MDEntryPx Decimal 2 true false false None [PMap=1] [Data= ]
Decimal = (NULL)
Z: * 0 SInt32 1 true true true Default [PMap=1] [Data=80 ] SInt32
= (NULL)
Z: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=7a
fb ] SInt32 = [0]
Z: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80
] UInt32 = [133712000]
Z: * 336 TradingSessionID String 1 false true false Default [PMap=0]
[Data= ] String = [2]
Z: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=1] [Data=80
] UInt32 = [0]
Z: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [5]
Z: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [1]
Z: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b1 ]
String = [1]
Z: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [8]
Z: * 48 SecurityID UInt32 1 false false false Delta [PMap=1] [Data=80 ]
UInt32 = [286072]
Z: * 83 RptSeq UInt32 1 false false false Delta [PMap=1] [Data=81 ]
UInt32 = [145723]
Z: * 270 MDEntryPx Decimal 2 true false false None [PMap=1] [Data= ]
Decimal = (NULL)
Z: * 0 SInt32 1 true true true Default [PMap=1] [Data=80 ] SInt32
= (NULL)
Z: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=80
] SInt32 = [0]
Z: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80
] UInt32 = [133712000]
Z: * 336 TradingSessionID String 1 false true false Default [PMap=0]
[Data= ] String = [2]
Z: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=0] [Data= ]
UInt32 = [0]
Z: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [5]
Z: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [1]
Z: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b0 ]
String = [0]
Z: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=0]
[Data= ] UInt32 = [8]
Z: * 48 SecurityID UInt32 1 false false false Delta [PMap=0] [Data=0f 6b
ab ] UInt32 = [545571]
Z: * 83 RptSeq UInt32 1 false false false Delta [PMap=0] [Data=77 30 a4
] UInt32 = [4447]
Z: * 270 MDEntryPx Decimal 2 true false false None [PMap=0] [Data= ]
Decimal = (NULL)
Z: * 0 SInt32 1 true true true Default [PMap=0] [Data= ] SInt32 = [0]
Z: * 0 SInt64 1 false false false Delta [PMap=0] [Data=5e d7 ]
SInt64 = [35]
Z: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=03
f4 ] SInt32 = [500]
Z: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80
] UInt32 = [133712000]
Z: * 336 TradingSessionID String 1 false true false Default [PMap=0]
[Data= ] String = [2]
Z: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=1] [Data=81
] UInt32 = [1]
Z: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [5]
Z: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [1]
Z: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b1 ]
String = [1]
Z: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=0]
[Data= ] UInt32 = [8]
Z: * 48 SecurityID UInt32 1 false false false Delta [PMap=0] [Data=0d 2d
9d ] UInt32 = [764352]
Z: * 83 RptSeq UInt32 1 false false false Delta [PMap=0] [Data=01 5e ed
] UInt32 = [32972]
Z: * 270 MDEntryPx Decimal 2 true false false None [PMap=0] [Data= ]
Decimal = (NULL)
Z: * 0 SInt32 1 true true true Default [PMap=0] [Data= ] SInt32 = [0]
Z: * 0 SInt64 1 false false false Delta [PMap=0] [Data=0a d5 ]
SInt64 = [1400]
Z: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=99
] SInt32 = [525]
Z: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80
] UInt32 = [133712000]
Z: * 336 TradingSessionID String 1 false true false Default [PMap=0]
[Data= ] String = [2]
Z: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=1] [Data=82
] UInt32 = [2]
Z: * 279 MDUpdateAction UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [5]
Z: * 1023 MDPriceLevel UInt32 1 false false false Constant [PMap=1]
[Data= ] UInt32 = [1]
Z: * 269 MDEntryType String 1 false true false Copy [PMap=1] [Data=b0 ]
String = [0]
Z: * 22 SecurityIDSource UInt32 1 false false false Constant [PMap=0]
[Data= ] UInt32 = [8]
Z: * 48 SecurityID UInt32 1 false false false Delta [PMap=0] [Data=7c 22
98 ] UInt32 = [703192]
Z: * 83 RptSeq UInt32 1 false false false Delta [PMap=0] [Data=38 e6 ]
UInt32 = [40242]
Z: * 270 MDEntryPx Decimal 2 true false false None [PMap=0] [Data= ]
Decimal = (NULL)
Z: * 0 SInt32 1 true true true Default [PMap=0] [Data= ] SInt32 = [0]
Z: * 0 SInt64 1 false false false Delta [PMap=0] [Data=7e ea ]
SInt64 = [1250]
Z: * 271 MDEntrySize SInt32 1 false false false Delta [PMap=0] [Data=02
f7 ] SInt32 = [900]
Z: * 273 MDEntryTime UInt32 1 false false false Delta [PMap=0] [Data=80
] UInt32 = [133712000]
Z: * 336 TradingSessionID String 1 false true false Default [PMap=0]
[Data= ] String = [2]
Z: * 346 NumberOfOrders UInt32 1 false true false Copy [PMap=0] [Data= ]
UInt32 = [2]

Heres a message from the CME:

static char anActualCMEMessage[] = { 0xc0, 0xa9, 0x10, 0x58, 0x47,
0xf6, 0x23, 0x55, 0x72, 0x76, 0x3b, 0x4b, 0x21, 0xf5, 0x09, 0x49,
0x53, 0x87, 0x8b, 0xc8, 0xb0, 0x1e, 0x53, 0xfb, 0x03, 0x4c, 0x88,
0x11, 0xfc, 0x06, 0x96, 0x3f, 0x61, 0x11, 0x80, 0x82, 0xc0, 0xb1,
0x80, 0x81, 0x03, 0xf4, 0x7e, 0x81, 0x80, 0xc0, 0xb0, 0x11, 0x4e,
0xf3, 0x59, 0xca, 0x03, 0xc2, 0xc9, 0x80, 0xc0, 0xb1, 0x80, 0x81,
0x03, 0xf4, 0x01, 0xd7, 0x80, 0xc0, 0xb0, 0x57, 0x30, 0xff, 0x28,
0x8e, 0xb2, 0x7e, 0xa9, 0x80, 0xc0, 0xb1, 0x80, 0x81, 0x03, 0xf4,
0x01, 0xa5, 0x80, 0xe8, 0xb0, 0x09, 0x67, 0x8b, 0x05, 0x24, 0xd7,
0x80, 0x7a, 0xfb, 0x80, 0x80, 0xe0, 0xb1, 0x80, 0x81, 0x80, 0x80,
0x80, 0xc8, 0xb0, 0x0f, 0x6b, 0xab, 0x77, 0x30, 0xa4, 0x5e, 0xd7,
0x03, 0xf4, 0x80, 0x81, 0xc8, 0xb1, 0x0d, 0x2d, 0x9d, 0x01, 0x5e,
0xed, 0x0a, 0xd5, 0x99, 0x80, 0x82, 0xc0, 0xb0, 0x7c, 0x22, 0x98,
0x38, 0xe6, 0x7e, 0xea, 0x02, 0xf7, 0x80 };

There are 11 Incremental Market Refreshes in here from Template 41.

The CME Java decoder outputs the following:

[34]=“35005430” [35]=“X” [49]=“CME” [52]=“20081031133712629”
[75]=“20081031” [268]=“11”
[35]=“8” [48]=“502267” [83]=“58888” [MDEntryType]=“0”
[MDEntryPx]=“2300”
[271]=“790” [273]=“133712000” [279]=“5” [336]=“2”
[NumberOfOrders]=“2” [1023]=“1”
[36]=“8” [48]=“502267” [83]=“58889” [MDEntryType]=“1”
[MDEntryPx]=“2800”
[271]=“535” [273]=“133712000” [279]=“5” [336]=“2”
[NumberOfOrders]=“2” [1023]=“1”
[37]=“8” [48]=“790894” [83]=“53971” [MDEntryType]=“0”
[MDEntryPx]=“3250”
[271]=“480” [273]=“133712000” [279]=“5” [336]=“2”
[NumberOfOrders]=“2” [1023]=“1”
[38]=“8” [48]=“790894” [83]=“53972” [MDEntryType]=“1”
[MDEntryPx]=“3750”
[271]=“695” [273]=“133712000” [279]=“5” [336]=“2”
[NumberOfOrders]=“2” [1023]=“1”
[39]=“8” [48]=“125421” [83]=“59106” [MDEntryType]=“0”
[MDEntryPx]=“3800”
[271]=“480” [273]=“133712000” [279]=“5” [336]=“2”
[NumberOfOrders]=“2” [1023]=“1”
[40]=“8” [48]=“125421” [83]=“59107” [MDEntryType]=“1”
[MDEntryPx]=“4300”
[271]=“645” [273]=“133712000” [279]=“5” [336]=“2”
[NumberOfOrders]=“2” [1023]=“1”
[41]=“8” [48]=“286072” [83]=“145722” [MDEntryType]=“0” [271]=“0”
[273]=“133712000” [279]=“5” [336]=“2” [NumberOfOrders]=“0”
[1023]=“1”
[42]=“8” [48]=“286072” [83]=“145723” [MDEntryType]=“1” [271]=“0”
[273]=“133712000” [279]=“5” [336]=“2” [NumberOfOrders]=“0”
[1023]=“1”
[43]=“8” [48]=“545571” [83]=“4447” [MDEntryType]=“0” [MDEntryPx]=“35”
[271]=“500” [273]=“133712000” [279]=“5” [336]=“2”
[NumberOfOrders]=“1” [1023]=“1”
[44]=“8” [48]=“764352” [83]=“32972” [MDEntryType]=“1”
[MDEntryPx]=“1400”
[271]=“525” [273]=“133712000” [279]=“5” [336]=“2”
[NumberOfOrders]=“2” [1023]=“1”
[45]=“8” [48]=“703192” [83]=“40242” [MDEntryType]=“0”
[MDEntryPx]=“1250”
[271]=“900” [273]=“133712000” [279]=“5” [336]=“2”
[NumberOfOrders]=“2” [1023]=“1” [1128]=“8”

It indicates that the MDEntryPx is absent for updates 7 and 8.

Then update 9 uses the prior value from update 6.

Heres the template entry for MDEntryPx:



There are multiple things in here that are confusing to me.

1 - The PMAP Bit for the MDEntryPx fields in updates 7 and 8 are not
set. This implies that I use the inital value and that the field is
assigned. However I only have an initial value for the exponent not
the mantissa.

2 - The CME Java Decoder indicates the MDEntryPx fields are absent for
updates 7 and 8 but then uses the prior value from 6 to calculate the
new mantissa. The spec says that if the prior State of a Delta Value
is empty then it is a dynamic error.

3 - Optional Default Fields indicate that when they are absent the
state/value should remain unchanged. This is how I have implemented it
and the MDEntryPx for updates 7 and 8 then inherits the prior value
from update 6 and stay assigned. Update 9 gets the correct delta value
from 7 and 8 and everything looks good.

Any thoughts on the correct implementation of this would be greatly
appreciated.

Cheers,

Declan