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)