Skip to content
Finance Lessons

Algorithmic Trading & Execution

Transaction-Cost Analysis (TCA)

Measure execution quality honestly: arrival, VWAP, and close benchmarks, signed slippage in basis points, slippage attribution, pre- vs post-trade TCA, and closing the feedback loop on execution.

12 min Updated Jun 13, 2026

You worked an order. The fills came in, the position is on, the desk moves to the next ticket. Question: was that a good trade or a bad one? “I made money” is not an answer — you might have made money and still bled 40 basis points to a sloppy algo that you could have saved by routing somewhere else. The only way to know is to score the execution against a yardstick, write it down, and compare it to the next one.

That discipline is transaction-cost analysis (TCA) — the feedback loop that turns a one-off trade into a continuously improving process. It is also the paper trail regulators demand: under MiFID II in Europe and the SEC’s best-execution obligations in the US, “we did our best” is not a defense unless you can show it, order by order. This lesson is about measuring execution without lying to yourself.

Before you read — take a guess

A trader brags: 'My algo beat VWAP by 5 bps on every order this month.' Why should the head of trading be skeptical that this proves great execution?

Why measure execution at all

Analogy. TCA is a fitness tracker for the trading desk. Without one, “I think I’m getting in shape” is a vibe; with one, you have resting heart rate, pace, and weekly load — numbers that tell you what’s working and what to change. A desk without TCA is a runner who never times a single lap and still insists they’re improving.

Definition. TCA is the systematic measurement of execution cost against one or more reference prices (benchmarks), reported in a comparable unit (basis points of notional), so that trades, algos, brokers, and venues can be ranked and the worst performers fixed or fired. It comes in two flavors that bracket the trade:

  • Pre-trade TCAbefore you trade. A cost model forecasts expected slippage given order size, spread, volatility, and ADV, and helps you pick the algo and horizon. (“This 12% of ADV order will cost ~22 bps if worked over the day; ~40 bps if I rush it.”)
  • Post-trade TCAafter the fills land. You score what actually happened against the benchmarks and feed the verdict back into tomorrow’s pre-trade model and routing rules.

The loop is the point: pre-trade sets a budget, post-trade checks the bill, and the difference updates the model. Skip the post-trade half and your pre-trade forecasts never learn.

Info:

Why basis points, not dollars

A 12-cent miss on a $40 stock and a 12-cent miss on a $400 stock are wildly different in relative terms. TCA reports everything in basis points (1 bp = 0.01%) of the benchmark so a $2M trade and a $200M trade sit on the same axis and can be averaged across the book.

Fill in the half of the loop that learns from reality.

Pick the right option for each blank, then check.

A cost forecast that selects the algo before you trade is TCA, while scoring the realized fills against benchmarks afterward is TCA — and the second feeds back to improve the first.

The benchmarks

Analogy. Asking “was that a good price?” is like asking “was that a fast time?” — meaningless until you say fast compared to what. Compared to the gun going off (arrival)? To the average runner in the race (VWAP)? To the photo finish (close)? Each benchmark answers a different question, and each can be gamed if you optimize to it blindly.

Definition. For every benchmark, slippage is the signed gap between your average fill and that reference, scaled to basis points. Define it once, signed so that positive = worse for a buy (you paid up):

slippage (bps)=PˉfillPbenchmarkPbenchmark×10000\text{slippage (bps)} = \frac{\bar{P}_{\text{fill}} - P_{\text{benchmark}}}{P_{\text{benchmark}}}\times 10000

