You have the ICT EA. You have decided Binance is where it runs. Then you open MetaTrader 5, go to File - Open an Account, type "Binance" into the broker search, and get nothing back. There is no Binance server in that list, and there never will be.
That is not a fault in your terminal. MT5's login dialog only lists brokers running a MetaTrader server. Binance is an exchange with an HTTP and WebSocket API and no MetaTrader server behind it, so something has to sit in the middle and translate. Assembling that middle piece is the whole job on this page.
This guide assumes the strategy questions are already settled — you know what an order block is, you know what a sweep looks like, you have already decided whether ICT is worth automating on crypto, and the 24/7 playbook for running ICT across crypto and forex is upstream of where you are standing. What follows is the mechanical chain, in the order you actually perform it: scope a key, open the endpoints, attach the EA, map the symbols, then prove the whole thing with one small order you can see land in two places.
The five links between your ICT EA and a Binance fill
1
Scoped API key
Create a Binance key that can read and trade but can never withdraw, and lock it to the IP the terminal runs on.
2
WebRequest allow-list
Type every Binance host the bridge calls into MT5's allowed-URL list, or the first request is refused before it leaves the machine.
3
Bridge EA on a chart
Attach the connector, paste key and secret into its Inputs, and enable algo trading at both the terminal and the chart level.
4
Symbol mapping
Point each chart at the exact Binance market it represents. Spot and futures share tickers but are different books.
5
Verified test order
Send the smallest legal order and match it in the MT5 Experts log and in Binance's own order history before scaling.
Each link is a separate failure point, and a chain that is four-fifths correct places no orders at all.
Key Takeaways
MT5 cannot log in to Binance, so a bridge or connector EA must sit between your ICT logic and the exchange — it is a file you install, not a setting you enable.
Scope the API key first: reading plus the one market you trade, withdrawals off, and an IP whitelist, which also stops the trading permission from expiring on its own.
Symbol mapping is where most setups break, because spot and perpetual share a ticker but are different books reached through different endpoints.
A backtest cannot validate connectivity: only one minimum-size order, matched field by field in the MT5 log and Binance's order history, proves the chain works.
Table of Contents (25 min read)Contents
What you need before you start
Five things, and one decision that changes everything after it.
A Binance account with the right market open. Spot works out of the box. USD-M or COIN-M futures need the futures account opened and its agreement accepted first — a key cannot be granted futures permission for an account that has none.
MetaTrader 5 on desktop. The mobile and web terminals cannot run an Expert Advisor at all, so the whole chain lives on a Windows machine running the full MetaTrader 5 client.
Your ICT EA file, compiled and already working on some chart. If the EA itself is still undecided, choosing which bot to install before following the steps is a separate decision worth making first, because the bridge you need depends on the answer.
A bridge or connector, unless your EA speaks the exchange API itself.
Somewhere the terminal can stay awake. Crypto never closes, so a laptop that sleeps at night is a strategy with holes in it. A VPS for the EA is the normal answer.
The decision is architecture, and it is worth naming before you start clicking. An ICT EA on Binance comes in one of two shapes:
A self-contained EA that signs its own requests to the exchange. Rarer, simpler to wire, and it collapses steps 3 and 4 into one dialog.
A plain MT5 EA plus a separate bridge, which is what most readers actually have. Your ICT logic trades an MT5 chart as if it were any other symbol; a second piece of MQL5 code makes that chart real and carries the resulting orders to Binance.
Everything below is written for shape two, because it has more moving parts. If you have shape one, skip the bridge-specific notes and read the rest as-is — the key, the endpoints, the symbol names and the test order are identical.
Why doesn't MT5 connect to Binance directly?
MT5 was built to talk to a broker's server over MetaQuotes' own protocol. Your terminal logs in, the server streams quotes, and orders travel back down the same pipe. Binance publishes something completely different: a broker API reached over ordinary HTTPS, where every private request carries a signature computed from your secret key, plus a set of WebSocket streams for live prices.
There is no shared protocol between those two worlds, and no adapter shipped inside MT5. So a piece of MQL5 code has to do three jobs on your behalf: pull Binance prices and write them into a custom symbol MT5 can chart, translate a trade request from your EA into a signed HTTPS call, and read the result back so the terminal reflects what happened at the exchange. That code is the MT4/MT5 connector or bridge, and it is a file you install, not a checkbox you tick.
Two consequences shape everything that follows.
Binance stays the source of truth. Your balance, your open position and your fills live at the exchange. MT5 is showing you a mirror the bridge maintains. When the two disagree, Binance is right and something in the chain is stale.
Every call goes through WebRequest(). That single MQL5 function is how an EA reaches the outside world, and it is deliberately locked down — which is exactly why the next two steps exist in the order they do.
sequenceDiagram
autonumber
participant EA as ICT EA
participant Bridge as Bridge EA
participant Binance as Binance API
Note over EA,Bridge: Both run inside one MT5 terminal
Binance-->>Bridge: Stream market prices
Bridge-->>EA: Update custom symbol chart
EA->>Bridge: Entry signal on the chart
Bridge->>Binance: Signed order request
alt Key, host and symbol all valid
Binance-->>Bridge: Fill confirmed
Bridge-->>EA: Position visible in MT5
else Any link misconfigured
Binance-->>Bridge: Rejection code
Bridge-->>EA: No trade, log entry only
end
Your ICT logic never touches Binance. It trades a chart, and the bridge is the only thing making that chart real.
MT5 and Binance speak different protocols — the bridge is a piece you install, not a setting you switch on.
Step 1 — Create a Binance API key scoped for this EA only
Start here, not last. This is the one step where a shortcut costs you the account rather than an afternoon.
In Binance, open Account - API Management and create a new key. Unless your bridge documents support for Ed25519 or RSA keys, choose the system-generated HMAC type, which is what almost every MQL5 bridge signs with. Name the key after the machine and the bot it serves — something like mt5-ict-vps01 — because one key per bot per terminal means revoking one thing never takes down everything else.
Then set the permissions deliberately:
Enable Reading stays on. The bridge needs it to read balance, positions and symbol filters.
Enable Spot & Margin Trading goes on only if the EA trades spot.
Enable Futures goes on only if the EA trades futures, and only after the futures account exists.
Enable Withdrawals stays off, permanently. Nothing a chart-driven EA does requires moving coins off the exchange, and Binance itself treats the permission as high-risk enough to demand an IP whitelist before it will even let you switch it on.
Now the part most guides bury in a footnote, which has a deadline attached. On a key with no IP whitelist, Binance time-limits the spot trading permission — currently 90 days from activation — and then automatically unchecks it. On a key locked to specific IP addresses, the permission does not expire. This is the single most common cause of the complaint "my EA worked for months and then quietly stopped placing orders." Restricting the key to your VPS's static IP fixes the security problem and the expiry problem in one action.
Copy the secret when it is shown. Binance displays it once, and a key whose secret you have lost is a key you delete and recreate. Store it where only you can read it, and know where the Delete button sits in API Management — revoking the key is your fastest kill switch if the machine is ever compromised.
API key security check — tick each one before you paste the key anywhere
0 / 6
The key is dedicated to this one EA on this one terminal, not reused from another bot, exchange tool or spreadsheet.
Withdrawal permission is off and stays off — no chart-driven EA needs to move coins off the exchange.
Only the market the EA actually trades is enabled: spot trading, or futures, never both by default.
The key is restricted to the terminal's IP address, which also stops the trading permission from silently expiring.
The secret is stored where only you can read it and has never appeared in a screenshot, a support chat or a shared VPS profile.
You know where the Delete button is in API Management, so the key can be revoked in seconds if the machine is compromised.
★
Checklist complete — you’re cleared to proceed.
Every item here is reversible in under a minute today and unrecoverable after a key leaks.
Step 2 — Allow the Binance endpoints in MT5's WebRequest list
MQL5's WebRequest() will only call hosts a human has typed into the terminal by hand. That list lives in Tools - Options - Expert Advisors - Allow WebRequest for listed URL, and it is the WebRequest whitelist every guide means when it says "whitelist the endpoints."
The failure mode is what makes this step so easy to miss. A host that is not on the list does not time out and does not produce a network error you would recognise. The call is refused locally, before a packet leaves the machine, and the EA usually reports something bland like "no connection" while continuing to run. In the log you get error 4014 or 4060 and nothing else. Everything looks installed; nothing is connected.
Three details save the retry loop:
Add the hosts your bridge documents, not the ones you guess. Different products call different subsets, and an unused entry is harmless while a missing one is fatal.
The port is inferred from the protocol — 443 for https://. Enter the scheme exactly; a typo in the hostname is indistinguishable from a host you never added.
WebRequest() is for EAs and scripts only. An indicator calling it gets error 4014 no matter what is on the list, and it does not execute in the Strategy Tester at all.
https://api.binance.com Spot REST endpoint
https://fapi.binance.com USD-M futures REST endpoint
https://dapi.binance.com COIN-M futures REST endpoint
https://www.binance.com some bridges read account data here
https://stream.binance.com spot market-data stream
https://fstream.binance.com USD-M futures stream
https://dstream.binance.com COIN-M futures stream
https://ws-api.binance.com spot WebSocket API
https://ws-fapi.binance.com USD-M futures WebSocket API
One host per line, spelled exactly as your bridge calls it. Binance.US builds use the equivalent .us hosts instead.
Add only what you need. A spot-only setup never touches fapi or dapi, and leaving them out keeps the list readable when you come back to debug it in three months. Restart the terminal after editing the list.
Step 3 — Attach your ICT EA and enter your API keys
Attachment order matters. The bridge has to exist and populate its custom symbols before your ICT EA has a chart worth reading, so the bridge goes on first and your strategy goes on second.
Enable algo trading twice. MT5 gates automated execution at two levels, and both must be open. The terminal-level toggle is the Algo Trading button in the toolbar. The chart-level algo trading permission sits in the EA's own properties dialog, on the Common tab, as Allow Algo Trading. Some bridges that ship a compiled library also need Allow DLL imports on the same tab. A terminal with the toolbar button green and the chart permission off will run your EA forever without ever sending anything.
Attach the bridge. Drag it onto any chart, open Inputs, and paste the API key and secret. Then set its mode. Most connectors distinguish a data-feed role — pull prices and history, create the custom symbols — from a trading role that also sends orders. Many people run two instances: one permanently on a spare chart as the feed, one on the chart they actually trade.
Confirm the handshake before going further. Open Toolbox - Experts and look for the bridge writing back something only Binance could have told it: your account balance, the symbol list, a server-time line. That first successful read is your proof that the key, the permissions and the WebRequest list are all correct together. If it fails here, go back to step 1 or 2 — nothing downstream will work.
Then attach your ICT EA to the bridge's chart. This is where the most expensive mistake happens. The custom symbol the bridge created is not the same object as your broker's own BTCUSD chart, even though the names look alike. Attach the EA to the wrong one and everything appears healthy: the logic fires, entries print in the log, trades open. They just open on a forex demo account instead of at Binance. Check the chart title carries the bridge's symbol before you enable anything.
Step 4 — Map your symbols and pick spot or futures
Binance names markets its own way, and the same ticker can mean three different books. BTCUSDT is a spot market. BTCUSDT is also a USD-M perpetual contract, reached through a different endpoint with its own margin model. BTCUSD_PERP is the COIN-M version, margined in the coin itself.
MT5 cannot hold two symbols with the same name, so bridges disambiguate with a suffix. One widely used connector appends .bins for spot, .binf for USD-M futures and .binc for COIN-M; yours may use a different scheme entirely. Read its documentation, then confirm the suffix on the chart title, because symbol mapping has to line up in three places at once: the bridge's symbol list, the chart your EA sits on, and the EA's own symbol input if it has one.
One ticker, three books. Suffixes are the bridge's invention and differ per product — these are one connector's; check yours, then read the chart title.
There is a second mismatch underneath the naming, and it bites ICT EAs specifically. A strategy written for forex tends to assume five-digit pricing, a fixed contract size and position sizes expressed in lots. Binance expresses quantity in the base asset, bounded per symbol by a step size and a minimum notional value. If your EA computes 0.01 lots, something in the chain has to turn that into a legal BTC quantity — either the bridge does it for you, or the order dies at the exchange with a filter error that looks like a bug in your logic.
Choosing spot or perpetual market during setup is therefore not just a naming decision. The depth of that trade-off belongs elsewhere; for this step you only need to know which one your EA was designed around, and map it there.
Step 5 — Place a test order before going live
Before anything else, discard one false comfort. The Strategy Tester will happily run your ICT EA over Binance-shaped history and hand you a clean report, and that report proves nothing about connectivity, because WebRequest() does not execute in the tester. A green backtest tells you the logic compiles and behaves. It cannot tell you that a single order can reach the exchange.
The only thing that can is one real order, sent deliberately:
Pick one liquid symbol you actually intend to trade, and confirm its suffix in the chart title.
Check the balance the bridge read back matches what Binance shows you in the browser.
Work out the smallest quantity that still clears the symbol's minimum notional — the crypto position size calculator is quicker than doing it by hand.
Send it manually first, through the bridge's own panel, before letting the EA anywhere near it.
Read both logs. The Experts tab shows what the bridge did; the Journal tab shows what the terminal did. A rejection often appears in only one of them.
Open Binance's order history and match every field: symbol, side, order type, quantity, price, status, fee. Matching four fields out of seven is not a pass.
Place and cancel a limit order, so you have proven the cancel path too, not just the entry path.
On futures, test the panel's close-position function while the test position is still open.
Only then enable the ICT EA, and let it take exactly one live signal at minimum size.
One discipline while you do this: do not repeat a request because the chart did not refresh instantly. Repeated calls hit Binance's rate limits, the bridge backs off, and restarting the EA to shake it loose usually extends the cooldown rather than clearing it.
When all nine pass, you have a working chain — not a proven strategy. Forward-test at minimum size for long enough to see the EA handle a weekend, a funding timestamp and at least one losing sequence before you size up.
A test order only counts when the same fill appears in the MT5 log and in Binance's own order history.
Troubleshooting: what to do when the EA won't connect or fill
Almost every failure in this chain announces itself as one of eight symptoms. The exchange's numeric codes are worth learning to read, because they tell you exactly which link broke — an order rejection carrying -1121 is a completely different problem from one carrying -2015, even though both look like "it didn't trade."
What you see
What it almost always means
What to do
EA runs, but the log shows no request leaving at all
The host is missing from the WebRequest list, or spelled differently than the bridge calls it. Error 4014 or 4060.
Re-copy each host exactly as documented, including the https:// scheme, then restart the terminal.
Right key, wrong permission set — or the request arrived from an IP the key does not allow.
Confirm the trading permission is still ticked, and add the machine's current public IP to the whitelist.
Binance replies -1021
The machine's clock has drifted from exchange server time, so every signed request falls outside the receive window.
Sync the operating system clock to an internet time server on the VPS, then retry.
Binance replies -1121
The symbol string reaching Binance is not a market on the book the request went to — usually a spot name sent to a futures endpoint, or a missing suffix.
Check the suffix in the chart title and confirm the bridge instance is in the matching market mode.
Order rejected on quantity or notional
The size your EA computed sits below the symbol's minimum notional, or off its step size.
Raise the test size above the minimum and round the quantity to the symbol's step before resending.
It worked for weeks, then quietly stopped trading
The trading permission on a key with no IP whitelist reached its expiry and was unchecked automatically.
Re-enable the permission in API Management, then add an IP whitelist so it cannot happen again.
Prices update, but no trade ever fires
The bridge instance is in data-feed mode, or the ICT EA is attached to a broker chart instead of the bridge's custom symbol.
Switch the instance to trading mode and re-attach the EA to the suffixed symbol.
Algo Trading is on, but the EA icon shows a sad face
The per-chart algo permission is off in the EA's own properties, independently of the toolbar button.
Open the EA properties, go to the Common tab, and tick Allow Algo Trading.
Read the code first: it names the broken link before you start changing settings at random.
Two of these deserve a note. The -1021 case is clock drift, and on a VPS it can appear weeks after a clean install, so it is worth a scheduled time sync rather than a one-off fix. The expiry case is the cruellest, because nothing is broken — the EA is healthy, the bridge is connected, and the exchange is simply refusing an order from a key whose permission lapsed while you were not looking.
Another option: a ready-made MT5-Binance connector
By now the amount of assembly is clear: a key with exactly the right permissions, a host list typed into the terminal by hand, one or two EA instances with different roles, a suffix scheme you have to learn, and a symbol name that must agree in three places.
We publish a free MT4/MT5 crypto connector, and Binance is one of the builds that exists as a downloadable file today. It solves the market-data half of this chain: it renders Binance spot and futures inside MT5 as chartable symbols your ICT EA can read natively, off a read-only API key — so the highest-risk permission in this entire guide is one you never have to grant. It comes with a free lifetime license.
Be clear about what it is not. It carries no ICT logic whatsoever: order blocks, structure shifts and entry models all still come from your own EA. It is a feed and workspace layer rather than the order-routing half, so if what you need is fully automated execution into Binance, the trading path above still applies. And not every exchange on the list has a downloadable build yet.
If the data side is the piece you are missing, the Binance MT5 connector page carries the file and the install walkthrough.
Key takeaways
The setup that fails is almost never the one where the ICT logic was wrong. It is the one where a host was missing from a list, a suffix pointed at the wrong book, or a permission expired on a key nobody had touched in months.
The order of operations is the safety mechanism: scope the key before anything is connected, and prove the chain with a real order before the EA is allowed to place one.
Binance is the source of truth. When MT5 and the exchange disagree about a position, believe the exchange and look for what went stale.
An IP-whitelisted key is not just safer, it is the version that keeps working — an unrestricted key's trading permission has an expiry date built in.
Backtests cannot validate connectivity, and no amount of green in the Strategy Tester substitutes for one small order matched field by field in two places.
FAQ
Can I run an ICT EA on Binance without MetaTrader at all?
Yes, but it stops being the same product. An EA is an MQL4 or MQL5 program — outside MetaTrader it cannot run. Automating the same ICT rules directly against Binance means reimplementing them in something that speaks the exchange API natively, typically a Python or Node script, which trades your development time for the removal of the bridge. Everything in this guide about key scoping, symbol naming and test orders still applies; only the terminal disappears.
Do I really need a VPS for this?
If the EA is meant to trade unattended, yes. Crypto has no session close, so a desktop that sleeps, updates or drops its connection overnight will miss setups and, worse, can leave a position open with no supervising process. A modest Windows VPS near a Binance endpoint is the standard arrangement, and it has a second benefit here: a static IP you can pin the API key to, which is what stops the trading permission from expiring.
Can I test the whole setup on Binance's testnet first?
Sometimes — it depends entirely on whether your bridge supports pointing at a testnet host. Binance runs separate spot and futures test environments with their own keys, and if your connector exposes a testnet toggle you can dry-run the full chain with no real capital. You would need to add the testnet hosts to the WebRequest list as well. Many bridges do not offer it, in which case a minimum-size order on the live exchange is the practical equivalent, and cheaper than the alternative of finding out later.
Why does my backtest work perfectly but live trading does nothing?
Because they exercise completely different code paths. The Strategy Tester runs your ICT logic against saved bars inside the terminal and never makes a network call — WebRequest() is disabled there by design. Live trading depends on the key, the permissions, the WebRequest list, the symbol mapping and the exchange's filters, none of which the tester touches. A clean backtest and a silent live account are entirely consistent with each other, and the difference is always in the chain, not the strategy.
Does the bridge need withdrawal permission to close positions?
No, and any tool that asks for it should be treated as a red flag. Closing a position, cancelling an order and reading a balance all sit under trading and reading permissions. Withdrawal is a separate right that moves assets off the exchange entirely, and no charting or execution bridge has a legitimate reason to hold it. If a product's setup instructions include enabling withdrawals, that is a reason to stop, not a step to follow.
What happens to my open trades if MT5 or the bridge crashes?
The position stays open, because it lives at Binance and not in your terminal. What disappears is any protective logic that existed only inside the EA's memory — a stop it intended to send when price reached a level, a time-based exit, a trailing rule. Protection that was submitted to the exchange as a resting order survives the crash; protection that was merely planned does not. That asymmetry is the strongest argument for having your EA place exchange-side stop orders rather than managing exits in code alone.
Sources & Further Reading
Want to go deeper? These independent, authoritative sources shaped this guide — each one is worth reading in full:
The Crypto Desk is the SignalBots editorial team behind our digital-asset coverage. We research and write the guides and explainers on spot and perpetuals, exchange mechanics, funding rates and the 24/7 structure that sets crypto apart from every other market.
Want to use the bot without paying? Message our 24/7 support team via Telegram or Viber. Our experts will guide you step-by-step on how to unlock your free lifetime license through our exclusive broker partnership program.
Discussions 0
Leave a comment