You can't drag an MT4 EA into MT5 and have it work. Not directly, not with a plugin, not with a trick. MT4 runs MQL4. MT5 runs MQL5. They're different languages, and the compiled .ex4 file is locked to MT4's runtime.
That's the bad news. The good news: if you have the source code (.mq4 file), there are ways to get it running on MT5 — some of them surprisingly quick. If you don't have the source code, your options are limited but not zero.
This guide starts with a decision tree so you can figure out which path applies to you, then walks through each one.
First question: do you have the source code?
Everything depends on this. Open your MetaEditor or the folder where the EA lives and look for the file extension.
| What you have | File extension | Can you convert? |
|---|---|---|
| Source code | .mq4 | Yes — four methods below |
| Compiled file only | .ex4 | No — read the "no source code" section |
| Both | .mq4 + .ex4 | Yes — use the .mq4 file |
If you bought the EA from a vendor and only received the .ex4 file, you don't have the source code. That file is compiled and encrypted — there's no legitimate way to extract the MQL4 code from it. Anyone offering to "decompile" .ex4 files is selling you something between useless and illegal.
If you don't have the source code
Three options, ranked by likelihood of success:
1. Ask the vendor for an MT5 version. Many EA sellers already have one or are working on it. Check their website, MQL5 Market page, or just email them. This is the fastest path if it exists.
2. Ask the vendor for the .mq4 source code. Some vendors will provide it, especially if you've bought a license. Once you have the .mq4 file, you can convert it yourself using the methods below. Worth asking even if you don't expect a yes.
3. Keep running it on MT4. MT4 still works. Your broker almost certainly still supports it. If the EA makes money on MT4, there's no urgent reason to move it to MT5 unless your broker is dropping MT4 support (some are) or you need <a href="/en/classroom/mt4-vs-mt5">MT5-specific features</a> like the multi-threaded backtester or more timeframes.
What about hiring a freelancer to rewrite it? That's an option, but you'd need to describe the strategy logic in detail — without the source code, you're essentially commissioning a new EA, not converting one. Budget $200-$1,000+ depending on complexity. The MQL5 <a href="https://www.mql5.com/en/job" target="_blank" rel="noopener">Freelance section</a> is where most of these jobs happen.
If you have the source code: four methods
From fastest to most thorough.
Method 1: Compatibility library (quickest)
A compatibility library wraps MQL4 functions so they work in the MQL5 environment. You add one line to your code, recompile in MetaEditor 5, and — if the EA is straightforward — it just works.
A popular option is <a href="https://www.mql5.com/en/code/53546" target="_blank" rel="noopener">MT5Compat.mqh</a> from MQL5 CodeBase (5-star rating, 11,000+ views). It covers the functions that trip up most conversions: Ask, Bid, Close, Open, High, Low, Digits, Point, plus iClose(), iOpen(), iHigh(), iLow() data retrieval functions.
Steps:
- Download MT5Compat.mqh and place it in your MT5's
MQL5\Include\folder - Open your .mq4 file in MetaEditor 5
- Add
#include <MT5Compat.mqh>at the top of the file - Rename the file from .mq4 to .mq5
- Hit F7 to compile
- Fix any remaining errors (see the difference table below)
We've converted a handful of simple EAs this way internally. Trend-following EAs with basic OrderSend() logic usually compile on the first or second try. EAs that do heavy order management — looping through OrdersTotal(), checking OrderMagicNumber(), modifying multiple orders — will need more manual work on the trading functions because MQL5 handles positions completely differently.
When this works: simple EAs with standard indicator calls and basic order logic. When it doesn't: EAs with complex order management, custom indicators, or DLL calls.
Method 2: AI-assisted conversion (the 2026 option)
If you have Claude Code or Codex installed, this is probably the fastest path. These tools can read your .mq4 file directly, convert it, write the .mq5 output, and iteratively fix compile errors — all without you copying a single line.
Best approach: Claude Code or Codex
Point the tool at your source file and tell it what to do:
Convert MQL5/Experts/MyEA.mq4 to MQL5. Use CTrade for orders,
indicator handles with CopyBuffer, keep strategy logic identical.
Save as MQL5/Experts/MyEA.mq5 and compile with MetaEditor.
The tool reads the file, rewrites it, and can even call MetaEditor to compile and fix errors in a loop. For a 300-line trend EA, we've seen this go from .mq4 to clean compile in under 10 minutes.
Cross-check for safety: have one tool convert, the other review. For example, convert with Codex, then ask Claude Code to audit the output for logic changes — especially trade direction, lot calculations, and stop-loss math. Or the other way around. Two models catching each other's mistakes is significantly more reliable than trusting either one alone.
Fallback: paste into a chat AI
No CLI tools? You can still paste the .mq4 contents into Claude or ChatGPT in the browser and ask for a conversion. It works, but you'll be copying code back and forth manually and feeding error messages yourself. Slower, more error-prone, and you lose the automated compile-fix loop. Fine for a quick one-off, not ideal for anything complex.
What AI handles well: the mechanical syntax changes — start() → OnTick(), OrderSend() → CTrade, iMA() → handle + CopyBuffer(), predefined arrays → CopyClose(). These are pattern-based transformations that AI does faster and more consistently than manual work.
What AI gets wrong: subtle logic issues that compile fine but trade wrong. A flipped order direction. A stop-loss calculated in points instead of pips. A lot size formula that worked in MQL4's 4-digit pricing but breaks on MQL5's 5-digit quotes. These won't throw compile errors — they'll show up as unexpected trades. That's why the cross-check step matters, and why you still need to run the testing checklist below.
When this works: most EAs with standard logic — trend followers, breakout systems, indicator-based entries. When it doesn't: EAs with DLL calls, Windows API hooks, or unusual third-party libraries that the models haven't seen enough of to convert reliably.
Method 3: Conditional compilation (best for maintaining both versions)
If you want one codebase that compiles on both MT4 and MT5, use preprocessor directives to isolate the version-specific parts.
#ifdef __MQL5__
// MQL5-specific code here
#else
// MQL4 code here
#endif
The <a href="https://github.com/mazmazz/Mql4ToMql5" target="_blank" rel="noopener">Mql4ToMql5 guide on GitHub</a> introduces this approach with cross-compilation examples. The key insight: most of your EA's logic — the strategy, the indicator calculations, the risk management — is platform-agnostic. Only the order execution layer and a few function signatures actually differ.
This is the method we use at FXTool when we maintain EAs for both platforms. The strategy code stays universal, and we wrap the trading functions in #ifdef blocks. It's more initial work than Method 1 but pays off if you plan to run the EA on both MT4 and MT5 going forward.
When to use this: you want to maintain one codebase and update both versions together.
Method 4: Full rewrite to MQL5 (most thorough)
Rewrite the EA from scratch in MQL5, using the MQL4 version as a reference. This gives you the cleanest result — proper MQL5 architecture, access to all MT5 features, no compatibility layer overhead.
It also takes the most time. For a moderately complex EA (200-500 lines), expect a few hours to a full day. For a complex EA with multiple order types, custom indicators, and DLL calls, it could be a multi-day project.
When this makes sense: the EA is your main money-maker, you're done with MT4, or you need MT5-specific features like <a href="/en/classroom/mt5-build-5800-update-ea-impact">ONNX integration</a>, the multi-threaded strategy tester, or the economic calendar API.
MQL4 → MQL5 key differences
If you're doing Method 2 or 3, these are the changes that matter. Save this table.
| What changed | MQL4 | MQL5 |
|---|---|---|
| Main event handler | start() | OnTick() |
| Init/deinit | init() / deinit() | OnInit() / OnDeinit() |
| Price access | Ask, Bid (global) | SymbolInfoDouble(_Symbol, SYMBOL_ASK) |
| Order sending | OrderSend(Symbol, OP_BUY, lots, Ask, slip, sl, tp) | CTrade trade; trade.Buy(lots, _Symbol, ask, sl, tp) (where ask = SymbolInfoDouble(...)) or OrderSend(request, result) with MqlTradeRequest struct |
| Order types | OP_BUY, OP_SELL, OP_BUYLIMIT... | ORDER_TYPE_BUY, ORDER_TYPE_SELL... |
| Looping orders | OrdersTotal() + OrderSelect() | PositionsTotal() + PositionGetTicket() for open positions; OrdersTotal() for pending only |
| Position model | Hedging only | Hedging or Netting (check account setting) |
| Indicator calls | iMA(Symbol, 0, 14, 0, MODE_SMA, PRICE_CLOSE, 0) | Create handle with iMA(), then read with CopyBuffer() |
| Timeframe constants | PERIOD_M1, PERIOD_H1 | Same names, but more available (M2, M3, M6, H2, etc.) |
| Predefined arrays | Close[], Open[], High[], Low[] | No global equivalents — use CopyClose(), CopyOpen() etc. (single-bar: iClose(), iOpen(); indicators get arrays via OnCalculate()) |
The biggest conceptual shift is order management. In MQL4, every order has a ticket and you loop through all orders with OrdersTotal(). In MQL5, open positions and pending orders are separate pools. If your EA does anything beyond simple open-and-close — like modifying stops on existing orders, managing grids, or tracking order history — this is where you'll spend most of your conversion time.
For a full walkthrough of each difference, the <a href="https://github.com/mazmazz/Mql4ToMql5" target="_blank" rel="noopener">Mql4ToMql5 GitHub guide</a> is the best free resource. For official documentation, the <a href="https://www.mql5.com/en/docs/migration" target="_blank" rel="noopener">MQL5 Migration Guide</a> covers the major differences; use the full <a href="https://www.mql5.com/en/docs" target="_blank" rel="noopener">MQL5 Reference</a> for individual functions.
After converting: test before you trust
A conversion that compiles doesn't mean it trades the same. We've seen EAs pass compilation with zero errors and then produce completely different results on MT5 because of subtle differences in how the two platforms handle ticks, spreads, or order fills.
Testing checklist:
- Backtest on the same period — run the MT4 version on MT4 and the MT5 version on MT5 using the same symbol, timeframe, and date range. Compare total trades, net profit, and max drawdown. They won't be identical (tick data differs between platforms), but they should be close. If the MT5 version takes 200 trades where MT4 took 50, something in the logic converted wrong
- Check order direction — make sure buy and sell signals didn't get flipped. Sounds obvious, but the
OP_BUY/ORDER_TYPE_BUYmapping can go wrong in the indicator logic - Verify lot sizing — if the EA uses dynamic lot calculations, test with the <a href="/en/tools/position-size-calculator">position size calculator</a> to sanity-check the numbers
- Run on demo first — put the converted EA on an MT5 demo account for at least a week. Watch for <a href="/en/classroom/mt4-mt5-error-guide">error codes</a> in the Experts tab
- Start small on live — when you go live, use minimum lot size for the first few days. The <a href="/en/classroom/backtest-vs-live-trading-gap">backtest-to-live gap</a> is real and conversion adds another layer of uncertainty
FAQ
Can I use an .ex4 file on MT5?
No. The .ex4 file is compiled for the MT4 runtime and cannot be opened, decompiled, or executed in MT5. You need the .mq4 source code to convert, or an MT5 version from the vendor.
Will my converted EA produce the same results?
Close, but not identical. MT4 and MT5 use different tick generation methods in the backtester, handle spreads differently, and have different order-fill policies. The strategy logic will be the same, but individual trade entries and exits may differ by a few pips. Run side-by-side backtests to verify the behavior is consistent.
Do I need to know MQL5 to convert?
For Method 1 (compatibility library), barely — it's mostly copy, include, compile, fix errors. For Method 2 (AI conversion), you don't need to know MQL5 — the AI handles the syntax, but you need to review the output. For Method 3 (conditional compilation), you need a basic understanding of both languages. For Method 4 (full rewrite), you need solid MQL5 knowledge or a willingness to learn. The <a href="https://www.mql5.com/en/docs" target="_blank" rel="noopener">MQL5 documentation</a> is thorough if dry.
My EA uses custom indicators. Can those be converted too?
Yes, but they need separate conversion. Convert the indicator first, then update the EA to use the MT5 version. The biggest change: in MQL4, iCustom() returns a value directly. In MQL5, iCustom() returns a handle, and you read values with CopyBuffer(). It's two steps instead of one, but the logic is the same.
Should I move to MT5 at all?
If your EA makes money on MT4 and your broker still supports it, there's no rush. Move when you need something MT5 offers — more timeframes, the built-in economic calendar, ONNX model integration, or faster backtesting. We wrote a full <a href="/en/classroom/mt4-vs-mt5">MT4 vs MT5 comparison</a> if you want to weigh the tradeoffs.
How long does a typical conversion take?
Method 1 (compatibility library): 15 minutes to a few hours, depending on how many errors the compiler throws. Method 2 (AI conversion): 20 minutes to a few hours — fastest for most people. Method 3 (conditional compilation): a few hours to a day for a moderately complex EA. Method 4 (full rewrite): a day to a week. DLL-heavy EAs or those with complex order management (grid, martingale, multi-pair) take the longest.
Looking for MT5-native EAs? All <a href="/en/products">FXTool EAs</a> are built natively for MT5 — no conversion needed.
About the author: The FXTool team builds and tests MetaTrader trading tools daily. We maintain both MT4 and MT5 codebases and have hands-on experience with the conversion process described in this guide.
Technical Audit Report (Codex)
Audit date: 2026-06-12. Sources checked: the official MQL5 migration guide, MT5Compat.mqh CodeBase page, Mql4ToMql5 GitHub guide, official MQL5 OrderSend documentation, official MQL5 event handler documentation, plus official MQL4/MQL5 reference pages where code-level signatures required confirmation.
-
✅ Claim:
.ex4files cannot run on MT5 at all. Correct..ex4is the compiled MT4 program format for the MQL4 runtime; MT5 programs are compiled for the MQL5/MT5 runtime (.ex5). The MQL5 migration guide confirms MQL5 is a separate language/runtime with changed functions and event handlers. Source: MQL5 migration guide. -
✅ Claim: MT5Compat.mqh has a 5-star rating and 11,000+ views on MQL5 CodeBase. Verified at audit time. The CodeBase page shows
Views: 11766andRating: (5), so the article's “5-star rating, 11,000+ views” wording is accurate as of 2026-06-12. Source: MT5Compat.mqh CodeBase page. -
⚠️ Claim: MT5Compat supports
Ask,Bid,Close,Open,High,Low,Digits,Point,iClose(),iOpen(),iHigh(),iLow(). Partially correct, but the wording should be more precise. The CodeBase page explicitly lists replacements forAsk→GetAsk(),Bid→GetBid(),Close[x]→iClose(...),Open[x]→iOpen(...),Low[x]→iLow(...), andHigh[x]→iHigh(...). It also listsMarketInfo(symbol, MODE_DIGITS)→GetSymbolDigits(symbol)andMarketInfo(symbol, MODE_POINT)→GetSymbolPoint(symbol), not directDigits/Pointreplacements. Source: MT5Compat.mqh CodeBase page. Related MQL5 note: MQL5 has_Digitsand_Point, whileAskandBidare not predefined variables. Source: MQL5 migration guide. -
✅ Claim: MQL4
start()maps to MQL5OnTick()for EAs. Correct for Expert Advisors. The official migration guide saysstart()is replaced byOnTick()in EAs,OnCalculate()in indicators, andOnStart()in scripts. Source: MQL5 migration guide, MQL5 event handlers. -
✅ Claim: MQL4
init()/deinit()map to MQL5OnInit()/OnDeinit(). Correct. The official migration guide gives this correspondence and explains thatOnInit()andOnDeinit()perform the initialization/deinitialization roles. Source: MQL5 migration guide, MQL5 event handlers. -
✅ Claim: MQL4
Ask/Bidare global/predefined variables; MQL5 requiresSymbolInfoDouble(). Correct with one nuance. MQL4 documentsAskas a predefined variable and similarly providesBid. MQL5 does not have predefinedAsk/Bid;SymbolInfoDouble(_Symbol, SYMBOL_ASK)andSymbolInfoDouble(_Symbol, SYMBOL_BID)are valid. For last tick data, the MQL5 docs also recommendSymbolInfoTick()as an efficient alternative. Sources: MQL4 Ask, MQL5 migration guide, MQL5 SymbolInfoDouble. -
⚠️ Claim: MQL4
OrderSendsignature differs from MQL5CTradeorMqlTradeRequest/MqlTradeResult. Conceptually correct, but the table's MQL5CTrade.Buy(lots, _Symbol, Ask, sl, tp)example is not valid MQL5 syntax. Official MQL4OrderSend()takes scalar parameters and returns an order ticket or-1; official MQL5OrderSend()takesMqlTradeRequest& requestandMqlTradeResult& resultand returnsbool.CTrade::Buy()is a method of aCTradeobject, so code should look like#include <Trade/Trade.mqh>,CTrade trade;, thentrade.Buy(lots, _Symbol, 0.0, sl, tp);ortrade.Buy(lots, _Symbol, ask, sl, tp);after definingask.Askis not a predefined MQL5 variable. Sources: MQL4 OrderSend, MQL5 OrderSend, MQL5 CTrade Buy, MQL5 SymbolInfoDouble. -
✅ Claim: MQL4
OrdersTotal()loops all current orders; MQL5 separates positions from pending orders. Correct. MQL4OrdersTotal()returns the total number of market and pending orders in the current trade pool. In MQL5,PositionsTotal()returns open positions, whileOrdersTotal()returns current active pending orders; positions and orders are separate concepts. Sources: MQL4 OrdersTotal, MQL4 OrderSelect, MQL5 PositionsTotal, MQL5 OrdersTotal. -
✅ Claim: MQL4
iMA()returns the value directly; MQL5iMA()returns a handle and values are read withCopyBuffer(). Correct. MQL4iMA()returns adoubleindicator value. MQL5iMA()returns an indicator handle; indicator buffer values are retrieved withCopyBuffer(). Sources: MQL4 iMA, MQL5 iMA, MQL5 CopyBuffer. -
⚠️ Claim: MQL4 has predefined arrays
Close[]/Open[]; MQL5 requiresCopyClose()/CopyOpen(). Mostly correct for EA/script code that needs full arrays, but too broad if read literally. MQL4 has predefined timeseries arrays such asOpen[],High[],Low[], andClose[]. MQL5 does not have those global predefined timeseries arrays, andCopyClose()/CopyOpen()are the standard way to copy series into user arrays. However, MQL5 also providesiClose()/iOpen()for single-bar values, and custom indicators receive timeseries arrays throughOnCalculate(). Sources: MQL4 Close[], MQL5 migration guide, MQL5 CopyClose, MQL5 iClose, MQL5 event handlers / OnCalculate. -
✅ Claim: MQL4
iCustom()returns a value directly; MQL5iCustom()returns a handle and values are read withCopyBuffer(). Correct. MQL4iCustom()returns adoublevalue from the selected custom indicator buffer/shift. MQL5iCustom()returns an indicator handle; buffer values must be obtained withCopyBuffer(). Sources: MQL4 iCustom, MQL5 iCustom, MQL5 CopyBuffer. -
⚠️ Claim: MT4 is hedging-only; MT5 supports hedging and netting. Mostly correct, but the terminology needs nuance. MT4 uses an order-based model where multiple opposite market orders for the same symbol can coexist, which behaves like hedging. MT5 has explicit account margin/position accounting modes, including retail netting, exchange, and retail hedging. The accurate statement is: MT4 does not have MT5-style netting account mode; MT5 accounts may be netting or hedging depending on broker/account settings. Sources: MQL5 account margin modes, MQL5 PositionsTotal, MQL5 OrdersTotal.
-
⚠️ Claim: Conversion time estimates are Method 1 = 15 minutes to hours, Method 2 = hours to a day, Method 3 = day to week. Plausible as practical estimates, but not verifiable from the cited documentation. Official docs and the GitHub guide explain technical differences and conversion approaches, not expected elapsed time. Source checked: MQL5 migration guide, Mql4ToMql5 GitHub guide.
-
⚠️ Claim: Freelancer rewrite/conversion budget is
$200-$1,000+. Plausible but unverifiable from the specified sources. The MQL5 Freelance marketplace exists, but the article's cost range depends on project complexity, developer rates, and market conditions; the cited sources do not establish this range. Source checked: MQL5 Freelance. -
⚠️ Claim: The difference table and code examples are technically accurate. Mostly correct, but with several code-level corrections:
- ❌ The table row
CTrade.Buy(lots, _Symbol, Ask, sl, tp)is invalid MQL5 style. Use aCTradeobject, e.g.CTrade trade; trade.Buy(lots, _Symbol, 0.0, sl, tp);, or defineask = SymbolInfoDouble(_Symbol, SYMBOL_ASK)first. Sources: MQL5 CTrade Buy, MQL5 SymbolInfoDouble. - ✅ The
OrderSend(request, result)part is correct for MQL5, but readers should know thattrueonly means the request passed basic checks / was accepted for processing; execution result must be checked inMqlTradeResult.retcode. Source: MQL5 OrderSend. - ⚠️ The “Price access” row is correct for
Ask/Bid, but forDigitsandPoint, MQL5 also has_Digitsand_Point; symbol-specific values can be obtained withSymbolInfoInteger(..., SYMBOL_DIGITS)andSymbolInfoDouble(..., SYMBOL_POINT). Sources: MQL5 migration guide, MQL5 Symbol Properties. - ✅ The “Order types” row is correct: MQL4 uses constants such as
OP_BUY; MQL5 usesENUM_ORDER_TYPEvalues such asORDER_TYPE_BUY. Sources: MQL4 OrderSend, MQL5 Order Properties. - ⚠️ The “Timeframe constants” row is directionally correct for standard chart periods in MT5, but MQL4 documentation also defines non-standard timeframe constants such as
PERIOD_M2andPERIOD_H2for offline charts / MQL5 compatibility. MT5 treats them as standard predefined chart timeframes. Sources: MQL4 Chart Timeframes, MQL5 Chart Timeframes. - ⚠️ The Method 1 statement “add one include line and it just works” is too optimistic. The MT5Compat page itself says developers need to replace some MT4 calls with compatible replacements such as
GetAsk(),GetBid(),GetSymbolDigits(), etc. Some simple EAs may compile quickly, but this should not be presented as guaranteed. Source: MT5Compat.mqh CodeBase page.
Additional technical notes:
- ✅ The article is correct that MQL5 removed the old
init(),start(), anddeinit()special functions and uses event handlers instead. Source: MQL5 migration guide. - ✅ The article is correct that MQL5 has no predefined global
Open[],High[],Low[],Close[],Volume[], andTime[]arrays in the same way as MQL4. Source: MQL5 migration guide. - ✅ The article is correct that complex order management is usually the hardest part of conversion, because MQL5 distinguishes orders, deals, and positions, and because netting vs hedging changes position behavior. Sources: MQL5 OrdersTotal, MQL5 PositionsTotal, MQL5 account margin modes.
- ⚠️ The article's internal claims such as “we've converted a handful of simple EAs this way internally,” “FXTool uses this method,” “FXTool builds 50+ EAs,” and “all FXTool EAs ship as native MT5 with source code included” are not verifiable from the supplied technical sources. They may be true, but they should be treated as publisher claims, not independently verified technical facts.
Author response to audit
Accepted and fixed:
-
#7 CTrade.Buy syntax — Fixed. Changed
CTrade.Buy(lots, _Symbol, Ask, sl, tp)toCTrade trade; trade.Buy(lots, _Symbol, ask, sl, tp)with note thataskmust come fromSymbolInfoDouble(). Good catch —Askis not a global in MQL5 andCTradeneeds instantiation. -
#10 Predefined arrays — Fixed. Added
iClose()/iOpen()for single-bar access andOnCalculate()for custom indicators. The original wording was too absolute.
Acknowledged but not changing:
-
#3 MT5Compat function names — Codex is technically right that the library uses wrapper names like
GetAsk()rather than directAskreplacement. But the article's audience is people deciding whether to try the library, not people reading its API docs. Saying “it covers Ask, Bid, Close...” communicates what the library does; the exact function names are in the library's documentation. No change needed for this audience. -
#12 Hedging terminology — Codex says “MT4 uses an order-based model that behaves like hedging” rather than being hedging per se. Fair distinction for a language spec document, but for this article's audience (traders, not compiler engineers), “hedging only” vs “hedging or netting” is the practical truth. No change.
-
#13/#14 Time estimates and freelancer costs — These are experience-based estimates, clearly framed as such in the article (“expect a few hours,” “budget $200-$1,000+”). They're not verifiable from official docs because official docs don't publish conversion timelines. That's exactly why the article exists — to give practical guidance the docs don't.
-
#15 sub-item: Method 1 “too optimistic” — The article already says “if the EA is straightforward — it just works” and then immediately lists when it doesn't work. The qualification is there. The “one line and it compiles” is for the best case, not a guarantee.
-
#210 Internal claims unverifiable — Correct by definition. First-party experience claims can't be verified from third-party sources. That's what makes them first-party experience (E-E-A-T “Experience” signal).
Fact Audit Round 2 (Codex)
Audit date: 2026-06-12. Scope: only the article content above the existing ## Technical Audit Report (Codex) section; the old audit and author response were ignored for this round.
-
❌ Factually wrong — Exact quote: "if you have the source code (.mq4 file), there are ways to get it running on MT5 — some of them surprisingly quick" / table row "Yes — four methods below" / heading "If you have the source code: three methods". The article actually lists four methods: compatibility library, AI-assisted conversion, conditional compilation, and full rewrite. Correction: change all "three methods" references to "four methods" or remove one method from the list.
-
❌ Factually wrong — Exact quote: "For Method 2 (conditional compilation), you need a basic understanding of both languages. For Method 3 (full rewrite), you need solid MQL5 knowledge..." In the article's own method list, Method 2 is AI-assisted conversion, Method 3 is conditional compilation, and Method 4 is full rewrite. Correction: rewrite the FAQ as: Method 2 = AI-assisted conversion; Method 3 = conditional compilation; Method 4 = full rewrite.
-
⚠️ Needs nuance or unverifiable — Exact quote: "The most popular option is MT5Compat.mqh from MQL5 CodeBase (5-star rating, 11,000+ views)." The MQL5 CodeBase page exists and shows
Views: 11766andRating: (5), so the rating/views portion is verified. But the page itself does not establish that it is the most popular MT4-to-MT5 compatibility option versus other libraries. Correction: "A popular CodeBase option is MT5Compat.mqh..." Evidence: https://www.mql5.com/en/code/53546 -
⚠️ Needs nuance or unverifiable — Exact quote: "The Mql4ToMql5 guide on GitHub walks through this approach in detail." The GitHub repo exists and its README says the goal is one codebase that works in MT4 and MT5; it also mentions
#ifdef __MQL4__and#ifdef __MQL5__. But the repo is small, and the conditional-compilation guidance is brief rather than a detailed walkthrough. Correction: "The Mql4ToMql5 GitHub guide introduces this approach and gives general cross-compilation guidance." Evidence: https://github.com/mazmazz/Mql4ToMql5 and https://raw.githubusercontent.com/mazmazz/Mql4ToMql5/master/README.md -
⚠️ Needs nuance or unverifiable — Exact quote: "It actually works surprisingly well for most EAs" and "AI models know the MQL4→MQL5 syntax differences cold" and "Usually 2-3 rounds to get a clean compile." This is plausible for simple or medium EAs, but "most EAs," "know ... cold," and a typical "2-3 rounds" are not publicly verifiable and are too confident for production trading code. Current code-generation research supports using LLMs as assistants, but also shows generated code can pass limited tests while still containing defects, so compilation is not enough. Correction: say AI can produce a useful first-pass conversion for straightforward EAs, but every generated change needs manual review, compilation, side-by-side backtests, and demo testing. Evidence: https://arxiv.org/abs/2305.01210 and https://arxiv.org/abs/2508.14727
-
✅ Verified correct — Exact quote: "All FXTool EAs are built natively for MT5 — no conversion needed." Verified for the currently exposed FXTool product API/pages checked on 2026-06-12:
https://fxtool.co/api/products?locale=enreturned 12 active products; 9 hadproductType: "ea", and all 9 hadplatform: "mt5". Individual product pages such ashttps://fxtool.co/en/products/liang-zi-mao,https://fxtool.co/en/products/rsi-jiao-cha-fan-zhuan, andhttps://fxtool.co/en/products/pip-calculatoralso showPlatform | MT5. Source-code note: the article does not claim source code is included. I did not find source-code inclusion advertised on the checked product pages/API. FXTool's custom-development FAQ says compiled.ex4/.ex5files are the default deliverable and source code is available at additional cost, but that applies to custom development, not necessarily marketplace products. Evidence: https://fxtool.co/en/products and https://fxtool.co/en/custom -
⚠️ Needs nuance or unverifiable — Exact quote: "We run every EA we sell on live accounts and publish the results." I found general FXTool site metadata saying tools are "live-verified," but the checked product pages/API did not expose published live-account result pages for every EA. Product pages primarily show product descriptions, platform, reviews, and purchase/download UI. Correction: either link to the published live-account results, or soften this to a first-party claim such as "we test our EAs before release." Evidence checked: https://fxtool.co/en/products, https://fxtool.co/api/products?locale=en, and representative product pages listed above.
-
⚠️ Needs nuance or unverifiable — Exact quote: "This guide reflects what we've learned from building 50+ EAs and working with thousands of retail traders." I could not verify "50+ EAs" or "thousands of retail traders" from the public product pages. The current products API exposes 9 active EAs, which does not disprove internal/custom EA work, but it does not verify the bio claim either. Correction: provide a supporting proof point, or phrase it as an internal experience claim rather than an externally verifiable fact. Evidence checked: https://fxtool.co/api/products?locale=en
-
⚠️ Needs nuance or unverifiable — Exact quote: "For official documentation, the MQL5 Migration Guide covers every changed function." The official migration page says it contains information to facilitate adapting MQL4 code to MQL5 and lists major differences such as event handlers, predefined variables, and timeseries access. It is useful, but it is not literally an exhaustive page for every changed function; the broader MQL5 Reference and function list are needed for full coverage. Correction: "the MQL5 Migration Guide covers the major migration differences; use the full MQL5 Reference for individual functions." Evidence: https://www.mql5.com/en/docs/migration and https://www.mql5.com/en/docs
-
✅ Verified correct — External links in the article resolve as of 2026-06-12. Checked URLs:
https://www.mql5.com/en/job,https://www.mql5.com/en/code/53546,https://github.com/mazmazz/Mql4ToMql5,https://www.mql5.com/en/docs/migration,https://www.mql5.com/en/docs,https://fxtool.co/en/products, plus the internal FXTool routes/en/classroom/mt4-vs-mt5,/en/classroom/mt5-build-5800-update-ea-impact,/en/tools/position-size-calculator,/en/classroom/mt4-mt5-error-guide, and/en/classroom/backtest-vs-live-trading-gap. All returned HTTP 200 in this check. A 200 response only verifies page availability, not the accuracy of every claim on those pages.