For a sell, flip the sign (selling below the benchmark is the cost). Here are the workhorse benchmarks and what each really measures:

  • Arrival price — the mid (or last) price at the instant the order hit the desk. This is the implementation-shortfall benchmark. It is the most honest single number because it captures both market impact (your own footprint) and timing (the market drifting while you waited). It cannot be gamed by simply trading slowly, because slow trading lets the price walk away and that loss lands right in the slippage.
  • Interval VWAP — the volume-weighted average price over your trading window. It answers “did I beat the average trader who was active while I was?” Useful, intuitive, and gameable: an algo that participates in line with market volume tracks VWAP almost by construction, so beating it by a sliver can mean the algo did nothing clever.
  • Close / TWAP / PWP — the day’s closing print (for index-tracking or NAV-sensitive flow), the time-weighted average price (when you want even pacing regardless of volume bursts), and the participation-weighted price, PWP-n%, the VWAP over the window it would have taken to trade at n% of volume (a fairer “could I have done better at my chosen aggressiveness?” yardstick).
BenchmarkWhat it answersStrengthWeakness / gaming risk
Arrival price”How far did I drift from the price when I committed?”All-in: captures impact and timing; hard to gameNoisy on a single order; needs many trades to be stable
Interval VWAP”Did I beat the average trade in my window?”Intuitive, easy to compute, peer-comparableGameable — track volume and you match it; ignores pre-trade drift
TWAP”Did I beat an even-paced clock?”Simple, ignores volume spikes that aren’t yoursPays no attention to liquidity; can trade into thin moments
Close / PWP”Did I beat the close / a fair-pace price?”Matches index & NAV mandates; PWP rewards realistic paceClose is luck-of-the-auction; PWP needs a chosen participation rate
Warning:

One benchmark is never enough

Report at least arrival and VWAP on every order. Arrival keeps the algo honest about drift; VWAP keeps it honest about working within the window. A trade can flatter one and condemn the other — and the difference between them is itself a signal (see attribution below).

Match each execution benchmark to the question it actually answers.

Pick a term, then click its definition.

A fully worked TCA example

Analogy. Same race, three stopwatches, three verdicts. The runner who looks slow against the starting gun can look like a champion against the average of the pack. Pick the watch and you pick the story — which is precisely why you must read all of them.

Setup. You buy 200,000 shares. The reference prices:

QuantityValue
SideBuy
Shares200,000
Arrival price (order hit the desk)$40.00
Achieved average fill$40.12
Interval VWAP (your window)$40.15
Close$40.30

Compute slippage in bps against each benchmark using the signed buy formula (positive = paid up = worse):

BenchmarkPriceFill − benchmark÷ benchmark× 10000Slippage (bps)Verdict
Arrival$40.00+$0.120.0030000+30.0 bpsBad — paid up vs commit price
Interval VWAP$40.15−$0.03−0.0007472−7.5 bpsGood — beat the window average
Close$40.30−$0.18−0.0044665−44.7 bpsGreat — bought well below the close

Arithmetic, spelled out:

  • Arrival: (40.12 − 40.00) / 40.00 = 0.12 / 40.00 = 0.0030 → ×10000 = +30.0 bps.
  • VWAP: (40.12 − 40.15) / 40.15 = −0.03 / 40.15 = −0.00074720 → ×10000 = −7.47 ≈ −7.5 bps.
  • Close: (40.12 − 40.30) / 40.30 = −0.18 / 40.30 = −0.00446650 → ×10000 = −44.7 bps.

Read the verdicts. Same fills, three radically different stories. Against arrival the execution looks bad — you paid 30 bps over the price you committed at, because the stock rose $0.30 over the day and your buying chased some of that. Against VWAP it looks mildly good (−7.5 bps): you beat the average trade in your window. Against the close it looks fantastic (−44.7 bps) — but only because the whole market rallied, which had nothing to do with your skill.

Tip:

The honest read

Anchor on arrival (+30 bps): the order arrived, the price ran 75 bps to the close, and you captured part of that move at a cost. The VWAP and close numbers mostly reflect the market’s drift, not your cleverness. The benchmark you choose can flatter or condemn the identical execution — so report the strict one first.

Given the worked example (buy, arrival $40.00, fill $40.12, VWAP $40.15, close $40.30), which statement is the most defensible TCA conclusion?

Slippage attribution & closing the loop

