MetaTrader 4 & 5.
Connect a MetaTrader 4 or MetaTrader 5 server to SiftingIO over the FIX 4.4 API. A bridge runs the FIX session and pushes bid and ask into your platform, so every terminal sees the same aggregated fair price across crypto, forex, and commodities.
How it fits together
A MetaTrader terminal only speaks to its own server, so it cannot connect to a FIX feed on its own. The integration is server-side: a small bridge runs the SiftingIO FIX 4.4 session, then injects quotes into your platform through the MT4 DataFeed API or the MT5 Gateway API. The server fans those quotes out to every terminal, chart, and Expert Advisor.
What you'll need
The integration runs alongside an existing MetaTrader server. Before you start, line up:
- A licensed MetaTrader 4 or MetaTrader 5 server, with access to the DataFeed API (MT4) or the Gateway API (MT5). These are server-side interfaces available to platform operators.
- A SiftingIO
Enterpriseplan with FIX entitlement, which sets your concurrent sessions and symbols per session. - A FIX engine to run the session, for example QuickFIX or a compatible library in your language of choice.
- Static source IPs to allowlist, and the FIX 4.4 data dictionary.
Provision your FIX session
FIX access is provisioned per account. SiftingIO assigns your SenderCompID and TargetCompID, issues credentials and a TLS endpoint, and allowlists your source IPs. You then run a conformance pass on a UAT session before promotion to production.
Configure the FIX initiator
Point a FIX initiator at your provisioned endpoint over TLS. A QuickFIX session configuration looks like this, with the host and port you receive during onboarding:
[DEFAULT]ConnectionType=initiatorReconnectInterval=5HeartBtInt=30UseDataDictionary=YDataDictionary=spec/FIX44.xmlFileStorePath=storeFileLogPath=logStartTime=00:00:00EndTime=00:00:00 [SESSION]BeginString=FIX.4.4SenderCompID=YOUR_SENDER # assigned during onboardingTargetCompID=SIFTINGIOSocketConnectHost=<provisioned-host> # your TY3 / NY4 / LD4 endpointSocketConnectPort=<provisioned-port>SocketUseSSL=YConnect from an allowlisted source IP. The session uses BeginString=FIX.4.4 and TargetCompID=SIFTINGIO, with a 30 second heartbeat by default.
Log on and subscribe
Send a Logon (35=A), then a MarketDataRequest (35=V) listing the symbols you want to feed. Use SubscriptionRequestType (263) = 1 for snapshot plus updates and MarketDepth (264) = 1 for top of book.
8=FIX.4.4|35=A|49=YOUR_SENDER|56=SIFTINGIO|34=1|52=20260625-12:00:00.000|98=0|108=30|10=0008=FIX.4.4|35=V|49=YOUR_SENDER|56=SIFTINGIO|262=req-1|263=1|264=1|267=2|269=0|269=1|146=2|55=BTCUSD|55=XAUUSD|10=000You receive a MarketDataSnapshotFullRefresh (35=W) with the current book, then MarketDataIncrementalRefresh (35=X) messages for every change. Each entry carries an MDEntryType (269): 0 bid, 1 offer, and 2 trade for crypto.
Map symbols
SiftingIO sends canonical symbols in Symbol (55). MetaTrader symbol names are defined in your platform, so keep a map from the SiftingIO code to your configured symbol. Some examples:
- BTCUSD
- BTCUSD (crypto, bid / ask / trade)
- ETHUSD
- ETHUSD (crypto, bid / ask / trade)
- GBPUSD
- GBPUSD (forex, bid / ask)
- XAUUSD
- XAUUSD or GOLD (metals, bid / ask)
Request the static mapping sheet during onboarding, or discover the full tradable universe over FIX with a SecurityList (35=x → 35=y).
Translate ticks into quotes
Run the FIX session in the language your platform tooling already uses. In the bridge, read the MD entries off each refresh, maintain a top-of-book per symbol, and emit a bid and ask. Carry the last known opposite side when only one side updates.
// QuickFIX/n. FromApp fires for every inbound application message.public void FromApp(Message message, SessionID sessionID){ if (message.Header.GetString(Tags.MsgType) != MsgType.MARKET_DATA_INCREMENTAL_REFRESH) return; // snapshots, rejects and admin messages handled elsewhere int count = message.GetInt(Tags.NoMDEntries); var group = new MarketDataIncrementalRefresh.NoMDEntriesGroup(); for (int i = 1; i <= count; i++) { message.GetGroup(i, group); char entryType = group.GetChar(Tags.MDEntryType); // 269: '0' bid, '1' ask string symbol = group.GetString(Tags.Symbol); // 55: BTCUSD, XAUUSD decimal price = group.GetDecimal(Tags.MDEntryPx); // 270 if (!_symbolMap.TryGetValue(symbol, out string mt)) continue; // not enabled on this platform var side = _book[mt]; // carry the last known opposite side if (entryType == MDEntryType.BID) side.Bid = price; else if (entryType == MDEntryType.OFFER) side.Ask = price; _book[mt] = side; // Hand the tick to your MetaTrader feeder: // MT4 DataFeed API, or MT5 Gateway API. _feed.Quote(mt, side.Bid, side.Ask); }}Feed MetaTrader 4 or 5
The bridge hands each refreshed quote to the platform interface for your MetaTrader version. Both push bid and ask into the server, which broadcasts to terminals.
Push quotes through the DataFeed API. A feeder plugin runs alongside the server, brings external prices into the platform format, and the server passes them to client terminals in real time.
Push quotes through the Gateway API. A gateway connects the platform to the external source and streams live bid and ask into the server for distribution.
Both interfaces are server-side and licensed to platform operators by the MetaTrader vendor. The SiftingIO bridge sits in front of them: it owns the FIX session and the symbol mapping, and calls the platform interface with a clean bid and ask per symbol.
Verify in the terminal
Open a client terminal connected to your server and confirm the feed end to end:
- The mapped symbols appear in Market Watch and tick as incremental refreshes arrive.
- Charts build from the incoming quotes, and the spread matches the bid and ask on the session.
- An Expert Advisor reading
BidandAsksees live values, and prices stop on logout and resume on reconnect.
Notes and limits
- Market data only. The FIX feed never carries order entry, so it does not place, route, or fill trades.
- SiftingIO prices are an aggregated fair-price reference computed across sources, not any single venue’s quote. Treat them as reference values for charting and analytics.
- Forex and metals carry bid and ask only, with no trade entry. Crypto also includes a trade price.
- Sessions are continuous for crypto and aligned to market hours for forex and metals, so expect quiet periods when those markets are closed.
FAQ
- Can a MetaTrader terminal connect to SiftingIO directly over FIX?
No. A terminal only talks to its own server. The FIX session runs server-side in a bridge that injects quotes through the MT4 DataFeed API or the MT5 Gateway API, and the server distributes them to terminals.
- Is this a liquidity or execution bridge?
No. The FIX feed is market data only, with no order entry. It supplies prices for Market Watch, charts, and indicators. Order routing and execution stay with your platform.
- Does it support both MetaTrader 4 and MetaTrader 5?
Both. MT4 ingests external quotes through the DataFeed API and MT5 through the Gateway API. The same FIX session feeds either platform.
- Which symbols can I feed into MetaTrader?
Any symbol in your FIX entitlement across crypto, forex, and commodities, using SiftingIO canonical codes such as BTCUSD, GBPUSD, and XAUUSD. You map each one to the symbol name configured in your platform.
- Do forex and metals carry a trade price?
No. Those classes have no public trade tape, so SiftingIO sends bid and ask only. Drive the MetaTrader tick from those two sides, and do not treat a synthetic mid as an executed print.
- What do I need before I start?
A licensed MT4 or MT5 server with DataFeed or Gateway API access, a SiftingIO Enterprise FIX entitlement, allowlisted source IPs, and a FIX engine such as QuickFIX. Provisioning and conformance are covered in the FIX API docs.
Bring SiftingIO into MetaTrader
We provision your FIX session, run a conformance pass, and promote you to production. Reach out to start onboarding, or read the FIX reference first.