Documentation
Setup guides, configuration, trade copier usage, troubleshooting, and frequently asked questions.
Table of Contents
- Introduction
- Getting started
- Trade copier configuration
- Risk management
- Monitoring and analytics
- Sharing your results
- Backtesting and challenge simulator
- AI assistant
- Settings and preferences
- API and MCP
- Pricing
- Affiliate program
- FAQ
- Support
Introduction
5MTrader is a cloud-based copy trading platform for MetaTrader 5 and cTrader. Connect a master account and multiple slave accounts — from either platform, or both at once — and trades are copied automatically in real time, no local software to install, no VPS required.
It's more than a copier — it's a full trading desk. Alongside copying, every connected account gets live monitoring, a real-time terminal, performance analytics and complete trade history, all in one dashboard. See Monitoring and analytics.
Built and operated on dedicated cloud infrastructure by IPTRADE COPIER, LLC (Delaware, United States).
What it does
You set one account as Master (the source) and others as Slaves (the copiers). Every trade open, modify, and close is replicated across connected accounts in under 100ms. No manual re-entry, no missed trades. Ideal for running the same strategy on several brokers, scaling prop firm passes, or mirroring a personal account to funded accounts.
Features
- Execution under 100ms — Trades copied in milliseconds on dedicated cloud infrastructure tuned for MetaTrader 5 and cTrader.
- Cloud-based — Everything runs on our servers. No downloads, no installation, no VPS to manage on your end. Pick shared low-latency infrastructure or upgrade to your own dedicated private server (fully provisioned and managed by us).
- Live monitoring — Watch balance, equity, open P&L and position counts for every connected account in real time, plus a live terminal of all open positions and pending orders across accounts. The dashboard home is an editable Live Desk: around 28 widgets you can rearrange, resize and persist. No refresh, no spreadsheet.
- Built-in analytics — An equity curve, drawdown, win rate, 40+ performance metrics and a proprietary 5MTrader Score (graded S to F) that rates your edge — plus a calendar heatmap and full trade history, with no third-party analytics tool required.
- Risk management — Hard limits per account (daily loss, drawdown, position and lot caps, trading hours, news blackouts) enforced server-side 24/7, with automatic actions like blocking copies, turning copying off or flattening the account — plus alerts by email, webhook, Telegram or Discord. See Risk management.
- Trading alerts — Notify-only alerts over the same live stream: trades placed, modified or closed, news ahead, copier health and behaviour drift (overtrading, loss streaks, revenge trading), delivered by email, webhook, Telegram or Discord. See Trading alerts.
- Economic calendar — A built-in news calendar (High/Medium/Low impact plus holidays, nine major currencies) rendered in your timezone, with per-user filters — the same calendar that powers the risk engine's news blackouts.
- Symbol translation — Different brokers, different ticker names. Map symbols (e.g. EURUSD → EURUSD.raw), add or remove prefix/suffix so slaves always trade the correct instrument.
- Flexible sizing — Use a multiplier (e.g. 1.5× master volume) or fixed lot (e.g. 0.01 on every copy). Suits prop rules and risk preferences.
- Reverse trading — Invert trade direction (buy ↔ sell) for hedging or inverse strategies.
- Exact match — Force the slave to be an exact mirror of the master, automatically removing orphan orders. Off by default so manual trades on the slave are preserved.
- No trade tag — Copy without writing a comment or magic number on the slave's orders. Correlation then relies solely on the server-side mapping.
- Per-account configuration — Each slave account has its own lot settings, symbol mappings, and copy rules.
- Configuration templates — Save a copy setup once and apply it to any account (or in bulk to every slave) in one click.
- Shareable performance cards — Export a clean, branded image of your P&L for any period to share your results.
- 24/7 uptime — Runs around the clock on our infrastructure. No need to keep anything open on your end.
- Your data stays private — We never sell or share your trading data with third parties, and you can delete it anytime. Your trades and the stats derived from them are used only to run copying and power your own monitoring and analytics.
Use cases
- Prop firm scaling — Run one strategy across multiple funded accounts (same or different brokers) with consistent risk settings.
- Multi-broker redundancy — Same signals on several brokers for execution diversity or backup.
- Personal + funded — Trade your own account as Master and mirror to prop/funded Slaves with adjusted lot sizes.
- Copy services / signal providers — Use your Master as the source and connect client Slaves with their own sizing and symbol configuration.
Getting started
Setup takes under 5 minutes. No software to install — everything happens in the 5MTrader dashboard.
Step 1: Connect your accounts
- Log in at 5mtrader.com.
- Click Connect account and choose your platform — MetaTrader 5 or cTrader.
- Connect the account:
- MetaTrader 5 — enter your login number, password, and server name.
- cTrader — click Connect with cTrader and authorize access. You're redirected to cTrader's secure login (we never see your password), and every eligible account on your cTrader ID is linked automatically.
- The account appears in your dashboard, ready to configure.
Tip: No local software to install — everything runs on our infrastructure.
Step 2: Configure copy rules
- Open the Copy Trade screen, find the account and click Configure.
- Set the role: Master (sends trades) or Slave (copies trades).
- For slave accounts:
- Choose which master to follow.
- Set lot type: Multiplier (scale master volume) or Fixed lot (fixed size per trade).
- Optionally enable reverse trading, exact match, prefix/suffix, or symbol translations.
- Save the configuration.
Tip: Takes under 2 minutes — sensible defaults are set for everything. To reuse a setup across accounts, save it as a template and apply it in one click, or apply it in bulk to every slave of a master.
Step 3: Start copying
- Toggle the Enable switch on your configured accounts.
- Trades copy in real time across all connected accounts.
- Monitor status directly in the dashboard.
Tip: Runs 24/7 — no need to keep anything open on your end.
Managing your accounts
The Accounts screen is your connection inventory — it's where you add, check and remove broker accounts (all copy settings live on the Copy Trade screen instead):
- Status at a glance — Each account shows a live status chip (Connected, Connecting, Offline, Maintenance or Pending), its server or broker, and a Live / Demo badge once the platform reports the account type.
- Plan usage — A chip shows how many account slots you have left (e.g. Available: 3/5). When you hit your plan's limit, the connect button becomes a Get more accounts shortcut to Billing.
- Reconnect — If an MT5 account drops to Offline (typically after a password change on the broker side), a reconnect action appears: re-enter the MT5 password and it comes back online. cTrader accounts re-authorize through cTrader's login instead.
- Delete — Removes the account and its connection permanently (with a confirmation — it can't be undone). Deleting a master releases its slaves, which keep their data and can be linked to another master.
- Search and refresh — Find any account by number or server, and refresh the list on demand; statuses also update automatically every few seconds.
Example: your broker forced a password reset overnight. The account shows Offline on the Accounts screen — click reconnect, type the new MT5 password, and copying resumes without touching any of your copy rules.
Trade copier configuration
Account roles
- Pending — Newly connected account. Inactive until you set it as Master or Slave.
- Master — Sends its trades to linked slave accounts.
- Slave — Copies trades from a chosen master account.
Enable / disable
Each account has an individual Enable toggle. When disabled, no trades are copied for that account without affecting other accounts.
Slave options
Master to follow — Choose the master account this slave copies from.
Lot type
| Mode | Description | Example |
|---|---|---|
| Multiplier | Volume = master volume × multiplier | Master opens 1 lot, multiplier 2.0 → Slave opens 2 lots |
| Fixed lot | Always uses the lot size you set | Master opens 10 lots → Slave opens 0.01 lots (fixed) |
Symbol management
- Symbol translation — Map symbols between brokers (e.g. EURUSD → EURUSD.raw). Useful when different brokers use different ticker names. Matching is case-sensitive (EURUSD and eurusd are different).
- Prefix — Add or remove a prefix from symbol names (e.g. add "Demo_" turns EURUSD → Demo_EURUSD). The prefix string is matched case-sensitively.
- Suffix — Add or remove a suffix from symbol names (e.g. remove ".raw" turns EURUSD.raw → EURUSD). The suffix string is matched case-sensitively.
Reverse trading — Inverts trade direction. Master buys → Slave sells. Master sells → Slave buys. Useful for hedging or inverse strategies.
Exact match — When enabled, the slave becomes an exact mirror of the master: any order on the slave that doesn't correspond to a master order is automatically removed (orphan cleanup). When disabled (default), only orders copied from the master are managed — orders placed directly on the slave account are left untouched.
No trade tag — By default every copied order carries the master's ticket in its comment (and magic number on MT5), which is how a copy is recognised as belonging to a master. With this option enabled the slave's orders are placed clean: no comment, no magic number. cTrader orders still carry an opaque random label, because the platform requires one, but it holds no link to the master.
Correlation then depends entirely on the server-side ticket map that 5MTrader keeps for each master/slave pair. That map is stored on the server and survives restarts and redeploys. The risk: if it is ever lost — the server is rebuilt, the account is moved to another machine, or its data volume is wiped — open copies can no longer be matched to their master, because nothing is left on the broker side to rebuild the link from. When that happens 5MTrader deliberately stops rather than guessing: it will not close or duplicate anything, and copying for that pair resumes only once you close the slave's open orders manually or turn this option back off.
Configuration templates
Templates let you save a complete slave setup once and reuse it everywhere — ideal when you run the same rules across many accounts.
- Save a template — Capture lot type (multiplier or fixed lot), reverse trading, exact match, prefix/suffix and symbol translations under a name you choose, from the Templates screen or directly while configuring an account.
- Apply to an account — From the Copy Trade screen, apply any saved template to a slave in one click.
- Bulk apply — Apply a template (or a master's current setup) to every slave of that master at once, so a whole book shares identical rules.
- Connect unlinked slaves — Link any unconfigured slave accounts to a master in bulk, then configure them together.
- Edit or delete — Manage your saved templates anytime from the Templates screen. Editing a template doesn't retroactively change accounts you already configured.
Risk management
Paid feature: Risk management requires an active paid plan (any plan, including the 7-day free trial on the Shared plan).
Every connected account can carry hard risk limits — daily loss, drawdown, position caps, trading hours, news blackouts and more. Limits are evaluated on the live price stream and enforced on the server that runs your account, so they keep working even if you close the dashboard or our website is down. The section has four tabs: Rules, Alerts, Templates and Notification channels.
How enforcement works
- Rules attach to an account (master or slave — any connected account you own).
- Each account holds at most one rule of each type — eight types in total.
- Each account has an Enforced switch: turn it off and the rules stay saved but nothing is enforced; turn it back on and they apply again immediately.
- Saving the rule editor replaces the account's whole rule set — including rules you left switched off. The same applies when you apply a template or edit several accounts at once.
- On the Rules table, each rule appears as a live chip that fills up as you approach the limit: green while you're safe, amber from 80% of the limit, red at breach. The State column always names the tightest rule — the one that will fire first.
Rule types
Capital protection
| Rule | What it measures | Settings | Example |
|---|---|---|---|
| Daily loss | Loss since the start of your trading day, floating P&L included | Limit in % or account currency; measured from opening balance, opening equity or the day's peak equity (daily trailing); optional auto re-arm at daily reset | 5% from opening balance: with a $10,000 day open, the rule fires the moment equity drops $500 on the day |
| Maximum drawdown | Your deepest decline | Limit in % or currency, measured from your starting balance (fixed), your highest equity (trailing) or your highest daily close (trailing EOD); trailing bases can lock at the starting balance | 10% trailing from a $12,000 equity peak: the floor sits at $10,800 and only ever moves up |
| Equity floor | An absolute level equity may never touch | A figure in account currency (no percent — a floor is a level, not a distance) | Floor $9,000: if equity ever prints $8,999, positions are closed |
| Profit target | Fires when equity reaches a target — to protect a green day | Limit in % or currency; optional auto re-arm at daily reset. Switches itself off after firing | Target 4%: hit +$400 on a $10,000 account → get notified (or flatten and stop) instead of giving the gain back |
Day boundary: every daily reset — and the end-of-day snapshot the EOD trailing base uses — follows a per-account timezone and reset hour, set right in the rule editor. The starting balance those bases and the lock measure from is editable in the same editor. It defaults to your own timezone at midnight; match it to your firm's clock (FTMO midnight Prague, futures 17:00 New York) when you mirror their rules.
Exposure
| Rule | What it limits | Settings | Example |
|---|---|---|---|
| Position cap | How many positions may be open, and how many may be opened per day | Max open and/or max per day (whole numbers) | Max open 3, max 10/day — the 4th simultaneous copy (or the 11th of the day) is refused |
| Lot size | Volume per trade and across everything open | Max per trade and/or max total (in lots). A copy above the cap is refused, never shrunk | Max 1 lot per trade, 5 lots total: a 2-lot master trade simply doesn't copy |
Timing
- Trading hours — Sessions during which copying is allowed, in the account's day-boundary timezone — your own timezone unless you change it in the rule editor (up to 12 sessions, each with from/to times and day-of-week toggles; overnight sessions like 22:00 → 02:00 work fine). Outside the sessions the rule's breach actions fire — by default, new copies are blocked. Example: one session Mon–Fri 08:00–17:00 in your timezone keeps the account strictly on London hours; nothing copies on the weekend or overnight.
Surveillance
- News windows — Blocks new copies around scheduled economic releases: set minutes before and minutes after (default 5/5) and which impact levels count (Low / Medium / High — default High only). The blackout applies to the whole account, all symbols. Manual trades placed directly on the platform can't be blocked, but they are found in a periodic review afterwards — and those findings fire the rule's notification actions too. Example: 15 minutes before/after high-impact USD news keeps the copier flat through Non-Farm Payrolls.
When a rule is breached
Each rule carries its own checklist of actions:
- Email me — a breach email naming the rule, the reading, the limit and what was done.
- Send a webhook — a JSON event POSTed to your webhook URL.
- Message me on Telegram / Message me on Discord.
- Block new copies — the engine refuses new copies while the rule is broken; open positions are untouched.
- Turn copying off — flips the account's copy switch off. If the account is a master, every linked slave is turned off too. It stays off until the daily re-arm (if enabled) or until you re-enable it manually.
- Close every position — flattens the account immediately. Ticking this automatically also stops new entries (it adds Turn copying off — or Block new copies for news windows, since a blackout frees itself minutes later).
If you tick a Telegram/Discord/webhook action without configuring that channel, the editor warns you inline — otherwise nothing would be sent.
Prop-firm example: the editor's 5% / 10% preset reproduces the classic evaluation pair in one click — daily loss 5% of opening balance (email + turn copying off, auto re-arm next day) and static drawdown 10% (email + turn copying off + close every position). A Conservative preset (2% daily, 5% drawdown, position cap 3) is one click away too.
Daily reset, timezone and re-arm
Each account has its own day boundary — a timezone plus the time of day the trading day starts — set at the top of the rule editor when you edit a single account (a multi-account edit leaves each account's boundary untouched). It defaults to midnight in your dashboard timezone (from Settings). The boundary drives everything daily: the daily-loss reset, the position cap's per-day counter, the end-of-day snapshot behind the EOD trailing drawdown base, and auto re-arm, which switches copying back on at the next day start — so a daily-loss stop is a one-day timeout, not a permanent shutdown. Trading-hours sessions are read in the same timezone, and clock changes (DST) are followed automatically. Example: set New York with the day starting at 17:00 and your daily-loss rule resets at 17:00 New York — a breach at 15:30 pauses the account for just ninety minutes, exactly like an exchange trading day.
Risk templates
The Templates tab saves a complete rule set — types, values and breach actions — under a name (e.g. "Prop firm 2% daily"), so you can apply identical protection to many accounts in two clicks:
- New template — build it in the same editor as the Rules tab, starting from a preset if you like.
- Apply — pick any of your connected accounts (or Select all); the template's rules replace whatever those accounts had. Locked accounts can't be selected.
- Edit / delete — editing or deleting a template never changes accounts that already received its rules.
Your saved templates also appear as Start from buttons inside the rule editor itself.
Lockout (self-exclusion)
The Lock action closes everything and stops copying on the chosen accounts until the lock expires — with no early unlock, by design. Pick a quick duration (30 min / 1 h / 3 h), the end of a market session (Asia, London or New York), or any date and time up to 30 days ahead. While locked, the account's rules, switches and templates are frozen; locking a master locks its slaves too. When the lock expires, copying is re-enabled automatically and the event is logged. Example: two daily-loss stops in a week? Lock the account until Monday and make the break non-negotiable.
Close all
Close all flattens every open position on the selected accounts right now (masters are closed before slaves) and reports exactly how many positions were closed. The request survives brief connection issues — it's delivered as soon as the account's server is reachable.
Notification channels
One set of channels shared by every account, configured once on the Notification channels tab. Email needs no setup — it uses your account email. Each card shows Configured / Not set, and a Send test button that delivers a test message with the values as typed, so you can verify before saving:
| Channel | What you enter | Where to get it |
|---|---|---|
| Webhook | A public https URL | Your own endpoint — every breach is POSTed there as JSON (event, account, rule, metric, limit, equity, actions taken) |
| Telegram | Bot token + chat ID | Create a bot with @BotFather, send it a message, paste the token and your chat ID |
| Discord | Discord webhook URL | Channel settings → Integrations → Webhooks → copy the URL |
A real alert reads like: "⚠️ Daily loss triggered on 12345678 — Metric 5.2% / limit 5% — Equity $9,480 — Actions: copying turned off." Deliveries are retried automatically for up to five attempts. Only rule breaches notify — manual locks, manual close-alls and automatic re-arms don't message you.
Trading alerts
The Alerts tab is the read side of the same live stream: alerts only inform — they can never act on an account (acting is what rules are for). Each alert watches the accounts you pick, delivers on the channels you tick (email, webhook, Telegram, Discord — the same notification channels as the risk engine) and carries its own cooldown (default 5 minutes) so a busy stream doesn't flood you. Six alert types:
| Alert | Fires when | Filters |
|---|---|---|
| Trade placed | A new position or pending order appears on a watched account | Symbols (substring match), minimum volume |
| Trade modified | SL, TP or the price of an order changes | Symbols, minimum volume, minimum change — so a 0.1-pip SL nudge stays quiet |
| Trade closed | A position closes, with its result | Symbols, minimum volume |
| News ahead | A scheduled economic release is coming up | Minutes ahead (default 15), impact levels, currencies |
| Copier health | A connected account has been offline longer than a threshold | Offline minutes (default 5) |
| Behaviour | Your own trading drifts | Choose the detectors: overtrading (more than N closed trades in a day, default 10), loss streak (N consecutive losses, default 3) and revenge trading (re-entry within N minutes of a loss, default 5) |
Behaviour detectors are computed from your own closed trades, in your dashboard timezone. A hard ceiling of 100 alert notifications per day protects your inbox no matter how the filters are set.
Example: one alert with Trade closed + Behaviour (loss streak 3) on your funded account, delivered to Telegram — you hear about every closed trade, and the third consecutive loss arrives flagged before you talk yourself into a fourth.
Monitoring and analytics
5MTrader isn't just a copier — it's a full trading desk. Every connected account is monitored live and fully analyzed, all from the same dashboard. None of these screens require you to keep MetaTrader 5, cTrader or any local software open; everything runs on our infrastructure.
Live Desk
The dashboard home — Live Desk — is a live command center for all your connected accounts, and it's yours to arrange: an edit mode lets you add, remove, reorder and resize widgets, and the layout is saved to your profile (a reset puts the default back). Around 28 widgets in five groups:
- Metrics — KPI tiles aggregated across your accounts: online accounts (e.g. 4 of 5), total balance and equity, live floating P&L, today's / this week's / this month's PnL with trade counts (the Today tile carries a quick Share action), open positions, win rate, profit factor, expectancy, max drawdown, exposure, streaks and current risk state.
- Live — streaming tables: every open position and pending order across accounts, today's trades, recent trades and exposure by symbol.
- Performance — charts computed from your closed trades: equity curve, drawdown curve, daily PnL, symbol breakdown, win-rate gauge, your 5MTrader Score, the calendar heatmap, and weekday / session / hour-of-day breakdowns.
- Risk & news — live meters for your enforced risk rules and the next economic events.
- Accounts — the per-account live status table (status, role, a one-line copy-config summary like
→ master, ×2, reverse…, balance, equity, today's PnL, open P&L, open positions and pending orders) and, on Private Server plans, the Private Server panel — your dedicated VPS live status, region, CPU/RAM usage and specs, with the IP address hidden behind a show/hide toggle. The region is chosen when you subscribe and is fixed for the life of the subscription: to run in another one, cancel the plan and subscribe again picking the new region.
Example: you run one master and four funded slaves. One glance at Live Desk tells you all five are online, the book is +$230 floating, one slave shows Offline in red — and the config column confirms the other three are still copying at ×1 with reverse off.
Live terminal
The terminal is a real-time view of every open position and pending order across your accounts. Each row shows the account, server, symbol, side (buy/sell), volume, open price, open time, stop loss (SL), take profit (TP) and live P&L. Filter by account, and the aggregated balance, equity and open P&L update continuously as prices move.
Statistics and analytics
A complete analytics suite computed from your closed trades — the same metrics professional desks pay for, built in:
- 5MTrader Score — a single proprietary composite grade from S to F (0–100) that rates the quality of your edge, from Top-tier edge (S, 90+) down to No edge yet (F).
- Equity curve and drawdown — cumulative P&L over time and your deepest peak-to-trough declines, including how long the longest drawdown lasted.
- Win rate — wins, losses and break-even trades, with average win and average loss.
- 40+ metrics across key ratios and advanced stats — expectancy, average win/loss ratio, recovery factor, Sharpe, Sortino and Calmar ratios, day win rate, best/worst trade, best/worst day, average holding time, Kelly %, SQN (System Quality Number), Z-score, standard deviation per trade, profit per lot, trades/winners/losers per day, and total commission and swap.
- Distributions and breakdowns — P&L distribution, trade duration, results by weekday and by hour, an activity heatmap, long vs short split, and your best and worst symbols by P&L and volume.
Every chart respects the active date range and account filters, so you can analyze a single account or your whole book over any period.
Calendar heatmap
An at-a-glance heatmap of your closed-trade P&L: green cells printed, red cells bled, each showing the net result and trade count for that period. Switch the granularity between Month, Quarter and Year, and toggle the metric shown on each cell (net P&L or trade count). Filter by account and step back and forth between periods to see exactly what drove your results.
Trade history
A complete deal history across all your accounts. Every fill shows symbol, side, volume, open and close price, commission, swap and net profit, sortable down to the ticket. Filter by account and date range to reconcile any period exactly.
Economic calendar
The News screen is a built-in economic calendar, rendered entirely in your timezone — no more converting release times in your head:
- Two views in one — a month grid on the left (each day flagged with a folder icon coloured by the loudest impact of the day) and the event list on the right, grouped by day. Click a day for a day view, a row's arrow for the week, or the header arrow for the whole month; a Today button snaps you back.
- What each event shows — time, currency and impact: High, Medium, Low or Holiday, each with its own colour. The next upcoming event is highlighted and scrolled into view automatically.
- Nine major currencies — AUD, CAD, CHF, CNY, EUR, GBP, JPY, NZD and USD.
- Filters that stick — filter by impact, by currency, and by event type (Growth, Inflation, Employment, Central Bank, Bonds, Housing, Consumer Surveys, Business Surveys, Speeches, Misc). Your filter set is saved to your profile and restored on every visit; the current view and date live in the URL, so a filtered week can be bookmarked or shared.
- Coverage — events refresh hourly and extend roughly three months ahead.
Example: before a trading week, open the week view, filter to High impact + USD/EUR only, and you have the exact releases — in your local time — that your news-window risk rule will be blocking around.
How live data updates
Live figures — balance, equity, open P&L and position counts — stream continuously and refresh about once per second, so the overview, terminal and account tables always reflect your current exposure without a manual refresh. Statistics, the calendar and trade history are computed from your closed trades and update as new trades settle. The Daily PnL column on the account tables and the Today's PnL tile are read from those same closed trades: the net result of everything that closed since the start of your trading day, cut at midnight in your dashboard timezone. You never need to keep MetaTrader 5, cTrader or any local software running for any of this — it all runs on our infrastructure.
Sharing your results
Turn any period into a clean, branded performance card you can post or send. Open the Share screen to build one, or use the quick Share action on the Live Desk to share today's P&L instantly.
- Pick a period — Today, this week, this month, this year, or all-time.
- Choose what to show — Toggle percent of capital, balance, trade count, win rate, profit factor and your best trade on or off.
- Net or gross — Include or exclude swap and commission from the P&L shown on the card.
- Identity — Optionally show your name and/or email on the card, or keep it anonymous.
- Filter by account — Build the card from a single account or your whole book.
- Export — Download the card as an image, or share it directly on devices that support native sharing.
Tip: Your card only ever shows the figures you choose — nothing about your strategy, positions or credentials is included.
Public verification page
Anyone can fake a screenshot — so 5MTrader can back your card with a live, verifiable page. Turn on Include QR code on the Share screen and two things happen:
- A QR code is stamped onto the card itself, and a shareable link appears next to the switch (with a copy button). The link regenerates automatically whenever you change any card setting, so it always matches what's on screen.
- Whoever scans the QR (or opens the link) lands on a public verification certificate: the period, your net P&L or verified balance, and exactly the extra metrics you ticked — nothing more. It shows your certificate name if you set one, or just "Verified trader" if you'd rather stay anonymous.
What makes it trustworthy — and safe:
- Recomputed live — the figures aren't baked into the link; every visit re-checks them against your synced trade history, so the page always shows real, current numbers for that period.
- Tamper-proof — the URL is cryptographically signed. Change a single character and it stops resolving.
- Private by design — visitors never see your trades, positions, account numbers, brokers or email. Turn on Percentage only and even the currency amounts disappear.
- Not indexed — search engines are blocked; the page is reachable only by the link or QR you hand out.
- No expiry — the link keeps working for as long as your 5MTrader account exists, so a card you posted months ago still verifies.
Example: you post this month's card in a trading community. A skeptic scans the QR and sees a 5MTrader-issued certificate — This month, net P&L +$1,840, 62% win rate, verified live — without learning your broker, your account size (if you hid it) or a single position.
Backtesting and challenge simulator
The dashboard includes a full chart backtester built on TradingView charts: replay historical market data candle by candle — or tick by tick — and trade it with a simulated account, exactly like a live chart. The backtester, its TradingView charts and custom indicators are free for every registered user — no subscription required. The prop-firm challenge simulator needs an active paid plan.
Sessions
Create a session from the Backtesting screen and choose its type at the top: Backtest session (free practice trading) or Prop firm session (a challenge simulation — see Prop-firm challenge simulator). Then set up the market and account:
- Symbols — Pick one or more instruments from the searchable list (a prop firm session runs on exactly one symbol).
- Date range — Bounded by the historical data available for the selected symbols; the form shows the exact Data available range. Leave the end date empty to replay up to the latest available data (a prop firm session requires an end date).
- Name (optional — one is generated if you leave it blank), starting balance (default $10,000) and leverage.
- Base layout — Optionally start the chart from a saved layout's indicators, drawings and style.
Everything saves automatically as you go: replay position, balance, open positions, pending orders and your chart layout, so you can leave anytime and continue later from the session list. Each session card shows its status, symbols, dates, trades, win rate and P&L, with shortcuts to continue the session or open its full statistics. Deleting a session permanently removes it and all its trades.
Market data and replay accuracy
- Coverage — Sessions replay real historical data we store for a curated set of symbols: major forex pairs, metals, indices, crypto and more. Each symbol shows exactly how far back its data goes when you create a session.
- Resolutions — Chart timeframes from 1 minute up to yearly, plus a 1-second resolution on symbols with tick data.
- Tick and bar stepping — Recent history (roughly the last month) replays tick by tick with the real bid/ask spread; older history advances in one-minute steps with no spread.
- Costs — Simulated trading applies no commission, swap or slippage: pending orders, stop loss and take profit fill exactly at their price (take profit is checked first when both are touched in the same step).
- Leverage and margin — The session's leverage is enforced like a real account. Each open position locks margin (its notional value divided by your leverage), and the Account widget shows used margin, free margin and your margin level. An order that needs more margin than you have free is rejected, and if your margin level falls below 50% the simulator liquidates positions automatically — worst-losing first — until it recovers.
Replay controls
A floating control bar — drag it anywhere on the chart; its position is remembered per session:
- Play / pause at 0.5×, 1×, 2×, 5×, 10×, 30× or 60× speed — at 1× chart time passes in real time; at 60× a market minute passes every second.
- Step forward one candle of the current chart timeframe, or skip ahead by a fixed interval: 1m, 5m, 15m, 1h, 4h or 1D.
- Go to — Click the replay clock to jump to any later date and time from a calendar.
- Active symbol — On multi-symbol sessions, switch the chart between the session's symbols.
Replay is forward-only: you can never rewind, and the chart never reveals anything past the current replay moment. To redo a run, create a new session (or use Try again on a finished challenge). When the replay reaches the end of the data, playback stops — a practice session simply stays open, while a prop firm session receives its verdict.
Trading
- Orders — Place market, limit and stop orders with an optional stop loss and take profit from the order panel; buys fill at the ask, sells at the bid. Volume is in lots (minimum 0.01).
- On-chart management — Positions, pending orders, stop losses and take profits appear as price lines with pills at the chart's edge: drag a pill to re-price a pending order, SL or TP; click its × to close or cancel; or open a position's edit dialog to adjust its brackets by price or by ticks, with the projected P&L shown.
- Drawing to order — Draw a long/short position tool on the chart and convert it into an order in one click: entry, stop loss, take profit and size are read straight from the drawing.
- Positions — Every fill opens an independent position (long and short can coexist on the same symbol). Close positions individually or use Close all to flatten everything and cancel every pending order at once.
Trade panel
A dockable, resizable side panel made of movable widgets: Account (balance, equity and open P&L), Order panel (the ticket, with the live bid/ask), Positions & orders, and — in prop firm sessions — the live Prop firm panel. Reorder widgets, float them over the chart as free windows, or hide the whole dock; on mobile it becomes a bottom sheet. Your arrangement is remembered.
Chart layouts
The chart always comes back exactly as you left it — indicators, drawings, style and panes are saved automatically per session. To reuse a setup across sessions, save a named layout from the chart's save menu: load, rename or delete layouts anytime, and start any new session from one with Base layout. Only full chart layouts are saved — TradingView's separate indicator/drawing template menus are not supported.
Custom indicators
Bring your own indicators into the backtester — free, like everything else in it. The full TradingView indicator library is available out of the box (plus five ready-made Custom examples: Moving Average, EMA, RSI, MACD and Bollinger Bands), and on top of that you can compile your own:
- Where — The Custom indicators button on the Backtesting screen opens the full-page code editor; inside a chart, the
</>button opens the same editor as a side panel next to the chart. - Write or paste Pine — The editor accepts real Pine source, versions 1 through 6, with syntax highlighting, line numbers and a minimap. It compiles as you type: the output log reports success (with the plots and inputs detected), errors with line numbers, and a note for anything that was adjusted.
- Add to chart — One click puts a compiled indicator on the chart, preserving your replay position and layout. Your indicators also appear in the chart's Indicators menu, pre-marked as favorites, with the native settings dialog for their inputs, styles and colors.
- Supported — Inputs of every type, all standard plot styles with dynamic colors, shapes and characters, horizontal lines, fills, background and bar coloring, arrays, matrices, maps, user-defined types and functions, and roughly 70
ta.*functions. - Adjusted — A few things intentionally behave differently and are flagged in the log:
request.security()evaluates on the chart's own timeframe (no higher-timeframe requests), strategy scripts load as plain indicators (their orders are ignored), scripts can't create alerts or tables, andline/label/boxdrawings render directly on the chart but are not saved with the layout. - Your library — Indicators are saved to your account and usable in every session, and they stay private to you — nothing you write is shared or published. An edit that doesn't compile is kept as a draft (flagged in the list) and comes off the chart until it compiles again.
Prop-firm challenge simulator
Paid feature: The prop-firm challenge simulator requires an active paid subscription. Any plan unlocks it, including the 7-day free trial on the Shared plan. Practice sessions — same chart, same replay, same indicators — stay free for every registered user.
A prop firm session simulates a challenge evaluation over historical data, with the rules enforced in real time on every replay step. Start from a template or set every rule yourself:
- Two-phase standard — 8% then 5% profit target, 5% daily loss, 10% static drawdown, minimum 4 trading days per phase.
- One-phase — One 10% target with a 5% daily loss and only 6% of drawdown, minimum 3 trading days.
- Futures trailing — 6% target, 3% daily loss and a 4% drawdown that trails your intraday equity peak until it locks at the starting balance, with the trading day rolling at 17:00 Chicago time.
- Consistency — The two-phase rules plus a consistency check: no single day may carry more than 30% of the total profit (if one does, the phase simply doesn't complete until the profit is spread out).
- Custom — Up to three phases, each with its own profit target, daily loss, max drawdown and minimum trading days; plus how drawdown follows (static, trailing end-of-day or trailing intraday) and whether it's measured on equity or balance, the daily-loss baseline (yesterday's closing balance or today's opening equity), what counts as a trading day (a trade closes, or a trade opens), and the rule timezone with its daily reset hour.
How the rules are measured: the profit target counts closed balance only — floating profit doesn't count — and a phase only completes once its minimum trading days are met. The daily loss allowance is a fixed percentage of the starting balance, checked against your equity in real time and reset each day at the reset hour in the rule timezone. Drawdown is checked against equity by default; a trailing floor ratchets up with your peak and never comes back down.
The live Prop firm panel shows the current phase, the profit target and your distance to it, the remaining daily-loss room, the drawdown room (with its static/trailing/locked state) and your trading days — turning amber, then red, as you approach a limit. Passing a phase closes every position, cancels pending orders and starts the next phase with its rules re-anchored to the original starting balance; passing the final phase completes the challenge. Breaking a rule fails it on the spot, with a verdict naming the rule, the exact values, the time (in the rule timezone) and the trade that triggered it. If the data runs out before a verdict, the run ends as unresolved — nothing was broken; there was just no runway left.
A finished challenge is locked: no more trading or replay. Review its report in your statistics, or hit Try again to start a fresh attempt with the same symbol, dates, balance and rules — attempts are numbered (#2, #3, …) so you can track progress across tries.
Backtest results in your analytics
Every simulated trade is recorded, and your backtest sessions plug into the same statistics, calendar and trade history screens as your live accounts: pick a session from the Backtest sessions group in the account filter and the date range fits itself to the session automatically. Simulated and live results are never mixed together. The AI assistant's Backtest coach mode can analyze any of your sessions, including prop firm challenge runs.
AI assistant
The Assistant screen is a built-in AI chat with three modes — pick one when you start a chat, or just ask: if your question belongs to another mode, the assistant switches mid-conversation automatically and tells you so.
- Product help — Questions about 5MTrader itself: setup, features, plans and billing. It's grounded in this documentation, so it answers with real product facts, never invented prices or limits.
- Trading coach — Feedback on your real trading: performance, patterns, discipline and risk, computed live from the synced history of your connected accounts. It can pull your per-account stats, daily and monthly aggregates, per-symbol results and your most recent closed trades.
- Backtest coach — Analysis of your simulated sessions recorded in the chart backtester, including prop-firm challenge runs: session stats, day-by-day results, individual trades and challenge phase progress.
Example questions (each mode suggests its own starters): "Which weekday do I lose the most?", "What are my best and worst symbols?", "Compare my backtest sessions", "What should I improve before going live?", "What does my plan include?"
Everything is a real conversation history: chats are saved to your account, titled automatically after the first exchange, and listed in a sidebar where you can pin up to 3 favorites and delete the rest. The coaches only read the data you have synced to 5MTrader, they never invent figures (an empty account is reported as "no data", not illustrated with fake numbers), and they never give trade signals, market predictions or investment advice — it's an educational coach focused on your own numbers.
Product help is free; the coaches are paid: Product help is available on any account, with or without a subscription, and is not limited. The Trading coach and the Backtest coach need an active paid plan and draw on a daily message allowance. The Trading coach reads the synced history of your connected accounts, which needs an active plan too. When there is nothing to analyze the coach says so plainly instead of guessing.
Settings and preferences
Manage your account and personalize the dashboard from the Settings screen.
- Account — Your email, name and role.
- Plan — Your current plan, status, account limit, billing period and renewal/expiry date, with a shortcut to the billing portal.
- Theme — Choose System, Light or Dark. System follows your device setting.
- Timezone — Auto-detect from your device or pick any timezone from a searchable list. All trade times, the calendar, statistics and history render in the timezone you choose.
The dashboard is also available in multiple languages — switch language from the app and your preference is remembered.
You can disconnect any trading account at any time from the Accounts screen. To delete your entire 5MTrader account and its data, email support@5mtrader.com from your account email and we'll process the deletion.
API and MCP
Paid feature: API and MCP access requires an active paid plan.
Everything you can do in the dashboard is also available over HTTP, and to any Model Context Protocol client. Both use the same personal tokens, the same permissions and the same limits — the API is not a reduced copy of the product, it is the product.
Open API & MCP in the dashboard. It has four tabs: Tokens (create and revoke credentials), Explorer (browse and actually run every endpoint), MCP (ready-made client configuration) and Usage (what your tokens have been doing).
Personal API tokens
Create a token in API & MCP → Tokens. You choose its name (e.g. "My risk bot"), its scopes and, optionally, an expiry — Never, In 30 days, In 90 days or In a year. The token is shown once, right after it is created: we store only a hash of it, so it cannot be recovered. If you lose one, rotate it — rotation keeps the name, scopes and expiry and replaces only the secret, so you update one environment variable and nothing else.
Send it as a bearer credential:
curl 'https://5mtrader.com/api/v1/me' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
/v1/me is the cheapest way to check a credential: it answers with who the token belongs to, your plan, the scopes it was granted and your current usage against each limit.
A token acts as you — and only as you: it always sees your own accounts, never anyone else's, whatever your role. Give each integration its own token with the narrowest scopes it needs, and revoke it the moment it stops being used — revocation takes effect immediately. You can hold up to 5 active tokens at a time; revoke one to make room.
Scopes and limits
Every endpoint requires exactly one scope, and a token can only call what its scopes cover:
| Scope | What it allows |
|---|---|
read | Read accounts, trades, statistics, risk rules and the calendar, look up broker server names, read billing and affiliate data, get stream tickets, and read your own API usage |
accounts:write | Connect, configure and disconnect trading accounts, link cTrader accounts and refresh their tokens, and manage copier templates |
copy:toggle | Start and stop copy trading on an account |
trade:execute | Open, modify, close and cancel orders and positions over the API |
risk:write | Create and change risk rules, templates and alert channels |
risk:execute | Close all positions and lock an account out of trading |
alerts:read | List your trading alerts |
alerts:write | Create, change, toggle, test and delete trading alerts |
history:sync | Pull fresh trade history from the brokers |
ai | Start assistant conversations, send messages, rename, pin and delete them, and approve or reject actions the assistant proposes |
profile:write | Change preferences such as language, time zone and theme, and change your referral code |
share:write | Create public share links |
billing:write | Change your plan, start a checkout and open the billing portal |
The write scopes are split by blast radius: risk:execute — closing positions and locking an account out — is separate from ordinary risk configuration, and billing:write is separate from everything else. Example: a dashboard that only charts your performance needs read and nothing more; a bot that flattens you at a loss limit needs read + risk:execute, and still can't touch your subscription.
Limits are applied per token: 60 requests/minute, 20 writes/minute, 5,000 requests/day, plus a smaller hourly budget (6/hour) for heavy operations such as connecting an account or syncing history. Order placement has its own budget instead: 60 orders/minute per token and 30/minute per account. Writes count against both the general and the write budget; heavy operations are listed as Heavy in the endpoint reference. Exceeding one returns 429 with a Retry-After header. The live values are shown on the Tokens tab, along with each token's calls today.
Every successful response carries X-RateLimit-Limit and X-RateLimit-Remaining, so a client can slow down before it is refused rather than after; a 429 itself carries Retry-After instead. Minute budgets slide over the last 60 seconds rather than resetting on the clock; the daily budget resets at midnight UTC.
Requests and responses
The base URL is https://5mtrader.com/api/v1. The version is part of the path and never changes underneath you: a breaking change would ship as /v2, not as a silent edit to /v1.
- Authentication.
Authorization: Bearer 5mt_...on every request. Clients that cannot set that header may send the token asX-API-Keyinstead. There is no other way into/v1— no cookies, no session, no unauthenticated endpoint except the OpenAPI document. (The MCP server separately answers its discovery methods without a token; every actual tool call authenticates.) - Parameters. Path parameters go in the URL.
GETandDELETEtake their remaining parameters as query string;POST,PUTandPATCHtake a JSON body withContent-Type: application/json. - Query values are coerced. Numbers arrive as
?limit=50, booleans as?enabled=true, and array parameters as a comma-separated list (?symbols=EURUSD,XAUUSD). - Responses are always JSON and always
Cache-Control: no-store— nothing about your account is cacheable by an intermediary. The one exception is the public OpenAPI document, cached for five minutes. - Unknown routes return
404 not_found; a known path called with the wrong verb returns405with anAllowheader listing what it does accept. - No CORS headers are sent, deliberately: the API is meant to be called from a server, and a token embedded in front-end code is a token you have given away.
A machine-readable description of the whole surface is served — without authentication — at /api/v1/openapi.json. It is generated from the same registry as the endpoints themselves, so it cannot drift from what the server actually accepts.
Errors
Errors always come back as JSON with a stable snake_case error code you can branch on, a human message, and sometimes a details object. Internal failures are logged on our side and flattened to internal_error — no stack traces, no leaked internals.
{
"error": "forbidden_scope",
"message": "This token is missing the \"risk:execute\" scope."
}
| Status | error | When it happens |
|---|---|---|
| 400 | invalid_request | A parameter failed validation. details lists each offending field and why. |
| 401 | unauthorized | Missing, malformed or unknown token. |
| 401 | token_revoked | The token was revoked from the Tokens tab. |
| 401 | token_expired | The token passed its expiry date. |
| 403 | forbidden_plan | Your plan does not include API access. |
| 403 | forbidden_scope | The token lacks the scope the operation requires. details.required_scope names it. |
| 403 | live_trading_disabled | Trading on live accounts is switched off by the operator; demo accounts still work. |
| 404 | not_found | No such endpoint, or no such object. |
| 404 | account_not_found | No trading account of yours matches that key. |
| 405 | method_not_allowed | The path exists but not with that verb; Allow lists what it accepts. |
| 409 | idempotency_key_reused | The same Idempotency-Key was already used for a different operation. |
| 422 | order_rejected | The broker refused the order; details.broker_message carries its reason. A broker-specific code may replace order_rejected. |
| 423 | account_locked | The account is under a risk lockout and cannot be changed. |
| 423 | risk_blocked | A risk rule refused the order; details.rule_id and details.rule_type name it. |
| 429 | rate_limited | A budget was exhausted. Retry-After and details say which one and for how long. |
| 500 | internal_error | Something went wrong on our side. |
| 501 | unsupported_platform | The account's platform does not support this operation. |
| 502 | upstream_error | A broker or copier server is unavailable. |
| 503 | api_disabled | The public API is switched off by the operator. |
| 503 | mcp_disabled | The MCP server is switched off by the operator. |
| 503 | trading_disabled | Opening orders over the API is switched off by the operator. |
| 504 | broker_timeout | The broker did not answer in time. Retry with the same client_order_id. |
Idempotency and confirmations
Mutations accept an Idempotency-Key header (any string up to 120 characters, unique per operation you want protected). The first call runs and its response is stored against that key; a retry with the same key returns the original response verbatim, with Idempotency-Replayed: true — exactly what you want when a network blip leaves you unsure whether a write landed. Reusing the same key for a different operation is refused with 409 idempotency_key_reused, so a recycled key can never trigger the wrong action. Keys are scoped to the token that used them.
The genuinely destructive calls go one step further and require an explicit confirm value that matches what you are about to destroy — disconnecting an account, for instance, takes confirm equal to that account's id. A stray or mis-targeted request cannot do irreversible damage by accident. In the endpoint reference those operations are marked Destructive.
What you can do with it
Seventy-five operations, the same ones the dashboard uses:
| Group | What it covers |
|---|---|
| Identity | Who the token belongs to, your plan, your scopes, your live usage, and your preferences (language, timezone, theme) |
| Accounts | List and inspect accounts, look up broker server names, connect MT5 accounts and reconnect them, link cTrader accounts over OAuth and refresh their tokens, change any copier setting (role, master, lot sizing, reverse, exact match, prefix/suffix, symbol translations and filters), start or stop copying, disconnect |
| Live and history | A live snapshot of balance, equity, floating P&L, open positions and pending orders; paginated closed-trade history; a full statistics summary with best/worst symbols and a daily P&L series; on-demand history sync |
| Trading | With trade:execute: open market and pending orders, modify SL/TP and entry prices, cancel pendings, close positions fully or partially, flatten a whole account in one call, and read a position, the account's live state or a symbol's volume limits before you send |
| Alerts | Create, edit, test and delete trading alerts — trade activity, upcoming news, copier health and your own behaviour — delivered on email, webhook, Telegram or Discord |
| Risk | Read and replace rules, delete them, flip the master enforcement switch, manage risk templates and notification channels, send a test alert — and, with risk:execute, flatten an account or lock it out |
| Stream | A live Server-Sent Events feed of your accounts — position and order changes, fills, balance and equity moves, and risk/alert firings — as diffs, not snapshots |
| Copier templates | Create, update, delete and apply templates across many accounts at once |
| Billing | Read your subscription, list purchasable plans, change plan or seat count, open a checkout or the billing portal |
| Other | The economic calendar, public share links, your affiliate stats and code, and your assistant conversations — start one, send a message and read the reply |
Naming an account
Every endpoint that targets one account takes an account key, not a broker login. A key is platform~server~login — for example mt5~ICMarketsSC-Live~12345678 — and accounts.list returns the ready-made string in each account's key field, so copy it from there rather than assembling it yourself.
The login alone would be ambiguous: the same number can be issued by two different brokers, and can also exist on a second platform, so all three parts are needed to name exactly one account. Endpoints that take several accounts (account_keys) expect the same strings.
Some practical shapes:
# Your last 50 closed trades, newest first
curl 'https://5mtrader.com/api/v1/history?page=1&page_size=50&sort=time&dir=desc' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
# Turn copying on for one account — safe to retry
curl -X POST 'https://5mtrader.com/api/v1/accounts/mt5~ICMarketsSC-Live~12345678/copy' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: copy-on-2026-08-13' \
-d '{"enabled":true}'
Every one of them is written out below, one by one: see the endpoint reference for each operation's parameters, required scope, MCP tool name, flags and a ready-to-paste curl.
Trading over the API
The trade:execute scope turns a token into a trading key: it can open market and pending orders, modify them, close them and flatten a single account, on any account the token's owner has connected. It is deliberately separate from risk:execute — a risk-automation token can flatten accounts without ever being able to open a position, and a read-only journal token can do neither. The operator can keep order-opening off (or demo-only) while it is being rolled out — reading positions and closing are never blocked, so nobody is ever locked into an open position, though the live-accounts switch also covers modifying SL/TP — and a 503 trading_disabled or 403 live_trading_disabled answer means the switch, not your request.
Three things make orders safe to send from a script:
client_order_idis mandatory. If the connection drops after the broker accepted, retrying with the same id returns the original ticket withduplicate: trueinstead of doubling your position. Never retry a timed-out order with a fresh id.- Every order passes the account's risk rules first. An order that a rule blocks comes back as
423 risk_blockedwith the rule that refused it. The API can never be a way around your own protection. - Volume is validated before the broker sees it. A volume below the minimum, above the maximum or off the step comes back as a
400carrying the symbol's limits — read them upfront with the symbols endpoint.
# Open half a lot of EURUSD at market, safe to retry
curl -X POST 'https://5mtrader.com/api/v1/accounts/mt5~ICMarketsSC-Live~12345678/orders' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"client_order_id":"my-entry-001","symbol":"EURUSD","side":"buy","volume":0.5,"sl":1.0810,"tp":1.0950}'
# Move the stop, then close half
curl -X PATCH 'https://5mtrader.com/api/v1/accounts/mt5~ICMarketsSC-Live~12345678/positions/987654' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"sl":1.0870}'
curl -X DELETE 'https://5mtrader.com/api/v1/accounts/mt5~ICMarketsSC-Live~12345678/positions/987654?volume=0.25' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
On a master account an API order is copied to its followers like any other trade — that is what a master is. Pass copy: false to keep an order out of the copy stream entirely. Order rates are limited to 60/minute per token and 30/minute per account (the numbers travel in the usual X-RateLimit-* and Retry-After headers), and closing or cancelling is always allowed, even under a risk lockout — a lockout blocks opening and modifying, never getting out.
The live stream
Polling is the wrong tool for watching positions. GET /v1/stream is a Server-Sent Events feed of your accounts served from our domain: subscribe to the channels you care about (positions, orders, fills, account, risk) and receive diffs — what opened, changed or closed — rather than a snapshot every second. Add ?account_id= to scope the whole feed to one account.
The feed opens with a ready event ({channels, accounts}), then one snapshot event per account with its full state — listen for that name, it does not arrive on a channel name. After that come the diffs, each stamped with {account_id, ts}: positions ({opened, modified, closed}), orders ({placed, modified, cancelled}), fills ({opened: [{ticket, symbol, side, volume, price}], closed}), account ({balance, equity, pnl, status}) and risk ({id, kind, account_id, rule_id, rule_type, outcomes, triggered_at, detail} — rule breaches and alert firings, polled every 5 seconds). A comment ping every 15 seconds keeps the connection alive; between events, silence means nothing changed.
Server-side clients pass the bearer token directly. Browsers cannot attach headers to an EventSource, so they first trade the token for a one-time ticket (30 seconds, single use) and connect with that — the token itself never appears in a URL:
const { ticket } = await (
await fetch("https://5mtrader.com/api/v1/stream/ticket", {
method: "POST",
headers: { Authorization: "Bearer 5mt_YOUR_TOKEN" },
})
).json();
const stream = new EventSource(
`https://5mtrader.com/api/v1/stream?ticket=${ticket}&channels=positions,fills`
);
stream.addEventListener("snapshot", (e) =>
console.log("full state:", JSON.parse(e.data))
);
stream.addEventListener("positions", (e) =>
console.log("changed:", JSON.parse(e.data))
);
stream.addEventListener("fills", (e) =>
console.log("filled:", JSON.parse(e.data))
);
Alerts over the API
The alerts:read and alerts:write scopes manage the same alerts as the dashboard's Alerts tab. They are split from risk:write on purpose: an alert can only send a message, so a token that manages alerts cannot rewrite — or quietly disarm — the rules that protect the account. That asymmetry is also why alert operations are not flagged destructive for MCP clients: the worst an alert can do is say one thing too many.
Alerts fire on the account's real activity, no matter where a trade came from — the copier, this API, an EA, or a hand-placed order in the terminal. Create one with POST /v1/alerts (types, optional account, channels, filters, cooldown) and try it with POST /v1/alerts/{id}/test — the test answers 429 while the alert's own cooldown is still open. You can hold up to 50 alerts; the daily notification ceiling stays at 100.
Explorer and usage
You don't have to read a spec to find your way around. The Explorer tab lists every endpoint grouped by area, with its method, path, required scope, parameters and whether it's flagged Heavy or Destructive — and, next to each, the name of the matching MCP tool. Paste a token into the box at the top and you can run the real request right there and read the response, status and timing. The token you paste stays in your browser for that request; the page never sends it to us.
The Usage tab is the audit trail: calls today, calls over the last 7 days, errors today and MCP calls today, followed by your last 100 events across every token — when, which operation, which token, whether it arrived over REST or MCP, and the resulting status. Token creations, rotations, revocations, permission denials and rate-limit hits are recorded there too, which makes it the first place to look when an integration suddenly goes quiet.
MCP server
The MCP server exposes the same operations as tools, so Claude or any other MCP client can read your trading and act on it. It speaks streamable HTTP at https://5mtrader.com/api/mcp and authenticates with the same token (as Authorization: Bearer, or x-api-key for clients that cannot set that header):
claude mcp add --transport http 5mtrader https://5mtrader.com/api/mcp \
--header "Authorization: Bearer 5mt_YOUR_TOKEN"
For a desktop client, add it to the configuration file instead — the MCP tab generates the exact snippet for Claude Code, Claude Desktop, Cursor or raw JSON-RPC:
{
"mcpServers": {
"5mtrader": {
"type": "http",
"url": "https://5mtrader.com/api/mcp",
"headers": { "Authorization": "Bearer 5mt_YOUR_TOKEN" }
}
}
}
Only the tools your token's scopes cover appear in the client, so a read-only token gives a model everything it needs to answer questions about your trading and nothing it could use to change it. Destructive tools are labelled as destructive, and a well-behaved client will confirm with you before calling one. Revoke the token to disconnect the client instantly.
Example: connect a read-only token and you can ask your assistant "pull my last month of trades and tell me which symbol is quietly bleeding me" — it queries your real history through the tools and answers from your numbers. Add risk:write and the same conversation can end with "then set a 2% daily loss rule on that account".
Tool names. Every REST operation is the MCP tool named after it, with dots replaced by underscores: accounts.list → accounts_list, risk.templates.update → risk_templates_update. The tool takes exactly the same fields as the endpoint, and its description is the same prose this documentation publishes, plus the scope it needs and a warning if it is destructive. Each tool also carries the standard MCP annotations — readOnlyHint for reads, destructiveHint for the destructive ones, idempotentHint where repeating a call is safe. The name of the matching tool is listed next to every operation in the endpoint reference.
Protocol details. The server speaks JSON-RPC 2.0 over streamable HTTP at POST /api/mcp, protocol version 2025-06-18, and supports initialize, ping, tools/list, tools/call, plus resources/list, resources/read, prompts/list and prompts/get — the resources are the endpoint reference, the OpenAPI schema and this documentation; the prompts are ready-made analyses (a trading review, a risk audit, a copier health check). Batched requests are accepted; notifications get 202 with no body. There is no server-initiated stream, so GET /api/mcp answers 405; sessions are stateless — the token is the session — so DELETE succeeds with nothing to tear down. Discovery is open: every method except tools/call answers without a token, so a client can list the tools, read the reference and browse this documentation before authenticating — credentials are checked on the first actual tool call. With a token supplied, initialize authenticates immediately, so a bad token fails at connection time where your client can show you what went wrong, and the handshake tells the model which account it is connected as and which scopes it holds; without one, the handshake answers with a discovery-only notice.
Results and failures. A tool result carries both a readable text block and structuredContent with the raw JSON, so a model can reason over the prose while your code reads the object. A refused or failed call comes back as a tool error — the same error code and message as REST, flagged isError — rather than a protocol error, so the model can read why it failed and adapt instead of the conversation breaking.
Everything else is identical to REST because it is the same code path: the same scopes, the same rate limits, the same ownership rules and the same audit trail, whether the caller is curl or a language model. Two differences worth knowing: MCP calls do not take an Idempotency-Key (clients don't send one), and the operator can switch MCP off independently of the REST API, which surfaces as mcp_disabled.
Connecting with OAuth
Pasting a token works everywhere, but a client that implements the MCP authorization flow does not need one: point it at https://5mtrader.com/api/mcp with no header and it finds its own way in.
An unauthenticated tool call comes back 401 with a WWW-Authenticate header naming our metadata document at https://5mtrader.com/.well-known/oauth-protected-resource (discovery methods answer without a token, so a client may not see the challenge until its first tool call). From there the client reads https://5mtrader.com/.well-known/oauth-authorization-server, registers itself — registration is open, no paperwork — and opens a browser at https://5mtrader.com/oauth/authorize.
That page is the only step you take part in: sign in as usual, read what the app is asking for (its name, the exact scopes, and the address it will be sent back to) and allow or cancel. Approving mints an access token good for 1 hour and a refresh token good for 90 days; the client renews silently and never shows you either. Every refresh rotates both, so a stolen refresh token stops working the moment the real client uses its successor.
A connected app appears in the Tokens tab under its own name, next to your manual tokens, with the same usage counters and the same Revoke button — revoking disconnects the client immediately.
The details, for a client that needs them: PKCE with S256 is required, code is the only response type, authorization codes are single-use and expire in 60 seconds, and a redirect address must be https, http on loopback, or a private scheme such as myapp://callback. Registration is POST /api/oauth/register, tokens POST /api/oauth/token, revocation POST /api/oauth/revoke. Scopes behave exactly as they do for manual tokens: ask for what you need in the scope parameter, and on a free account the write scopes are dropped rather than refused.
Endpoint reference
Every operation the API and the MCP server expose, generated from the same registry the server routes on — so it cannot describe an endpoint that doesn't exist, or miss one that does. For each: what it does, its operation id, the scope it requires, the name of the matching MCP tool, whether it is Heavy (small hourly budget) or Destructive (touches real positions, data or billing), every parameter with its type and whether it is required, and a curl you can paste after replacing 5mt_YOUR_TOKEN.
Over MCP the same operation is the tool named in its entry, taking the same fields. Path parameters go in the URL; the rest are query parameters on GET and DELETE, and a JSON body on POST, PUT and PATCH.
me
GET /v1/me
Who this token belongs to
- Operation:
me.get - Scope:
read - MCP tool:
me_get
Profile, plan, and the scopes and live rate-limit budget of the token making the call. The cheapest way to check that credentials work.
No parameters.
curl -X GET 'https://5mtrader.com/api/v1/me' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
GET /v1/me/scopes
Every scope this API defines
- Operation:
me.scopes - Scope:
read - MCP tool:
me_scopes
The full permission vocabulary, and which of them the calling token holds. Useful for telling a user why a call was refused.
No parameters.
curl -X GET 'https://5mtrader.com/api/v1/me/scopes' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
GET /v1/me/usage
Your API call log
- Operation:
me.usage - Scope:
read - MCP tool:
me_usage
Every call made with any of your tokens, newest first, plus the counts behind your quotas. Request and response payloads are recorded with passwords, secrets and tokens already redacted, and oversized bodies stored as a preview.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
limit | query | integer | no | How many events to return, newest first. |
offset | query | integer | no | Events to skip, for paging further back. |
include_payloads | query | boolean | no | Attach the redacted request and response of each call. |
curl -X GET 'https://5mtrader.com/api/v1/me/usage' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
PATCH /v1/me/preferences
Update account preferences
- Operation:
me.preferences.update - Scope:
profile:write - MCP tool:
me_preferences_update
Locale, time zone, theme and economic-calendar filters. Changing the time zone re-pushes risk configuration to every connected account, because risk windows and day boundaries are resolved against it.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
locale | body | en | es | pt-BR | ru | zh-CN | ja | ar | no | Interface language. |
timezone | body | string | no | IANA time zone, or null to follow the browser. |
theme | body | light | dark | system | no | Dashboard colour scheme. |
news_filters | body | object | no | Economic-calendar filter object, or null to clear. |
curl -X PATCH 'https://5mtrader.com/api/v1/me/preferences' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
accounts
GET /v1/accounts
List your trading accounts
- Operation:
accounts.list - Scope:
read - MCP tool:
accounts_list
Every account linked to your user, with its copy role, connection status and copier configuration. Broker credentials are never returned. "enabled" is the switch you set; whether copies are actually flowing is "bridgeCopyEnabled" plus the riskBlocked fields, which report what the copier server is enforcing right now.
No parameters.
curl -X GET 'https://5mtrader.com/api/v1/accounts' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
GET /v1/accounts/{accountKey}
Get one trading account
- Operation:
accounts.get - Scope:
read - MCP tool:
accounts_get
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
accountKey | path | string | yes | The account key, as returned in the "key" field of accounts.list: platform |
curl -X GET 'https://5mtrader.com/api/v1/accounts/{accountKey}' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
POST /v1/accounts
Connect a new trading account
- Operation:
accounts.create - Scope:
accounts:write - MCP tool:
accounts_create - Heavy: counts against the hourly heavy-operation budget.
Links an MT5 account and provisions it on a copier server. The broker password travels in the request body: send it over HTTPS only, and never log it. Subject to your plan's account limit. cTrader has no password — link those through accounts.ctrader.authorize instead.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
account_id | body | string | yes | Broker login number of the account to connect. |
server | body | string | yes | Broker server name, exactly as MT5 shows it. Resolve it with accounts.brokerServers. |
password | body | string | yes | Broker account password. |
curl -X POST 'https://5mtrader.com/api/v1/accounts' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"account_id":"<account_id>","server":"<server>","password":"<password>"}'
GET /v1/broker-servers
Search broker server names
- Operation:
accounts.brokerServers - Scope:
read - MCP tool:
accounts_brokerServers
Looks up MT5 server names in the broker catalogue, ranked by how well they match. Connecting an account needs the name spelled exactly as the terminal spells it, so resolve it here first.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
search | query | string | yes | Part of the broker or server name, at least two characters. |
curl -X GET 'https://5mtrader.com/api/v1/broker-servers?search=%3Csearch%3E' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
POST /v1/accounts/ctrader/authorize
Start the cTrader authorization flow
- Operation:
accounts.ctrader.authorize - Scope:
accounts:write - MCP tool:
accounts_ctrader_authorize
cTrader accounts are linked by OAuth, not by password, so there is nothing to post to accounts.create. Send the returned URL to the account owner, let them grant access, then hand the code from the redirect to accounts.ctrader.link. The state value is returned for you to check against the redirect yourself — this endpoint keeps no session.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
state | body | string | no | Your own CSRF value, echoed back on the redirect. Generated for you if omitted. |
curl -X POST 'https://5mtrader.com/api/v1/accounts/ctrader/authorize' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
POST /v1/accounts/ctrader/link
Link cTrader accounts from an authorization code
- Operation:
accounts.ctrader.link - Scope:
accounts:write - MCP tool:
accounts_ctrader_link - Heavy: counts against the hourly heavy-operation budget.
Exchanges the code for tokens and connects every trading account behind that cTrader login — one grant can produce several accounts. Accounts already linked are re-synced with the fresh tokens instead of being duplicated, and accounts beyond your plan's limit are skipped rather than failing the call. Codes are single-use.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
code | body | string | yes | Authorization code from the cTrader redirect. |
redirect_uri | body | string | no | Only if you sent a non-default redirect_uri to the authorize step. |
curl -X POST 'https://5mtrader.com/api/v1/accounts/ctrader/link' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"code":"<code>"}'
POST /v1/accounts/ctrader/refresh
Refresh cTrader access tokens
- Operation:
accounts.ctrader.refresh - Scope:
accounts:write - MCP tool:
accounts_ctrader_refresh - Heavy: counts against the hourly heavy-operation budget.
Renews the OAuth tokens of your cTrader accounts and pushes them to the copier servers. This normally runs on a schedule; call it when an account reports that re-authorization is required. If the refresh token itself is dead the account stays flagged and you have to run the authorize flow again.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
force | body | boolean | no | Refresh every cTrader account, not only those near expiry. |
curl -X POST 'https://5mtrader.com/api/v1/accounts/ctrader/refresh' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
POST /v1/accounts/{accountKey}/reconnect
Reconnect an account with a fresh password
- Operation:
accounts.reconnect - Scope:
accounts:write - MCP tool:
accounts_reconnect - Heavy: counts against the hourly heavy-operation budget.
Re-establishes the broker session, moving the account to a healthy server if needed. Use after a password change or a stuck session. MT5 only — a cTrader account is repaired with accounts.ctrader.refresh, or by running the authorize flow again.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
accountKey | path | string | yes | The account key, as returned in the "key" field of accounts.list: platform |
password | body | string | yes | Current broker account password. |
curl -X POST 'https://5mtrader.com/api/v1/accounts/{accountKey}/reconnect' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"password":"<password>"}'
PATCH /v1/accounts/{accountKey}
Update copier configuration
- Operation:
accounts.update - Scope:
accounts:write - MCP tool:
accounts_update
Changes role, master link, lot sizing and symbol handling. Only the fields you send are touched, and the new configuration is pushed to the copier server in the background. Refused with 423 while the account is under a risk lockout.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
role | body | master | slave | pending | no | Copy role. A master is followed; a slave follows. |
master_account_id | body | string | no | Account this one follows. Null unlinks it. |
disconnect_from_master | body | boolean | no | Shorthand for clearing the master link. |
lot_type | body | string | no | Lot sizing strategy, e.g. multiplier or fixed. |
lot_multiplier | body | number | no | Factor applied to the master's volume, e.g. 0.5 copies half. |
fixed_lot | body | number | no | Always trade this volume, whatever the master traded. |
reverse_trading | body | boolean | no | Mirror trades in the opposite direction. |
exact_match | body | boolean | no | Copy only when the symbol name matches exactly, instead of resolving it through prefix, suffix and translations. |
no_trade_tag | body | boolean | no | Leave the copier's identifying tag off the orders it places. |
prefix | body | string | no | Prepended to the master's symbol before trading it here, e.g. m. for m.EURUSD. |
suffix | body | string | no | Appended to the master's symbol, e.g. .pro for EURUSD.pro. |
symbol_translations | body | string[] | no | Explicit renames for symbols the affixes cannot resolve, each written FROM:TO, e.g. GOLD:XAUUSD. |
symbol_filter_mode | body | off | allow | block | no | How to read symbol_filter_list: allow copies only what is listed, block copies everything except it, off ignores it. |
symbol_filter_list | body | string[] | no | Symbols the filter applies to, as the master names them. |
accountKey | path | string | yes | The account key, as returned in the "key" field of accounts.list: platform |
curl -X PATCH 'https://5mtrader.com/api/v1/accounts/{accountKey}' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
POST /v1/accounts/{accountKey}/copy
Start or stop copy trading
- Operation:
accounts.setCopy - Scope:
copy:toggle - MCP tool:
accounts_setCopy
Turns copying on or off for one account. Disabling a master also disables the slaves that follow it. Refused with 423 while the account is under a risk lockout.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
accountKey | path | string | yes | The account key, as returned in the "key" field of accounts.list: platform |
enabled | body | boolean | yes | True starts copying, false stops it. |
curl -X POST 'https://5mtrader.com/api/v1/accounts/{accountKey}/copy' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"enabled":false}'
DELETE /v1/accounts/{accountKey}
Disconnect and delete an account
- Operation:
accounts.delete - Scope:
accounts:write - MCP tool:
accounts_delete - Heavy: counts against the hourly heavy-operation budget.
- Destructive: changes real positions, data or billing.
Removes the account from its copier server and deletes it here. Slaves following it are unlinked. Irreversible — pass confirm with the account id.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
accountKey | path | string | yes | The account key, as returned in the "key" field of accounts.list: platform |
confirm | query | string | yes | Must equal the account key (platform |
curl -X DELETE 'https://5mtrader.com/api/v1/accounts/{accountKey}?confirm=%3Cconfirm%3E' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
GET /v1/positions
Live positions, equity and open P&L
- Operation:
accounts.positions - Scope:
read - MCP tool:
accounts_positions
A point-in-time snapshot straight off the copier servers: balance, equity, floating P&L, open positions and pending orders for every connected account. Every open position carries ticket, symbol, volume, profit and side — side is exactly "buy" or "sell", so filter on it per ticket when acting only on one direction. This is the polling equivalent of the dashboard's live stream.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
account_key | query | string | no | Restrict the snapshot to a single account, as the platform |
curl -X GET 'https://5mtrader.com/api/v1/positions' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
GET /v1/accounts/{accountKey}/state
Live balance, equity and floating P&L of one account
- Operation:
accounts.state - Scope:
read - MCP tool:
accounts_state
A lightweight live read of the account's money state — balance, equity, floating P&L and how many positions and pending orders are open — served from the trading server's 1s snapshot cache without the full position payload. Poll this between orders instead of GET /positions when you only need the numbers.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
accountKey | path | string | yes | The account key, as returned in the "key" field of accounts.list: platform |
curl -X GET 'https://5mtrader.com/api/v1/accounts/{accountKey}/state' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
orders
POST /v1/accounts/{accountKey}/orders
Open a market order or place a pending order
- Operation:
orders.create - Scope:
trade:execute - MCP tool:
orders_create - Destructive: changes real positions, data or billing.
Places an order on the account. client_order_id is mandatory: if the connection drops after the broker accepted, retrying with the same id returns the original ticket (duplicate: true) instead of doubling the position. On a master account the order is copied to its followers by default; pass copy: false to keep it out of the copy stream. Every order passes the account's risk rules first — a blocked order returns 423 with the rule that refused it.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
accountKey | path | string | yes | The account key, as returned in the "key" field of accounts.list: platform |
client_order_id | body | string | yes | Your unique id for this order (8-48 chars: letters, digits, dot, dash, underscore). Retries with the same id are safe. |
symbol | body | string | yes | Instrument, in the broker's naming. |
side | body | buy | sell | yes | |
volume | body | number | yes | Lots (or contracts on futures rails). |
order_type | body | market | limit | stop | no | market executes now; limit and stop wait at price. |
price | body | number | no | Entry price. Required for limit and stop orders. |
sl | body | number | no | Stop loss price. |
tp | body | number | no | Take profit price. |
copy | body | boolean | no | Master accounts only: false keeps this order out of the copy stream. |
curl -X POST 'https://5mtrader.com/api/v1/accounts/{accountKey}/orders' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"client_order_id":"<client_order_id>","symbol":"<symbol>","side":"buy","volume":0}'
GET /v1/accounts/{accountKey}/orders
Pending orders on one account
- Operation:
orders.list - Scope:
read - MCP tool:
orders_list
Limit and stop orders that have not executed yet, served from the trading server's 1s snapshot cache — the broker is never queried on this path.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
accountKey | path | string | yes | The account key, as returned in the "key" field of accounts.list: platform |
curl -X GET 'https://5mtrader.com/api/v1/accounts/{accountKey}/orders' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
GET /v1/accounts/{accountKey}/orders/{orderId}
One pending order
- Operation:
orders.get - Scope:
read - MCP tool:
orders_get
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
accountKey | path | string | yes | The account key, as returned in the "key" field of accounts.list: platform |
orderId | path | integer | yes | The broker ticket of the order or position. |
curl -X GET 'https://5mtrader.com/api/v1/accounts/{accountKey}/orders/{orderId}' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
PATCH /v1/accounts/{accountKey}/orders/{orderId}
Modify a pending order's price, SL or TP
- Operation:
orders.modify - Scope:
trade:execute - MCP tool:
orders_modify
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
accountKey | path | string | yes | The account key, as returned in the "key" field of accounts.list: platform |
orderId | path | integer | yes | The broker ticket of the order or position. |
price | body | number | no | New entry price. |
sl | body | number | no | New stop loss. 0 clears it. |
tp | body | number | no | New take profit. 0 clears it. |
curl -X PATCH 'https://5mtrader.com/api/v1/accounts/{accountKey}/orders/{orderId}' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
DELETE /v1/accounts/{accountKey}/orders/{orderId}
Cancel a pending order
- Operation:
orders.cancel - Scope:
trade:execute - MCP tool:
orders_cancel
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
accountKey | path | string | yes | The account key, as returned in the "key" field of accounts.list: platform |
orderId | path | integer | yes | The broker ticket of the order or position. |
curl -X DELETE 'https://5mtrader.com/api/v1/accounts/{accountKey}/orders/{orderId}' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
positions
GET /v1/accounts/{accountKey}/positions
Open market positions on one account
- Operation:
positions.list - Scope:
read - MCP tool:
positions_list
Open positions with floating P&L, served from the trading server's snapshot cache. For a fleet-wide snapshot use GET /positions.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
accountKey | path | string | yes | The account key, as returned in the "key" field of accounts.list: platform |
curl -X GET 'https://5mtrader.com/api/v1/accounts/{accountKey}/positions' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
GET /v1/accounts/{accountKey}/positions/{positionId}
One open position
- Operation:
positions.get - Scope:
read - MCP tool:
positions_get
A single open position by ticket, served from the trading server's snapshot cache — the broker is never queried on this path.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
accountKey | path | string | yes | The account key, as returned in the "key" field of accounts.list: platform |
positionId | path | integer | yes | The broker ticket of the order or position. |
curl -X GET 'https://5mtrader.com/api/v1/accounts/{accountKey}/positions/{positionId}' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
PATCH /v1/accounts/{accountKey}/positions/{positionId}
Modify a position's SL or TP
- Operation:
positions.modify - Scope:
trade:execute - MCP tool:
positions_modify
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
accountKey | path | string | yes | The account key, as returned in the "key" field of accounts.list: platform |
positionId | path | integer | yes | The broker ticket of the order or position. |
sl | body | number | no | New stop loss. 0 clears it. |
tp | body | number | no | New take profit. 0 clears it. |
curl -X PATCH 'https://5mtrader.com/api/v1/accounts/{accountKey}/positions/{positionId}' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
DELETE /v1/accounts/{accountKey}/positions/{positionId}
Close a position, fully or partially
- Operation:
positions.close - Scope:
trade:execute - MCP tool:
positions_close
Closes the position at market. Pass volume to close only part of it. To flatten the whole account in one call use POST /risk/flatten (risk:execute).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
accountKey | path | string | yes | The account key, as returned in the "key" field of accounts.list: platform |
positionId | path | integer | yes | The broker ticket of the order or position. |
volume | query | number | no | Partial close volume in lots; omit to close the whole position. |
curl -X DELETE 'https://5mtrader.com/api/v1/accounts/{accountKey}/positions/{positionId}' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
POST /v1/accounts/{accountKey}/positions/close-all
Close every open position on the account
- Operation:
positions.closeAll - Scope:
trade:execute - MCP tool:
positions_closeAll - Destructive: changes real positions, data or billing.
Flattens the account: closes all open positions and cancels all pending orders at market, in one call. Returns how many tickets were requested, closed and refused. For flattening several accounts at once with an audit trail use POST /risk/flatten (risk:execute).
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
accountKey | path | string | yes | The account key, as returned in the "key" field of accounts.list: platform |
curl -X POST 'https://5mtrader.com/api/v1/accounts/{accountKey}/positions/close-all' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
symbols
GET /v1/accounts/{accountKey}/symbols/{symbol}
Volume limits for a symbol on this account
- Operation:
symbols.get - Scope:
read - MCP tool:
symbols_get
Minimum, maximum and step of the tradable volume, straight from the broker's symbol spec. Validate against this before sending orders to avoid 400s.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
accountKey | path | string | yes | The account key, as returned in the "key" field of accounts.list: platform |
symbol | path | string | yes |
curl -X GET 'https://5mtrader.com/api/v1/accounts/{accountKey}/symbols/{symbol}' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
templates
GET /v1/templates
List copier templates
- Operation:
templates.list - Scope:
read - MCP tool:
templates_list
No parameters.
curl -X GET 'https://5mtrader.com/api/v1/templates' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
POST /v1/templates
Create a copier template
- Operation:
templates.create - Scope:
accounts:write - MCP tool:
templates_create
A reusable bundle of copier settings you can apply to accounts later.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
lot_type | body | string | no | Lot sizing strategy, e.g. multiplier or fixed. |
lot_multiplier | body | number | no | Factor applied to the master's volume, e.g. 0.5 copies half. |
fixed_lot | body | number | no | Always trade this volume, whatever the master traded. |
reverse_trading | body | boolean | no | Mirror trades in the opposite direction. |
exact_match | body | boolean | no | Copy only when the symbol name matches exactly, instead of resolving it through prefix, suffix and translations. |
no_trade_tag | body | boolean | no | Leave the copier's identifying tag off the orders it places. |
prefix | body | string | no | Prepended to the master's symbol before trading it here, e.g. m. for m.EURUSD. |
suffix | body | string | no | Appended to the master's symbol, e.g. .pro for EURUSD.pro. |
symbol_translations | body | string[] | no | Explicit renames for symbols the affixes cannot resolve, each written FROM:TO, e.g. GOLD:XAUUSD. |
symbol_filter_mode | body | off | allow | block | no | How to read symbol_filter_list: allow copies only what is listed, block copies everything except it, off ignores it. |
symbol_filter_list | body | string[] | no | Symbols the filter applies to, as the master names them. |
name | body | string | yes | Label for the template. |
curl -X POST 'https://5mtrader.com/api/v1/templates' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"name":"<name>"}'
PUT /v1/templates/{templateId}
Update a copier template
- Operation:
templates.update - Scope:
accounts:write - MCP tool:
templates_update
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
lot_type | body | string | no | Lot sizing strategy, e.g. multiplier or fixed. |
lot_multiplier | body | number | no | Factor applied to the master's volume, e.g. 0.5 copies half. |
fixed_lot | body | number | no | Always trade this volume, whatever the master traded. |
reverse_trading | body | boolean | no | Mirror trades in the opposite direction. |
exact_match | body | boolean | no | Copy only when the symbol name matches exactly, instead of resolving it through prefix, suffix and translations. |
no_trade_tag | body | boolean | no | Leave the copier's identifying tag off the orders it places. |
prefix | body | string | no | Prepended to the master's symbol before trading it here, e.g. m. for m.EURUSD. |
suffix | body | string | no | Appended to the master's symbol, e.g. .pro for EURUSD.pro. |
symbol_translations | body | string[] | no | Explicit renames for symbols the affixes cannot resolve, each written FROM:TO, e.g. GOLD:XAUUSD. |
symbol_filter_mode | body | off | allow | block | no | How to read symbol_filter_list: allow copies only what is listed, block copies everything except it, off ignores it. |
symbol_filter_list | body | string[] | no | Symbols the filter applies to, as the master names them. |
templateId | path | string | yes | Numeric template id. |
name | body | string | no | Label for the template. |
curl -X PUT 'https://5mtrader.com/api/v1/templates/{templateId}' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
DELETE /v1/templates/{templateId}
Delete a copier template
- Operation:
templates.delete - Scope:
accounts:write - MCP tool:
templates_delete
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
templateId | path | string | yes | Numeric template id. |
curl -X DELETE 'https://5mtrader.com/api/v1/templates/{templateId}' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
POST /v1/templates/{templateId}/apply
Apply a copier template to accounts
- Operation:
templates.apply - Scope:
accounts:write - MCP tool:
templates_apply
Copies every setting in the template onto the given accounts and pushes the result to their copier servers. Refused with 423 if any of them is under a risk lockout.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
templateId | path | string | yes | Numeric template id. |
account_ids | body | string[] | yes | Accounts to overwrite with the template's settings. |
curl -X POST 'https://5mtrader.com/api/v1/templates/{templateId}/apply' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"account_ids":[]}'
risk
GET /v1/risk/rules
Read the risk rules of an account
- Operation:
risk.rules.get - Scope:
read - MCP tool:
risk_rules_get
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
account_key | query | string | yes | Account whose rules to read, as the platform |
curl -X GET 'https://5mtrader.com/api/v1/risk/rules?account_key=%3Caccount_key%3E' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
PUT /v1/risk/rules
Replace the risk rules of one or more accounts
- Operation:
risk.rules.set - Scope:
risk:write - MCP tool:
risk_rules_set
The rule list you send becomes the complete rule set for each account — anything omitted is removed. The new configuration is pushed to the copier bridge, which is what actually enforces it.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
account_keys | body | string[] | yes | One or more account keys (platform |
rules | body | object[] | yes | The complete desired rule set. |
starting_balance | body | number | no | The balance drawdown and profit rules measure from. Null clears it back to the automatically captured value; omitted leaves it untouched. |
risk_timezone | body | string | no | IANA timezone the trading day is anchored in for these accounts. Null falls back to your profile timezone; omitted leaves it untouched. |
day_start_minutes | body | integer | no | Minutes past midnight at which the trading day resets (e.g. 1020 for 17:00). Null or 0 means midnight; omitted leaves it untouched. |
curl -X PUT 'https://5mtrader.com/api/v1/risk/rules' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"account_keys":[],"rules":[]}'
DELETE /v1/risk/rules
Delete every risk rule of an account
- Operation:
risk.rules.clear - Scope:
risk:write - MCP tool:
risk_rules_clear
Wipes the rules and pushes a configuration with no risk values, leaving the account exactly as it was before any rule was written.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
account_keys | query | string[] | yes | One or more account keys (platform |
curl -X DELETE 'https://5mtrader.com/api/v1/risk/rules?account_keys=' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
POST /v1/risk/enabled
Master switch for risk enforcement
- Operation:
risk.setEnabled - Scope:
risk:write - MCP tool:
risk_setEnabled
Turns rule enforcement off or on without deleting the rules. Off pushes a configuration with no risk values; on pushes the whole rule set back out.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
account_keys | body | string[] | yes | One or more account keys (platform |
enabled | body | boolean | yes | True enforces the rules, false suspends them. |
curl -X POST 'https://5mtrader.com/api/v1/risk/enabled' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"account_keys":[],"enabled":false}'
GET /v1/risk/templates
List saved risk templates
- Operation:
risk.templates.list - Scope:
read - MCP tool:
risk_templates_list
No parameters.
curl -X GET 'https://5mtrader.com/api/v1/risk/templates' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
POST /v1/risk/templates
Save a risk template
- Operation:
risk.templates.create - Scope:
risk:write - MCP tool:
risk_templates_create
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
name | body | string | yes | Label for the template. |
rules | body | object[] | no | The rules to store, in the same shape risk.rules.set takes. |
curl -X POST 'https://5mtrader.com/api/v1/risk/templates' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"name":"<name>"}'
PUT /v1/risk/templates/{templateId}
Update a risk template
- Operation:
risk.templates.update - Scope:
risk:write - MCP tool:
risk_templates_update
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
templateId | path | string | yes | Numeric template id. |
name | body | string | yes | Label for the template. |
rules | body | object[] | no | Replaces the stored rules entirely. |
curl -X PUT 'https://5mtrader.com/api/v1/risk/templates/{templateId}' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"name":"<name>"}'
DELETE /v1/risk/templates/{templateId}
Delete a risk template
- Operation:
risk.templates.delete - Scope:
risk:write - MCP tool:
risk_templates_delete
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
templateId | path | string | yes | Numeric template id. |
curl -X DELETE 'https://5mtrader.com/api/v1/risk/templates/{templateId}' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
GET /v1/risk/channels
Read your risk notification channels
- Operation:
risk.channels.get - Scope:
read - MCP tool:
risk_channels_get
Secrets are masked: you get whether a channel is configured, not the token behind it.
No parameters.
curl -X GET 'https://5mtrader.com/api/v1/risk/channels' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
PUT /v1/risk/channels
Configure risk notification channels
- Operation:
risk.channels.update - Scope:
risk:write - MCP tool:
risk_channels_update
Sets where risk alerts are delivered. Send an empty string to clear a channel. Webhook URLs must resolve to a public host.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
webhook_url | body | string | no | Endpoint to POST the alert to as JSON. |
telegram_bot_token | body | string | no | Token of the bot that sends the alert, from BotFather. |
telegram_chat_id | body | string | no | Chat the bot posts to. Needs the bot token to be set as well. |
discord_webhook_url | body | string | no | Discord channel webhook to post the alert to. |
curl -X PUT 'https://5mtrader.com/api/v1/risk/channels' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
POST /v1/risk/channels/test
Send a test alert
- Operation:
risk.channels.test - Scope:
risk:write - MCP tool:
risk_channels_test - Heavy: counts against the hourly heavy-operation budget.
Delivers a sample risk alert through the configured channels so you can verify the wiring.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
channel | body | webhook | telegram | discord | email | yes | Which channel to exercise. |
curl -X POST 'https://5mtrader.com/api/v1/risk/channels/test' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"channel":"webhook"}'
POST /v1/risk/flatten
Close every open position on an account
- Operation:
risk.flatten - Scope:
risk:execute - MCP tool:
risk_flatten - Heavy: counts against the hourly heavy-operation budget.
- Destructive: changes real positions, data or billing.
Closes real positions immediately and records the request so it still runs if the bridge is unreachable right now. Masters are closed before their slaves. Irreversible — pass confirm with the account keys joined by commas.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
account_keys | body | string[] | yes | One or more account keys (platform |
confirm | body | string | yes | Must equal account_keys joined by commas, as an explicit acknowledgement that real positions are about to be closed. |
curl -X POST 'https://5mtrader.com/api/v1/risk/flatten' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"account_keys":[],"confirm":"<confirm>"}'
POST /v1/risk/lockout
Lock an account out of trading
- Operation:
risk.lockout - Scope:
risk:execute - MCP tool:
risk_lockout - Heavy: counts against the hourly heavy-operation budget.
- Destructive: changes real positions, data or billing.
Closes open positions, disables copying and refuses further changes until the deadline. Locking a master locks the slaves following it. The deadline is pushed to the bridge, so it survives restarts and server moves, and it cannot be lifted early — pass confirm with the account keys joined by commas.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
account_keys | body | string[] | yes | One or more account keys (platform |
until | body | integer | yes | Unix milliseconds when the lockout expires. Max 30 days out. |
confirm | body | string | yes | Must equal account_keys joined by commas, as an explicit acknowledgement that real positions are about to be closed. |
curl -X POST 'https://5mtrader.com/api/v1/risk/lockout' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"account_keys":[],"until":0,"confirm":"<confirm>"}'
alerts
GET /v1/alerts
List your trading alerts
- Operation:
alerts.list - Scope:
alerts:read - MCP tool:
alerts_list
Alerts inform and can never act on an account — that is what risk rules are for. One alert can watch several event types at once; account_key null means it watches all of your accounts.
No parameters.
curl -X GET 'https://5mtrader.com/api/v1/alerts' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
POST /v1/alerts
Create a trading alert
- Operation:
alerts.create - Scope:
alerts:write - MCP tool:
alerts_create
Types: trade_placed / trade_modified / trade_closed fire on the account's real activity no matter where the trade came from (API, copier, EA or hand); news warns before economic events; copy_health watches for disconnected accounts; behaviour watches your own trading (overtrading, loss streaks, revenge trading). Alerts only notify — they cannot touch the account.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
types | body | string[] | yes | Event types this alert watches — one alert can watch several at once. |
account_key | body | string | no | Restrict to one account, as the platform |
name | body | string | no | |
enabled | body | boolean | no | |
channels | body | string[] | yes | |
params | body | object | no | Type-specific filters: symbols/minVolume/minChange for trade events, impacts/currencies/minutesBefore for news, offlineMinutes for copier health, detectors and thresholds for behaviour. |
cooldown_seconds | body | integer | no |
curl -X POST 'https://5mtrader.com/api/v1/alerts' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"types":[],"channels":[]}'
PATCH /v1/alerts/{alertId}
Update a trading alert
- Operation:
alerts.update - Scope:
alerts:write - MCP tool:
alerts_update
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
alertId | path | integer | yes | |
types | body | string[] | no | |
account_key | body | string | no | The account key, as returned in the "key" field of accounts.list: platform |
name | body | string | no | |
enabled | body | boolean | no | |
channels | body | string[] | no | |
params | body | object | no | Type-specific filters: symbols/minVolume/minChange for trade events, impacts/currencies/minutesBefore for news, offlineMinutes for copier health, detectors and thresholds for behaviour. |
cooldown_seconds | body | integer | no |
curl -X PATCH 'https://5mtrader.com/api/v1/alerts/{alertId}' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
DELETE /v1/alerts/{alertId}
Delete a trading alert
- Operation:
alerts.delete - Scope:
alerts:write - MCP tool:
alerts_delete
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
alertId | path | integer | yes |
curl -X DELETE 'https://5mtrader.com/api/v1/alerts/{alertId}' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
POST /v1/alerts/{alertId}/enabled
Enable or disable a trading alert
- Operation:
alerts.setEnabled - Scope:
alerts:write - MCP tool:
alerts_setEnabled
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
alertId | path | integer | yes | |
enabled | body | boolean | yes |
curl -X POST 'https://5mtrader.com/api/v1/alerts/{alertId}/enabled' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"enabled":false}'
POST /v1/alerts/{alertId}/test
Send a test notification through this alert's channels
- Operation:
alerts.test - Scope:
alerts:write - MCP tool:
alerts_test - Heavy: counts against the hourly heavy-operation budget.
Fires a fake event through the alert's configured channels so you can check they are wired up.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
alertId | path | integer | yes |
curl -X POST 'https://5mtrader.com/api/v1/alerts/{alertId}/test' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
stream
POST /v1/stream/ticket
One-time ticket for the live stream
- Operation:
stream.ticket - Scope:
read - REST only: this one is not offered as an MCP tool.
Browsers cannot send Authorization headers on an EventSource, so trade your token for a single-use ticket (30s validity) and open GET /v1/stream?ticket=... with it. Server-side clients can skip this and pass the bearer token directly to /v1/stream.
No parameters.
curl -X POST 'https://5mtrader.com/api/v1/stream/ticket' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
history
GET /v1/history
Closed trades
- Operation:
history.deals - Scope:
read - MCP tool:
history_deals
Paginated trade history across your accounts, read from the stored history rather than the broker. Call history.sync first if you need it fresher than the last sync.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
account_keys | query | string | no | Comma-separated account keys (platform |
from | query | integer | no | Start of range, unix milliseconds. |
to | query | integer | no | End of range, unix milliseconds. |
symbols | query | string | no | Comma-separated symbols, as the broker names them. Matched case-insensitively. |
ticket | query | string | no | Return the single trade carrying this broker ticket. |
page | query | integer | no | 1-based page number. |
page_size | query | integer | no | Trades per page. The response carries the total to page through. |
sort | query | time | symbol | profit | volume | no | Column to order by. time is the close time. |
dir | query | asc | desc | no | Order direction. The default puts the newest trade first. |
curl -X GET 'https://5mtrader.com/api/v1/history' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
POST /v1/history/sync
Pull fresh history from the brokers
- Operation:
history.sync - Scope:
history:sync - MCP tool:
history_sync - Heavy: counts against the hourly heavy-operation budget.
Asks every connected account's bridge for trades it has not stored yet. This talks to remote servers and is charged against the hourly heavy-operation budget.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
account_keys | body | string | no | Comma-separated account keys (platform |
force | body | boolean | no | Ignore the per-account sync throttle. |
curl -X POST 'https://5mtrader.com/api/v1/history/sync' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
stats
GET /v1/stats
Performance statistics
- Operation:
stats.get - Scope:
read - MCP tool:
stats_get
Pre-aggregated performance across your accounts: totals, win rate, profit factor, best and worst symbols, and a daily P&L series. Buckets are UTC days, and from/to are snapped to the UTC day they fall in. A filtered range is rebuilt from those daily buckets, where tradesWithTp is not stored and reads 0.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
account_keys | query | string | no | Comma-separated account keys (platform |
from | query | integer | no | Start of range, unix milliseconds. Snapped to its UTC day. |
to | query | integer | no | End of range, unix milliseconds. Snapped to its UTC day. |
symbol_limit | query | integer | no | How many symbols to return in each of the best/worst lists. |
curl -X GET 'https://5mtrader.com/api/v1/stats' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
share
POST /v1/share
Create a public performance link
- Operation:
share.create - Scope:
share:write - MCP tool:
share_create
Builds a signed report URL for the accounts and metrics you choose. Anyone holding the link can open it without authenticating, and the link carries its own configuration — there is nothing to revoke, so treat it as public the moment you share it.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
preset | body | string | yes | Time preset for the report, e.g. the last 30 days. |
mode | body | profit | percent | no | Headline figure: money made, or return on the capital you declare. |
account_type | body | all | live | demo | no | Restrict the report to real or demo accounts. |
account_keys | body | string[] | no | Account keys (platform |
from_ms | body | integer | no | Range start when the preset is a custom one, unix milliseconds. |
to_ms | body | integer | no | Range end when the preset is a custom one, unix milliseconds. |
capital | body | number | no | Capital the percentage is calculated against. |
include_commission | body | boolean | no | Subtract commission from the reported profit. |
include_swap | body | boolean | no | Subtract swap from the reported profit. |
percent_only | body | boolean | no | Hide monetary amounts and publish percentages alone. |
custom_name | body | string | no | Title shown on the public page instead of your account name. |
metrics | body | object | no | Which figures the public page shows. |
curl -X POST 'https://5mtrader.com/api/v1/share' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"preset":"<preset>"}'
news
GET /v1/news/events
Economic calendar
- Operation:
news.events - Scope:
read - MCP tool:
news_events
Scheduled macro events in a time range, with impact, forecast, previous and actual values. The range may not exceed one year.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
from | query | integer | yes | Start of range, unix milliseconds. |
to | query | integer | yes | End of range, unix milliseconds. |
impact | query | string | no | Comma-separated impact levels to keep: high, medium, low or holiday. |
currencies | query | string | no | Comma-separated currency codes to keep, e.g. USD,EUR. |
curl -X GET 'https://5mtrader.com/api/v1/news/events?from=0&to=0' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
billing
GET /v1/billing
Your subscription and its status
- Operation:
billing.get - Scope:
read - MCP tool:
billing_get
Current plan, tier, seat count, billing period, renewal or expiry date, and whether it is in trial or scheduled to cancel.
No parameters.
curl -X GET 'https://5mtrader.com/api/v1/billing' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
GET /v1/billing/plans
Available plans and their price ids
- Operation:
billing.plans - Scope:
read - MCP tool:
billing_plans
Every purchasable tier with its monthly rate, billing model and the Stripe price ids you pass to billing.changePlan or billing.checkout.
No parameters.
curl -X GET 'https://5mtrader.com/api/v1/billing/plans' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
GET /v1/billing/invoices
Your billing history
- Operation:
billing.invoices - Scope:
read - MCP tool:
billing_invoices
Invoices Stripe has issued to you, newest first, with amounts in the currency's minor unit and links to the hosted invoice and its PDF. Empty until you have paid for something.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
limit | query | integer | no | How many invoices to return, newest first. |
curl -X GET 'https://5mtrader.com/api/v1/billing/invoices' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
POST /v1/billing/plan
Change your plan or seat count
- Operation:
billing.changePlan - Scope:
billing:write - MCP tool:
billing_changePlan - Heavy: counts against the hourly heavy-operation budget.
- Destructive: changes real positions, data or billing.
Switches an existing subscription to another price and/or quantity, invoicing the proration immediately — this charges the payment method on file, and ends a running free trial there and then. Upgrades take effect at once. Requires an active subscription — use billing.checkout to start one. Pass confirm with the price id.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
price_id | body | string | yes | Stripe price id from billing.plans. |
confirm | body | string | yes | Must equal price_id, as an explicit acknowledgement that money moves. |
quantity | body | integer | no | Seats, for per-account plans. |
region | body | string | no | Required when moving to a private-server tier from a plan that has no region yet. A subscription that already runs in a region keeps it: the region is fixed until the plan is cancelled and bought again. |
curl -X POST 'https://5mtrader.com/api/v1/billing/plan' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"price_id":"<price_id>","confirm":"<confirm>"}'
POST /v1/billing/checkout
Start a subscription
- Operation:
billing.checkout - Scope:
billing:write - MCP tool:
billing_checkout - Heavy: counts against the hourly heavy-operation budget.
Returns a Stripe-hosted checkout URL. Payment details cannot be collected through an API, so open the URL in a browser to finish. Use billing.changePlan if you already subscribe.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
price_id | body | string | yes | Stripe price id from billing.plans. |
quantity | body | integer | no | Seats to buy on a per-seat plan. Defaults to one. |
region | body | string | no | Required for private-server tiers. The region is fixed for the life of the subscription. |
curl -X POST 'https://5mtrader.com/api/v1/billing/checkout' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"price_id":"<price_id>"}'
POST /v1/billing/portal
Open the Stripe billing portal
- Operation:
billing.portal - Scope:
billing:write - MCP tool:
billing_portal
Returns a short-lived URL where payment methods can be updated and the subscription cancelled.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
history | body | boolean | no | Open the invoice-history view instead of the management view. |
curl -X POST 'https://5mtrader.com/api/v1/billing/portal' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
affiliate
GET /v1/affiliate
Your affiliate account
- Operation:
affiliate.get - Scope:
read - MCP tool:
affiliate_get
Referral code, link and earnings. Returns enrolled: false if you are not in the programme.
No parameters.
curl -X GET 'https://5mtrader.com/api/v1/affiliate' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
GET /v1/affiliate/referrals
People who signed up through your link
- Operation:
affiliate.referrals - Scope:
read - MCP tool:
affiliate_referrals
Every referral attributed to you, newest first, with whether and when they converted into a paying customer. Referrals are other people: their email is masked and their name is not returned, so you can tell two of them apart without being handed their contact details.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
limit | query | integer | no | How many referrals to return, newest first. |
curl -X GET 'https://5mtrader.com/api/v1/affiliate/referrals' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
GET /v1/affiliate/earnings
Your commissions and payouts
- Operation:
affiliate.earnings - Scope:
read - MCP tool:
affiliate_earnings
Balance by commission status, the individual commissions behind it and the payouts already made to you. Amounts are in the commission's own currency.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
limit | query | integer | no | How many commissions and payouts to return, newest first. |
curl -X GET 'https://5mtrader.com/api/v1/affiliate/earnings' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
PATCH /v1/affiliate/code
Change your referral code
- Operation:
affiliate.setCode - Scope:
profile:write - MCP tool:
affiliate_setCode
Codes are unique across all affiliates. Old links stop working immediately.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
code | body | string | yes | New referral code. |
curl -X PATCH 'https://5mtrader.com/api/v1/affiliate/code' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"code":"<code>"}'
ai
GET /v1/ai/chats
List assistant conversations
- Operation:
ai.chats.list - Scope:
ai - REST only: this one is not offered as an MCP tool.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
limit | query | integer | no | How many conversations to return, most recent first. |
curl -X GET 'https://5mtrader.com/api/v1/ai/chats' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
POST /v1/ai/chats
Start an assistant conversation
- Operation:
ai.chats.create - Scope:
ai - REST only: this one is not offered as an MCP tool.
Opens an empty chat in the mode you pick: support answers questions about the product, coach-live reasons over your connected accounts and coach-backtest over your simulated ones. The coach modes need a paid plan and draw on a daily allowance. The title is written for you from the first exchange.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
mode | body | support | coach-live | coach-backtest | no | Assistant mode for the whole conversation. |
curl -X POST 'https://5mtrader.com/api/v1/ai/chats' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
POST /v1/ai/chats/{chatId}/messages
Send a message and get the reply
- Operation:
ai.chats.send - Scope:
ai - REST only: this one is not offered as an MCP tool.
- Heavy: counts against the hourly heavy-operation budget.
Runs one full turn — including any data the assistant looks up on your behalf — and returns the finished answer. There is no streaming here: the call takes as long as the answer takes. The message and the reply are both stored in the conversation.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
chatId | path | string | yes | Chat id. |
message | body | string | yes | What to say to the assistant. |
locale | body | string | no | Language for the reply. Defaults to English. |
curl -X POST 'https://5mtrader.com/api/v1/ai/chats/{chatId}/messages' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"message":"<message>"}'
POST /v1/ai/chats/{chatId}/actions/{actionId}
Approve or reject an action the assistant proposed
- Operation:
ai.chats.decide - Scope:
ai - REST only: this one is not offered as an MCP tool.
The assistant never changes anything on its own: it proposes an operation and waits. Approving runs it under the same scopes as this call — so a token without the operation's scope cannot approve it — and returns what it did; rejecting drops it. Either way the decision is recorded in the conversation.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
chatId | path | string | yes | Chat id. |
actionId | path | string | yes | Id of the proposed action. |
decision | body | approve | reject | yes | Whether to run the proposed operation. |
curl -X POST 'https://5mtrader.com/api/v1/ai/chats/{chatId}/actions/{actionId}' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{"decision":"approve"}'
PATCH /v1/ai/chats/{chatId}
Rename or pin a conversation
- Operation:
ai.chats.update - Scope:
ai - REST only: this one is not offered as an MCP tool.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
chatId | path | string | yes | Chat id. |
title | body | string | no | Replaces the title written automatically from the first exchange. |
pinned | body | boolean | no | Pinned conversations stay on top. At most 3. |
curl -X PATCH 'https://5mtrader.com/api/v1/ai/chats/{chatId}' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
GET /v1/ai/chats/{chatId}
Read one assistant conversation
- Operation:
ai.chats.get - Scope:
ai - REST only: this one is not offered as an MCP tool.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
chatId | path | string | yes | Chat id. |
curl -X GET 'https://5mtrader.com/api/v1/ai/chats/{chatId}' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
DELETE /v1/ai/chats/{chatId}
Delete an assistant conversation
- Operation:
ai.chats.delete - Scope:
ai - REST only: this one is not offered as an MCP tool.
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
chatId | path | string | yes | Chat id. |
curl -X DELETE 'https://5mtrader.com/api/v1/ai/chats/{chatId}' \
-H 'Authorization: Bearer 5mt_YOUR_TOKEN'
Pricing
Four plans, same product, same configuration — pick what fits your scale and infrastructure needs. No feature gating, no hidden fees. Annual billing saves 20% on every plan.
Plans
| Plan | Pricing | Infrastructure | Best for |
|---|---|---|---|
| Shared | $5/account/mo (min 4) | Shared low-latency cloud | Most users, up to ~10 accounts |
| Shared Unlimited | $50/mo flat | Shared low-latency cloud | 10+ accounts on shared infra |
| Private Server | $10/account/mo (min 4) | Your own dedicated VPS | Isolation + dedicated resources |
| Private Server Unlimited | $100/mo flat | Your own dedicated VPS | Maximum scale on a dedicated VPS |
Cost examples (monthly)
| Accounts | Shared | Shared Unlimited | Private Server | Private Unlimited |
|---|---|---|---|---|
| 4 | $20 | $50 | $40 | $100 |
| 5 | $25 | $50 | $50 | $100 |
| 10 | $50 | $50 | $100 | $100 |
| 15 | $75 | $50 | $150 | $100 |
| 50 | — | $50 | — | $100 |
- Free trial — The Shared plan includes a 7-day free trial (card required; no charge during the trial). The trial applies to the Shared per-account plan only — Shared Unlimited and Private Server plans don't include a trial.
- Annual billing saves 20% on every plan, billed upfront.
- AI assistant included — Product help is free for every registered user, plan or no plan, and so are the backtester, its TradingView charts and custom indicators. Every paid plan (and the free trial) adds the AI Trading and Backtest coaches, the prop-firm challenge simulator and risk management.
- Switch plans anytime from the billing portal — upgrades are prorated.
- Cancel anytime — cancellations take effect at the end of your current billing period.
- Manage your subscription from the Billing section in the dashboard.
Affiliate program
5MTrader runs an invitation-only affiliate program. If you're invited, you get a personal affiliate link and a dashboard to track everything in real time.
- Share your link — Your link has the form
5mtrader.com/r/<code>; anyone who opens it is counted as a click and, if they subscribe (through the link or by using your promo code), attributed to you. - Pick your own code — The affiliate code is editable from your affiliate dashboard, so your link can carry your brand or handle instead of a random string.
- Lifetime commission — You earn a commission on every payment your referred customers make: their first invoice and every renewal, for as long as they stay subscribed. The rate is a single program-wide percentage — the same for every affiliate.
- Give customers a discount — Your link can carry a discount that's applied automatically at checkout on the customer's first invoice.
- Track and get paid — Your affiliate dashboard shows clicks, referrals, pending and available balances, and payout history. Payouts are processed manually once you reach the minimum threshold.
Example: you refer a trader who subscribes to Shared Unlimited ($50/mo). With a 20% program rate you earn $10 on their first invoice and $10 again on every monthly renewal, for as long as they remain subscribed — no action needed on your side after the first click.
Full terms are in the Affiliate Program Terms. Interested in joining? Email support@5mtrader.com.
FAQ
What is 5MTrader?
5MTrader is a cloud-based copy trading platform for MetaTrader 5 and cTrader. Connect a master account and multiple slave accounts, and trades are copied automatically in real time — no local installation required.
Which platforms does 5MTrader support?
5MTrader supports MetaTrader 5 and cTrader. Connect accounts from either platform — or run both side by side — and copy, monitor and analyze them all from the same dashboard. MetaTrader 5 accounts connect with login, password and server; cTrader accounts connect securely via cTrader's login, with no password ever shared.
How does pricing work?
Four plans: Shared ($5/account/mo, min 4), Shared Unlimited ($50/mo flat), Private Server ($10/account/mo, min 4, dedicated VPS), and Private Server Unlimited ($100/mo flat on a dedicated VPS). No hidden fees, no feature gating — every plan includes the full configuration. Annual billing saves 20% on every plan.
Is there a free trial?
Yes — the Shared plan includes a 7-day free trial. A card is required to start, but you won't be charged during the trial and you can cancel anytime before it ends. The free trial applies to the Shared per-account plan only; Shared Unlimited and Private Server plans don't include a trial.
When should I switch from Shared to Shared Unlimited?
At 10 accounts the math breaks even ($5 × 10 = $50 flat). Past that, every extra account is free on the unlimited plan. If you expect to grow beyond 10 accounts, switch early.
When does Private Server make sense?
Pick Private Server when you want guaranteed isolation — no shared resources, no noisy neighbors — or want predictable performance for a high-volume strategy. Private Server Unlimited ($100/mo flat) is the best fit for traders running many accounts on dedicated infrastructure.
How does the annual discount work?
Choosing annual billing applies a 20% discount across any plan for the year, billed upfront. You can switch between monthly and annual at any time through your billing portal.
How fast are trades copied?
Trades are copied in under 100ms. 5MTrader runs on dedicated cloud infrastructure tuned for low-latency execution, so trades replicate the moment the master fills.
Is my trading data private?
Yes. We never sell or share your trading data with third parties, and you can delete it at any time. We do store your trades and the statistics derived from them — that's what powers your live monitoring, history and analytics — but they're used only to operate the service for you. See our Privacy Policy.
Is 5MTrader safe for prop firms?
Yes. 5MTrader is compatible with prop firms. Trades are copied via cloud infrastructure with no data exposure to third parties.
Is it safe to connect my accounts?
Yes. A trading login can place and read orders — it can never move or withdraw money, which stays inside your broker's own portal. MetaTrader 5 accounts connect with login, password and server; cTrader accounts connect through cTrader's own authorization screen, so no password is ever shared with us. Credentials are never shown back to you or returned by the API, and you can disconnect an account at any time from the Accounts screen.
Where do my trades actually execute?
At your broker, exactly as if you had placed the order yourself — 5MTrader never holds your funds. Our copier servers keep a live session to each connected account and send the copied order straight to the broker, so nothing runs on your computer and there is no VPS to rent or keep online. Shared plans run on our managed fleet; Private Server reserves a dedicated VPS for your accounts alone.
What happens if 5MTrader goes down?
Your positions stay exactly where they are. Open trades, and the stop-loss and take-profit attached to them, live at the broker — not with us — so nothing is closed or changed if a copier server is unreachable. What pauses is copying: new master trades are not mirrored while an account is offline, and copying resumes on its own once the account reconnects, with your copy rules untouched. A copier-health alert tells you the moment an account has been offline longer than your threshold.
Can 5MTrader enforce risk limits, like a prop firm does?
Yes. Risk management puts hard limits on any connected account — daily loss, maximum drawdown, equity floor, profit target, position and lot caps, trading hours and news blackouts — enforced on the server that runs your account, 24/7. When a rule is breached the engine can block new copies, turn copying off (cascading to a master's slaves), close every position, and alert you by email, webhook, Telegram or Discord. One-click presets reproduce the classic 5% daily / 10% drawdown evaluation rules. It requires an active paid plan.
Do risk rules keep working if I close the dashboard?
Yes. Rules are pushed to the server that runs your account and evaluated there on the live price stream — they keep enforcing even if your browser is closed or the website itself is down.
How do I get risk alerts on Telegram or Discord?
Open Risk → Notification channels and configure them once — they're shared by all your accounts. For Telegram, create a bot with @BotFather and paste the bot token plus your chat ID; for Discord, paste a channel webhook URL; you can also set a generic webhook that receives every breach as JSON. Each channel has a Send test button so you can verify it before a real breach ever fires. Then tick the matching action on any rule. See Notification channels.
Can I lock myself out of trading?
Yes — deliberately and irreversibly. The Lock action on the Risk screen closes every position and stops copying until the lock expires: pick 30 minutes to 3 hours, the end of a market session, or any date up to 30 days ahead. There is no early unlock by design, and locking a master locks its slaves too. See Lockout.
Does 5MTrader have an economic calendar?
Yes. The News screen shows scheduled releases for nine major currencies, colour-coded by impact (High/Medium/Low/Holiday), rendered in your timezone, with per-user filters by impact, currency and event type that are remembered across visits. It's the same calendar the risk engine uses for news-window blackouts. See Economic calendar.
Can I monitor my accounts and see analytics in 5MTrader?
Yes. Beyond copying, 5MTrader is a full trading desk. The dashboard gives you live balance, equity and open P&L for every account, a real-time terminal of all open positions and pending orders, a full analytics suite (equity curve, drawdown, 40+ metrics and a 5MTrader Score from S to F), a calendar heatmap and a complete trade history — no third-party tool required. See Monitoring and analytics.
How often do the live numbers update?
Live figures — balance, equity, open P&L and position counts — stream continuously and refresh about once per second, with no manual refresh needed. Statistics, the calendar and trade history are computed from your closed trades and update as new trades settle.
Do I need a paid plan for the AI assistant?
For Product help, no: it is free for every registered user, no subscription required. The Trading coach and Backtest coach modes need an active paid plan and draw on a daily message allowance. The Trading coach also works from a connected account, which needs an active plan too.
Is the backtester free?
Yes. The chart backtester — TradingView charts, bar and tick replay, simulated trading and custom indicators — is free for every registered user, with or without a subscription. What needs a paid plan is the prop-firm challenge simulator and the AI Backtest coach that analyzes your sessions.
Which markets can I backtest, and how far back?
Sessions replay historical data we store for a curated list of instruments — major forex pairs, metals, indices and crypto among them — and each symbol carries its own history depth. When you create a session the form shows the exact Data available range for the symbols you picked and limits the date picker to it, so you always know how far back you can go. See Market data and replay accuracy.
How realistic is the backtester's simulation?
Sessions replay real historical data: recent history tick by tick with the real bid/ask spread, older history in one-minute steps. Fills are idealized — no commission, swap or slippage, and pending orders, stop loss and take profit fill exactly at their price. Replay is forward-only, so the chart can never look ahead. See Market data and replay accuracy.
Can I rewind or restart a backtest session?
You can jump forward to any later date, but never backwards — replay is forward-only by design, so the chart can't reveal what happens next. To trade the same period again, create a new session with the same symbol and dates, or use Try again on a finished prop firm session, which clones its symbol, dates, balance and rules into a fresh numbered attempt. Deleting a session permanently removes it and all its trades.
Can I use my own indicators in the backtester?
Yes. Open Custom indicators from the Backtesting screen (or the </> button on any backtest chart), write or paste Pine source, and it compiles as you type — errors are reported with line numbers, and one click adds the result to your chart next to the full built-in TradingView indicator library. See Custom indicators.
Why did my custom indicator disappear from the chart?
Almost always because the last save didn't compile. The indicator is kept as a draft — flagged in your indicator list — and comes off the chart until it compiles cleanly again: open it in the editor, read the errors in the output log (each carries its line number) and save a working version. Note too that lines, labels and boxes a script draws are redrawn on every recalculation and are not saved with the chart layout.
How does the prop-firm challenge simulator work?
Create a Prop firm session in the backtester, pick a template (two-phase, one-phase, futures trailing or consistency) or set custom rules, and trade the replay while the rules — profit target, daily loss, maximum drawdown, minimum trading days — are enforced in real time. Pass every phase to complete the challenge, or get an instant verdict explaining exactly which rule was broken and when. It needs an active paid plan. See Prop-firm challenge simulator.
Does passing a simulated challenge get me funded?
No. The challenge simulator is a practice tool inside the backtester: it reproduces the rules prop firms typically use so you can rehearse them on historical data. It isn't affiliated with any prop firm, and a simulated pass has no bearing on a real evaluation. What it does give you is an honest read of whether your risk fits those rules — and where you tend to break them — before you pay for a real challenge.
Can I cancel at any time?
Yes. Cancellations take effect at the end of your current billing period. You can manage your subscription from the billing portal inside the dashboard.
Can I reuse a copy configuration across accounts?
Yes. Save any setup as a template — lot type, reverse trading, exact match, prefix/suffix and symbol translations — and apply it to a single account or, in one click, to every slave of a master. See Configuration templates.
Can I share my trading results?
Yes. The Share screen turns any period into a clean, branded image of your P&L. You choose exactly what appears — percent of capital, balance, trade count, win rate, profit factor and best trade — and whether to include your name. Nothing about your strategy, positions or credentials is ever included.
Can people verify that my shared results are real?
Yes. Turn on Include QR code and the card carries a QR that opens a public verification page: a 5MTrader-issued certificate whose figures are recomputed live from your synced history on every visit, showing only the metrics you chose. The link is cryptographically signed (editing it breaks it), blocked from search engines, and never reveals trades, positions, account numbers or brokers.
Can I change the timezone or use dark mode?
Yes. From the Settings screen you can switch between System, Light and Dark themes and set any timezone (or auto-detect from your device). All trade times, the calendar, statistics and history follow the timezone you choose.
Is the dashboard available in my language?
Yes. The 5MTrader dashboard and this documentation are available in multiple languages. Your language preference is remembered across sessions.
Do I need to install anything?
No. 5MTrader is entirely cloud-based. You manage everything from the web dashboard — no downloads, no local software. If you choose a Private Server plan, the dedicated VPS is provisioned and managed by us; you still don't need to install or maintain anything.
Support
Email: support@5mtrader.com
Telegram: A direct Telegram contact is available from the Support screen, both in the dashboard and on the website.
AI assistant: For product questions, the built-in AI assistant answers instantly — product help is free for every registered user, and the Support screen links straight to it.
Dashboard: Log in at 5mtrader.com/dashboard to manage your accounts, billing, and configuration.
Documentation: You're reading it — 5mtrader.com/docs.
Billing: Manage your subscription, payment methods, and invoices from the billing portal in the dashboard.
Policies:
- Billing Policy — Plans, billing cycles, cancellation
- Refund Policy — Refund terms and exceptions
- Complaints Policy — How to file and escalate a complaint
- Privacy Policy — How we handle your data
- Terms of Use — Service agreement
- Cookies Policy — Cookie usage
- Disclaimer — Trading risk warnings
Founder: Joaquin Metayer — LinkedIn
Company: IPTRADE COPIER, LLC — 131 Continental Dr, Suite 305, Newark, Delaware 19713, United States