objectcomputing / mFAST

A FAST (FIX Adapted for STreaming) encoder/decoder
http://objectcomputing.github.io/mFAST
BSD 3-Clause "New" or "Revised" License
220 stars 114 forks source link

Trouble when decoding MOEX messages #28

Closed ghost closed 10 years ago

ghost commented 10 years ago

Hi, I'm having trouble decoding some MOEX messages (FIX50SP2_ALL::X_OBR_FOND_cref) using the following template : ftp://ftp.micex.com/pub/FAST/ASTS/template/FIX50SP2-ALL.xml

When using the same instance of the decoder, i've got garbage value in the decoded field (c.f. price and qty below). This doesn't happens when using a new instance of the decoder every times i have a new message.

When looking at the template, the misdecoded field are all using the delta operator. How can i see if this is a bug in the mFast libraries with the delta operator or an error with data not corresponding to the template ?

Thanks a lot in advance, Best regards, Greg.

Same decoder instance for all messages : X-OBR-FOND: 0 BeginString: FIXT.1.1 0 MessageType: X 0 SenderCompID: MOEX 0 ApplVerID: 9 0 MsgSeqNum: 19211 0 SendingTime: 20131223055959676 0 GroupMDEntries: 000 [0]: 00000 MDUpdateAction: 4294967173 00000 MDEntryType: 1 00000 MDEntryID: S00008529005960097593490004000066802029009850099000... 00000 Symbol: MRKHP 00000 RptSeq: 24 00000 MDEntryPx: 873636_10^18 00000 MDEntrySize: 173015_10^52 00000 TradingSessionID: TQBS

Compared to new instances for each messages : X-OBR-FOND: 0 BeginString: FIXT.1.1 0 MessageType: X 0 SenderCompID: MOEX 0 ApplVerID: 9 0 MsgSeqNum: 19211 0 SendingTime: 20131223055959676 0 GroupMDEntries: 000 [0]: 00000 MDUpdateAction: 0 00000 MDEntryType: 1 00000 MDEntryID: S000007188 00000 Symbol: MRKHP 00000 RptSeq: 24 00000 MDEntryPx: 7188_10^-4 00000 MDEntrySize: 168_10^0 00000 TradingSessionID: TQBS

huangminghuang commented 10 years ago

From your description, it looks like your fast stream is encoded with dictionaries been reset between each message. Consult your exchange to see if that is the case. If my guess is right, you need to pass "true" as the third parameter when you invoke fast_decoder::decode().

If that is not the case, please provide me your input fast stream so I can diagnose the problem.

ghost commented 10 years ago

You were right. It is now working well. Out of curiosity, is this usage of delta operator common among the providers ?

Anyway, thanks a lot !