Analogy. “We lost 30 bps” is the total bill; attribution is the itemized receipt. You can’t fix a restaurant tab you only know as one number — you need to see that it was $2 spread, $5 delay, and $12 of you-bought-too-fast impact before you know which knob to turn.

Definition. Decompose realized slippage (vs arrival) into the pieces a desk can actually manage:

  • Spread cost — the half-spread you cross when you take liquidity instead of posting. Knob: post more, cross less.
  • Market impact — how much your own trading pushed the price. Knob: trade slower, smaller clips, more venues.
  • Timing / delay — how much the price moved between the decision, the order’s arrival, and the fills, for reasons unrelated to you. Knob: shorten the decision-to-route latency; trade with urgency when alpha decays fast.
Slippage bucketWorked-example bps (vs arrival = 30)What it tells youThe lever
Spread4You crossed the spread too oftenAdd passive posting / midpoint liquidity
Impact14Your footprint moved the priceSlow down, smaller child orders, more venues
Timing / delay12Price drifted while you workedTighten routing latency; raise urgency if alpha is fast
Total30The full arrival-price cost

Now you can act: tabulate these buckets per algo, per broker, and per venue, and the worst offenders reveal themselves. If Broker A’s impact runs 14 bps and Broker B’s runs 6 bps on comparable orders, you route more flow to B next quarter. That routing decision, fed by post-trade numbers, is the closed loop.

Warning:

Two ways TCA quietly lies

1) Optimizing to a gameable benchmark. Rewarding traders for beating VWAP teaches them to track volume and coast — and to never measure the pre-trade drift that VWAP ignores. Score against arrival for incentives. 2) Survivorship. If you only score completed orders, you erase every order that was cancelled because the price ran away — the opportunity cost. A desk that “never has bad TCA” may simply be deleting its worst trades from the sample.

Why does scoring only filled orders flatter a desk’s TCA — and what’s the fix?

Unfilled orders are usually the ones where the price ran away faster than the algo could chase, so cancelling locks in an opportunity cost that never shows up in fill-based slippage. Drop them and you keep only the trades that behaved. The fix is to measure against implementation shortfall, which charges the unfilled shares at the end-of-horizon price, so an order that “got away” is counted as the cost it really was rather than silently deleted.

Fill in the benchmark a desk should tie incentives to.

Pick the right option for each blank, then check.

To avoid rewarding lazy, volume-tracking execution, a desk should anchor its incentive metric on the price, because it is the hardest benchmark to game and captures both impact and timing.

Putting it together

TCA is the discipline that closes the loop: pre-trade forecasts the cost and picks the tool, the order is worked, post-trade scores the fills against several benchmarks (arrival first, because it’s honest), attribution splits the cost into spread, impact, and timing, and the verdict reroutes tomorrow’s flow. The traps are choosing a gameable yardstick and quietly dropping the orders that got away.

Big picture

The TCA feedback loop

  • TCA
    • Pre-trade
      • Cost forecast
      • Algo & horizon choice
    • Benchmarks
      • Arrival (honest, hard to game)
      • Interval VWAP (gameable)
      • Close / TWAP / PWP
    • Post-trade
      • Signed slippage in bps
      • Attribution: spread / impact / timing
    • Close the loop
      • Rank algos / brokers / venues
      • Reroute next order
      • Best-execution proof (MiFID II / SEC)
From cost forecast to routing decision — and back again.

TCA checkpoint

Question 1 of 40 correct

A sell order achieves an average fill of $25.05 against an arrival price of $25.00. Using the buy-positive convention (positive = worse), what is the slippage versus arrival for this sell?

Check your answer to continue.

You can now score an execution honestly, pick the benchmark that informs rather than flatters, and turn the verdict into a routing decision. Next, in Backtesting & HFT, we take this measurement discipline to the extreme — simulating strategies on historical data without fooling ourselves, and pushing execution into the microsecond regime where the spread, impact, and timing costs you just learned to attribute are won or lost in the queue.

Mark lesson as complete