QuickFIX/J Error value out of range for this tag
Asked Answered
P

1

6

I've implemented a Java program that uses QuickFIX/J (version 1.6.0). It gets a FIX message (execution report) from the counterparty with the repeating group NoPartyIDs (Tag 453) with following the values

(Tag 453) NoPartyIDs = 4

(Tag 447) PartyIDSource = D
(Tag 448) Party ID = XXX
(Tag 452) PartyRole = 1

(Tag 447) PartyIDSource = D
(Tag 448) Party ID = XXX
(Tag 452) PartyRole = 66

(Tag 447) PartyIDSource = D
(Tag 448) Party ID = XXX
(Tag 452) PartyRole = 55
(Tag 802) NoPartySubIDs = 1

(Tag 447) PartyIDSource = D
(Tag 448) Party ID = XXX
(Tag 452) PartyRole = 7

Screenshot from this part of the message: enter image description here

My program sends automatically an reject message with

(Tag 58) Text = "Value is incorrect (out of range) for this tag"
(Tag 371) RefTagID = 452
(Tag 373) SessionRejectReason = 5

Screentshot from the whole response: enter image description here

Now, I am asking me, why my program reacts this way when it received the FIX message. Because the values of the message regarding tag 452 PartyRole are not out of range (look here for the documentation), or?!

The source file of the QuickFix/J implementation also should know these values.. Here the source:

/* Generated Java Source File */
/*******************************************************************************
 * Copyright (c) quickfixengine.org  All rights reserved. 
 * 
 * This file is part of the QuickFIX FIX Engine 
 * 
 * This file may be distributed under the terms of the quickfixengine.org 
 * license as defined by quickfixengine.org and appearing in the file 
 * LICENSE included in the packaging of this file. 
 * 
 * This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING 
 * THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A 
 * PARTICULAR PURPOSE. 
 * 
 * See http://www.quickfixengine.org/LICENSE for licensing information. 
 * 
 * Contact [email protected] if any conditions of this licensing 
 * are not clear to you.
 ******************************************************************************/

package quickfix.field;

import quickfix.IntField;


public class PartyRole extends IntField {

    static final long serialVersionUID = 20050617;

    public static final int FIELD = 452;
    public static final int EXECUTING_FIRM = 1;
    public static final int BROKER_OF_CREDIT = 2;
    public static final int CLIENT_ID = 3;
    public static final int CLEARING_FIRM = 4;
    public static final int INVESTOR_ID = 5;
    public static final int INTRODUCING_FIRM = 6;
    public static final int ENTERING_FIRM = 7;
    public static final int LOCATE_LENDING_FIRM = 8;
    public static final int FUND_MANAGER_CLIENT_ID = 9;
    public static final int SETTLEMENT_LOCATION = 10;
    public static final int ORDER_ORIGINATION_TRADER = 11;
    public static final int EXECUTING_TRADER = 12;
    public static final int ORDER_ORIGINATION_FIRM = 13;
    public static final int GIVEUP_CLEARING_FIRM = 14;
    public static final int CORRESPONDANT_CLEARING_FIRM = 15;
    public static final int EXECUTING_SYSTEM = 16;
    public static final int CONTRA_FIRM = 17;
    public static final int CONTRA_CLEARING_FIRM = 18;
    public static final int SPONSORING_FIRM = 19;
    public static final int UNDERLYING_CONTRA_FIRM = 20;
    public static final int CLEARING_ORGANIZATION = 21;
    public static final int EXCHANGE = 22;
    public static final int CUSTOMER_ACCOUNT = 24;
    public static final int CORRESPONDENT_CLEARING_ORGANIZATION = 25;
    public static final int CORRESPONDENT_BROKER = 26;
    public static final int BUYER_SELLER = 27;
    public static final int CUSTODIAN = 28;
    public static final int INTERMEDIARY = 29;
    public static final int AGENT = 30;
    public static final int SUB_CUSTODIAN = 31;
    public static final int BENEFICIARY = 32;
    public static final int INTERESTED_PARTY = 33;
    public static final int REGULATORY_BODY = 34;
    public static final int LIQUIDITY_PROVIDER = 35;
    public static final int ENTERING_TRADER = 36;
    public static final int CONTRA_TRADER = 37;
    public static final int POSITION_ACCOUNT = 38;
    public static final int CONTRA_INVESTOR_ID = 39;
    public static final int TRANSFER_TO_FIRM = 40;
    public static final int CONTRA_POSITION_ACCOUNT = 41;
    public static final int CONTRA_EXCHANGE = 42;
    public static final int INTERNAL_CARRY_ACCOUNT = 43;
    public static final int ORDER_ENTRY_OPERATOR_ID = 44;
    public static final int SECONDARY_ACCOUNT_NUMBER = 45;
    public static final int FORIEGN_FIRM = 46;
    public static final int THIRD_PARTY_ALLOCATION_FIRM = 47;
    public static final int CLAIMING_ACCOUNT = 48;
    public static final int ASSET_MANAGER = 49;
    public static final int PLEDGOR_ACCOUNT = 50;
    public static final int PLEDGEE_ACCOUNT = 51;
    public static final int LARGE_TRADER_REPORTABLE_ACCOUNT = 52;
    public static final int TRADER_MNEMONIC = 53;
    public static final int SENDER_LOCATION = 54;
    public static final int SESSION_ID = 55;
    public static final int ACCEPTABLE_COUNTERPARTY = 56;
    public static final int UNACCEPTABLE_COUNTERPARTY = 57;
    public static final int ENTERING_UNIT = 58;
    public static final int EXECUTING_UNIT = 59;
    public static final int INTRODUCING_BROKER = 60;
    public static final int QUOTE_ORIGINATOR = 61;
    public static final int REPORT_ORIGINATOR = 62;
    public static final int SYSTEMATIC_INTERNALISER = 63;
    public static final int MULTILATERAL_TRADING_FACILITY = 64;
    public static final int REGULATED_MARKET = 65;
    public static final int MARKET_MAKER = 66;
    public static final int INVESTMENT_FIRM = 67;
    public static final int HOST_COMPETENT_AUTHORITY = 68;
    public static final int HOME_COMPETENT_AUTHORITY = 69;
    public static final int COMPETENT_AUTHORITY_OF_THE_MOST_RELEVANT_MARKET_IN_TERMS_OF_LIQUIDITY = 70;
    public static final int COMPETENT_AUTHORITY_OF_THE_TRANSACTION = 71;
    public static final int REPORTING_INTERMEDIARY = 72;
    public static final int EXECUTION_VENUE = 73;
    public static final int MARKET_DATA_ENTRY_ORIGINATOR = 74;
    public static final int LOCATION_ID = 75;
    public static final int DESK_ID = 76;
    public static final int MARKET_DATA_MARKET = 77;
    public static final int ALLOCATION_ENTITY = 78;

