How copy trading works: inside an MT5 trade copier

4 min readMetaKit

Copy trading looks simple from the outside: a trade opens on one account and appears on another. Under the hood, a trade copier is a pipeline with four stages, and every stage has a failure mode that shows up as "why doesn't my follower match my master?" This post walks the pipeline, using the terms you'll meet in any serious copier — MT5-flavoured, since that's where most copy trading happens.

Stage 1: detection

The copier has to notice the master traded. There are two broad approaches:

  • Polling — repeatedly read the master's open positions and diff against the last snapshot. Simple, but latency is your polling interval, and a position opened and closed inside one interval is invisible.
  • Event streams — watch the terminal and emit an event the moment a position opens, changes, or closes. This is how sub-second copy latency is achieved; MetaKit's copier runs a watcher inside each account's terminal for exactly this reason.

Detection latency is the part of the chain you can't negotiate with a slow architecture. Everything downstream adds to it.

Stage 2: sizing — the part that decides your risk

The follower is rarely the same size as the master, so the copier must answer: 0.75 lots on the master becomes how much on the follower? The three standard modes:

ModeFollower volumeUse when
FixedAlways the same lot size, e.g. 0.10Follower risk must be constant regardless of master behaviour
MultiplierMaster volume × factor, e.g. ×0.5Accounts are proportional and you want to scale exposure
Balance-ratioScaled by follower balance ÷ master balanceMany followers of different sizes should carry equal relative risk

Two guards matter on top of the mode. A minimum lot exists because a scaled volume below the broker's minimum either gets rejected or rounded up to more risk than intended. A maximum lot per trade caps the damage when the master does something outsized — the ceiling applies after scaling, which is the only place it means anything.

Stage 3: translation — symbols are not universal

The same instrument has different names across brokers: EURUSD at one, EURUSD.r or EURUSD.pro at another; an index might be US30 on the master and US30.cash on the follower. A copier needs a symbol map — explicit overrides from master symbol to follower symbol — plus sensible automatic matching for the easy cases. When mapping fails, the copy is skipped, and a good copier records why rather than silently doing nothing.

Filters also live here: copy only these symbols, ignore trades below a lot size, stop copying once the follower has N open positions. Every skipped copy should appear in a log with a reason code, because "the copier did nothing" is indistinguishable from "the copier is broken" without one.

Stage 4: execution — where price risk lives

The follower order is finally placed. Between the master's fill and the follower's fill, price has moved — that difference is slippage, and in copy trading it compounds: the master already paid slippage to the market, and the follower pays it again relative to the master.

Serious copiers make slippage a first-class control: measure the follower fill against the master's fill price, and if it exceeds a configured tolerance (in pips), reject or immediately close the copy rather than holding a position the master never had at that price. Mirroring the master's stop loss and take profit onto the copy is the other execution-time decision — usually desirable, occasionally disabled when the follower runs its own risk rules.

The failure modes with names

  • Skip — the copier deliberately didn't copy: filtered symbol, below minimum lot, max open positions reached, or copier paused. Intentional.
  • Error — the copier tried and failed: order rejected, insufficient margin, AutoTrading disabled, follower terminal down. Needs attention.
  • Orphan — the master closed a position but the follower has no matching copy to close (it was skipped, errored, or closed manually). The dangerous one, because it means master and follower have diverged.

If you run copy trading in production, these three categories — plus per-stage latency — are what you monitor. A copier that reports "success" and nothing else is telling you nothing.

Reverse copying, existing positions, and other edge cases

Real copiers accumulate options because real usage demands them: reverse mode (follower takes the opposite side — used for hedging a strategy you don't control), copy existing (mirror positions already open when the copier starts, versus only new ones), and per-copier pause states that close existing copies but open nothing new (a "wind down").

Each is simple alone. The reason copy trading software is genuinely hard is that all of it — detection, sizing, mapping, slippage, orphan handling — must hold together at once, per follower, continuously.

Running one without building one

Everything above is what MetaKit's built-in copier implements per link: the three sizing modes, symbol mapping with overrides, slippage guards, SL/TP mirroring, and a command log with reason codes for every copy, skip, and error — manageable over a REST API rather than an EA per account. If you're evaluating copiers instead of building one, that list doubles as the questions to ask any vendor.