A-book, B-book, hybrid routing, last look, asymmetric slippage, and how to measure whether your broker is actually filling you fairly.
Broker execution transparency is the degree to which a forex or CFD broker shows you how your orders are actually routed, priced, and filled. When you click buy, your order does not travel a single obvious path. It can be passed to an external liquidity provider (A-book), held internally with the broker taking the other side (B-book), or split between both (hybrid). Along the way it can be delayed by a last-look window, filled at a worse price than you saw (negative slippage), rejected, or requoted. This guide, maintained by BJF Trading Group, explains every step so you can tell a fair fill from a manipulated one.
Most retail education stops at “you click, you get filled.” In reality an order passes through a chain, and each link is a place where price, speed, and fairness can change. Understanding the chain is the whole point, because every execution complaint (slippage, rejects, requotes, spread spikes) is really a complaint about one specific link.
The simplified lifecycle of a market order looks like this:
# Order lifecycle (market order)
1. You see a quote on the terminal (already delayed by feed latency)
2. You send the order (client -> broker server)
3. Broker applies routing logic (A-book / B-book / hybrid decision)
4. Optional last-look hold window (accept, reject, or re-price)
5. Fill is confirmed (at requested price, better, or worse)
6. Position and slippage are recorded (this is your evidence trail)
Transparency means a broker is willing to tell you what happens at steps 3 and 4, and gives you data at steps 5 and 6 to verify it. Opacity means you only ever see step 6, and only the number the broker chooses to show.
The single most important decision a broker makes about your account is which “book” your flow goes into. This determines whether the broker profits when you profit, or profits when you lose.
| Model | Where your order goes | How the broker earns | Conflict of interest |
|---|---|---|---|
| A-book (STP / agency) | Passed straight to an external liquidity provider | Spread markup and commission | Low. Broker wants volume, not your loss |
| B-book (dealing / market maker) | Kept internally, broker takes the opposite side | Your losses become broker revenue | High. Broker profits when you lose |
| Hybrid / C-book | Some flow warehoused, some hedged out to LPs | Mix of both, tuned per client | Depends entirely on disclosure |
Here is the nuance almost no marketing page admits: B-book is not automatically bad, and A-book is not automatically clean. A well-run B-book desk can give tight spreads and instant fills to ordinary traders, because statistically most retail accounts lose and the broker has no reason to interfere. An A-book broker can still route you to a slow or hostile liquidity provider and hide behind “we just pass it on.”
The real transparency question is not “which book am I in?” but “does the broker switch my book based on whether I am profitable, and do they tell me?” That silent switch is where honest execution ends.
When routing is fairYour book assignment is disclosed or at least consistent. Fills track the visible market. Winning and losing accounts get the same spreads, the same speed, and the same slippage behavior. |
When routing turns hostileYou are quietly moved to a worse path the moment you become profitable. Spreads widen only on your account, slippage becomes one-directional, and rejects appear only on trades that would have won. |
From the broker’s side, not all order flow is equal. “Toxic flow” is the industry term for order flow that is consistently profitable against whoever is on the other side, usually because the trader has an informational or speed advantage the broker cannot hedge cheaply.
Flow a risk desk tends to flag as toxic includes:
| Flow type | Why it is hard for the broker |
|---|---|
| Latency arbitrage | Trader acts on a faster feed and enters before the broker’s quote catches up |
| News trading | Large directional moves in milliseconds around scheduled releases |
| Fast scalping | High trade count, tiny targets, systematically picks off stale quotes |
| Multi-account correlation | Many accounts trading the same signal at the same instant |
This matters for transparency because toxic-flow handling is exactly where undisclosed execution changes get applied. A broker that cannot profitably warehouse your flow, and will not or cannot hedge it to a liquidity provider, has three options: reject it, delay it, or degrade its price. All three are invisible unless you are measuring.
Last look is a mechanism where, after you send an order, the party filling it gets a short window to accept or reject the trade after already seeing your request. It originated in institutional FX and is now common in the retail bridge layer too.
The window is usually small, from roughly one millisecond to a few tens of milliseconds. In that window the price can move. What happens next is the whole story:
| Price moves during last-look window | Symmetric (fair) last look | Asymmetric (hostile) last look |
|---|---|---|
| In your favor | Filled, sometimes with price improvement | Rejected or re-priced away from you |
| Against you | Rejected under the same threshold | Filled at the worse price |
| No move | Filled at the quoted price | Filled at the quoted price |
Symmetric last look applies the same tolerance in both directions and is defensible as a genuine risk check. Asymmetric last look is heads-the-broker-wins, tails-you-lose. You only ever get filled when the move helped the other side, and rejected when it helped you. Over thousands of trades this is a large, silent tax that looks like “bad luck” on any single fill.
You can detect asymmetry without any inside access. If you log the requested price, the fill price or rejection, and the mid-market price at the moment of each request, the distribution tells the truth: fair last look rejects roughly symmetrically, hostile last look rejects almost entirely on trades that were about to move in your favor.
Slippage is the difference between the price you requested and the price you got. Slippage by itself is normal. Markets move. The question that separates a fair broker from a hostile one is the shape of your slippage distribution, not its size.
Define per-trade slippage in pips as:
# Positive = filled better than requested, Negative = filled worse slippage_pips = (fill_price - requested_price) / pip_size * direction # direction = +1 for buy, -1 for sell, so the sign is consistent # Then look at the DISTRIBUTION across many trades, not one trade symmetry_ratio = count(slippage > 0) / count(slippage < 0)
Fair execution signaturePositive and negative slippage both occur. The symmetry ratio sits near 1.0. Price improvement is real and shows up in your logs, not just in the brochure. Slippage size scales with volatility, the same for winning and losing trades. |
Manipulated execution signatureSlippage is almost always negative. Symmetry ratio far below 1.0. Price improvement essentially never appears. Slippage spikes specifically on your profitable trades and around news, but not on losers. |
This is why keeping your own tick-by-tick records matters more than any review site. A broker’s aggregate “average slippage” number can look fine while your distribution is entirely one-sided. The average hides the asymmetry. The distribution exposes it.
Beyond last look and slippage, three more tools change your fills at the server level, before your order ever reaches a market.
Instead of filling or rejecting, the server offers you a new, worse price and asks you to confirm. On fast strategies the requote delay alone is enough to destroy the trade. A broker advertising “no requotes” that issues them only on your winning trades is running selective execution.
Spreads legitimately widen in thin liquidity and around news. The hostile version widens the spread on specific accounts or specific instruments only when a profitable pattern is detected, then narrows again. Because it is account-specific, you cannot see it by comparing to a public chart. You can only see it by logging your own quoted spread over time.
These are server modules that sit between your order and the fill and apply configurable delays, artificial slippage, requote probability, or outright rejection to targeted accounts. They exist specifically to neutralize flow the desk considers toxic. The trader sees nothing except worse results. The only defense is measurement: a plugin that adds, say, 30 to 300 milliseconds of artificial delay to your account leaves a clear fingerprint in your execution-latency log that a clean account does not have.
You cannot read a broker’s routing table, but you can run controlled tests and let the data answer. None of these require special software beyond a trade log with timestamps and prices.
Record requested vs fill price on at least 200 trades. A healthy symmetry ratio is near 1.0. A ratio far below that, with almost no positive slippage, is the strongest single signal.
Run the identical strategy on demo and live in parallel. Demo is almost always pure B-book with cosmetic fills. A large, persistent gap between demo and live execution quality tells you how your live flow is really handled.
Note the mid price at every reject. If rejections cluster on trades that would have moved in your favor, you are seeing asymmetric last look, not random risk checks.
Log the milliseconds from send to fill. A sudden step-up in average latency, especially right after your account became profitable, points to an added server-side delay.
Record your own quoted spread per instrument. Account-specific widening that does not match the broker’s public quotes is a targeting signal.
Toxic-flow handling is most aggressive around releases. If fills, spreads, and rejects sharply degrade only in your account during news windows, the desk is treating your flow as informed.
Execution that is clean at 0.1 lots but suddenly slips, requotes, or rejects at larger size shows a threshold in the risk logic. Fair execution degrades smoothly with liquidity, not in a step at the point you become material.
Everything above becomes actionable once you stop arguing about intentions and start scoring numbers. These are the core execution-quality metrics any serious trader should track per broker.
| Metric | What it measures | What good looks like |
|---|---|---|
| Fill rate | Share of orders filled vs sent | High and stable across market conditions |
| Rejection rate | Share of orders rejected | Low, and not correlated with your winners |
| Slippage symmetry | Balance of positive vs negative slippage | Ratio near 1.0, price improvement present |
| Execution latency | Milliseconds from send to fill | Low and stable, no step-changes over time |
| Requote frequency | How often you are re-priced | Near zero, and not selective on winners |
| Effective spread | Spread you actually pay, per instrument | Matches public quotes, no account-specific markup |
The reason to collect all six rather than one is that a hostile broker can keep any single number looking respectable. It is the combination, scored consistently over time and across market states, that reveals the execution path. This is precisely the logic behind the BJF Broker Execution Quality Index (BEQI), an open methodology for turning your own trade and tick logs into a single comparable execution score, so two brokers can be ranked on evidence instead of reputation.
For a discretionary swing trader holding for days, a few tenths of a pip of asymmetric slippage is an annoyance. For an arbitrage, latency, or news strategy it is the entire profit and loss.
These strategies win by capturing a very small, very short-lived edge many times. The average profit per trade is tiny by design. That means the strategy is only as good as its worst fills, and a hostile execution path attacks exactly the trades that were supposed to win. As covered in our work on the execution-time gap, an edge that looks strong in a backtest can go negative in production purely because of added execution latency and asymmetric fills, with nothing wrong in the strategy logic at all.
The practical consequences:
| Strategy | What a hostile execution path does to it |
|---|---|
| Latency arbitrage | Added server delay erases the millisecond edge the whole strategy depends on |
| News trading | Selective spread widening and rejects around releases remove the exact fills that pay |
| Fast scalping | Asymmetric slippage turns a positive expectancy into a negative one trade by trade |
| Pair / stat arbitrage | One-legged fills and requotes break the hedge and leave you with naked risk |
This is why serious execution-sensitive traders do two things: they measure their broker relentlessly, and they model realistic execution in testing rather than assuming perfect fills. Backtesting on real tick data with modeled execution latency and variable spread, the way the SharpTrader Optimizer does, is the only way to know whether an edge survives contact with a real, imperfect execution path before you risk capital on it.
No. A B-book broker can offer tight spreads and instant fills, and for most retail traders there is no interference at all. The risk is undisclosed switching, where your execution quietly degrades once you become profitable. The model is not the problem, concealment is.
Slippage is being filled at a different price than requested. Last look is a short window before the fill in which the other side can accept, reject, or re-price your order after seeing it. Asymmetric last look is a common source of one-sided slippage and selective rejections.
You can build strong evidence. Log requested price, fill price or rejection, mid-market price, and execution latency for every trade. If slippage is systematically negative, rejects cluster on your winners, and latency stepped up when you became profitable, the data speaks clearly even without access to the broker’s servers.
Not on its own. Those labels describe a routing model, not the quality of the liquidity behind it or whether your specific account is being filtered. Measure fill rate, slippage symmetry, and latency yourself rather than trusting the label.
Demo servers usually simulate near-perfect fills. Live flow, especially flow a desk views as toxic, can be routed behind delays, asymmetric last look, or execution filters. A large, persistent demo-versus-live gap is itself a measurement of how your live flow is handled.
It is a generic term for a server-side module that applies configurable delay, artificial slippage, requote probability, or rejection to targeted accounts. It is used to neutralize flow a broker cannot hedge profitably. Its fingerprint shows up as added, account-specific execution latency in your logs.
New articles, research papers, and product releases, delivered when we publish them. Broker execution, latency arbitrage, and news trading, with the data behind them.
Score your own execution with the open BEQI methodology, and test whether your edge survives a realistic execution path before you risk capital.