Setup Guide: Telegram to MT5 and MT4 Multi-Channel Copier
This guide walks you through the complete setup in three stages: obtaining your Telegram API credentials, configuring your Windows application, and installing the Expert Advisor.
Total preparation time: 5-10 minutes.
The TelegramToMT5MultiChannelCopier.exe application works for both MT4 and MT5. Make sure you purchase the correct EA version for your Metatrader.
| === Download the TelegramToMT5MultiChannelCopier.exe application (Version 1.15) here === |
MT4 EA: https://www.mql5.com/en/market/product/173429
MT5 EA: https://www.mql5.com/en/market/product/172706

📑 Table of contents
|
Step 1: Obtain Telegram API credentials
The app connects to Telegram using the official API. You need an API ID and API hash, which are free and can be obtained in 2 minutes.
Step 1: Open your browser and go to my.telegram.org/apps
Step 2: Log in with your phone number (the same one you use for Telegram).
Step 3: You will receive a confirmation code in your Telegram app. Enter it on the website.
Step 4: Click on "API Development Tools".
Step 5: Fill out the form:
- Application title: any name (e.g., "MT5 Copier")
- Short name: any name (for example, "mt5copier")
- Platform: Desktop
- Description: Leave it blank or write whatever you want.
Step 6: Click on "Create application".
Step 7: You will see your API ID (a number) and your API hash (a long string of text). Copy both and save them in a safe place. You will need them in the next step.
| ⚠️ Important:Never share your API ID or API hash with anyone. These credentials give you access to your Telegram account. |

Step 2: Configure the Windows application
Step 1: Download the attached application and save it anywhere on your computer. No installation is required.
Step 2: Double-click TelegramToMT5MultiChannelCopier.exe to run it.
| ℹ️ Note:Windows SmartScreen might display a warning because the app is not digitally signed. Click "More info" and then "Run anyway." The app is safe. |
Step 3: Enter your credentials in the top section of the application:
- API ID
- API Hash
- Phone number: your telephone number with international prefix (for example, +12345678910)
Step 4: Click "Sign in". The app will send a verification code to your Telegram account. Enter the code in the dialog box that appears.
If you have two-step verification enabled, the app will also ask for your Telegram password after the code.

