Page tree
Skip to end of metadata
Go to start of metadata

The following Market by Price (MBP) book recovery methods can be performed using the Incremental Market Data feed concurrently with one of the Recovery Services for faster recovery.

Book Recovery - Instrument Sequencing

In the Market Data Incremental Refresh (tag 35-MsgType=X) message, tag 83-RptSeq represents the sequence number per instrument.

Client systems can keep track of the instrument sequence number (tag 83-RptSeq) for every instrument by inspecting incoming data and determining whether there is a gap between tag 83-RptSeq values.

  • If there is a gap between sequence numbers, it indicates that data was missed for the instrument when packet loss occurred.
  • If there is no gap, the data can be used immediately, and it also indicates that the book for this instrument still has a correct, current state. 

If a small amount of data has been missed, it may be probable that subsequent pieces of data are not affected. For example, If there are 10 instruments in a channel, and the missed packets contain data for 2 of these instruments, any subsequent messages containing data about the other instruments are still valid.

The client system must track the state of the book at all times with the FIX Market Data Incremental Refresh message (tag 35-MsgType=X) book update data blocks. It is possible, though not guaranteed, that a set of these book update data blocks can be used to construct the current, correct state of a book without prior book state knowledge. While client systems wait for the recovery of missing data, they may opt to also use a natural refresh algorithm to recover book state prior to recovering the lost data. Natural refresh can also be used to re-instate the top-of-book. Natural refresh should be used for multiple depth book updates only in conjunction with market recovery. Prior to beginning a natural refresh, the entire book should be emptied. Natural refresh assumes no prior knowledge of book state.

Book Recovery - Natural Refresh

The client system must track the state of the book at all times with the FIX Market Data Incremental Refresh message (tag 35-MsgType=X) book update data blocks. It is possible, though not guaranteed, that a set of these book update data blocks can be used to construct the current, correct state of a book without prior book state knowledge. While client systems wait for the recovery of missing data, they may opt to also use a natural refresh algorithm to recover book state prior to recovering the lost data. Natural refresh can also be used to re-instate the top-of-book. Natural refresh should be used for multiple depth book updates only in conjunction with market recovery. Prior to beginning a natural refresh, the entire book should be emptied. Natural refresh assumes no prior knowledge of book state.

The following example illustrates how natural refresh occurs. Note that in this example, using instructions 4 and 5, the top two levels of the offer book are known to be accurate. This portion of the book can then be displayed or used.

Natural Refresh is not guaranteed and should not be considered a definitive substitute for recovering lost data. Natural Refresh should only be used in conjunction with Market Recovery.


Example:

Starting book:


2 YEAR

Bid

Ask

2 YEAR


LevelQuantityPricePriceQuantityLevel
1





1
2





2
3





3
4



4
5



5

Process book update data blocks for the given instrument with a 5-deep book.

1. Update at Bid book level 3, price 99.03, quantity 15.

FIX Syntax example of Update at Bid book level 3, price 99.03, quantity 15:

  • tag 279-MDUpdateAction = 1 (change)
  • tag 1023-MDPriceLevel = 3
  • tag 269-MDEntryType = 0 (Bid)
  • tag 271-MDEntrySize = 15
  • tag 270-MDEntryPx = 99.03
Bid

2 YEAR



2 YEAR

Ask
LevelQuantityPricePriceQuantityLevel
1



1
2



2
3

15

99.03



3
4



4
5



5

2.  Update at Ask book level 3, price 99.93, quantity 40.
FIX Syntax for Updating at Ask book level 3, price 99.93, quantity 40:

  • tag 279-MDUpdateAction = 1 (change)
  • tag 1023-MDPriceLevel = 3
  • tag 269-MDEntryType = 1 (Offer)
  • tag 271-MDEntrySize = 40
  • tag 270-MDEntryPx = 99.93
Bid

2 YEAR



2 YEAR

Bid
LevelQuantityPricePriceQuantityLevel
1



1
2



2
3

15

99.03

99.93403
4



4
5



5

3. Update at Bid book level 2, price 99.04, quantity 25.

FIX Syntax for Updating at Bid book level 2, price 99.04, quantity 25:

  • tag 279-MDUpdateAction = 1 (change)
  • tag 1023-MDPriceLevel = 2
  • tag 269-MDEntryType = 0 (Bid)
  • tag 271-MDEntrySize = 25
  • tag 270-MDEntryPx = 99.04
Bid

2 YEAR



2 YEAR

Ask
LevelQuantityPricePriceQuantityLevel
1





