Question

I have a fairly simple quickfix/n setup to the ICE test platform but the engine at this end is rejecting trade capture reports (ae) - stating that field 828 (TrdType) has an incorrect data format for the value.

It looks like the exchange is sending data (an 'S') that quickfix is not expecting. Everything is supposed to be 44.. could this be a version issue or is the exchange just misbehaving?

initiator.config

ValidateFieldsOutOfOrder=N
ValidateFieldsHaveValues=N
ValidateUserDefinedFields=N
DataDictionary=../../spec/FIX44.xml

Subscription code

public TradeCaptureReportRequest ReportRequestSubscribe()
{
    TradeCaptureReportRequest req = new TradeCaptureReportRequest(new TradeRequestID("187345347856"), new TradeRequestType(TradeRequestType.ALL_TRADES));
    req.SubscriptionRequestType = new SubscriptionRequestType(SubscriptionRequestType.SNAPSHOT_PLUS_UPDATES);
    return req;
}

Calling code

if (_initiator.IsLoggedOn)
{
    MessageFactory mFact = new MessageFactory();
    fixApp.sendMessage(mFact.ReportRequestSubscribe());
}

AD and AQ messages

8=FIX.4.49=9435=AD34=249=1006350=testsubid52=20140210-11:40:39.44556=ICE263=1568=187345347856569=010=231

8=FIX.4.49=10035=AQ34=249=ICE52=20140210-11:40:39.60056=1006357=testsubid568=187345347856569=0749=0750=010=042

AE and Reject message

20140210-16:14:03.693 : 8=FIX.4.49=71235=AE49=ICE34=352=20140210-16:14:03.68156=1006357=testsubid571=386487=0856=0828=S150=F17=5325010939=2570=N55=279100548=BRZ SMZ0014_OMCE000000413211121422=8461=OCXXXX202=4.139403=90855287916=20141201917=2014123132=1.031=2.639018=19022=175=2014021060=20140210-16:14:00.5189413=0552=154=137=5325010911=53250109453=11448=scadv-block447=D452=11448=36 South Capital Advisors LLP447=D452=13448=8449447=D452=56448=PVM Oil Associates Ltd-Broker447=D452=1448=10063447=D452=61448=ice_hd447=D452=12448=8449447=D452=35448=8745447=D452=4448=38023447=D452=51448=JP Morgan Securities LLC447=D452=60448=W447=D452=54376=1010000042303dab89ac4149928cb31a46d4c76b0210=060
20140210-16:14:03.855 : 8=FIX.4.49=12535=334=349=1006350=testsubid52=20140210-16:14:03.85356=ICE45=358=Incorrect data format for value371=828372=AE373=610=104

20140210-16:14:03.847 : Could not convert field: Could not convert string to int (S): The first character must be a digit or a minus sign
20140210-16:14:03.853 : Message 3 Rejected: Incorrect data format for value (Field=828)

and the quickfix component raises a real error:

A first chance exception of type 'QuickFix.FieldConvertError' occurred in QuickFix.dll
A first chance exception of type 'QuickFix.IncorrectDataFormat' occurred in QuickFix.dll
Was it helpful?

Solution

Look at your reject message (which I've added field separators into for readability):

8=FIX.4.4|9=125|35=3|34=4|49=10063|50=testsubid|52=20140210-16:05:44.231|56=ICE|45=4|58=Incorrect data format for value|371=828|372=AE|373=6|10=101

See fields 371 and 372. Those fields tell you that field 828 is wrong in an AE message. Field 45 tells you that the rejected AE message has seq number=4.

From there you should be able to figure out the bad field that is being sent to you.

As to your ICE-specific issue:

Check ICE's latest spec (2.0.34 at time of this answer). "S" is indeed a valid value. You'll need to update your DD with all valid values, or perhaps just change the field to a string (or char) and get rid of the enumeration list altogether. If you delete the enumeration list, QF/n will accept any value of the correct type (e.g. string or char).

OTHER TIPS

UseDataDictionary - Tells session whether or not to expect a data dictionary. You should always use a DataDictionary if you are using repeating groups.

The website says you should use a data dictonary and you are playing against the rules. The error you are getting currently isn't the area to be concerned about at present.

field 828 (TrdType) has an incorrect data format for the value

Albeit this is the real issue you should be looking into.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top