Skip to content
Research / Education / CFD basics

TA · Professional · Part 4 of 16

How a CFD price is formed: liquidity providers, aggregation and last look

There is no exchange behind a CFD quote. The price on the ticket is assembled from several liquidity providers' streams, and the provider that wins the trade can still decline it. What that means for a fill.

InnoMP Research · Education Desk Published 24 Sept 2026 · Updated 24 Sept 2026 8 min read
InnoMP Research cover art — assembled, not found
In short

A CFD quote is assembled, not discovered on an exchange. The broker takes price streams from its liquidity providers, aggregates them into a best bid and ask, adds its mark-up or commission, and shows the result. When a trade is sent, the winning provider may apply last look — a final chance to accept or reject the request at its quoted price; the FX Global Code says this should be transparent and used only for price and validity checks. It is why two brokers show different prices, and why a fill can be rejected.

A CFD price is assembled, not discovered. The broker receives price streams from its liquidity providers, aggregates them into one best bid and ask, adds its mark-up or commission, and shows the result on the ticket — and the provider that wins a trade may still apply last look before accepting it.

The three parts before this one described a book. This part describes whose book it is. For a currency pair or a spot metal there is no exchange behind the quote; the BIS survey the Intermediate level leaned on describes the market as over-the-counter, and MetaTrader’s own documentation says that on such instruments the quotes shown are the broker’s. What follows is the pipeline that produces them.

The pipeline

The pipeline from provider streams to the ticket Four stacked steps. One, providers: each streams a two-way price. Two, aggregation: the best bid and best ask across them. Three, mark-up: the broker's spread or fee on top. Four, the ticket: what you see, and trade. 1 · providerseach streams a two-way price2 · aggregationbest bid and best ask across them3 · mark-upthe broker’s spread or fee on top4 · the ticketwhat you see, and trade InnoMP Research
Four steps between a bank's dealing desk and the number on the order ticket. Each one is a place where two brokers can differ, and each is a place where a trade can be slower or dearer than the chart suggests.

Providers. A liquidity provider is a dealer — a bank, or a non-bank market maker — that streams the prices at which it will buy and sell to the broker, continuously, and trades against the broker’s flow at those prices. A broker usually has several, because no single provider is best on every pair at every hour.

Aggregation. The streams are combined by taking the best bid and the best ask across all of them at each moment. The FX Global Code’s Principle 18 describes services that “provide access to multiple liquidity sources” and asks whoever provides them to disclose how the prices displayed are determined.

Mark-up. The broker’s compensation sits on top of the aggregated price, as a widening of the spread, a separate commission, or both. Principle 14 defines mark-up as “the spread or charge that may be included in the final price of a transaction” to compensate the participant, and asks that it be fair, reasonable and disclosed — including that clients understand their final price may include it.

The ticket. What arrives on the platform is the result. It is a real price at which the broker will deal; it is not a price the market as a whole agreed on, because for this instrument there is no such price.

Aggregation: the best of several streams

Aggregation: the best of several streams Four rows. Provider A shows a bid and an ask some distance apart; provider B a tighter pair; provider C a wider pair. The fourth row, aggregated, takes the highest bid and the lowest ask from among them, which came from different providers, and the gap between them is shaded. A note says best bid and best ask, from two providers. bids left, asks rightprovider Aprovider Bprovider Caggregatedbest bid and best ask, from two providers InnoMP Research
Three providers, three spreads. The aggregated quote is tighter than any one of them, because its bid came from one provider and its ask from another. That is the whole point of having several.

Two things about the aggregated quote matter for a trader.

It is only as deep as its best provider at that price. The aggregated bid is one provider’s bid, for that provider’s size. Behind it sit the other providers’ bids at worse prices — the depth of Part 3, now with names on the levels. A large order against an aggregated quote walks from one provider’s price to the next.

It changes when a provider withdraws. At the rollover, around a release, or when a provider’s own risk limits are reached, streams are pulled or widened. The aggregated quote then jumps to whatever the remaining providers show, which is the mechanism behind the spread-widening the earlier levels described as a fact.

Last look

When a trade is sent against the aggregated quote, it is routed to the provider whose price won. That provider may not fill it immediately. Many operate last look: a final check, after the request arrives, before accepting or rejecting it.

Last look: the provider's final check Three stacked steps. One, request: sent at the quoted price. Two, last look: price and validity checked. Three, decision: accept, or reject. A note says the Code: transparent, disclosed, checks only. 1 · requestsent at the quoted price2 · last lookprice and validity checked3 · decisionaccept, or rejectthe Code: transparent, disclosed, checks only InnoMP Research
The request goes to the provider at the price it quoted. In the last look window the provider checks that the price is still valid and the request is in order, then accepts or rejects. What it may do in that window is what the Code constrains.

The FX Global Code — the set of principles the world’s central banks and market participants published for the wholesale market — defines it in Principle 17: “a practice utilised in Electronic Trading Activities whereby a Market Participant receiving a trade request has a final opportunity to accept or reject the request against its quoted price.” The same principle says what it should and should not be.

The Code saysWhat it means at the ticket
Participants employing last look should be transparent about its use and provide appropriate disclosuresWhether a provider uses it, and how, should be findable
If utilised, it should be a risk control mechanism used to verify validity and/or priceThe window is for checking the request is in order and the price still stands
It should not be used for information gathering with no intention to accept the requestA request is not a free look at the client’s intent
The participant should not trade on the information in the request during the windowNo pricing or hedging off the client’s request before deciding

