I am using quickfix in Windows with python bindings. I have been able to make market data requests in the past. I recently changed to a different API provider (Cunningham, aka CTS) and am encountering a lot of issues. At least one of them, however, seems to be internal to quickfix. It is baffling me.
When I send a market data request, I get back a response. It is a typical 35=W message, a market snapshot.
Quickfix is rejecting this message because tag 269 appears more than once!
Of course, tag 269 is MDEntryType, it is supposed to occur more than once. Notice also that tag 268, NoMDEntries, is defined and says there are 21 entries in the group.
I think this is internal to quickfix because quickfix is generating an error message and sending it back to CTS. Also, this error aborts the message before it can get passed to the fromApp
function. (I know because my parsers which apply themselves to the message whenever fromApp
is called are not even getting this message).
Any ideas? The message is below.
(edit -- I have turned off the data dictionary in the config file -- could it have anything to do with that?)
<20140915-22:39:11.953, FIX.4.2:XXXXX->CTS, incoming> (8=FIX.4.2 ☺ 9=836 ☺ 35=W ☺ 34=4 ☺ 49=CTS ☺ 56=XXXXX ☺ 52=20140915-22:39:11.963 ☺ 48=XDLCM E_F ZN (Z14) ☺ 387=2559 ☺ 965=2 ☺ 268=21 ☺ 269=0 ☺ 270=124156250 ☺ 271=646 ☺ 1023=1 ☺ 269=0 ☺ 270= 124140625 ☺ 271=918 ☺ 1023=2 ☺ 269=0 ☺ 270=124125000 ☺ 271=1121 ☺ 1023=3 ☺ 269=0 ☺ 270=124109375 ☺ 271=998 ☺ 1023=4 ☺ 269=0 ☺ 270=124093750 ☺ 271=923 ☺ 1023=5 ☺ 269=0 ☺ 270=124078125 ☺ 271=1689 ☺ 1023=6 ☺ 269=0 ☺ 270=124062500 ☺ 271=2011 ☺ 1023=7 ☺ 269=0 ☺ 270=124046875 ☺ 271=1782 ☺ 1023=8 ☺ 2 69=0 ☺ 270=124031250 ☺ 271=2124 ☺ 1023=9 ☺ 269=0 ☺ 270=124015625 ☺ 271=1875 ☺ 1023=10 ☺ 269=1 ☺ 27 0=124171875 ☺ 271=422 ☺ 1023=1 ☺ 269=1 ☺ 270=124187500 ☺ 271=577 ☺ 1023=2 ☺ 269=1 ☺ 270=12420312 5 ☺ 271=842 ☺ 1023=3 ☺ 269=1 ☺ 270=124218750 ☺ 271=908 ☺ 1023=4 ☺ 269=1 ☺ 270=124234375 ☺ 271=1482 ☺ 1023=5 ☺ 269=1 ☺ 270=124250000 ☺ 271=1850 ☺ 1023=6 ☺ 269=1 ☺ 270=124265625 ☺ 271=1729 ☺ 1023=7 ☺ 269=1 ☺ 270=124281250 ☺ 271=2615 ☺ 1023=8 ☺ 269=1 ☺ 270=124296875 ☺ 271=1809 ☺ 1023=9 ☺ 269=1 ☺ 27 0=124312500 ☺ 271=2241 ☺ 1023=10 ☺ 269=4 ☺ 270=124156250 ☺ 271=1 ☺ 10=140 ☺ )
<20140915-22:39:12.004, FIX.4.2:XXXX->CTS, event> (Message 4 Rejected: Tag appears more than once:269)
<20140915-22:39:12.010, FIX.4.2:XXXX->CTS, outgoing> (8=FIX.4.2 ☺ 9=102 ☺ 35=3 ☺ 34=4 ☺ 49=XXXX ☺ 52=20140915-22:39:12.009 ☺ 56=CTS ☺ 45=4 ☺ 58= Tag appears more than once ☺ 371=269 ☺ 372=W ☺ 10=012 ☺ )
(edit -- I have turned off the data dictionary in the config file -- could it have anything to do with that?)
Yep, that's exactly the problem.
Without the DD, your engine doesn't know when a repeating group ends or begins. As far as it's concerned, there's no such thing as repeating groups.
You need a DD, and you need to make sure it matches your counterparty's message and field set. If they've added custom fields or messages, you need to make sure your DD reflects that.