TradinSolutionsEXECUTION LAYER
Start Free Trial →
HOME/BLOG

Notes from building execution infrastructure.

Prop-firm drawdown arithmetic, broker symbol suffixes, contract rolls, and what actually breaks when you copy a trade across five platforms.

← ALL POSTS
Platform Tutorials1 Oct 2026 · 9 min · TradinSolutions

The MT4 Signal Copier Guide: Local vs Server, and the Suffix Problem

Two MT4 terminals on the same VPS. The source opens EURUSD. The destination trades EURUSD.m. Nothing happens, nothing errors, and the log says the copy succeeded. This is the MT4 side of signal copying — what the platform gives you, what it withholds, and where the silent failures live.

Two MT4 terminals sit on the same VPS. The source account opens 0.40 lots of EURUSD. Forty seconds later the destination account still holds nothing. There is no error dialog, no red text in the Experts tab, and the copier's own log line reads copy dispatched ok.

The destination broker calls the pair EURUSD.m. As far as the software was concerned it sent an order for an instrument that does not exist on that account, the terminal declined it, and nobody wrote that down. This is the single most common way MT4 copying fails, and it is representative of the whole category: MT4 does not shout when something is wrong, it just quietly does less than you thought.

This is the MT4 side of signal copying. If your interest is in getting trades out of a Telegram channel and into a terminal, that is a different pipeline and it is covered separately; what follows is about the terminal itself.

What MT4 actually gives you

MT4 is a client-only surface for retail traders. There is no public server API you can call with an account number and a password from outside — the manager and administrator APIs exist, but they belong to the broker, not to you. Everything a retail copier does, it does through a program running inside a terminal that is logged in to the account.

That single fact sets the boundaries:

  • A terminal must be running. If the terminal is closed, the account is not being watched and not being traded. This is why copying and VPS hosting are practically the same conversation.
  • AutoTrading must be enabled, on the terminal and on the individual program. A VPS that reboots and restarts MT4 with AutoTrading off is an account that silently stops copying.
  • MT4 is hedging-only. An account can hold a long and a short in the same symbol simultaneously. Every position has a ticket, and tickets are the unit of identity. If your destination is MT5 on a netting account, the model does not survive the crossing intact.
  • Programs run per chart. The copier attaches to one chart and manages the whole account from there. Remove the chart, remove the copier.
  • File access is sandboxed. Since build 600 an expert advisor reads and writes inside MQL4/Files, with a shared Common/Files folder that all terminals on the machine can see. That shared folder is what makes local copying possible at all.

Local copying versus server copying

There are two architectures and they solve different problems. Choosing the wrong one is an expensive detour.

Local copying

Source and destination terminals run on the same machine. The source program writes an event — ticket, symbol, type, volume, open price, stop, target — into the common folder or into shared memory. The destination program reads it and acts.

  • Latency is negligible. No network hop; the delay is the polling interval plus the broker's own execution time.
  • No credentials leave the machine. Both terminals are already logged in; the copier never handles a password.
  • It is simple enough to reason about. The failure modes are file locking, stale files after a crash, and a destination terminal that was closed.

The limits are just as clear. Every account has to live on one machine, which means you own or control all of them, and you are constrained by the RAM that eight or ten MT4 terminals need. It cannot copy to another person, another continent, or a prop firm dashboard you do not host.

Server copying

The source terminal publishes events to a remote service. Destination terminals — anywhere, on any machine, for any account — subscribe and execute. This is what commercial copiers do, and it is what our own copier hub does.

  • It scales past one machine and across brokers, regions and people.
  • It survives one terminal dying without taking the rest down, provided the service holds state.
  • It can enforce rules centrally — per-destination sizing, filters, daily limits — instead of configuring ten terminals by hand.

The costs are a network hop measured in tens to low hundreds of milliseconds, a credential model you have to trust, and a much harder reconnection story, because now two independent sides can each go away and come back.

TIP

For copying between your own two or three accounts on one VPS, local is genuinely the better engineering answer. The moment a fourth account lives somewhere else, or somebody else's account is involved, local stops being simpler and starts being a workaround.

The suffix problem, properly

This deserves its own section because it causes more failed copies than everything else combined.

Brokers decorate symbol names. The decoration is not standardised and it is not documented anywhere central. In the wild you will meet:

  • Suffixes — EURUSD.m, EURUSD.r, EURUSDpro, EURUSD_i, EURUSD.raw, EURUSDmicro, EURUSD-ECN.
  • Prefixes — some brokers front-load, giving you mEURUSD or fxEURUSD.
  • Whole renames on indices and metals, which is where it gets ugly: gold appears as XAUUSD, GOLD, GOLDmicro or XAUUSD.s. The Dow appears as US30, DJ30, WS30, DOW or USA30. The Nasdaq appears as NAS100, USTEC, NDX100 or US100.
  • Account-type variants on the same server, so one login sees EURUSD.raw and another sees EURUSD.std at the same broker.

