I'm trying to set the partyID field in quickFix Python API and I face an argument type error: in method 'FieldBase_setField', argument 2 of type 'int'

58 views Asked by At

I need to create a group to multiple PartyIDs, PartyIDSource and PartyRoles while sending in an order.

My excepted message of the FIX Protocol should look like this:

8=FIX.4.4|9=270|35=D|34=1234|49= ***** |52=20231113 00:00:00.000|56=****|11=1|15=USD|21=1|22=4|38=1|40=1|54=1|55=EURUSD|59=3|60=20231113-20231113 00:00:00.000|167=FOR|453=3|448=18175946|447=D|452=3|448=18175946|447=D|452=38|448=18175946|447=D|452=11|775=0|10=137

If you see tags 448, 447 and 452 are repeated thrice. I'm trying to replicate this with the relevant tag value pairs.

   order = fix.Message()
        header = order.getHeader()
        header.setField(fix.MsgType(fix.MsgType_NewOrderSingle))
        order.setField(fix.Symbol(symbol))
        order.setField(fix.Side(side))
        order.setField(fix.OrdType(fix.OrdType_MARKET))
        order.setField(fix.OrderQty(quantity))
        order.setField(fix.SecurityType("FOR"))
        order.setField(fix.ClOrdID("1"))
        order.setField(fix.TimeInForce(fix.TimeInForce_IMMEDIATE_OR_CANCEL))
        order.setField(fix.HandlInst(1)

        # Add TransactTime field with the current timestamp
        t = fix.TransactTime()
        order.setField(t)

        # Manually construct the repeating group for PartyIDs
        order.setField(fix.NoPartyIDs(3))
        noPartyIDs = fix.NoPartyIDs(3)
        for i in range(2):  # Three entries in the Parties group
            noPartyIDs.setField(fix.PartyID("18175946"))
            noPartyIDs.setField(fix.PartyIDSource('D')
            noPartyIDs.setField(fix.PartyRole(i))
            order.addGroup(noPartyIDs)

        print("Order to be placed: ", order.toString())
        # Send the order to the target
        fix.Session.sendToTarget(order, sessionID)
0

There are 0 answers