Trading Strategy
FXTerminal's paper trading executes your orders against the same live prices that drive its charts, through its own execution engine — no broker, no deposit, no download, no MetaTrader. Market and…
FX Terminal Research · 2026-08-16 · 12 min read
Short answer: FXTerminal's paper trading executes your orders against the same live prices that drive its charts, through its own execution engine — no broker, no deposit, no download, no MetaTrader. Market and pending orders, stop-loss and take-profit, partial closes, proper margin and leverage arithmetic, floating P&L, free margin and stop-out all behave the way a live account behaves.
The consequence that matters is not the practice. It is that every trade is recorded by the engine that executed it, so a trader's statistics are derived from data rather than asserted in a screenshot.
This article covers how the engine works, the three accounting invariants that determine whether a simulated account tells you the truth, how the challenge format works, and — honestly — what paper trading still cannot teach you.
Broker demo accounts are the obvious solution and they have three problems.
They require an account with a broker, which means an email, a KYC funnel and a sales call, before you have decided whether you want to trade at all.
They expire, and the data leaves with them. Ninety days later your history is gone, along with any evidence of how you traded.
They are not comparable. Two traders on two brokers have different spreads, different leverage, different fill behaviour and different starting balances. Their results cannot be ranked against each other in any meaningful way.
Running the execution in-house solves all three. Orders fill against a live price feed — MetaTrader 5 prices, pushed over WebSocket with an end-to-end latency of roughly 120 milliseconds from the terminal to your browser — and every fill, deal and balance change is a row in a database that does not expire.
There is a deliberate seam in the architecture called an execution venue, which does not assume synchronous fills, does not assume our own identifiers, and does not assume we compute the fill price. That is the interface a real broker adapter would implement. Simulated execution today; the shape is right for something else later.
These are the rules the engine is built around, and they are asserted by an automated verification suite on every change. They are worth stating because they are exactly what most simulated accounts get wrong.
Σ(deals) + starting balance = balance, exactly
Every change to the account balance is accompanied by a deal row written in the same database transaction. There is no code path that adjusts a balance without leaving a record of why.
Marking positions to market never touches the balance. Floating P&L moves equity, not balance. This distinction sounds academic until you have seen a simulator where an unrealised gain silently becomes spendable margin, at which point the whole account is fiction.
The practical consequence: the account can be fully reconstructed by replaying its deals. If the sum does not equal the balance, something is wrong, and the check is cheap enough to run constantly.
Every operation that touches an account takes a SELECT ... FOR UPDATE on the account row before doing anything else.
Without this, two concurrent operations — a market order arriving while a stop-loss triggers — can each read the same balance, each compute a new one, and each write it, losing one of the two updates. The account then has money that came from nowhere or lost money to nowhere.
This is the single most common source of "impossible" balances in home-built trading simulators, and it only manifests under concurrency, which is to say in production and never in testing.
The full round-turn commission is charged when a position opens, and released proportionally as the position closes.
The reason is precision: it makes equity exactly equal to liquidation value. If you closed everything right now, the equity figure is what you would have — no adjustment, no pending cost.
Charging commission per side instead means equity overstates liquidation value by the unpaid closing commission for the life of every position. On an individual trade that is trivial. On a drawdown rule, it is not: a max-drawdown limit computed on an overstated equity fires late, which means an account that has already breached the rule keeps trading. For challenge accounts with hard risk limits, that is the difference between the rules working and the rules being decorative.
Worth its own section because it is subtle, universal, and easy to get wrong in your own position sizing.
Margin is denominated in the position's BASE currency. Profit and loss is denominated in the QUOTE currency.
For EUR/USD, margin is in euros and P&L is in dollars. For USD/JPY, margin is in dollars and P&L is in yen.
Mix the two up and JPY pairs require roughly 155 times the correct margin, because you have applied a yen-denominated figure where a dollar-denominated one belongs. The error is invisible on EUR/USD, where base and quote are both major and the rate is near 1, and catastrophic on yen crosses.
There is a second-order version of this that bites in client-side position calculators. The naive margin formula:
margin = lots × contract size ÷ leverage
is wrong, because it skips the conversion from the base currency to the account currency. On EUR/USD that is about 8% too low. On crosses it is far worse. The engine exposes a marginPerLot figure from the quotes endpoint precisely so nothing has to derive it locally and get it wrong.
And one more rule, small but important: the currency conversion function returns null, never 1, when no conversion path exists. Defaulting to a rate of 1 turns a missing exchange rate into a silently wrong number. Returning null turns it into a refused order, which is the correct behaviour.
The engine refuses orders when it cannot confirm a fresh price.
This matters because the fallback behaviour is subtle. After a service restart, a cached price layer can serve pre-restart prices for up to about 45 seconds. Those prices are stale but perfectly well-formed — nothing about them looks wrong.
The correct response is to detect the staleness and disable trading with a visible "no live price" state, not to widen the acceptable age until the problem goes away. Filling an order at a 45-second-old price is worse than refusing it, because the trader believes the fill was real.
There is also a subtlety about browser tabs. The application disables refetching on window focus almost everywhere, because most data does not need it. The quote poll overrides that — otherwise a trader returning to a background tab would submit an order against a quote frozen from twenty minutes ago.
A challenge gives every entrant an identical, isolated account: same starting balance, same leverage, same instruments, same risk rules. Leaderboards update live as positions move.
| Metric | Why it is included |
|---|---|
| Return | The obvious one, and insufficient alone |
| Maximum drawdown | The path matters. +20% via a 40% drawdown is a worse result than +15% smoothly. |
| Win rate | Context for the payoff profile |
| Profit factor | Gross profit ÷ gross loss |
| Consistency | Whether returns came from many trades or one lucky one |
Ranking on return alone rewards whoever took the largest gamble, which selects for exactly the behaviour a trading competition should discourage. With drawdown and consistency in the score, the winner is closer to the best trader than the luckiest one.
A challenge's rules are a template. When you join, a snapshot of those rules is written to your account and never changes.
That is why rules can only be edited while a challenge is still a draft — once anyone has joined, the API refuses. Changing the risk limits under someone who is already trading would invalidate the comparison, and quietly, since existing accounts would keep their old limits while new ones got the revised set.
Registration also closes when a challenge without an explicit deadline starts, for the same reason: late entrants trading a different market period are not competing in the same event.
This is the payoff of running the engine in-house.
Every number on a trader profile — win rate, profit factor, maximum drawdown, consistency, equity curve, challenge history — is computed from trades the engine executed and recorded. Not typed in. Not uploaded. Not screenshotted.
That does not make anyone a good trader. It makes their claimed results checkable, which is a low bar that essentially no corner of retail trading currently clears.
You can browse traders by challenges won and average return, then open a profile for the full picture. The distinction from a screenshot is not subtlety — it is the difference between evidence and assertion.
I would rather say this plainly than have you discover it with real money.
The engine fills at the live price it has. A real broker fills at the price they can get, which in a fast market or through a news release is worse — sometimes much worse. The shape of your strategy transfers; the exact numbers do not.
This is the big one and it is not solvable by software. A 3% drawdown on a simulated account is a number. A 3% drawdown on money you needed is a physical experience that changes the decisions you make next. Traders who are profitable on demo and unprofitable live are not usually experiencing a technical difference. They are experiencing themselves.
If you blow a paper account you make another one. That asymmetry teaches a lesson opposite to the one you need. The partial fix is the challenge format — a single account, fixed rules, a public leaderboard and no do-overs — which restores some of the finality that makes practice meaningful.
Mechanics. Order types. What a stop-out actually looks like when free margin runs out. How much a 0.5 lot position on GBP/JPY moves your equity when the pair moves 40 pips. Whether your strategy's rules are even executable in real time or fall apart when three signals fire at once.
Those are worth learning for free.
You can trade from the dedicated paper trading screen or directly from the free live forex charts, where the order ticket sits in the right panel and your open positions draw as entry, stop and target lines on the candles. Challenge accounts work from either surface.
Is there a free forex demo account that doesn't need a broker? Yes. FXTerminal's paper trading runs its own execution engine against live MT5 prices, so there is no broker signup, no KYC, no deposit and no download. It supports market and pending orders, stop-loss and take-profit, partial closes, and full margin and leverage arithmetic including stop-out.
How is margin calculated in forex, and why do so many calculators get it wrong? Margin is denominated in the position's base currency while profit and loss is denominated in the quote currency. The common shortcut — lots × contract size ÷ leverage — omits the conversion from the base currency to your account currency, which is about 8% low on EUR/USD and considerably worse on crosses. Confusing base and quote entirely makes JPY pairs wrong by a factor of roughly 155.
What is a stop-out level? The point at which your account's equity falls so far relative to your used margin that the broker (or here, the engine) begins closing positions automatically. It is the mechanism that stops an account going negative, and it is one of the few things a simulated account can teach you precisely, because the arithmetic is identical to a live account.
Is there a free prop-firm-style trading challenge? Yes. Forex trading challenges give every entrant an identical isolated account with the same starting balance, leverage, instruments and risk rules, ranked on a live leaderboard. Entry is free. Scoring combines return with maximum drawdown, win rate, profit factor and consistency, so the winner is not simply whoever took the biggest risk.
How can a forex track record be verified? By having the execution engine record it rather than the trader. Every figure on an FXTerminal trader profile is computed from trades the engine itself executed — equity curve, win rate, profit factor, drawdown, consistency and challenge history. That does not vouch for skill, but it means the numbers can be checked rather than merely believed.
Why does demo trading feel different from live trading? Mostly for reasons software cannot fix. Simulated losses do not carry financial consequence, so the decisions you make under drawdown are different. Real fills also include slippage, especially through news releases. Paper trading teaches mechanics, execution and strategy viability reliably; it teaches emotional discipline poorly, which is why the challenge format — one account, fixed rules, public leaderboard, no restarts — exists.
Can I trade directly from the chart? Yes. The charts screen has a paper trading tab in its right panel with the same order ticket, and any open position in the charted symbol draws as entry, stop-loss and take-profit price lines on the candles. Challenge accounts are available there too.
What happens if the price feed goes down? Trading is disabled and the interface shows a "no live price" state. The engine deliberately refuses orders it cannot price freshly rather than filling against a cached quote — a stale price is well-formed and completely wrong, which is worse than no price at all.
Can challenge rules change after I join? No. A challenge's rules are a template; when you join, a frozen snapshot is written to your account. The API refuses rule edits once a challenge has left draft status, so no entrant can have the goalposts moved mid-event.
Retail trading has a verification problem. Track records are screenshots, results are claims, and the only thing standing between a strategy and an audience is a willingness to crop an image.
Running the execution engine in-house does not fix trading. It fixes exactly one thing: it makes the record a byproduct of the trading rather than a separate act of self-reporting. Every fill, every deal, every balance change is a row, written in the same transaction as the thing that caused it, on an account whose balance can be reconstructed from its history.
That is a small guarantee and a rare one.
Free, no broker, no deposit, live prices: fxterminal.app/paper-trading. If you want the version with consequences, the challenges are free to enter and the leaderboard is public.