A rejection at the provider, then, is the pipeline behaving as its disclosed terms describe — provided the terms were disclosed and the window was used for what the Code allows. The retail client’s counterparty is the broker, and the provider is a step further back; but the reason a fill “came back rejected” or arrived at a re-quoted price is usually here.

Key takeaway The quote is a claim by the broker; the fill is a decision by a provider. Between them sit aggregation, mark-up and last look, and none of the three is visible on the chart. A trader who knows the pipeline knows where a fill can differ from the quote, and which of those differences the Code says should have been disclosed.

Why two brokers show two prices

Put two brokers side by side on the same pair at the same instant and their quotes differ. Neither is wrong.

Why two brokers show two prices Two panels. Left, broker A: providers one, two and three, quoting 1.0843 bid and 1.0845 ask, noted its providers, its fee — correct. Right, broker B: providers two and four, quoting 1.0844 bid and 1.0846 ask, noted other providers, other fee — also correct. Broker ALPs 1 · 2 · 31.0843 / 1.0845its providers, its feecorrectBroker BLPs 2 · 41.0844 / 1.0846other providers, feealso correct InnoMP Research
Different provider sets, different mark-ups, different books. Each quote is a real price the broker will deal at. The gap between them is the reason a level is a pip or two apart on two charts of the same pair.

This is the microstructure reason behind two things the earlier levels stated as rules. Reference levels — yesterday’s high, the daily open — are broker-specific by a pip or two, which is one reason they are drawn as zones. And server time decides which candles those levels come from. Two brokers, two books, two clocks: the same market, cut and priced differently at each step of this pipeline.

What the pipeline leaves in your hands

What the pipeline leaves in your hands Two columns. You choose: the order type, size against depth, the hour, the broker — your side. The broker chooses: which providers, the mark-up, the last look terms, what the Depth of Market window shows — their side. You chooseorder typesize against depththe hourthe brokeryour sideThe broker chooseswhich providersthe mark-uplast look termswhat the DOM showstheir side InnoMP Research
Half of execution cost is decided before the order is sent, by the trader. The other half is decided by whose book the order lands in — and the Code's disclosure principles exist so that half can be read before choosing it.

The left column is the previous three parts: the queue an order joins, its size against the book, and the hour it is sent. The right column is this one, and it is read once, from the broker’s disclosures, before an account is opened — the Code’s mark-up and last-look principles are the checklist for what those disclosures should contain.

Between the two columns is the thing the next group is about: the resting orders themselves.

Next: Where liquidity rests — stops beyond swings, limits at levels, and why price is drawn to the places where orders gather.

Key facts
  • Forex and most CFDs trade over the counter: the quote is the broker's, assembled from its liquidity providers, not an exchange's.
  • Aggregation takes the best bid and the best ask across several provider streams; the mark-up or commission sits on top.
  • The FX Global Code defines last look as a practice in which a participant receiving a trade request has a final opportunity to accept or reject it against its quoted price (Principle 17).
  • The Code says last look should be transparent and disclosed, and used as a risk control to verify validity and price — not for information gathering.
  • Principle 14 of the Code defines mark-up as the spread or charge included in the final price to compensate the participant, and asks that it be fair, reasonable and disclosed.

Frequently asked questions

Where does a CFD price come from?

From the broker's liquidity providers — banks and non-bank dealers that stream two-way prices to it. The broker aggregates those streams, taking the best bid and the best ask across them, adds its own mark-up or charges a commission, and shows the result on the ticket. There is no exchange in the chain for forex or spot metals, so the quote is the broker's own.

What is a liquidity provider?

A dealer that streams prices at which it is willing to buy and sell to a broker, and trades against the broker's flow at those prices. A broker typically has several. The FX Global Code refers to services that give access to multiple liquidity sources as aggregation, and asks providers of those services to disclose how they operate.

What is last look?

In the FX Global Code's words, a practice used in electronic trading whereby a market participant receiving a trade request has a final opportunity to accept or reject the request against its quoted price. The Code says it should be a risk control used to verify validity and price, that its use should be transparent and disclosed, and that it should not be used to gather information about the client's intentions.

Why do two brokers show different prices for the same pair?

Because each is aggregating a different set of providers and adding a different mark-up. Both quotes are correct about their own books. The difference is usually small in a major pair in liquid hours and larger in crosses and thin windows, and it is why a level on one broker's chart is a few pips from the same level on another's.

Why was my order rejected or requoted?

Most often because the provider that won the trade applied last look and the price had moved during its check window, or because the broker's own validity checks failed — margin, size, a symbol not trading. A rejection at the provider is the pipeline working as its terms describe; whether those terms are acceptable is what the Code's disclosure principles exist to let a client judge.

Sources

  1. FX Global Code (GFXC, December 2017) — Principle 14 on mark-up, Principle 17 on last look, Principle 18 on aggregation servicesglobalfxc.org
  2. BIS Triennial Survey — OTC foreign exchange turnover in April 2022: an over-the-counter marketbis.org
  3. MetaTrader 5 Help — Depth of Market: quotes on over-the-counter instruments are the broker'smetatrader5.com
InnoMP Research · Education Desk

Trading education from first principles — position sizing, risk, market structure and the habits that keep accounts alive. Written for someone who has never opened a chart, with a diagram at every step.

Published 24 Sept 2026 · Updated 24 Sept 2026

Disclaimer: This content is provided for general informational purposes only and does not constitute investment advice, an offer, or a solicitation to buy or sell any financial instrument. It has been prepared without regard to your individual financial circumstances or objectives. Trading CFDs involves a high risk of loss.

Related notes