How to disable quickfix validation - quickfix

I need to disable quickfix validation.
Setting UseDataDictionary=N does not work.
Removing paths to dictionary files in the config file does not work.
Renaming xml files in the directory to some other extension does not work.
Still rejecting messages based on failed validation.
The directory is correct. Please help! I'm sure I am missing something trivial.
Thank you!
PS - in reply to some questions:
The error I am getting is: 58=Tag specified out of required order 371=143 372=8
Indeed, the client is sending tag 143 in the message body, not the header. The client will not change the code. I tried adding tag 143 to the ExecutionReport body, but that did not help. I am weary of taking tag 143 out of the header just for these guys.
PS - config file:
[DEFAULT]
ConnectionType=initiator
ReconnectInterval=60
FileStorePath=store
FileLogPath=log
StartTime=00:00:00
EndTime=00:00:00
UseDataDictionary=N
DataDictionary=/xxxxxx
TransportDataDictionary=/xxxxx
ResetOnLogon=N
DefaultApplVerID=9
[SESSION]
BeginString=FIX.4.4
SenderCompID=xxxxxx
TargetCompID=xxxxxx
SocketConnectHost=xxxxxxxxx
SocketConnectPort=52400
HeartBtInt=30

You can disable this specific check by setting the ValidateFieldsOutOfOrder parameter to N in your configuration file. See Configuring QuickFIX.

You have to have UseDataDictionary=Y if you have repeating groups, it tells QuickFIX how to handle items in repeated groups. "Tag specified out of required order 371=143 372=8" usually means that a header tag is in the message body, a body tag is in the header, a repeating group tag is in the body, a body tag is in a repeated group etc.. Since the client is sending tag 143 in the message body rather than the header you will need to edit the DataDictionary so that that tag appears in the message body instead of the header. Since you can set the DataDictionary on a per connection basis I would strongly recommend that you create a copy of the original dictionary, give it a client specific name and edit that file and then connect it to that connection keeping the original clean.

Related

quickfix Message Rejected: Invalid tag number:

I am using QuickFix/J 1.14.3 with fix4.2 as both Initiator and Acceptor.
On Acceptor I tried to disable all Validation checks in the config file as seen below. The fromAdmin() is called with the violating message. I am not sure I want to mess with the data dictionary but I thought by disabling all checks I could actually get the message. The acceptor sets a field as follows.
newOrderSingle.setField(new IntField(6401, 79 ));
Any help would be appreciated.
UseDataDictionary=N
DefaultMarketPrice=12.30
ValidateUserDefinedFields=N
ValidateFieldsHaveValues=N
ValidateFieldsOutOfOrder=N
ValidateUserDefinedMessages=N
UseDataDictionary=N
# ACCEPTOR SIMULATOR
[session]
SenderCompID=baml
TargetCompID=mjt
BeginString=FIX.4.2
SocketAcceptPort=9879
CheckCompID=N
First of all add property
AllowUnknownMsgFields=Y
And use data dictionary it allows to process groups.
UseDataDictionary=Y

Can I add X-Message-Delivery to php mailer?

I opened source code of my email found an attribute called : X-Message-Delivery. What does it mean? Is it important?
Can I add this attribute to my php mailer, is it modifiable?
You can add any headers you like with PHPMailer. Whether they do or mean anything is an entirely separate matter. Anything starting with X- is used to denote a non-standard, and usually informational, header (defined in RFC822).
Take a look at this question to see what that particular header means - it's informational and added by hotmail.

FIX Message Can 35=X does not have Symbol or SecID/SecIDSource

