Placing a new order contingent on cancellation of some existing orders

Imported from previous forum

I’ve searched the site and can’t find any mention of anything like this. I have a potential requirement to handle a request to place an order only if one or more existing stop orders are cancelled. The requester will know the OrderIDs or ClOrdIDs of the existing stop orders. My question is whether there is some way that I’ve not found to specify the contingency in FIX.

It isn’t a contingent order as in NewOrderList, because it is contingent on a group of cancel requests. It isn’t a MassOrder because there are no contingencies between the individual requests in that message. My best thought is that it is really a NewSingleOrder with a TargetStrategy(847) with the ID of each order that needs cancelling as a parameter to the strategy (a StrategyParameterValue(960)). Does anyone have any better suggestions?

Hi Daniel,

please take a look at EP100 which was submitted by Thomson Reuters in 2011 as an extension. It allows to use NewOrderSingle to cancel a specific order or multiple orders having the same attributes by means of the field TriggerScope(1628) together with TriggerAction(1101) = 3 (cancel).

0 – This order (default)
1 – Other order
2 – All other orders for the given security
3 – All other orders for the given security and price
4 – All other orders for the given security and side
5 – All other orders for the given security, price and side

Regards,
Hanno.

Hi Hanno,

Thank you for the suggestion. I forgot about the TriggeringInstruction. I can see that I could send a NewOrderSingle with TriggerType(1100)=5(on order entry), TriggerAction(1101)=3(cancel), TriggerScope(1628)=1(other order) and RefOrderID(1080) or RefClOrdID(1806) set to the ID of the order to be cancelled. This is very close to what I want, but unfortunately it only supports triggering the cancellation of one order by its ID rather than one or more which is my requirement.

As the orders to be cancelled are all stop orders on the same side I might use TriggerScope(1628)=4(all other orders for the given security and side) but really this is not the correct instruction and in effect I’d have to introduce a ROE convention that “all” doesn’t really mean “all” in this case on this particular interface.

Unfortunately it does look like I’ll have to use a some kind of custom tag(s) to achieve this functionality because TriggerScope(1628) isn’t even a Reserved100Plus.

“All” never means all from a system perspective, there will always need to be another context, i.e. “all from the same user” or “all submitted from the same user over the same session”. FIX has intentionally not introduced an option to list individual orders for cancellation (OrderMassCancel or OrderMass Action). I guess you want atomicity and give the responsibility for deletion to the receiving end of your instruction. A filter (security/side/price) is the better tool to identify “all” as there is a business context related to the order you want to cancel prior to submission of the new one. A list of IDs is explicit but a purely technical solution to a functional problem. In a high frequency trading environment, order identifiers come and go in milliseconds, making it cumbersome to always tracks what needs to be removed.

TriggerScope does not permit user-defined values as this equates to concepts and should therefore go through the standard extension process for review and discussion.

Thanks. I will bear in mind your sensible guidelines if we go down this route.