Wrong FIX implementation on cTrader server side
Wrong FIX implementation on cTrader server side
02 Nov 2021, 11:15
A new order single message with bad volume is answered with a
35 = j (Business Message Reject <j>)
message.
It MUST be answered with an
35 = 8 (Execution Report <8>)
Otherwise it is not possible to set the order to a rejected status on client side.
Please see current FIX implementation standard: https://www.onixs.biz/fix-dictionary/4.4/msgType_j_106.html
WHEN SHOULD A Business Message Reject <j> NOT BE USED:
Situation: New Order - Single <D>
Appropriate Response: Use the Execution Report <8> message
Kindly adapt your FIX implementation.
Replies
ctid692448
02 Nov 2021, 11:56
( Updated at: 21 Dec 2023, 09:22 )
RE:
PanagiotisCharalampous said:
Hi ctid692448,
We consider our implementation correct. Business Message Reject is sent because the order validation fails. You will receive the same message if for example you pass a non existent symbol. We do not event attempt to execute the order, hence you cannot receive an Execution Report. The order cannot be rejected because it is not a valid order, the message is nonsensical.
Best Regards,
Panagiotis
Thanks for answering. It is bad practice because it is not according to FIX standards.
Good practice would be:
Not attempting to execute an order = not executing an order -> sending an order execution with a rejection of the order containing the reason for the rejection.
Please have a look at the link I posted above and scroll a bit down:
There it is extra stated that a business rejection message is not the right answer to a new order single. Please consider making the developers life easier by sticking to broad spread FIX rules being applied by (almost) everyone. You would also do a favor to yourself as a easier to implement cTrader FIX protocol will cause more people using it.
@ctid692448
PanagiotisCharalampous
02 Nov 2021, 11:34
Hi ctid692448,
We consider our implementation correct. Business Message Reject is sent because the order validation fails. You will receive the same message if for example you pass a non existent symbol. We do not event attempt to execute the order, hence you cannot receive an Execution Report. The order cannot be rejected because it is not a valid order, the message is nonsensical.
Best Regards,
Panagiotis
Join us on Telegram and Facebook
@PanagiotisCharalampous