Hi I need help to understand, if 35=X message should contain Symbol/SecID within the repeating group.
The FIX Specification indicates that under the repeating group both 55 and 48/22 are optional.
I received a message from my client without a symbol tag, please help me undersatnd if that was a bad formed message
20150923-15:06:14.976 : 8=FIXT.1.19=33635=X34=19153349=SENDER52=20150923-15:06:14.63756=RECEIVER268=8279=0269=1270=99.609375271=289279=0269=1270=99.6171875271=241279=0269=1270=99.625271=154279=0269=1270=99.6328125271=139279=0269=0270=99.6015625271=268279=0269=0270=99.59375271=244279=0269=0270=99.5859375271=171279=0269=0270=99.578125271=21610=198
You are advised to treat the default FIX message and field definitions as a set of suggested definitions.
In practice, no commercial FIX counterparty uses these definitions as-is. Every counterparty I've connected to makes modifications, adding or removing fields from messages or groups, creating new fields, or sometimes adding entirely new messages. No counterparty supports every message and field.
When connecting to a counterparty, do not assume anything. Your counterparty should provide documentation on how they expect their interface to be used, and which messages and fields they will send and which they expect to receive from you.
You need to read their specs and modify your FIXnn.xml DataDictionary file to match what they will be sending you.
If their spec says they will send you Symbol and/or SecurityID in a 35=X message, you need to make sure your DD file matches that.
This page might be helpful to you. (It's technically for the C# QuickFIX/n, but the DD file is the same for all QF versions.)
http://quickfixn.org/tutorial/custom-fields-groups-and-messages.html

QuickFIXJ FieldnotFound exception

In my application I am receiving a huge FIX messages. Should I check the tag is present for all the tags I retrieving. If I am not checking the presence of a tag, I get FieldNotFound exception in case the tag is not exist in the message. Is there way to bypass the isSetField(Field) method for checking for the tag is present in the message. Any help would be appreciated.
Thanks,
Bibin
You should switch on message validation within your quickfix/j settings
This will mean that you no longer need to do an explicit isSet check on any tag that is deemed mandatory, as any message missing such a tag would be rejected.
Once you've done this, you would still need to do an isSet for tags that are optional in your messages.
Check out the FIX data dictionary documentation : http://www.quickfixn.org/tutorial/custom-fields-groups-and-messages

QuickFixn Outgoing Connection

I was hoping someone can shed some light on how the Quickfixn engine handles outgoing FIX messages... I have an outgoing connection set up, and I'm getting heartbeats. When I generate an outgoing message however, it gets rejected because it says that tag 58 is invalid for this message type... (35=AE) ... Normally, if this was an inbound connection, I could just modify the Data Dictionary and everything would be fine... but seeing as how this is an outgoing connection, plus I have my
UseDataDictionary property set to 'N' ... what does the quickfix engine use to validate the outgoing message? Can something be changed to allow the engine to pass the message ? Or is the only resolution not to include this tag in my outgoing message?
Any help on this matter would be greatly appreciated.
Edit-
The message is getting rejected by the quickfix engine. The message that I'm constructing and the respective reject message are:
8=FIX.4.4 9=400 35=AE 34=38 49=XXX 52=20130528-23:11:04.040 56=YYY 31=1.3022 32=1000000.00 39=0 55=EUR/USD 58=ABCD 60=20130528-22:34:52.000 64=20130531 75=20130529 570=N 571=ABCD 5495=0 5971=1302200.00 552=1 54=2 37=ABCD 453=3 448=LP1-DBAB 447=D 452=17 448=XXX 447=D 452=1 448=XXX 447=D 452=19 15=EUR 120=USD 10=082
8=FIX.4.4 9=130 35=3 34=38 49=YYY 52=20130528-23:11:04.283 56=XXX 45=38 58=Tag not defined for this message type 371=58 372=AE 373=2 10=033
I've seen incoming messages get rejected by the quickfix engine because the data dictionary didn't have the correct specs for the message... I thought this might be the same thing but the outgoing connection doesn't seem to use the data dictionary.
Your FIX library does not reject a message. The message is sent to the counter-party instead, which then rejects your message as invalid upon receiving and validating it. And the reason for that is because tag 58, if present, must be a part of “NoSides repeating group (tag 552), which in your case it is not, making the message ill-formed. What you have to do is send a "logically" correct message. I recommend you refer to the appropriate FIX protocol specification for a reference on how to construct a correct message.
Vlad's answer is correct, but I want to alert you to one other danger in your question.
I have my UseDataDictionary property set to 'N'
I am 90% sure you don't want to do this. Whatever you think you're gaining by using =N is probably based on a misunderstanding of something.
Without a DD, you can't read messages with repeating groups, because the engine won't know what fields go in what group.
In practice, every venue uses repeating groups. Therefore, you'll need to set UseDataDictionary=Y and you need to specify an xml file with DataDictionary=<file>.
The only reason we allow =N in QF/n is to be consistent with QF/C++ and QF/j.