Trade Calls
Market and pending orders, modifications and closes are rebuilt as MT4 trade operations, including scaling in, partial closes and exits tied to specific entries.
We rewrite cTrader cBots as MT4 Expert Advisors and cTrader indicators as MT4 custom indicators — converting units to lots, pip stops to price levels and labelled positions to your MT4 account, and checking the result against criteria agreed with you.
Indicators.ExponentialMovingAverage(…, 21)iMA(NULL, 0, 21, 0, MODE_EMA, PRICE_CLOSE, i)[Output("EMA")] IndicatorDataSeries EmaSetIndexBuffer(0, EmaBuffer)MarketData.GetBars(TimeFrame.Hour, …)iClose(NULL, PERIOD_H1, shift)ExecuteMarketOrder(TradeType.Buy, "EURUSD", 10000)OrderSend("EURUSD", OP_BUY, 0.10, Ask, …)Same Renko logic — a native chart in cTrader, built in code in MT4
cTrader to MT4 conversion means rewriting cTrader’s C# code in MQL4: a cBot becomes an MT4 Expert Advisor and an indicator becomes an MT4 custom indicator. Both platforms usually trade the same forex and CFD symbols, so the market rarely changes — what changes is how trades are sized, how stops are set, how positions are tracked and how the code reacts to new data.
| cTrader feature | In cTrader | In MT4 |
|---|---|---|
| Volume in units | Yes | PartlyConverted to lots — on EURUSD with a 100,000 contract size, 10,000 units = 0.10 lot |
| Stops set in pips | Yes | PartlyConverted to price levels |
| Hedging and netting accounts | Yes | PartlySeparate tickets; netting is emulated |
| Position events | Yes | PartlyRequest results handled on sending; later changes tracked through orders and history |
| Stop-limit orders | Yes | PartlyThe EA places a limit order when the stop price is reached; the terminal has to stay running |
| Renko, range and tick charts | Yes | PartlyBuilt in code |
| .NET libraries | Yes | PartlyRewritten in MQL4 or connected through a DLL |
A cBot and an MT4 Expert Advisor automate the same kind of trading, but they size trades, set stops and track positions differently. Converting a cBot keeps its trading rules and rebuilds its trade handling for MT4.
Market and pending orders, modifications and closes are rebuilt as MT4 trade operations, including scaling in, partial closes and exits tied to specific entries.
Positions found by label become MT4 order tickets the EA identifies by magic number. Hedging logic maps naturally to separate tickets; a cBot written for a netting account — one position per symbol — has its netting emulated in the EA’s own code. How the EA works alongside other EAs, manual trades and positions already open at start is agreed in advance.
Volume in units is converted to lots with the symbol’s contract size and volume step at your broker, and checked against your risk rules.
Stops and targets set in pips become price levels, converted with the symbol’s pip size and digits and kept within the broker’s stop and freeze distances. cBot stops can trigger on the opposite side of the price or after two consecutive quotes, so stop behaviour is checked, not only the distance.
Logic tied to cTrader’s position events — opened, closed, modified — is rebuilt for MT4, which has no trade events: request results are handled where orders are sent, and later changes are tracked through open orders and history. The MT4 tester doesn’t run timer events, so how this is tested is agreed.
OnBar runs when a new bar appears; OnBarClosed reads the last closed bar, with the forming bar left out — and both wait for the tick that opens the next bar. We check not only how often bar logic runs but which bar it reads and when orders are sent; tick logic runs on MT4’s tick events, and intrabar behaviour is checked.
MT4 Strategy Tester results won’t match cTrader’s backtest exactly: the platforms use different data and model fills differently. We check that entries and exits follow the agreed rules.
Converting a cTrader indicator to MT4 means rebuilding its calculations in MQL4 and how it draws on the chart. We convert standard, custom and multi-timeframe indicators, as well as panels and dashboards.
Outputs become indicator buffers; MT4 has no colour buffers, so a line that changes colour gets a separate buffer for each colour. Any visual differences are agreed in advance.
cTrader series are indexed from the oldest bar; each series is read in MT4’s direction, so values line up bar by bar.
Bars requested from other timeframes or symbols become MT4 data requests, keeping the original’s behaviour — from the forming bar or from confirmed bars only.
Lines, text, shapes and panels drawn on the chart become MT4 chart objects; the look is agreed separately.
Renko, range and tick charts are built in the code itself; for cBots, signals come from these bars while orders go to the broker’s real symbol.
Calls to cTrader’s built-in indicators use MT4’s own where their values match — otherwise we write the calculation — and alerts become MT4 alerts and notifications.
cTrader and MetaTrader 4 size trades, track positions and run code 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.
Volume in units
Lots, rounded to the symbol’s volume step
Units are converted with the symbol’s contract size and checked against your risk rules.
Often set as a distance in pips
Price levels, within the broker’s stop and freeze distances
Pip distances are converted to prices with the symbol’s pip size and digits.
Hedging or netting account; positions found by label
Each trade is a separate order ticket
We map each entry and its exits for your account type, and agree how the EA works alongside other EAs, manual trades and positions already open at start.
Events when positions open, close or change
No trade events; order state is checked in the code
Reactions to opened, closed and modified positions are rebuilt and checked.
OnBar runs as a new bar opens; OnBarClosed reads the last closed bar; both wait for the next bar’s first tick
EA code runs on every tick; bar-close logic checks for a new bar
We match which bar each piece of logic reads — forming or closed — and when orders are sent, and check intrabar behaviour.
Series indexed from the oldest bar
Price arrays counted back from the current bar
We check the reading direction for every series, so values line up bar by bar.
Time, tick, Renko, range and Heikin-Ashi charts
Time-based timeframes
Non-time charts are built in code; for EAs, orders go to the broker’s real symbol.
Some things depend on the platform itself: .NET libraries and NuGet packages, which MQL4 can’t load directly and which need rewriting or a 32-bit native DLL wrapper; web requests, which MT4 allows only to addresses you add in its settings and not from indicators or in the Strategy Tester — so an indicator with external data may need a separate component, and a backtest may need data saved in advance; and cTrader Cloud, which has no MT4 equivalent — an EA runs in your terminal or on a VPS. We point these out before work starts and agree the closest MT4 equivalent with you.
A converter or an AI pass can produce MQL4 code quickly. The risk is not the tool but an unchecked result: code can compile and still trade differently, because cTrader and MetaTrader size trades, set stops and index bars differently. We start from how the cTrader version behaves and rebuild it for MT4.
| Automatic conversion | Manual conversion at Nordman Algorithms | |
|---|---|---|
| Starting point | Often the C# code translated, statement by statement | How the cTrader version behaves |
| Platform differences | Often found later, if at all | Identified before work starts and agreed with you |
| Sizes and stops | Units and pip distances copied as they are | Converted to lots and price levels for your MT4 symbol |
Send it to us — we review it and give you a fixed price and timeline before work starts.
We run the cTrader original and the MT4 version on the same symbol 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 cBot or indicator source — the .cs files or an .algo file saved with source — any libraries it uses and your settings, plus a short description.
You sendSource + dependenciesWe analyse the code, agree your MT4 broker, account type and symbols, and agree settings, acceptance criteria, price and timeline.
You getFixed price + criteriaThe cBot or indicator is rebuilt as an MT4 Expert Advisor or custom indicator, including any extra features you asked for.
We buildThe MT4 versionThe MT4 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 get.mq4 + .ex4 filesEvery cBot 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 cBots: positions, labels, events, scaling and partial closes.
Renko, range or tick charts and data requested from other timeframes or symbols.
Drawings, panels and outputs that change colour.
Each .NET dependency and web request is checked and rewritten or connected another way.
Conversion needs the source. An .algo file saved without source can’t be read, so recreating the cBot from your description is assessed separately.
No. MetaTrader 4 runs MQL4; cTrader’s C# code — the source or an .algo file — has to be rewritten.
Yes. The cBot’s trading rules are kept and its trade handling is rebuilt for MT4 — lots, price levels for stops, positions on your account type and any extra trade management — with sizing and risk agreed with you.
With the symbol’s contract size and volume step at your MT4 broker. On EURUSD with a contract size of 100,000, 10,000 units is 0.10 lot — the contract size is checked for each symbol rather than assumed.
MetaTrader 4 charts use time-based timeframes. Renko, range or tick bars are built in the code itself, and an EA calculates its signals on these bars while placing orders on your broker’s real symbol. How this is set up and checked is agreed before work starts.
Usually. MQL4 can’t load .NET libraries directly, so each one is rewritten in MQL4 or connected through a native DLL. Dependencies are checked one by one before work starts.
Not always exactly. Your cTrader broker and your MT4 broker can provide different prices, and some built-in indicators are calculated slightly differently. How closely values must match is agreed before work starts, and any difference is traced to its cause.
Partly, in the MT4 Strategy Tester: it trades only the tested symbol, doesn’t process timer events and doesn’t run web requests. How the EA is checked depends on its multi-symbol logic, timers and external data, and the adaptations are agreed before work starts. Results won’t match cTrader’s backtest exactly — the platforms use different data and model fills differently.
Yes — that’s the reverse route, MT4 to cTrader conversion. The same approach applies, with lots, stops and positions mapped the other way.
It depends on the size of the code, the trade handling, chart types, visual elements and any .NET libraries. After reviewing your cTrader code we give you a fixed price and an estimated timeline before work starts.
Share the cBot or indicator source with the libraries it uses, and a short description of what it should do in MetaTrader 4. We will review it and give you a fixed price and timeline before work starts.