Quant Memo

Paper Explained

Post or Cross, and Where? Cont and Kukanov on Optimal Order Placement

Optimal execution tells you how much to trade. It never tells you how. Cont and Kukanov solved the decision every trader actually faces: limit or market, and on which exchange.

QM
Quant Memo

July 13, 2026

The paper

Optimal order placement in limit order markets

Rama Cont and Arseniy Kukanov · 2017

Read the original →

The optimal execution literature has an odd blind spot. Almgren and Chriss, Bertsimas and Lo, and all their descendants will tell you, with great precision, how many shares to trade in the next five minutes.

Then they stop. They hand you a number and walk away.

But a trader holding that number now faces the decisions that actually determine what the trade costs. Do I post a limit order and wait, or do I cross the spread and take what is there? And given that there are a dozen exchanges all showing prices for the same stock, which ones do I send to, and how much to each?

Rama Cont and Arseniy Kukanov's paper is about that layer, and it is the layer where real money is won and lost.

The problem: two bad options and eleven venues

Consider the fundamental dilemma.

Cross the spread with a market order. You get filled, immediately, for certain. You pay the spread, you pay the taker fee that most exchanges charge for consuming liquidity, and if your order is large you walk up the book and get progressively worse prices.

Post a limit order and wait. If it fills, it is wonderful. You capture the spread instead of paying it, and on most exchanges you actually get paid a rebate for providing liquidity. But it might not fill. The price might move away from you, and now you have neither the shares nor the price, and you have to chase.

That is the trade-off: certainty versus price. And it is genuinely a trade-off, not a puzzle with an obvious answer.

Now multiply the problem. The same stock trades on many venues simultaneously. Each has a different queue length, so your fill probability differs at each. Each has a different fee schedule, so the economics differ. Your order can be split across them, which changes everything: posting on three exchanges gives you three chances to be filled, and you might get filled on more than one, which means you have overtraded.

That is the smart order routing problem, and it is what every institutional trade actually runs into.

The key idea via analogy: queueing at multiple checkouts

You are in a supermarket with several checkout lanes open, and you need to get out.

  • You could barge to the front and pay a fee to jump the queue. Guaranteed exit, known cost. That is a market order.
  • You could join a queue and hope. Free, possibly you even get a discount for waiting. But you might be stuck there when the shop closes. That is a limit order.
  • Or, and this is the clever bit, you could send a member of your family to join several different queues at once, and take whichever one moves first.

That last strategy is powerful, and it is exactly what a smart order router does. But it comes with a hazard that gives the problem its whole character: you might get to the front of two queues at once. In trading terms, you posted 1,000 shares on three exchanges, hoping to get 1,000 filled in total, and the market moved and you got filled on all three. You now own 3,000 shares and you only wanted 1,000. That is called overfill, and it is a real and expensive failure mode.

So the optimal placement problem has three costs to balance, and Cont and Kukanov set it up to weigh all three properly:

  1. The cost of crossing the spread and paying taker fees, if you are impatient.
  2. The cost of not filling, which means you have to chase the price later, probably at a worse level.
  3. The cost of overfilling, which means unwinding a position you never wanted.

Their key structural insight is that when you write this problem down properly, it turns out to be a convex optimisation problem. That word matters enormously. Convex problems have a single best answer with no false local optima to get trapped in, and they can be solved fast and reliably. A problem that looks like a combinatorial nightmare turns out to have clean, computable structure.

For the single-exchange case they derive an explicit formula for how to split between limit and market orders. For the general multi-venue case they give a stochastic algorithm that learns the optimal routing policy from the observed fill data, which is important because you cannot know your fill probabilities in advance; you have to learn them from experience.

The economic intuition that falls out is satisfying. Your optimal split between passive and aggressive orders depends on how badly you need certainty, on the fee structure, on how likely each venue is to fill you, and on the properties of the order flow. Impatient traders cross. Patient traders post. And the amount you should post across venues is not simply "everything everywhere," because the overfill risk disciplines you.

Why it mattered

  • It solves the problem that actually exists. Every large trade in the world ends up at a smart order router. Before this, routing logic was largely proprietary heuristics. This gave it a proper optimisation foundation.
  • The convexity result is what makes it usable. A routing decision has to be made in microseconds. A formulation that is convex, and therefore solvable fast and reliably, is the difference between a paper and a product.
  • It takes exchange fees and rebates seriously. The maker-taker fee model, where you pay to take liquidity and get paid to provide it, is a huge driver of routing behaviour and a controversial feature of modern markets. Putting it explicitly in the objective function was overdue.
  • It named overfill as a first-class risk. Posting across many venues to maximise fill probability is the obvious strategy, and the reason it is not free is the overfill hazard. Formalising that cost is what makes the multi-venue solution non-trivial.
  • It fills the gap the execution literature left. The classic models say how much to trade. This says how. Together they are a complete answer.

The honest limitations

  • Fill probabilities are the whole game and they are hard to estimate. The entire solution depends on knowing how likely you are to be filled at each venue. That depends on queue position, on order flow, on volatility, on the time of day, and it changes constantly. The paper's learning algorithm helps but does not make the problem go away.
  • Queue position is not really modelled. In a real market, being at the front of the queue versus the back is the single biggest determinant of whether you get filled, and it is the thing the latency arms race is fought over. The framework works at a coarser level.
  • The other participants do not adapt. Order flow arrives according to a fixed statistical process. In reality, if a router systematically posts on a particular venue, other participants will notice and adjust, and the fill probabilities you calibrated will change under your feet.
  • Latency is largely abstracted away. By the time your order reaches the exchange, the book has moved. Real routing has to reason about the state of the world several milliseconds in the future, and that is not in the model.
  • It optimises a single slice, not a whole execution. The paper takes the target quantity as given, which means it inherits whatever the higher-level scheduling model told it. The interaction between how much to trade and how to place it is not jointly solved.

The one-line takeaway

Cont and Kukanov tackled the decision the optimal execution literature always skipped, whether to post or cross and how to split an order across competing exchanges, and showed that once you properly account for the costs of crossing the spread, of failing to fill, and of accidentally overfilling, the whole messy routing problem becomes a convex optimisation you can actually solve.