TradeAssist Remote Monitor MT5 — Complete User Guide
Everything your MT5 account does, sent to Telegram. Read-only: it never places an order.
https://www.mql5.com/en/market/product/194805 Questions? Message me here on MQL5. I answer.
1. What it does
Your MT5 runs on a PC or VPS at home. You are somewhere else.
This EA sends what happens on that account to Telegram in real time: every fill, every pending order placed or cancelled, every SL/TP change, every risk event — each with a chart screenshot of that symbol, marked with entry (blue), stop loss (red) and take profit (green).
When you want to look, one command does it: /account for balance and equity, /positions for what is open, /risk for how close you are to your limits, /today for today's result.
Those answers do not need MT5 to be online. Your account state lives in the cloud, so you get an answer with the computer switched off. Every reply says how fresh the data is, and after 3 minutes without a heartbeat it says plainly that MT5 is offline. This is the fundamental difference from tools that call the Telegram API straight from the terminal — those go silent the moment MT5 stops.
2. What it does not do
It will never open, close or modify a position.
That is not "not yet", and not a setting you can switch on. There is no order-sending code in it. Nothing in it can move your money. If a stranger somehow got hold of your Telegram, the worst they could do is read.
If you need remote execution, use a different tool. Deliberately, not this one.
3. Requirements
| Item | Requirement |
|---|---|
| Platform | MetaTrader 5, any build |
| Account type | Hedging and Netting both supported |
| Network | The terminal must reach the internet; one address goes in the WebRequest allow-list |
| Telegram | An ordinary account. Your own bot needs a BotFather token as well |
| Chart | Any single chart. It monitors the whole account, not that chart |
| Multiple terminals | The same account can run on several machines; only one reports, no duplicate notifications |
4. Setup in five minutes
Step 1 — allow one URL (required)
MT5 blocks network access from EAs by default. Allow it once:
Tools → Options → Expert Advisors → tick "Allow WebRequest for listed URL" → add the server address
That address is the InpServerUrl input. There is only one domain — deliberately, so this step is done once and never revisited.
If you skip it: the panel shows a network error and the log says 4060 . The panel has a WebRequest help button that opens a dialog with the address and the four clicks.
Step 2 — drop the EA on a chart
Drag TradeAssistRemoteMonitor onto any chart. The symbol does not matter.
Step 3 — pair
The panel shows an 8-digit pairing code, e.g. 4829 1738 , valid for 10 minutes.
Open Telegram, search for the bot name shown on the panel, and send:
/start 4829 1738
Spaces and dashes are both accepted. Once you get "Pairing code received", the panel turns green and shows Paired 52***58 . Done.
If the code expires, click Re-Pair on the panel for a new one.
Panel tips
Drag the title bar to move the panel; the - button in the top-right collapses it to a single bar, + expands it again — data keeps updating while collapsed. The panel follows your chart's colour scheme.
Position and collapsed state are not saved: re-attaching the EA returns it to the default position, expanded.
5. Everyday use
Notifications arrive on their own
Open, close, partial close, reverse, pending placed / filled / cancelled, SL and TP changes, risk alerts — all pushed to Telegram, with a chart screenshot of that symbol by default.
Ask any time (no MT5 needed)
| Command | What it gives you |
|---|---|
| /menu | Quick buttons — tap instead of typing |
| /account | Balance, equity, margin |
| /positions /pending | Open positions / pending orders |
| /risk | Risk snapshot: day P/L, drawdown, margin level |
| /today /week /month /year | Trading statistics |
| /accounts | All accounts at a glance — which one is in trouble |
| /status | Account status and delivery stats |
| /deliveries | Did each recent notification actually go out |
| /screenshot [symbol] | Take a chart screenshot (this one needs MT5 online) |
| /help | When you forget what exists |
Everything except /screenshot is answered from the cloud snapshot. When you glance at your phone from outside, MT5 may well be reconnecting — that should not stop you getting an answer.
How fresh are these numbers? The snapshot is maintained by the EA's heartbeat, every 30 seconds by default ( InpHeartbeatSeconds , minimum 15). So moving numbers such as floating P/L trail by at most one heartbeat — and every reply states the time the data is from, so you never have to guess. Why not fetch on demand? Commands are handed to the EA on the heartbeat response, so "go ask MT5 right now" would have to wait for the next heartbeat — up to 30 seconds before you get any reply at all — while the snapshot answers instantly with data under 30 seconds old. Same freshness, 30 seconds more waiting. /screenshot is the one exception because a screenshot cannot be pushed in advance; a P/L number can.
Settings commands
| Command | What it does |
|---|---|
| /settings | Opens the web settings page (one-time link, valid 5 minutes) |
| /alias 8378 FTMO-01 | Name an account; notifications then show that name |
| /filter | Which categories this chat receives |
| /targets /target add | Multiple destinations: private chat, group, channel, topic |
| /ownbot | Run alerts and commands through your own bot |
| /lang | English / Chinese / Russian |
| /start <code> | Bind an account. Used once at install, again when re-pairing |
| /templates | List all message templates |
| /template <account> <event> | Show one template as it stands |
| /settemplate | Change one template |
| /resettemplate | Reset one template to default |
| /unbind | Unlink an account |
With several accounts, put the account after the command — /risk 8378 , /today FTMO-01 . With one account you can leave it out. It deliberately does not guess: templates and names are stored per account, and a wrong guess would change the wrong account without you noticing.
/target subcommands
| Command | What it does |
|---|---|
| /target add | Add this chat as a destination |
| /target addchannel <@channel or ID> | Add a channel (outbound only) |
| /target on <n> / enable | Enable a destination |
| /target off <n> | Disable it (config kept, can be re-enabled) |
| /target events <n> | Choose which categories this destination receives |
Numbers come from /targets .
6. Where it sends
One account can send to several places at once, and each place decides what it receives:
- Private chat — for you
- Group — your team watches together. In a group, only the account owner can run query and settings commands; everyone sees the notifications
- Channel — outbound only, for broadcasting to subscribers
- Topic — one thread inside a supergroup, without disturbing the others
Use /targets to list destinations with their numbers, /target add to add the current chat, /target off <n> to pause one, and /filter or /target events <n> to choose what it gets.
Filtering works on three dimensions: magic number (4 modes), symbol (3 modes), event category (10 kinds). These are changed on the web settings page and take effect immediately — no need to re-attach the EA.
7. Reports
Daily, weekly, monthly and yearly, sent at the hour you pick, in your timezone.
- Several accounts are merged into one message: a total plus one line per account
- If any account in the summary was offline, it is named, and the summary says the total may be incomplete — handing you a clean-looking number over a gap in the data would be the easy thing to do, and the wrong one
- Periods with no trading are skipped by default; you can switch that on
The basis is printed under each report: net P/L is every deal in the period plus commission plus swap, matching your balance change. Deposits and withdrawals are excluded.
8. Risk alerts and prop firm limits
Five kinds of risk, two tiers each:
| Kind | Default thresholds |
|---|---|
| Daily loss | 3% / 5% |
| Drawdown | 5% / 10% (from the equity high, not from today's open — it does not reset overnight) |
| Margin level | below 200% / 120% |
| Equity floor | off by default |
| Spread spike | 3× its own normal |
While you stay over a threshold it reminds you on a cooldown (30 minutes by default) instead of spamming.
Prop firm limits: enter your daily-loss and max-drawdown limits, and every alert tells you how much room is left. That is the one number that decides whether you keep trading today.
Note: /today may say "+46" while a risk alert says "day loss 0.1%". Both are right. /today counts closed trades only (so it matches your broker statement); the risk alert counts closed plus the floating P/L of open positions (matching your equity). The difference is what you are still holding. The risk alert must count floating — without it, an account in the middle of blowing up looks safe.
9. The web settings page
/settings gives you a one-time login link, usable once, valid five minutes.
That link is the key to your account: whoever holds it can change your settings without a password. Do not forward it. It is only ever sent in private chat.
On the page: notification targets and webhooks, report periods / hour / timezone, quiet hours, your own bot, and per-event message templates.
Quiet hours do not mute risk alerts — being asleep is not a reason to miss a margin call.
10. Use your own bot (optional)
Create a bot in BotFather, let it into the chat you want to use (press Start in private, or add it to the group), then send /ownbot <token> .
From then on, alerts come from your bot and commands go to it — your avatar, your name, your branding. People running signal services use this.
- The message containing the token is deleted immediately, whether it worked or not
- In groups the bot usually cannot delete messages, so configure it in private chat: /targets for the number, then /ownbot 2 <token>
- Once your bot is in a group there are two bots there. Telegram then only delivers commands that name a bot — write /status@yourbotname in groups; in private chat it is not needed
- /ownbot off returns to the official bot and deletes your token
11. Webhook (optional)
The same events as structured, signed JSON, sent to your own https endpoint. Added on the web settings page, with category filtering, a custom JSON shape, and retries on failure.
12. Input reference
You normally do not need to change any of these. Ordered by "what you might actually want to touch".
The input dialog is in English. MQL5 input descriptions are a fixed string with no localisation mechanism, so one language had to be chosen. It is grouped into eight sections: Connection / Reporting / Risk monitoring / Risk day rollover / Prop Firm / Screenshots / Panel / Diagnostics. The panel itself follows your terminal language ( InpLanguage ).
| Input | Default | Notes |
|---|---|---|
| InpServerUrl | — | Server address. Must be in the WebRequest allow-list |
| InpHttpTimeoutMs | 10000 | HTTP timeout. Do not lower it — the TLS handshake alone can take seconds, and a small value guarantees 5203 |
| InpRiskEnabled | true | Master switch for risk alerts |
| InpDailyLossWarnPct / CritPct | 3 / 5 | Daily loss, two tiers (%) |
| InpDrawdownWarnPct / CritPct | 5 / 10 | Drawdown, two tiers (%) |
| InpMarginWarnLevel / CritLevel | 200 / 120 | Margin level, alerts below (%) |
| InpEquityWarnValue / CritValue | 0 | Absolute equity floor, 0 = off |
| InpSpreadSpikeMult | 3.0 | Spread spike as a multiple of normal |
| InpRiskCooldownMin | 30 | How often to remind while over a threshold |
| InpPropDailyLimitPct | 0 | Prop firm daily loss limit (%), 0 = off |
| InpPropMaxDDPct | 0 | Prop firm max drawdown limit (%) |
| InpRiskResetMode | BROKER_TIME | Which clock the trading day rolls on: broker time or UTC |
| InpRiskResetHour / Minute | 0 / 0 | Rollover time |
| InpScreenshotEnabled | true | Attach a chart screenshot to trade alerts |
| InpScreenshotOnModify | false | Also attach on SL/TP changes. Off by default: in fast markets SL/TP change repeatedly |
| InpScreenshotOnRisk | false | Also attach on risk alerts. Off by default: alerts should be fast |
| InpScreenshotDelayMs | 300 | Wait for the chart to draw. Increase if screenshots come out blank |
| InpHeartbeatSeconds | 30 | Heartbeat interval, minimum 15 |
| InpHistorySyncDays | 7 | How many days of deals to back-fill when the EA returns |
| InpLanguage | AUTO | Panel language: follow terminal / EN / ZH / RU |
| InpVerboseLog | false | Turn on when troubleshooting |
| InpSelfTest | false | Run self-checks at startup, results in selftest.csv |
Setting a threshold to 0 turns that tier off — it does not mean "alert immediately".
"New York 17:00" is deliberately not supported: it has daylight saving, and MQL5 has no timezone database, so the EA and the server would compute different "todays" — meaning the day P/L you see and the one risk control uses would not be the same number. Better to not offer it than to offer one that is occasionally wrong.
13. Troubleshooting
| Symptom | What to do |
|---|---|
| Panel stays red / log shows 4060 | WebRequest allow-list. Click WebRequest help on the panel; it opens a dialog with the steps |
| Log shows 5203 | HTTP timeout too short. Keep InpHttpTimeoutMs at 10000 |
| "Invalid or expired pairing code" | Codes last 10 minutes; click Re-Pair for a new one. Too many wrong attempts triggers a temporary block |
| No notifications, but /status looks fine | /deliveries shows the result of each recent notification; also check /filter and whether you are inside quiet hours |
| I added the wrong destination | /target off <n> stops delivery there. Targets can be disabled but not deleted — delivery history hangs off the target, and removing it would take the /deliveries history with it. Disabled targets stay in the list, marked as disabled |
| Data still available with MT5 closed | By design: queries use the cloud snapshot. But live alerts stop, and after 24 hours offline you get one more reminder |
| The same account on two machines | Only one reports; the other stands by and takes over within 90–180 seconds. No duplicate notifications |
| I changed MT5 account | The panel turns red with "Account changed — re-pair", Telegram warns you, and the numbers stay at the old account's last state. New-account data is never filed under the old name |
| Screenshots come out blank | Increase InpScreenshotDelayMs |
| No response to commands in a group | If another bot is in the group, Telegram only delivers commands that name one — write /status@yourbotname (type / and pick from the menu; your client adds the name) |
14. A few deliberate trade-offs
- Why read-only: remote execution is a different order of risk. This product only tells you what happened.
- Why a cloud server: without it, everything stops the moment MT5 closes. The cloud keeps the snapshot, so you can ask from anywhere — even with the computer switched off.
- Why drawdown counts from the equity high: measured from today's open, yesterday's loss simply disappears today — and that is not how prop firm rules work.
- Why quiet hours do not mute risk alerts: quiet hours exist so trade notifications do not wake you, not so that a margin call stays quiet.
15. Version history
v1.00 — first release.
Support
Message me here on MQL5. I read and reply.


