Cannot Trade a US ETF in the UK: Streaming Data, PRIIPs and the Substitute Pattern
Under PRIIPs, a UK or EU retail account can stream a US-listed ETF's market data yet be forbidden from ever holding it, because the fund publishes no Key Information Document. Here is the production pattern I use when my cleanest signal lives on an instrument I am not allowed to trade: compute the signal on the data-only line, trade a UCITS substitute, and match the substitute on currency, not just correlation. The broker catalogue, not the alpha, defines your tradable universe.
The order was rejected on the first rebalance, and I did not see it coming, because everything before that moment had been green. A cross-asset sleeve in Titan, my live multi-strategy system, held a bond ballast leg priced off a US-listed Treasury ETF. The contract had resolved. The bars had streamed: my warm-up filled, the signal computed, the dashboard showed a healthy instrument with a live price ticking. Then the sleeve fired its first order and the broker refused it. Under UK PRIIPs rules the US-listed ETF was not tradable on the account, even though its market data was fully entitled. Nothing in research had hinted at it, because research never once asked the broker for permission to hold the thing.
That is the trap this piece is about, and it is one of the most under-covered facts in retail quant. If you run a UK or EU account, a large slice of US-listed ETFs will stream you data all day and reject every order you ever send. The data permission and the trade permission are two different permissions, and your backtest only ever exercised the first one.
Why the account, not the alpha, sets your universe
The regulation behind this is PRIIPs, the EU and UK regime for packaged retail investment products. It requires that a product sold to a retail investor publish a short standardised disclosure called a Key Information Document, the KID. Most US-listed ETFs simply do not produce one, because they were built for a US audience under a US disclosure regime and have no reason to. No KID means a UK or EU retail account is not permitted to buy the fund. Professional or elective-professional accounts sit under different rules; a retail account under PRIIPs is squarely blocked.
I am an engineer describing where the lines fell for my account, not a lawyer. The categories, the thresholds and your own entitlements are things to confirm with your broker and, if it matters to you, with someone qualified. This is not legal or investment advice. The engineering lesson survives regardless of the exact legal contour: the broker catalogue and your jurisdiction define the set of instruments you can actually hold, and that set is not the set your backtest ran on.
Here is the uncomfortable consequence. You can spend a month finding an edge, validate it through every gate, deflate the Sharpe, prove it survives out of sample, wire the backtest so faithfully to the live path that research equals live, and still be unable to trade it, because the instrument the edge lives on is not one your account is allowed to hold. The alpha did not fail. The catalogue failed you, and it failed you before the first line of strategy code. That reorders the whole workflow: broker due diligence is not a deployment-day chore, it is a research-day precondition. Check that your winning instrument is tradable on your specific account before you let yourself fall in love with its equity curve.
Resolves is not tradable
The reason this bug is so good at hiding is that the instrument behaves perfectly, right up until the instant you send an order. It resolves to a valid contract. It streams market data into your warm-up and your signal. It looks completely healthy on every dashboard you own. A green data feed is, genuinely, the most convincing possible way to be blocked, because every observable signal you have says the instrument is fine.
Figure
Signal on one instrument, trade a substitute
Under PRIIPs a UK or EU retail account can often stream a US ETF's data while being forbidden to hold it. So the data arrow and the order arrow point at two different instruments.
- 1
US-listed ETF: data streams, orders rejected
PRIIPs, no KID, so you may watch but not hold
- 2
Compute the signal on that price feed
the instrument you cannot trade carries the cleanest signal
- 3
Route the order to a UCITS substitute
market data and orders now point at two different instruments
The broker catalogue and jurisdiction, not the alpha, dictate the tradable universe. Do the due diligence before you fall in love with a backtest.
The tell only appears when you attempt to trade, and even then it can be quiet: an entitlement rejection code, not a crash, on an order you assumed would fill. If your signal is computed from the very same instrument you intend to trade, and in a naive design it usually is, you will never meet this in research. Research asks a dataframe for prices. It does not ask a third party for permission to hold a position. The only mechanical check that surfaces the block is the one nobody automates: send a paper order and see whether the account is allowed to take the trade. Streaming proves data entitlement. Only an attempted order proves trade entitlement. Those are not the same test, and a backtest runs neither.
The pattern: signal on one instrument, trade a substitute
So what do you do when your cleanest signal genuinely lives on an instrument you are forbidden to hold? You split the two roles that a single instrument normally plays. There is the thing you compute on, and there is the thing you hold, and nothing about a trading system requires them to be the same object. On a regulated account they often cannot be.
Several Titan sleeves now run exactly this way. The US-listed line stays in the system as a data-only signal instrument: it streams, it feeds the indicator, and it never receives an order in its life. The order goes to a separate traded instrument, a UCITS-wrapped substitute listed on a European exchange that stands in for the US line and is PRIIPs-tradable on my account. The config makes the two roles explicit, one identifier that feeds the signal and a different identifier that receives the orders, so the split is visible to anyone reading the strategy rather than buried in a comment.
That single reframing, that the instrument you signal on and the instrument you trade are allowed to differ, is the portable idea of this whole piece. It sounds almost too simple to matter. In practice it is the difference between a sleeve that quietly does nothing on every rebalance and a sleeve that actually takes the exposure you designed. And it generalises well past PRIIPs: any time the cleanest data lives on one line and the tradable exposure lives on another (a benchmark index you cannot buy directly, a reference future against a cash proxy), the same split applies.
The substitute must match two things, and currency is the one you will forget
A substitute is only a substitute if it stands in faithfully, and there are two properties it has to match. The first is obvious and the second is the one that bites.
Figure
What the substitute must match
Correlation alone is not enough; currency is the second, easily-forgotten match.
Correlation
track what you validated
The substitute must track the asset you researched, on returns not levels, and hold that correlation inside stress windows, not just on average.
Quote currency
keep the FX factor at 1.0
Pick the listing whose quote currency matches your accounting base, so the conversion factor stays exactly 1.0. A local-currency line silently mis-sizes every position by the FX ratio.
Match the currency, or the sizing math is wrong before the strategy runs.
Correlation is the obvious one. A UCITS substitute is only valid if it actually tracks the asset you validated. Swap in something loosely related and you have quietly changed the strategy into a different bet wearing the same costume, and you will not find out until it decouples in exactly the regime your edge was built for. I confirm the tracking is tight over a long history before I trust a swap, and I will not spoil the book's thresholds here, but two measurement cautions are worth stating in the open because people get them wrong constantly. Correlate returns, not price levels: two trending funds look near-perfectly correlated on levels almost by construction, which hides the tracking error you actually care about. And check the relationship inside the stress windows the strategy trades, not just the calm full-history average, because a substitute can hug the original for years and then let go in precisely the moment you needed it to hold.
Currency is the property that catches people, because it has nothing to do with how well the funds track and everything to do with your sizing arithmetic. When you go looking for a UCITS substitute you will often find several listings of the same fund, and they are not quoted in the same currency. A US line you would have traded in USD might be substituted by a GBP-pence listing on a London exchange, or by a EUR listing, or by a USD-quoted listing. Pick the wrong one and your position-sizing maths, which divides a notional by a price to get a number of units, is now dividing a USD notional by a pence price. Nothing raises an exception. You are simply mis-sized by roughly the exchange rate, on every single trade, forever, and it survives a casual glance because the position looks plausible.
So the rule I follow is to pick the substitute listing whose quote currency equals my accounting currency wherever such a listing exists. If my base is USD, I trade the USD-quoted line of the UCITS substitute, not the pence line, precisely so the FX conversion factor between the two stays exactly 1.0 and there is no conversion to get wrong. The cleanest currency bug is the one you designed away by choosing the matching listing. The full machinery, the converter that refuses to assume parity, the start-up guard that fail-fasts if a traded sleeve's quote currency drifts from the accounting currency, and how the whole substitute shortlist is selected and re-validated, is the book's job, not this essay's. The portable half is the discipline: match on correlation and currency, and treat currency as a first-class property of the substitute, not a footnote.
The one rule to carry out
If you keep a single sentence from this piece, keep this: the broker catalogue and your jurisdiction, not the strength of your alpha, decide what you are allowed to trade, so verify the instrument is tradable on your specific account before you fund a backtest that assumes it. When the cleanest signal lives on an instrument you cannot hold, do not abandon the edge and do not pretend the block will resolve itself. Split the roles: compute the signal on the data-only line, trade a UCITS substitute, and choose that substitute for correlation and for currency so your accounting base and your quote currency match. Prove tradability with a paper order, because a streaming feed will lie to you convincingly right up to the rejection.
This is one chapter from the paid half of Building a Production Quant Trading System, the part that lives past the free public slice. If you want the full pattern, the exact tracking thresholds, the currency-explicit sizing converter, the strategy-layer guard, and the runbook for validating a substitute before it goes live, the book is a living digital copy on Leanpub and a print paperback on Amazon. The sanitised, Apache-2.0 companion framework is on GitHub if you would rather read the shapes in code. If these field notes are useful, the newsletter is where the next one lands.
This is an engineering essay, not legal or investment advice, and it contains no tradable strategy. All figures and identifiers are illustrative and sanitised, and the war-stories are about bugs and blocked orders, not profits.
Figure
Signal on one instrument, trade a substitute
Under PRIIPs a UK or EU retail account can often stream a US ETF's data while being forbidden to hold it. So the data arrow and the order arrow point at two different instruments.
- 1
US-listed ETF: data streams, orders rejected
PRIIPs, no KID, so you may watch but not hold
- 2
Compute the signal on that price feed
the instrument you cannot trade carries the cleanest signal
- 3
Route the order to a UCITS substitute
market data and orders now point at two different instruments
The broker catalogue and jurisdiction, not the alpha, dictate the tradable universe. Do the due diligence before you fall in love with a backtest.
Figure
What the substitute must match
Correlation alone is not enough; currency is the second, easily-forgotten match.
Correlation
track what you validated
The substitute must track the asset you researched, on returns not levels, and hold that correlation inside stress windows, not just on average.
Quote currency
keep the FX factor at 1.0
Pick the listing whose quote currency matches your accounting base, so the conversion factor stays exactly 1.0. A local-currency line silently mis-sizes every position by the FX ratio.
Match the currency, or the sizing math is wrong before the strategy runs.
Further reading
- Never Use Float For Money: The Bug That Silently Mis-Sizes Live Trades
The substitute must match currency to keep the FX factor at 1.0, the exact cross-currency mis-size the money-type rule guards against.
- Suspicion Over Celebration: Inside "Building a Production Quant Trading System"
The full substitute-selection and broker-realities treatment is in the book.
Related posts
Backtest Slippage and the Realistic Fill Model: The Sixth Lie That Fakes Your Returns
Everyone quotes the five lies of backtesting. There is a sixth, and it is the most expensive: the fill. A backtest books trades at prices the market would never give you, so it corrupts the return series itself before any metric runs. Here is the cost re-gate I use to tell a real edge from fictional fills.
Live Trading Does Not Match the Backtest: The Code-Level Causes Nobody Names
When your live P&L drifts from the backtest you validated, the culprit is almost never psychology. It is code: the same metric computed two subtly different ways in research and in the live sizing path. Here is the parity oracle I now gate on, and the deeper rule behind it: live and research must call the same code, not two copies of it.
Fail Closed Data Validation: Why a Trading Bot Should Refuse to Boot on Bad Data
A data-quality gate that crash-loops on corrupt, stale or all-NaN data is not broken, it is working: the alternative is fail open, trading on garbage with silent defaults. Here is the war-story from both sides, the honest flip where an over-eager gate locked me out of a market, and the one portable rule: on bad data, refuse to trade and alert loudly, never proceed with a default that looks like data.