Entries & Exits
Entry, exit and close rules are rebuilt with cTrader’s trading methods and checked against the MT4 version.
We rewrite MT4 Expert Advisors as cTrader cBots and MT4 indicators as cTrader indicators in C# — rebuilding lot sizes, magic numbers and stops for how cTrader works, and checking the result against criteria agreed with you.
iMA(NULL, 0, 21, 0, MODE_EMA, PRICE_CLOSE, i)Indicators.ExponentialMovingAverage(…)SetIndexBuffer(0, EmaBuffer)[Output("EMA")] IndicatorDataSeriesiMA(NULL, PERIOD_H1, 21, …, shift)MarketData.GetBars(TimeFrame.Hour)OrderSend(Symbol(), OP_BUY, lots, Ask, …)ExecuteMarketOrder(TradeType.Buy, …)Same trade and the same protective levels, rebuilt for cTrader · EURUSD: 0.10 lots = 10,000 units
MT4 to cTrader conversion means rewriting MQL4 code in C#, cTrader’s language for algorithmic trading: an Expert Advisor becomes a cBot and an indicator becomes a cTrader indicator. cTrader works differently from MetaTrader — trade size is set in units rather than lots, a cBot identifies its trades by label rather than by magic number, and protective levels are set through cTrader’s own methods — so the code is rebuilt, not translated line by line.
An MT4 Expert Advisor and a cTrader cBot automate the same kind of trading, but they size, identify and protect trades differently. Converting an EA to a cBot keeps its trading rules and rebuilds the trade handling for cTrader.
Entry, exit and close rules are rebuilt with cTrader’s trading methods and checked against the MT4 version.
We check that the EA’s position model fits your cTrader account — hedging or netting — and agree how trades are identified and how several strategies share the account. On a netting account all trades on a symbol form one position, whatever their labels.
Trade size is set in units in cTrader; lots are converted with the symbol’s own settings, rounded to its volume step and checked against your risk rules.
Stop-loss and take-profit levels, distances, trailing stop and breakeven are transferred through the matching cTrader methods. cBot stops can trigger on the opposite side of the price or after two consecutive quotes, so the trigger rule is chosen to match MT4 and stop behaviour is checked, not only the distance.
Pending orders become cTrader limit and stop orders, with expiry where the original uses it.
Trading sessions and days, time limits and other filters are kept, and new ones can be added.
cTrader backtest results won’t match MT4 exactly: the two testers use different data and model fills differently. We check that entries and exits follow the same rules.
Converting an MT4 indicator to cTrader means rebuilding its calculations in C# and how it draws on the chart. We convert standard, custom and multi-timeframe indicators, as well as panels and dashboards.
Calculations are rebuilt in C#; buffers become indicator outputs with line and histogram styles. Any visual differences are agreed in advance.
Calls to other custom indicators through iCustom are rebuilt in C# as well, so we need their source too.
Calls to built-in indicators use cTrader’s own versions where their values match; where the platforms calculate differently, we write the calculation ourselves.
Chart objects and panels become cTrader drawings and chart controls; the agreed information is kept and the look is agreed separately.
Alert conditions become sound and email notifications in cTrader where needed.
New settings or functions, several indicators combined into one, or the indicator turned into a cBot.
MetaTrader 4 and cTrader handle trades and indicators in different ways. These are the differences that decide whether a converted script behaves like the original — and what we do about each of them.
Lots
Units
Lots are converted with the symbol’s own settings and volume step, and checked against your risk rules.
Magic number
A label set by the cBot; hedging or netting account
We check that the EA’s position model fits your cTrader account type and agree how trades are identified and strategies share the account. This matters most for EAs that hold several separate or opposite trades.
Set as price levels
Set as price levels or as distances in pips
Levels, distances and trigger rules are transferred through the matching cTrader methods.
Your MT4 broker’s prices
Your cTrader broker’s prices
We take the data difference into account and agree with you how closely values must match.
Indicators and EAs react to new ticks; the exact behaviour depends on the code
Indicators calculate per bar and update on ticks; in cBots, OnBar runs as a new bar opens and OnBarClosed reads the last closed bar — both wait for the next bar’s first tick
We match which bar each piece of logic reads — forming or closed — and when orders are sent, and check historical and real-time behaviour separately.
MetaTrader’s own calculation
cTrader’s own calculation, which can differ in details
We compare the values and use our own calculation where the two platforms differ.
Read directly from any timeframe
Loaded as separate bar series
Values from other timeframes are aligned with the chart’s bars, as in the original.
Some things depend on the platform itself: DLLs and libraries the code uses are checked one by one — cTrader can use .NET libraries, so some work as they are and others need a replacement; symbols your broker offers only on MetaTrader servers; and tester settings specific to MetaTrader. If the cBot will run in cTrader Cloud, its compatibility with the cloud environment is checked separately. We point these out before work starts and agree the closest cTrader equivalent with you.
A converter or an AI pass can produce C# quickly. The risk is not the tool but an unchecked result: code can compile and still trade differently from the original, because MetaTrader and cTrader size, identify and protect trades in different ways. We start from how the MT4 version behaves and rebuild it for cTrader.
| Automatic conversion | Manual conversion at Nordman Algorithms | |
|---|---|---|
| Starting point | Often the MQL syntax, statement by statement | How the MT4 version behaves |
| Platform differences | Often found later, if at all | Identified before work starts and agreed with you |
| Trade size and positions | Lots and magic numbers copied as they are | Converted to units and labels for your account type |
Send it to us — we review it and give you a fixed price and timeline before work starts.
We run the MT4 original and the cTrader version on the same instrument and timeframe, with matching trading sessions and bar timestamps, and compare them against acceptance criteria agreed with you:
If something doesn’t match, we find the cause — price data, platform behaviour or the code — and check the result against the agreed specification.
Share the .mq4 source with its .mqh include files, the source of any custom indicators it calls and your .set file if you have one — plus a short description.
You sendSource + dependenciesWe analyse the code, point out anything that works differently in cTrader, check whether the cBot will run locally or in cTrader Cloud, and agree settings, acceptance criteria, price and timeline.
You getFixed price + criteriaThe EA or indicator is rebuilt as a cBot or cTrader indicator, including any extra features you asked for.
We buildThe cTrader versionThe cTrader version is checked against the acceptance criteria agreed in step 2.
We checkValues, signals, tradesBugs and differences from the agreed specification are fixed after delivery.
You getC# source + .algoEvery EA and indicator is reviewed before we quote. These are the main factors.
How much logic the code contains and how many parts depend on each other.
For EAs: how orders, positions, stops and partial closes are managed.
Data the code reads from other timeframes or instruments.
Objects, panels and dashboards drawn on the chart.
Each dependency is checked: whether it can be used in cTrader as it is or needs a replacement.
Conversion needs the .mq4 source. Without it, recreating the EA or indicator from your description is assessed separately.
No. cTrader runs cBots written in C#; MQL4 code — .mq4 or .ex4 — has to be rewritten.
Yes. The EA’s trading rules are kept and its trade handling is rebuilt for cTrader — sizes in units, trades identified for your account type, protective levels set through cTrader’s methods — with sizing and risk agreed with you.
Most MT4 indicators can be rebuilt in C#. DLLs and other dependencies are checked one by one — some can be used in cTrader as they are, others need a replacement; we tell you about any such differences before work starts.
Not always exactly. Your MT4 and cTrader brokers provide different prices, and some built-in indicators are calculated slightly differently on the two platforms. How closely values must match is agreed before work starts, and any difference is traced to its cause.
Not exactly. The two testers use different data and model fills differently. What we check is that entries and exits follow the agreed rules.
Conversion needs the .mq4 source code. Without it, we can assess recreating the EA or indicator from your description, settings and examples of how it behaves — but an exact match with the original can’t be promised in advance.
No. Our developers write the C# version themselves, based on how the MT4 version behaves.
Yes. cBots and cTrader indicators can be rewritten in MQL4 as Expert Advisors and indicators; parts that rely on cTrader-only features are agreed before work starts. See our cTrader to MT4 conversion page.
It depends on the size of the code, the trade handling, data from other timeframes or symbols and any external libraries. After reviewing your .mq4 code we give you a fixed price and an estimated timeline before work starts.
Share the .mq4 source code with its include files and the custom indicators it uses, and a short description of what it does. We will review it and give you a fixed price and timeline before work starts.