    public PartyRole() {
        super(452);
    }

    public PartyRole(int data) {
        super(452, data);
    }

}

Maybe you had a similiar problem or you see my fallacy..

Thank you for your help dudes!!!

Psychopathy answered 22/4, 2015 at 8:25 Comment(2)
Are you using DataDictionary and the proper configs ? Are these values defined in your DataDictionary ? Same issue here it seems quickfix-j.364392.n2.nabble.com/…Countermeasure
hey! Yes, I am using a DataDictionary. The message definition contains a <component name="Parties" required="N"/> and this is the field which causes the problems. But the range of its values aren't defined in this xml-file but in the Java file, or?!Psychopathy
I
8

There is a field PartyRole=66 in the ExecutionReport, which is not a valid value for the PartyRole in FIX 4.4 (your reject message has 8=FIX.4.4). The documentation link you post is for FIX 5.0 SP2.

If your counterparty is sending PartyRole values that are not supported in FIX 4.4, you might consider creating a separate Data Dictionary to support them for this particular counterparty.

Irritation answered 22/4, 2015 at 9:5 Comment(10)
Changed the link to FIXIMATE 4.4 link instead of OnixBiz link to PartyRole.Irritation
That was the problem! Thank you!!! I am using the field in version 4.4 but the counterparty sends it in version 5.0! The different possible values in both versions regarding the tag 452 cause the problem!Psychopathy
@Psychopathy I suppose you will try to create a seperate Data Dictionary for this counterparty?Irritation
Yes. I've downloaded the standard DataDictionary (FIX 4.4 xml from quickfixengine.org) and now I am customizing this one.. Most of the messages I recieve from the counterparty are in FIX 4.4, sometimes fields from 5.0.. So 4.4 is the best version to customize.. Isn't that a propper way?Psychopathy
@Psychopathy I've never had to edit a Data Dictionary so I have no experience there. I did read about people having to edit their DD for custom tags. I think it would be best to create a seperate DD based on the 4.4 DD. So you're doing it right as far as I can tell.Irritation
I really have to wonder why two people gave this answer -1 when I clearly got the right answer. Would those people want to give at least an explanation why they downvoted?Irritation
I'm very surprised that you've never modified a DD before, @Irritation I've done it for every single FIX project I've been a part of. In fact, I recommend doing that and regenerating the source based on it.Strontium
@GrantBirchmeier I've only been involved in one FIX project with one counterparty and so far tweaking the DD has not been necessary for me. I am however interested in FIX/QuickFIX so I research a lot of things. If I get around to it I will certainly try it so that I have that experience.Irritation
I don't understand the downvotes, too!! The answer was EXACT the right one and to find the problem was for sure a bit tricky.. Nice work @TT and thanks again for your help!Psychopathy
Downvotes are random and sometimes loosers go around downvoting wherever they want, without any plausible reason.Countermeasure

© 2022 - 2024 — McMap. All rights reserved.