1
2

25

99.04



2
3

15

99.03

99.93403
4



4
5



5

4.  Update at Ask book level 2, price 99.92, quantity 40.

FIX Syntax for Updating at Ask book level 2, price 99.92, quantity 40:

  • tag 279-MDUpdateAction = 1 (change)
  • tag 1023-MDPriceLevel = 2
  • tag 269-MDEntryType = 1 (Offer)
  • tag 271-MDEntrySize = 40
  • tag 270-MDEntryPx = 99.92
Bid

2 YEAR



2 YEAR

Ask
LevelQuantityPricePriceQuantityLevel
1





1
2

25

99.04

99.92402
3

15

99.03

99.93403
4



4
5



5

5. Update at Ask book level 1, price 99.91, quantity 25.

FIX Syntax for Updating at Ask book level 1, price 99.91, quantity 25:

  • tag 279-MDUpdateAction = 1 (change) 
  • tag 1023-MDPriceLevel = 1
  • tag 269-MDEntryType = 1 (Offer)
  • tag 271-MDEntrySize = 25
  • tag 270-MDEntryPx = 99.91 
Bid

2 YEAR



2 YEAR

Ask
LevelQuantityPricePriceQuantityLevel
1



99.91251
2

25

99.04

99.92402
3

15

99.03

99.93403
4



4
5



5

6. Update Bid book level 1, price 99.05, quantity 20.

FIX Syntax for Updating Bid book level 1, price 99.05, quantity 20:

  • tag 279-MDUpdateAction = 1 (change)
  • tag 1023-MDPriceLevel = 1
  • tag 269-MDEntryType = 0
  • tag 271-MDEntrySize = 20
  • tag 270-MDEntryPx = 99.05
Bid

2 YEAR



2 YEAR

Ask
LevelQuantityPricePriceQuantityLevel
1

20

99.05

99.91251
2

25

99.04

99.92402
3

15

99.03

99.93403
4



4
5



5

7. Update Bid book level 4, price 99.02, quantity 30.

FIX Syntax for Updating Bid book level 4, price 99.02, quantity 30:

  • tag 279-MDUpdateAction = 1 (change)
  • tag 1023-MDPriceLevel = 4
  • tag 269-MDEntryType = 0
  • tag 271-MDEntrySize = 30
  • tag 270-MDEntryPx = 99.02
Bid

2 YEAR



2 YEAR

Ask
LevelQuantityPricePriceQuantityLevel
1

20

99.05

99.91251
2

25

99.04

99.92402
3

15

99.03

99.93403
43099.02

4
5



5

8. Update Ask book level 4, price 99.94, quantity 15.

FIX Syntax for Updating Ask book level 4, price 99.94, quantity 15

  • tag 279-MDUpdateAction = 1 (change)
  • tag 1023-MDPriceLevel = 4
  • tag 269-MDEntryType = 1
  • tag 271-MDEntrySize = 15
  • tag 270-MDEntryPx = 99.94
Bid

2 YEAR



2 YEAR

Ask
LevelQuantityPricePriceQuantityLevel
1

20

99.05

99.91251
2

25

99.04

99.92402
3

15

99.03

99.93403
43099.0299.94154
5



5

9. Insert Bid book level 5, price 99.01, quantity 20.

FIX Syntax for Inserting Bid book level 5, price 99.01, quantity 20:

  • tag 279-MDUpdateAction = 0 (new)
  • tag 1023-MDPriceLevel = 5
  • tag 269-MDEntryType = 0
  • tag 271-MDEntrySize = 20
  • tag 270-MDEntryPx = 99.01 
Bid

2 YEAR



2 YEAR

Ask
LevelQuantityPricePriceQuantityLevel
1

20

99.05

99.91251
2

25

99.04

99.92402
3

15

99.03

99.93403
43099.0299.94154
52099.01

5

10. Insert Ask book level 5, price 99.95, quantity 10.

FIX Syntax for Inserting Ask book level 5, price 99.95, quantity 10:

  • tag 279-MDUpdateAction = 0 (new)
  • tag 1023-MDPriceLevel = 5
  • tag 269-MDEntryType = 0
  • tag 271-MDEntrySize = 10
  • tag 270-MDEntryPx = 99.95 
Bid

2 YEAR



2 YEAR

Ask
LevelQuantityPricePriceQuantityLevel
1

20

99.05

99.91251
2

25

99.04

99.92402
3

15

99.03

99.93403
43099.0299.94154
52099.0199.95105