Step 5: Once connected, the app displays the available channels in the ‘Channels’ tab. These are all the channels and groups you’re subscribed to on Telegram.
Step 6: Select the terminal to which you want the signals to be sent. Use the "Terminal" drop-down menu at the top:
- "Default (all MT4/MT5)".
- Or select a specific terminal (for example, "MT5 MetaTrader 5 - Exness") to send signals only to that one.
- In Custom Keywords, you can choose the words the app recognizes to trigger each action.
- Debug mode and log file In the Setup tab, the "Show raw incoming messages" checkbox dumps the full text of every incoming message to the log, useful for diagnosing unusual channel formats. The "Open log file" button next to it opens the persistent "app.log" file, helpful when sharing logs with support.
- Reading signals sent as images (OCR) Some channels publish signals as images instead of text. To read them, install Tesseract OCR (free, from https://github.com/UB-Mannheim/tesseract/wiki), then check the "Read image signals (OCR)" box in the Setup tab. Done — images will be parsed just like text messages.
Step 7: Click on the 'Channels' tab and select the channels you want to listen to. They will move to the "Listening" column on the right.
If a channel is a forum-style supergroup, each topic will appear as its own entry, displayed as "Channel name ▸ Topic name". You can select individual topics instead of the whole channel — each one will be tracked separately in the EA's Performance Panel.
Step 8: Click "Start". The application will begin listening for signals.
When a signal is detected, you will see it in the log at the bottom:
| [OK] BUY XAUUSD entry=2650.0 sl=2632.0 tp=2660.0 |
| The application will continue running and listening. You can minimize it to the taskbar. Do not close it; closing it will stop it from listening. |
Step 3: Install and configure the Expert Advisor
Step 1: After purchase, the EA appears in your terminal under Navigator → Expert Advisors → Market. Right-click and select 'Attach to chart' or drag onto any chart.
| Note: The EA appears in Navigator only if you are logged into your MQL5 account in your terminal with the same account that made the purchase. Go to Tools → Options → Community and verify your login. After login, restart the terminal so the Market list refreshes. |
Step 2: The chart symbol doesn't matter: the EA operates using signal symbols, not the chart symbol.
Step 3: On the Input Parameters tab, configure the settings:
Here is the list of parameters, explained.
GENERAL
| Read from shared Common folder (bool, default: true) If TRUE, the EA reads signals from the shared Common folder (used when you select "Default (all MT4/MT5)" in the app). If FALSE, the EA reads from the local Files folder of this terminal — "MQL4\Files" on MT4, "MQL5\Files" on MT5 (used when you select a specific terminal in the app dropdown). |
| Poll interval (seconds) (int, default: 5) How often the EA checks the signals file for new data. Lower values (1-3) = faster reaction, more CPU usage. Higher values (10-30) = less load, slightly slower reaction. |
| Magic number (ulong, default: 20260410) Unique identifier for this EA's trades. Change it if you run multiple instances of the EA so they don't interfere with each other. The default value is just an arbitrary number — it can be replaced with any integer. |
| Slippage (points) (int, default: 10) Maximum allowed slippage in points when opening a market order. If the price moves more than this during execution, the order is rejected. |
ORDER EXECUTION
| Use LIMIT/STOP when entry is far (bool, default: true) If enabled, when the signal's entry price is far from the current market, the EA opens a pending order (LIMIT/STOP) instead of skipping the signal. If disabled, signals with distant prices are converted to market orders at the current price. |
| Distance in pips to use pending (double, default: 5.0) Threshold in pips from the current price to decide between market/pending. If the signal's price is within N pips of current, open as market. If farther, open as pending order. |
| Split: one position per TP (bool, default: false) If enabled and the signal has multiple TPs, open ONE position per TP. Example: signal with TP1/TP2/TP3 → 3 positions with same SL, different TPs. If disabled, opens a single position with the first TP only. |
| 0 = all TPs; 1 = only TP1; etc. (int, default: 0) Limit how many TPs to use from the signal. 0 = use all available TPs. 1 = use only TP1. 2 = use TP1 and TP2. And so on. |
| Max TPs (safety limit) (int, default: 5) Absolute safety cap. Even if the signal has 10 TPs, the EA will never open more than this number. Prevents excessive order counts. |
| Skip signals without entry price (bool, default: false) If enabled, signals without an entry price are discarded. If disabled, they are executed as market orders at the current price. |
| Skip signals without SL (bool, default: false) If enabled, signals without SL are discarded completely. Useful for conservative traders or prop firm compliance rules. |
| SL in pips if signal has no SL (0 = disabled) (double, default: 0.0) If the signal has no SL, automatically apply one at this distance in pips from the entry price. 0 = disabled (the trade opens without SL). Example: 30 = SL placed 30 pips from entry. |
| Apply default TP if signal has invalid/no TP (bool, default: false) If enabled, applies an automatic TP when the signal has no TP, or when the TP comes in an invalid format (e.g. "TP: 100 pips" — which is a relative offset, not an absolute price). |
| Default TP in pips (used if UseDefaultTP=true) (double, default: 50.0) Distance in pips for the automatic TP (only applies if the option above is enabled). Applied to the entry price: BUY = entry + pips, SELL = entry - pips. |
MULTI-ENTRY (range / layered signals)
| How many prices to use (int, default: 1) When a signal has multiple entry prices (range "4594-96" or layered entries like "SECOND BUY LIMIT"), how many of those prices to use. 1 = use a single price (see the next setting to pick which one). 2 or more = open a separate order per price, up to this number. |
| If UseEntryCount=1, which price to pick (enum, default: ENTRY_AVERAGE) Only applies when the setting above is 1 and the signal has multiple prices. ENTRY_FIRST = use the first price in the range. ENTRY_LAST = use the last price in the range. ENTRY_AVERAGE = use the average of all prices. |
RISK MANAGEMENT
| Risk mode (enum, default: RISK_FIXED_LOT) How the lot size is calculated for each trade. RISK_FIXED_LOT = always the same lot size (see next setting). RISK_PERCENT = percentage of balance. Requires SL in the signal. RISK_FIXED_MONEY = fixed amount of money. Requires SL in the signal. RISK_FROM_SIGNAL = use the lot size sent by the signal provider. |
| Fixed lot (if Fixed lot mode) (double, default: 0.01) Lot size used when risk mode is RISK_FIXED_LOT. |
| % balance (if Percent mode) (double, default: 0.10) Percentage of balance to risk per trade (only if RiskMode = RISK_PERCENT). 0.10 = 0.10% of balance. 1.0 = 1% of balance. Requires SL in the signal to calculate the correct lot. |
| Money (if Fixed Money mode) (double, default: 50.0) Amount of money (in account currency) to risk per trade. Only applies when RiskMode = RISK_FIXED_MONEY. Requires SL in the signal. |
| Fallback lot if calc fails (double, default: 0.01) Backup lot size used when the risk calculation fails (e.g. percent mode but the signal has no SL). Prevents skipping the trade entirely. |
FILTERS
| Only trade these, e.g. XAUUSD,EURUSD (empty = all) (string, default: "") Comma-separated list of symbols to allow. Only these will be traded. Example: "XAUUSD,EURUSD,GBPUSD" Empty = allow all symbols. |
| Skip these, e.g. USDJPY,NAS100 (string, default: "") Comma-separated list of symbols to ignore. Signals on these are discarded. Example: "USDJPY,NAS100" |
| Only these channels, e.g. GoldVIP (empty = all) (string, default: "") Comma-separated list of allowed channels. Only signals from these channels will be traded. Partial match is supported. Example: "GoldVIP,Premium Signals" Empty = allow all channels. |
| Skip these channels, e.g. Scammer Channel (string, default: "") Channels to ignore. Signals from these are discarded. Useful to temporarily disable a channel without removing it from the app. |
BREAKEVEN
| Move SL to breakeven after X pips (bool, default: false) Enables automatic breakeven. When a position reaches a certain profit in pips, the SL is moved to the entry price so the trade can no longer lose. |
| Profit (pips) that triggers BE (double, default: 20.0) Profit in pips that triggers the move of SL to breakeven. Only applies when breakeven is enabled above. |
TRAILING STOP
| Enable trailing stop (bool, default: false) Enables automatic trailing stop. The SL follows the price at a fixed distance as the trade moves in favor. |
| Start trailing after this profit (pips) (double, default: 30.0) Minimum profit in pips to activate the trailing stop. Below this threshold, the trailing does nothing. |
| SL distance behind price (pips) (double, default: 15.0) Distance in pips maintained between the SL and the current price. Example: 15 = SL stays 15 pips below (BUY) or above (SELL) the market price. The SL only moves in favor, never against. |
| Close pendings of same signal when trailing triggers (bool, default: true) When the trailing stop activates for the first time on a position, automatically close any pending orders from the same channel and symbol. Prevents new entries from triggering while the trailing manages the current trade. |
| Don't set TP when trailing is enabled (bool, default: false) If enabled, positions are opened WITHOUT TP while trailing stop is active. Lets the trailing decide when to close. Recommended for pure trailing setups — without this, the channel's TP would close the position before the trailing has a chance to ride the move. |
PARTIAL CLOSE
| Enable partial close + BE (bool, default: false) Enables automatic partial close. When a position reaches a certain profit, a percentage of the position is closed to lock in profit, and the rest keeps running. |
| % to close (50 = half) (double, default: 50.0) Percentage of the position to close. 50 = close half of the lot. |
| Trigger at +N pips profit (double, default: 30.0) Profit in pips that triggers the partial close. |
| Move SL to BE after partial (bool, default: true) After the partial close, move the SL to the entry price on the remaining portion. This leaves the trade risk-free with the rest still open. |
PERFORMANCE PANEL
| Show the on-chart panel (bool, default: true) Shows or hides the performance panel rendered directly on the chart. The panel displays real-time statistics for every signal channel: number of trades, win rate, net P/L and total pips. It also includes interactive period buttons (Day / Week / Month / All) to switch the analysis window with one click. |
| Panel corner (enum, default: TOP_LEFT) Chart corner where the panel is anchored. Options: TOP_LEFT, TOP_RIGHT, BOTTOM_LEFT, BOTTOM_RIGHT. |
| History window (days) (int, default: 30) Number of days back to include in the statistics. Only trades closed within this window are counted. Larger values give more reliable statistics; smaller values reflect recent performance. |
| Refresh interval (seconds) (int, default: 30) Maximum interval between automatic refreshes. The panel also refreshes immediately whenever a position is opened or closed, so this is mostly a fallback. |
| Max channels shown (rest grouped as "Others") (int, default: 10) Maximum number of individual channel rows displayed. If you follow more channels than this, the remaining ones are aggregated into a single "Others" row to keep the panel compact. |
| Font size (px) (int, default: 9) Size of the panel text in pixels. Increase if the panel is hard to read on a high-resolution monitor. |
| Background color (color, default: Black) Background color of the panel card. Choose a color with good contrast against the panel text colors. |
| Header text color (color, default: DodgerBlue) Color used for the panel title text shown at the top of the card. |
| Total row color (color, default: Gold) Color used for the TOTAL row that aggregates all channels at the bottom of the panel. |
Step 4: Make sure AutoTrading is enabled at two levels:
- Global: the AutoTrading button in the top toolbar should be active, not stopped.
- Per EA: in the EA's Common tab when attaching it, check "Allow Algo Trading" (MT5) or "Allow live trading" (MT4).
If only one of these is enabled, the EA will not place any orders.
Step 5: Click OK. The EA is now running.
Check the Experts tab at the bottom of your terminal. You should see:
| [START] Telegram multi-channel copier to MT5 vX.XX has been started. |
When the application detects a signal and sends it, the EA will execute it and display:
| [SIGNAL #1] BUY XAUUSD entry=2650.00 sl=2632.00 tp=2660.00 lot=0.01 [EXEC] BUY XAUUSD lot=0.01 tp=2660.00 -> ticket=12345 |
Running on a VPS
Both the application and the Expert Advisor (EA) work on any Windows VPS. The setup is the same as on a local computer. Recommended VPS: any Windows VPS with at least 2 GB of RAM.
Make sure the application is always running on the VPS. If the VPS restarts, you'll need to restart the application manually (or add it to Windows startup).
In version 1.11 and later, it automatically starts listening.
Troubleshooting
The application displays "Connection Error" or cannot log in.
- Verify that your API ID and API hash are correct (without extra spaces).
- Check that your phone number includes the international prefix.
- Check your internet connection.
The EA does not open trades.
- Make sure AutoTrading is enabled (active button on your terminal's toolbar).
- Verify that UseCommonFolder matches what you selected in the application's drop-down menu.
- Check the Experts tab in your terminal to see the error messages.
- Make sure the application is running and showing signals in the log.
The EA cannot find the symbol.
- Your broker may use a different name. The EA attempts to resolve this automatically, but if it fails, consult your broker's symbol list.
- The Experts tab will display: [ERROR] The symbol 'XXX' is not found in this broker.
The signal is detected but the order is rejected.
- Check if your account has enough margin.
- Check if the SL or TP are too close to the current price (some brokers have a minimum stop distance).
- The Experts tab will show the specific reason for the rejection.
Windows SmartScreen blocks the application.
- Click "More information" and then "Run anyway." This happens because the application is not digitally signed. It's safe.
Updates
When a new version of the application is released, download it again from this page and replace the old .exe file. Your credentials and session are saved separately, so you won't need to log in again.
EA updates are distributed through the MQL5 marketplace. You will receive a notification in your terminal when an update is available.
Version history
All changes, improvements and fixes by release.
Version 1.15 LATESTReliability fixes and panel improvements
New features:
|
Version 1.13Performance tracking, image signals and advanced diagnostics Expert Advisor (MT4 / MT5) New features:
Application (TelegramToMT5MultiChannelCopier.exe) New features:
|
Version 1.12Improved interface Application (TelegramToMT5MultiChannelCopier.exe) New features:
|
Version 1.11Full automation for unattended setups Application (TelegramToMT5MultiChannelCopier.exe) New features:
|
Version 1.10Custom keywords, multi-entry orders, independent breakeven and improved trailing stop Application (TelegramToMT5MultiChannelCopier.exe) New features:
Expert Advisor (MT4 / MT5) New features:
Improvements:
|
Support
If you have any questions or need help, please use the comments section on the product page or contact me through my MQL5 profile.