A copier that maps literally will fail on the first of these. A copier that strips a hardcoded list of suffixes will fail on the third. What actually works is enumeration plus normalisation:

text
1. Enumerate every symbol available on the destination account
   (Market Watch, "Show All", then read the full symbol list).
2. Normalise each name: uppercase, strip non-alphanumerics,
   strip a known prefix/suffix set, collapse aliases via a
   maintained table (GOLD -> XAUUSD, USTEC -> NAS100, ...).
3. Normalise the incoming source symbol the same way.
4. Match on the normalised key. Exactly one match -> map it.
   Zero matches   -> SKIP the copy and log NO_SYMBOL.
   Two or more    -> SKIP and log AMBIGUOUS_SYMBOL, ask the human.

The two skip paths matter more than the match path. A copier that silently proceeds on an ambiguous match will one day copy your gold trade onto a gold futures CFD with a different contract size, and the position will be wrong by a factor you did not choose.

The three numbers that break sizing

Once the symbol maps, three per-symbol properties decide whether the volume is right. All three differ between brokers on the same instrument.

Contract size. A standard lot of EURUSD is 100,000 units at most brokers. On a micro or cent account it may be 1,000, or the account may be denominated in cents. Copying 0.40 lots from a standard account to a micro account without adjusting for contract size gives you a hundredth of the intended exposure, and the trade quietly does nothing for weeks before anyone notices.

Digits. Four-digit and five-digit brokers both exist. A pip on a five-digit EURUSD is ten points. Any stop distance expressed in points rather than price will be out by 10x across that boundary — and on JPY pairs the same problem appears as two digits versus three.

Tick value and lot step. MT4 exposes these per symbol. Risk-based sizing needs the tick value on that account, in that account currency, and the result has to be rounded to the symbol's lot step, then clamped to its minimum and maximum lot. Round the wrong way on a symbol with a 0.01 step and a 0.01 minimum and a small calculated size becomes zero, which the terminal will reject.

WARNING

Test sizing against a destination whose account currency differs from the source. A USD source copying to a EUR destination has a currency conversion sitting inside the tick value, and a copier that ignores it is wrong by the exchange rate on every single trade.

Order types, stop levels and ECN behaviour

A few more MT4-specific traps worth knowing before you go live.

  • Stop level and freeze level. Brokers publish a minimum distance between the current price and any stop or target. A copy that is faithful in price terms can be rejected on the destination because that broker's minimum distance is wider. The correct behaviour is to place the order and then apply the protective levels, not to fail the whole trade.
  • Some ECN accounts will not accept a stop or target on the initial order at all. The order goes in bare and is modified immediately after the fill. A copier that cannot do a two-step open will not work on those accounts, and there is a window — usually milliseconds, occasionally longer — where the position exists with no stop.
  • Pending orders are separate state. If the source cancels a pending order, the copy has to be cancelled too. Copiers that track only open positions leave stale pendings that trigger days later at a price that made sense to nobody.
  • Partial closes on MT4 change the ticket. Closing part of a position can produce a new ticket for the remainder. Any mapping keyed on the source ticket has to follow that, or the next update goes to a ticket that no longer exists.

A pre-live checklist for MT4 copying

  • Source and destination deliberately on brokers with different suffixes, and a copy that succeeds.
  • A symbol that exists on the source and not on the destination, and a clean NO_SYMBOL skip with a visible reason.
  • A destination on a micro or cent account, with the volume verified by hand against contract size.
  • A four-digit and a five-digit broker in the same test set.
  • A deliberate VPS reboot, with AutoTrading verified back on afterwards.
  • A partial close on the source, verified as a proportional partial close on every destination.
  • A pending order placed and then cancelled on the source.
  • The destination terminal closed for ten minutes and reopened, with no duplicate positions on return.

Eight tests. None of them take long, and each one corresponds to a failure that is invisible until real money is on it.

Where this fits

If your source is a Telegram channel rather than another MT4 account, the parsing and update-handling half of the problem is covered in /blog/telegram-signal-copier-guide. And for the engine behind server-side copying — the reconcile loop, attribution, and what stops an account that is both a source and a destination from copying itself — see /blog/trade-replication-engine-explained.

NEXT