« The Power of the Apama Name | Main | Apama Wins Market Surveillance Deal at Turquoise »

Tuesday, January 22, 2008

Apama for Smart Order Routing

Posted by Chris Martins

Today Progress announced the Progress Apama Smart Order Router Accelerator.  This extends the core Apama algorithmic trading platform with functionality that is focused on the intelligent routing of orders to different equities markets (exchanges, MTFs, crossing networks and comparable venues.)  Accelerators leverage specific elements of the Apama CEP platform (in this instance, Apama's event processing language for the routing logic, customizable dashboards, and our breadth of connectivity), and focus those capabilities on specific market requirements. 

Our experience with existing customers made it clear that Apama can help "accelerate" the deployment of solutions that address some of the requirements within MiFID and Reg NMS for best execution.  This announcement is a follow-on to a similar one from last year in which we announced an Accelerator with a focus on FX Market Aggregation.


TrackBack URL for this entry:

Listed below are links to weblogs that reference Apama for Smart Order Routing:


Brian Connell

Quick question. When I think about order routing (and I know next to nothing about it), it seems to me that this only requires a single event. Is there any complex event processing going on with order routing? Thanks. Brian

Chris Martins

Thanks for the question.

Routing an order is really not a single event. There is a potentially significant amount of CEP logic to be applied in response to many events. The market challenge is to understand the nature of the different trading venues in terms of trade execution and incorporate that logic into decisions that govern where and how to route particular orders and/or how to split up orders. Different trading venues may have different strengths with regard to available liquidity (what prices are available, what market depth is available, the cost of executing the trade, the "opportunity" cost of not getting the fill at the price seen, the likely impact of a trade on market price, and a host of other factors) and those will be different depending upon the specific symbols and how much one is seeking to buy or sell. That picture of liquidity changes extremely quickly.

The trading algorithms themselves will have their own goals in terms of execution (do I want best price, do I want to be sure to execute within a certain time regardless of price, some combination of both?). This is further compounded when you toss in different order types: LIMIT, Immediate or Cancel (IOC) or other.

As example, an SOR might see best price on one market and route an order, but 10ms later see a better price on another market, then pull the order and route to the other market. Or post a quantity to 3 markets in ratios 40, 40, 20 … get a partial fill on one market and re-balance the remaining quantity across the markets to preserve the sought-after ratio.

So smart order routing is not a question of placing a single order in a specific venue, but rather the continuous decision-making that is necessitated by the nature of markets and their participants.

david luckham

Seems to have a lot of race conditions in what you describe.
How does your SOR (or more accurately as you describe it, Smart Order Execution) deal with race conditions?
- David


I think the race condition David L. is referring to is “when does a SOR stop trying to re-price/re-balance” based on the variability of market conditions that it’s looking at. It’s sort of a recursion problem, so when does the SOR stop and say “enough is enough I’m not going to try anymore adjustments to complete the order”.

A fair question really, there are practical limits to how sophisticated an SOR strategy can get. For example, when the remaining quantity in the order hits a minimum threshold it simply has a ‘default’ leg to execute that bit. I guess it’s also possible that the strategy can simply give up at a certain point (a time period) and respond to the parent (origin) with a partial fill.

The comments to this entry are closed.

<-- end entry-individual -->