Search code examples
python-3.xpython-3.6quickfix

Quickfix Field Tag is Invalid: 54


Hello I am trying to use Quickfix with FIX 4.4 using a Python Wrapper for a personal resume builder. I have googled to all over for help with this but haven't found anything to figure this out.

So in Quickfix's Data Dictionary here:

field number='54' name='Side' type='CHAR'

It is telling us that this tag must be a CHAR.

However in our method to send an order looks like this:

    def sendOrder(self, tradeSide):
    print("Creating the following order: ")
    cTime = datetime.utcnow()
    qOrder = fix.Message()
    print(qOrder)
    qOrder.getHeader().setField( fix.BeginString("FIX.4.4") )
    print(qOrder)
    qOrder.getHeader().setField(35, "D" )       
    print(qOrder)
    qOrder.getHeader().setField(49, "Place_To_Go")
    print(qOrder)
    qOrder.getHeader().setField(56, "Place_To_Trade")
    print(qOrder)
    qOrder.getHeader().setField(43,"Y")
    print(qOrder)
    qOrder.getHeader().setField(52, str(cTime))
    print(qOrder)

    qOrder.setField(40, chr(1) )
    print(qOrder)
    qOrder.setField(11, str(self.genOrderID()))
    print(qOrder)
    qOrder.setField(311, "EUR")
    print(qOrder)
    qOrder.setField(309, "EUR/USD.E.FX")
    print(qOrder)
    qOrder.setField(305, "111") 
    print(qOrder)
    qOrder.setField(54, chr(1))
    print(qOrder)
    qOrder.setField(60, str(cTime))
    print(qOrder)
    qOrder.setField(38, "1" )
    print(qOrder)
    qOrder.setField(59, "1" )

    print("Order:" + str(qOrder))
    print("ayyy")

    fix.Session_sendToTarget(qOrder)

You can see in this line: qOrder.setField(54, chr(1))

That we are trying to force it to become a char however when we send the message to the server we still recieve:

(Invalid message: Field tag is invalid: 54)

In a tester online our FIX message appears to be valid on this website:

http://fixparser.targetcompid.com?sharedlink=-LF0tkvCToW5RzneNJg2

Input this key:

jaiPj3brnf7tlgy5X28BgqwCwxpIq7H%BH6b81joE!rUzWof9hQvvby3

Does anyone have any experience in why it is still blatantly rejecting our message?

Thank you for reading.


Solution

  • If CHAR(1) is actually ASCII code 1, this is the SOH character (Start Of Heading). That is not a valid value for tag 54. You want the character 1, not SOH.