1. Product overview
1.1 What New Order Copier does
New Order Copier copies orders and positions from sources to targets:
- Sources (where orders come from):
- MetaTrader 4 and MetaTrader 5 (netting and hedging accounts), through the expert advisor NewOrderCopier and the plugin
tcCopierPlugin.dll. - Interactive Brokers TWS / IB Gateway logins (an IBKR account is watched; the copier never places, changes or cancels anything on a source login). This allows IB-to-IB copying, including orders placed by hand in TWS.
- The Signal API: your own program, script, MetaTrader indicator/EA or a webhook sends JSON commands (
place,modify,cancel,close) over WebSocket or HTTP POST. - Remote Copier: signals received from another New Order Copier (Client Mode).
- MetaTrader 4 and MetaTrader 5 (netting and hedging accounts), through the expert advisor NewOrderCopier and the plugin
- Targets (where orders are placed):
- Interactive Brokers accounts through TWS or IB Gateway: single accounts, and advisor (FA) logins with their sub-accounts and FA allocation groups.
- Client Mode groups: other New Order Copiers (your customers) that receive your signals.
- Routing (n:m): the Routing page is a matrix: one column per source, one row per target, one connector per source/target pair. Any source can be copied to any number of targets and any target can receive from any number of sources. No connector, or a connector switched off = nothing is copied on that pair.
1.2 The program
- There is one program:
NewOrderCopierService(Windows:NewOrderCopierService.exe). It runs either as a console (a window you start from the Start menu) or as a Windows service / Linux systemd service. - It is operated only in the browser (the web frontend), by default at
http://127.0.0.1:8743/. - The old desktop program (
NewOrderCopier.exe) no longer exists since v1000.704 (2026-11-02). An update removes it. - Platforms: Windows 10 (1903+) / Windows 11 / Windows Server 2022+, 64-bit; Linux 64-bit with systemd. No macOS version.
- MetaTrader components (plugin and EAs) exist for Windows only. A MetaTrader on Windows can connect to a copier on another computer (including Linux) over the TLS Remote API port.
- Two web roles: Operator (may change everything) and Viewer (read only).
- User interface in 10 languages: English, Deutsch, Français, Español, Italiano, Русский, Nederlands, Português, 简体中文 (Simplified Chinese), 日本語. Traditional Chinese is not offered (falls back to English). Log files are always English.
2. Features
2.1 Sources in detail
Common to every source
- Every source has a name (required for MetaTrader; optional for TWS and Signal API). Max 64 characters, unique (case-insensitive), no
',"or\. The name is only a label; renaming changes nothing else. - Source menu (⋯ in the source column header): Edit source..., Activate source / Deactivate source, Suspend... / Resume, Open Log, Performance report..., Performance filter..., Delete source... (asks for Your password; orders already at the targets are not touched).
- Header colours: grey = inactive, blue = active but not connected, green = connected, purple striped = Blocked (performance filter refuses new entries), half-transparent yellow = suspended (pacing or by hand). An outlined DEMO mark appears when the broker reports a demo account (badge only, no effect on a source).
MetaTrader 4 / MetaTrader 5 source
- The EA NewOrderCopier (in the Navigator under Experts > trade-commander > NewOrderCopier) shows an ident token in its panel (IDENT TOKEN, button Copy; also printed in the Experts log). Format:
MT<4|5>-<account>-<broker>-<8 hex characters>. - The source is created in the web frontend: Routing > New Source..., tab MetaTrader, Name, paste the Ident token, OK. Then press Connect in the EA panel.
- Only tokens created as a source by the operator can connect. An unknown token, or the token of a deactivated source, is refused and disconnected. Another MetaTrader account produces another token.
- Same computer: the EA connects to the Copy port (MetaTrader) (default 29496, 127.0.0.1). Another computer: the copier's Remote API port (default 29497, TLS only) plus the copier's certificate fingerprint in the EA input CopierFingerprint.
- Account kinds: MT4, MT5 netting, MT5 hedging.
- Magic number filter (Positive Magic #s / Negative Magic #s, comma-separated; the positive list wins; a leading
#disables a list): MetaTrader 5 only. MT4 orders are not filtered by magic number. - The EA panel has its own COPY FILTERS (Copy MKT orders only, Ignore TP / SL, Allowed symbols, Blocked symbols). They act inside MetaTrader: a filtered order never reaches the copier.
- What happens while the copier is not running is buffered by the EA and delivered on reconnect (see 2.8 "Restart and replay").
- Orders/positions commented
NOC:(placed by a New Order Copier MetaTrader target) are not copied back.
TWS / IB Gateway source (observer)
- Fields: Name (optional; default = master account), IP (default 127.0.0.1), Port (default 7496), Client ID (default 0), Master account (required; checked on every connect, mismatch = disconnected and switched off).
- Client ID:
- 0 = sees every order of that TWS session, including orders entered by hand. This is the recommended setting for copying what you trade in TWS.
- the Master API client ID set in TWS = meant to see everything the account does, whichever program placed it (this variant is not verified by the vendor; 0 is the tested choice).
- any other number = only that client's own orders, i.e. nothing (a source places no orders).
- IP, Port and Client ID cannot be changed afterwards ("Endpoint not changed"): delete and recreate the source.
- What is copied:
- Working LMT, STP, STP LMT orders → resting copies; a change → modify; a cancel → cancel.
- MKT orders → copied as soon as TWS reports them Submitted, with the whole order size. The order type decides; a limit price that TWS reports beside a MKT order does not make it a limit order.
- Other IBKR order types (TRAIL, REL, MIT, MOC, PEG, ...) are not copied (warning in the source log).
- While TWS reports Inactive, Filled or PendingCancel nothing is sent; Cancelled is acted on.
- Fill of a resting source order: the resting copy is left to fill by itself at its own price. Option TWS source: fill turns the copy into a market order (Settings > Copying, default off): the first fill turns the copy into a market order for its whole open size, once. Connectors with Copy position changes only copy the fill instead.
- Bracket children are copied as their own orders and attached to the copy of their parent. A child waits up to 2 s for its parent; otherwise it is copied unattached (warning).
- Iceberg / algo: display size scaled like the order (rounded, between 1 and the order size; 0 stays 0); algo strategy and parameters copied (a quantity parameter such as DarkIce display size is scaled). Entry orders only, never closes, stops or targets. A change is copied as a modify.
- Copied attributes: side, quantity, type, limit/stop price, parent link, TIF, outside RTH, iceberg/algo. Other order fields are not carried.
- Executions that TWS replays on connect are not copied. Copying starts after the login has reported its positions.
- Self-copy guard: a source at the same host:port as a target, or a source sharing an account with a target, is refused.
- Sizing 1:1 (one contract = one contract × connector Multiplier); no mapping table is needed. An optional IB-IB mapping table can redirect a contract and set a factor.
- A contract the copier has never seen is requested from TWS automatically (a working order waits up to 1.5 s for it).
Signal API (your own program as a source)
- Create it in Add source > tab Signal API > Token (or paste a
SIG-...token into the MetaTrader tab). The client generates and shows the token; the copier does not make it. Token rules: starts withSIG-, 8–63 characters, no spaces, quotes or backslash. Name optional (default = token). The MQL client showsSIG-MT5-<account>-<8hex>. - Adding a Signal API source switches the Local API port on automatically.
- Transport:
- Local API port (default 7788, 127.0.0.1 only): WebSocket, one JSON object per text frame, or
POST /signal. - Remote API port (default 29497, TLS only): WebSocket path
/signalandPOST /signal; the client pins the certificate fingerprint. - A request carrying a browser
Originheader is refused on these ports (a web page cannot reach them).
- Local API port (default 7788, 127.0.0.1 only): WebSocket, one JSON object per text frame, or
- Envelope fields:
v(1),msg,id(echoed in the ack),ts. hello(first message of a WebSocket session):token(required),client,name. A wrong token → ackbad_token, connection closed.heartbeatis answered withheartbeat.POST /signal: token in the body, one message per request. HTTP 200 = ack in the body; 400 =bad_message; 401 =bad_token.- Commands:
place:oid(max 64 characters, unique while live),symbol,sideBUY|SELL,typeMKT|LMT|STP|STPLMT,qty> 0,qty_unitlots|contracts(required, no default),price(LMT; limit of STPLMT),stop_price(STP; trigger of STPLMT), optionalsl,tp,tifGTC|DAY|IOC|FOK(IOC/FOK only with MKT),comment(log/database only, never sent to the broker). A MKTplacerequirests(ISO-8601 UTC) andref_price(ask for BUY, bid for SELL).modify:oid+ only what changes:price,stop_price,qty(resting orders),sl,tp(null= remove). Symbol, side, type, qty_unit and tif cannot be modified (cancel and place again). For a filled market position only sl/tp can change.cancel:oid– withdraws the resting order and closes what of it has filled.close:oidorsymbol(closes all live oids on it); optionalqty(partial close, only by oid, only market positions); optionalref_price.fill:oid,qty,price– recorded for the performance report only, never sent to a target.position:symbol+vpos. An optionalvposon every instruction = the client's signed virtual position after it; it serves as the source's position report for Maintain Source Positions (it places nothing by itself).
- Sizing:
lots= like a MetaTrader lot (mapping Conv. factor × connector Multiplier);contracts= connector factors only. - Ack:
{"v":1,"msg":"ack","id":...,"ok":...,"code":...}, once per message.ok=truemeans "received and well-formed", never "executed at the targets". Codes:bad_message,bad_token,source_inactive,unknown_type,oid_in_use,oid_unknown,not_modifiable,tif_not_restable. Per-target results (unmapped symbol, licence lock, broker refusal) are not sent back; they appear on Log > Copy Errors. There is no other return channel (no fills or positions are reported back). - Stale market entries: a MKT
placewhosetsis older than 45 s is acknowledged but not sent (config.json/Signal/stale_entry_s, 0 = never; no UI). tifapplies to the entry; its sl/tp legs are always GTC.- Target-agnostic: a command for a target that cannot trade at that moment is dropped (not buffered); an entry missed there stays left out there. After a copier start, WebSocket signals are held up to 10 s while a routed target is still syncing (
POST /signalnever waits). - The MetaTrader client library
SignalApi.mqhand the demo EA SignalApiDemo (inputsInpHost127.0.0.1,InpPort7788,InpFingerprint,InpLots0.10,InpSlPoints,InpTpPoints,InpConfirmAll,InpName) ship with the MetaTrader components.
Remote Copier source (receiving Client Mode signals)
- Add source > Remote Copier > Access token (from your signal provider) > OK. The copier asks the sender which signals the token allows (Receive signals, all ticked). Each ticked signal becomes a source named
<signal> (<sender>). - The copier offers to fetch the sender's symbol tables; they arrive read-only (named
HUB: ...). - Signals the sender adds later are added automatically (with a message); a removed signal is reported, the source stays.
- Connection: TLS WebSocket, sender's key pinned by the token; a reconnect resumes from the current state. Nothing is copied until you switch on a connector of the received source.
- A received signal can never be forwarded to your own Client Mode groups.
2.2 Targets in detail
TWS / IB Gateway target
- New Target... / Edit target...: IP (default 127.0.0.1), Port (default 7497 = TWS paper; TWS live 7496, Gateway live 4001, Gateway paper 4002), Master account (required; verified on every connect: mismatch = disconnected, switched inactive,
MASTER ACCOUNT MISMATCHin the log). A new target starts inactive. - There is no client ID field for a target. The copier calculates the TWS API client ID on first save, stores it and never changes it (TWS lets a client modify/cancel only the orders it placed itself). It is never 0.
- Accounts of this login (display), Licensed accounts (see 5), Account Protection, Flatten when source is flat, links Account Information..., Open Log.
- Target menu: Edit target..., Activate target / Deactivate target (asks if positions/orders are open; they stay at the broker, unwatched), Maintain Source Positions..., Open Log, Delete target... (password; broker positions are not touched).
Advisor (FA) logins
- One target = one TWS/Gateway login. Sub-account or FA group is chosen per connector (Allocation: Allocate to account | group, Account / group, Allocation method NetLiq / AvailableEquity / EqualQuantity / PctChange, Percentage (PctChange)). Empty = no allocation, TWS decides.
- FA groups are read again every 30 minutes and on every connect (TWS does not report group edits). Reconnect the target if a group change must apply immediately.
- Orders > IB Account shows values per sub-account; Update FA Info reloads FA settings.
Client Mode group (sending your signals to other copiers)
- Add target > Client Mode (other copiers) > Group name (e.g. Premium). Shown as a row
=> <group>. A click on the tile toggles the connector directly. See 2.9.
MetaTrader terminal as target
- Exists but is frozen: it is not offered for new targets in the standard configuration and is not supported for new customers.
2.3 Order types
| Source | Copied order types |
|---|---|
| MT4 | market BUY/SELL, BUY LIMIT, SELL LIMIT, BUY STOP, SELL STOP, SL/TP |
| MT5 (netting / hedging) | market, limit, stop, stop limit, SL/TP |
| TWS source | MKT (on submit), LMT, STP, STP LMT, bracket children, iceberg/algo attributes |
| Signal API | MKT, LMT, STP, STPLMT, sl/tp |
- A resting (pending) order keeps its type at the target: a stop stays a stop.
- An order whose type did not arrive, or a stop limit without its limit price, is not sent.
- A cancelled pending order is cancelled at the target, never turned into a market close.
2.4 Stop loss, take profit and brackets
- A pending order's own SL/TP is placed together with it as a native IBKR bracket (parent + children, released together).
- SL/TP changes are sent as modifies; only what changed is sent; a modify that changes nothing is not sent.
- Net bracket (MT4 and MT5 hedging → IBKR): IBKR holds one net position per contract, so the copier keeps one stop and one target per contract on the closing side of the net position, sized to the net, priced from the dominant position. Net zero = no protective orders. A stop is never left working without a position under it (it would open a position).
- Removed SL or TP while the other leg lives: on IBKR, cancelling one leg cancels its partner. So the copier parks the removed leg far from the market (0.5 % by default, config.json
/Routing/park_removed_pct, max 0.9) instead of cancelling it. Log reasonsl parked/tp parked. - A filled copy of a resting source order is never placed again; its SL/TP keep following the source order, sized by what the target holds.
- With Ignore stop loss / take profit (see 4) no protective orders are placed; closes are still copied.
2.5 Closes, partial closes, reversals
- A close is sized from the copier's own fills for that position at that target, never from the account and never more than the target holds.
- A partial close never exceeds what this target holds on that side; a target that holds nothing sends nothing.
- Close-by (two opposite MT positions closed against each other): no order is placed; the net bracket is adjusted.
- A closed position stays closed: a late modify or close message for a position the source has already closed is ignored (only a new open brings it back).
- A cancel at the source closes what its copy had already filled (intended).
- Netting reversal (MT5 netting, long → short in one deal): with Copy netting reversals on (default), copied as one order of old + new size, old stop/target cancelled. Off = not copied; the target keeps its old position. (MT5 netting is not yet verified on a live account.)
2.6 Time in force and outside RTH
Order of precedence:
- An order default assigned in the mapping row (or basket leg) – overrides the source.
- The source order's own value (a TWS source states TIF and outside RTH, also for stop/target).
- The contract's TIF; outside RTH off.
- A stop/target whose source states no TIF (MetaTrader SL/TP) is always GTC.
- A source GTD order counts as "TIF not stated" (the date is not carried) → rule 3.
- Built-in per-security-type defaults are never applied.
- An order default only sets TIF and outside RTH; never the order type, algo or allocation.
2.7 Sizing
Per order and connector:
MetaTrader / Signal API (lots): lots × Conv. factor (mapping row) × Multiplier × balance factor (if on)
Signal API (contracts): qty × Multiplier × balance factor (if on)
TWS source: quantity × (IB-IB row factor, else 1) × Multiplier × balance factor (if on)
- Only the connector scales a copy. Sources and targets have no size setting.
- Connector Multiplier: default 1, must be > 0 (0 or negative is refused: "The multiplier must be greater than 0.").
- Use balance factor: also multiplies by target net liquidation / source balance (replicate risk). Applied only while both values are known; otherwise the order is sized without it and a warning is logged. Default off. (The dialog field Balance factor (live) currently always shows "unknown - both ends must be connected".)
- Mapping Conv. factor = IBKR units per source lot. A negative factor = fixed size in units, not scaled by multiplier or balance factor. 0 is refused.
- Rounding: to the nearest whole unit, never below 1 for an order that has a size. (A result of zero is recorded as "size came out zero".)
- Example: 1.00 lot XAUUSD, factor 10, multiplier 0.5 → 5 contracts.
2.8 Symbol mapping
- Page Symbol Mapping (side bar Copy). A mapping table (mapping set) is a named list of rows: source symbol → IBKR contract + Conv. factor (+ optional Order default). Contract and factor always come from the same row.
- Kinds of table: source side
Symbol (Generic, MT4, MT5)orIBKR (InteractiveBrokers), target side likewise. S-IB (symbol → IBKR contract) is used for MetaTrader and Signal API sources; IB-IB (contract → contract) for TWS sources. - Columns: Source symbol, Symbol (local), Underlying, Type, Curr., Exchange, Expiry, Right, Strike, ConId, Conv. factor, Invert, Order default.
- A connector references a table (Mapping table in the connector dialog). Several connectors may share one table; a change reaches all of them and asks first; a table in use cannot be deleted. Duplicate... makes an independent copy. Use as default = preset for new connectors.
- MetaTrader / Signal API source: no table, or symbol not in the table → that connector copies NOTHING (red ERROR row on Log > Copy Errors, red Attention banner). A TWS source copies 1:1 without a table.
- Tools: Add symbol..., Contract search (needs a connected TWS; types CASH, FUT, FOP, IND, OPT, STK, CMDTY, CFD, IOPT, FUND, CRYPTO), Remove selected, Import... / Export (CSV with
;), Import contract database from an older version..., Order defaults, Baskets. - A symbol may appear once per table; a contract may be the target of one symbol per table.
- Order defaults: Name, Sec type, TIF (DAY, GTC, IOC, FOK, GTD, OPG), Type, Also fill outside regular trading hours, Algo. Only TIF and outside RTH are applied to copies.
- Baskets: one source symbol → several broker orders (legs). Kinds: "IBKR basket - a different contract per leg" / "Single symbol - the same contract in every leg". Leg fields: Contract, Action (
BUY - buys when the source BUYS/SELL - sells when the source BUYS), Conversion factor, Default size, Order default. Leg size = source lots × mapping factor × conversion factor × default size; negative = fixed units. Leg actions are calibrated to a buying source order; on a SELL the whole basket turns over. - Invert is stored but not applied (a BUY does not become a SELL).
2.9 Client Mode (send signals to other copiers)
- Groups are target rows (e.g. Premium, Free trial); the connector source → group decides what the group receives.
- Requirements: Remote API port on (TLS), Sender name and Hub address set (Settings > Signal Output), port opened in router/firewall.
- Customers (side bar Client Customers): New customer... (Name, E-mail, Group, Language, Order number, Send the token by mail), Change group... (= new token), Replace token..., On / Off, Delete. A token binds one receiving copier to one group and contains hub address, port and certificate fingerprint. Without mail the token is shown once ("Access token - copy it now"). The copier keeps no readable copy of a token.
- The receiver pastes the token into New Source > Remote Copier.
- Draining: a source taken out of a group still sends reducing events (closes, SL/TP) there until flat.
- Subscriptions by file: your shop/script writes one JSON file per order into the Subscription folder (
{"action":"subscribe"|"cancel","order_id","email","group","name","language"}). The copier creates the token, mails it through your SMTP server, and moves the file todoneorfailedwith a.result.json. An unknown group name creates the group (active, no connector). A token exists only if its mail was sent. - Licence: a group counts as one target account while at least one of its copiers is connected. Receivers license their own targets.
2.10 Copy options and filters (overview)
| Option | Where | Default | Effect |
|---|---|---|---|
| Copy new entries | Settings > Copying | on | Off: no new position / pending order reaches any target; SL/TP, modifies, closes, cancels continue. Missed entries are not placed later. |
| Copy netting reversals | Settings > Copying | on | MT5 netting reversal copied / not copied. |
| Ignore stop loss / take profit | Settings (house) + connector | off | No protective orders at the target; closes still copied. |
| Copy position changes only | Settings (house) + connector | off | No pending orders copied; a pending order that fills at the source is then copied at market. Not applied to Signal API sources. |
| TWS source: fill turns the copy into a market order | Settings > Copying | off | See 2.1 TWS source. |
| Flatten target when source is flat | Settings (house) + target | off | When the source holds nothing more in a symbol, closes what this source copied there (orders cancelled first). Never touches manual positions or other sources' positions. |
| Performance entry filter | Settings (main switch) + per-source rule | off | Refuses new entries of a source whose rule says blocked. |
| Symbol filter (Active list off / whitelist / blacklist) | Connector | off | Whole-symbol match, case-insensitive. |
| Magic number filter | MetaTrader source | empty | MT5 only. |
| Licensed accounts | Target | empty | See 5. |
| Stale entry timeout (s) | Settings > Copying | 45 | MetaTrader market entries held while no target can trade are dropped when older (0 = never). |
| Pacing | Settings > Copying + per source | 10 per 1 s | See 2.11. |
There are no hidden switches: source, target and connector are the on/off switches.
2.11 Safety functions
Emergency Stop
Side bar (foot) Emergency Stop, or console command emstop. After the confirmation I understand that this closes positions. (+ Your password if enabled):
- every connector is switched off (persisted),
- sources are stopped,
- every working order is cancelled on every target,
- every position is closed on every target – including positions opened by hand.
Targets that are not connected are reported ("NOT connected - cannot be touched"), never skipped silently. Operators only.
Account protection (per target)
- In the target dialog (Account Protection) or for all targets via Account Protection (all)...: Enabled (default off), Drawdown % (default 10, between 0 and 100 exclusive), Watched account (master account or All = sum of the target's accounts), Trail (reference follows new highs), Threshold (stop level) preview.
- Arms at the first complete account reading. Fires when net liquidation is at or below the stop on two complete readings in a row (a reading below half the reference is treated as a data error). Then it cancels the orders and closes the positions of that target. Fires once per run; connectors stay on.
- Has not yet fired against a live broker in vendor tests – test it on a paper account.
Maintain Source Positions (manual reconciliation)
- Toolbar Maintain Source Positions (all routes)..., target menu, or connector dialog. Always asks for confirmation and password.
- Cancels copies of pending orders the source no longer has, then closes (market) positions this copier opened for that source on symbols the source reports flat (their SL/TP cancelled first).
- Never opens a position, never touches manual positions or other sources' positions; only active connectors.
- A MetaTrader EA is asked for a fresh position report first (needs a current EA); a TWS source is reconciled from its login's report (only when synced); a Signal API source from its
vpos. - Never runs by itself – nothing is reconciled automatically when an EA connects.
Pacing / Suspend
- Default: more than 10 openings and changes per 1 s per source = pacing violation. Counted: market entries, new pending orders, additions, reversals, moved pending orders, SL/TP changes. Not counted: closes, partial closes, cancels.
- A violation suspends the source for every target and group: new entries are excluded, changes are held (the last one per order is sent on release), additions are dropped, closes/partial closes/cancels pass, resting entries are withdrawn (setting Withdraw resting entries, default on) and never copied again. Released automatically after 10 s within the limit.
- Suspend... / Resume by hand (source menu or Edit Source): same state, survives a restart, ends only with Resume. (The former "Block source" function was replaced by this.)
Boarding after a (re)connect
Trade messages of a freshly connected MetaTrader source are held until the EA has reported its current state (max 10 s, then released anyway).
Restart and replay
- The EA delivers buffered events on reconnect. A position opened and closed entirely while the copier was down is not copied (Copy Errors: "opened and closed while the copier was down").
- If the terminal was restarted too, its buffer is lost: use Maintain Source Positions.
- While no target can trade, held MetaTrader market entries are dropped after Stale entry timeout (s) (45 s), together with their later close; pending orders, closes, cancels, partial closes and SL/TP changes never expire.
Confirmations and passwords
Settings > Confirmations: Password to close positions and for the Emergency Stop (default on) and the Ask before ... questions (default on).
2.12 Monitoring and diagnostics
- Control page (opens after login): tiles Sources live, Targets live, Connectors live, Copier time (median) (signal in → sent by this program), Target round trip (sent → first broker answer); Copy activity (Today, This week, chart last 4 hours · per 5 minutes); Why nothing arrived: Not sent by the copier (amber) and Refused by the broker (red), never merged; licence state; Server ports; Data folder.
- Routing matrix: connector tiles: dashed + New connector (none), grey OFF/ON (off, or source off), blue ON (active, not live), green live. Capital status lines: SOURCE INACTIVE, CONNECTOR DISABLED, SOURCE BLOCKED - no new entries, BOTH ENDS OFFLINE, SOURCE NOT CONNECTED, TARGET NOT CONNECTED, TARGET LOCKED BY LICENSE - no new entries. Counts per tile (today): grey copied, red refused, amber not sent; a click opens the list. A licence-locked target header is red striped ("Connected · license lock").
- Orders pages: Pending Orders (per-order Cancel), Executions (fills, Costs Diff = slippage vs source price), Positions (Close selected, Close all – market orders, also manual positions), IB Account (NLV, margin, sub-accounts, currency balances).
- Log page tabs: Main Log, Copy Errors (NOT SENT amber / ERROR red for unmapped symbol / REFUSED red / BROKER NOTE), Orders (order journal: one row per source action – INITIAL, PLACE, CANCEL, BRACKET, PARTIAL, REVERSE, CLOSE, CLOSE-BY, RECONCILE, REFUSED – with three latencies and a step timeline), Log files (every log file with filters and automatic Findings), Not copied / Refused.
- Order trace (Trace this order... / Trace An Order...): a self-contained HTML page following one source order through every target.
- Support extract (Write support extract...): one ZIP per order (trace, matching log lines, environment). See 7.9.
2.13 Reports and AI reading (Pro version)
- Require the licence option Pro version ("performance reports, Sigma report, Publish, AI reading"). Without it: Pro version required; copying is unaffected. The Performance filter... does not need Pro. Operators only.
- Performance report (per source, at source prices, also for signals that were never copied): Net, Profit factor, Win rate, Max drawdown, Expectancy, Unpriced; summary by side; virtual equity in R; breakdown by symbol / hour / weekday / month; Still open; a MetaTrader-tester-style block; trade list CSV. "-" = not measurable (e.g. equity drawdowns, MFE/MAE – no market data).
- Σ-Report: all sources in R units; score = mean(R) × √n / stdev(R) (fewer than 10 trades = unrated); long vs short; weekday × hour; What the copies actually earned (from own broker fills).
- Publish...: chosen sources under public names, without account numbers:
sigma_report.html+ four PNGs (1200×630, 1920×1080, 1080×1350, 1080×1920); English or German; the disclaimer is on every file. - Performance filter (per source rule, JSON): window, minimum trades, thresholds with hysteresis for profit factor, relative drawdown, loss streak; optional allow/deny by symbol, hours, weekdays. Works only while Settings > Copying > Performance entry filter is on.
- AI reading: advisory only, never acts; off by default. Providers: Local (this machine) (OpenAI-compatible endpoint such as Ollama or LM Studio), OpenRouter, OpenAI, Anthropic, Google Gemini, Grok (x.ai). Sends a digest of figures, never the page; names and money are always removed for internet providers; consent asked once per run with the text shown; API key stored encrypted.
3. Installation and first start
3.1 Windows
Requirements: 64-bit Windows 10 version 1903 or later, Windows 11, Windows Server 2022 or later. Windows Server 2016 and 2019 are not supported. Administrator rights for the setup.
Setup file: setup_NewOrderCopier_<version>.exe (code-signed). Wizard languages: English, German.
Steps:
- Run the setup, accept the licence agreement (EULA; the liability exclusion is its section 7).
- Select Components (both ticked by default):
- Console with web frontend – started from the Start menu in a console window; copies while that window is open. For a trading PC with MetaTrader on it.
- Windows service with web frontend – runs in the background, also without a logged-in user. For a server / VPS. Both install the same program
NewOrderCopierService.exe.
- Tasks:
- Install the MetaTrader components now (MetaTrader must be closed) (ticked by default). An optional page Additional MetaTrader folder lets you name the root folder of a portable MetaTrader.
- Start the Windows service now and show the setup code of its web frontend (service component only).
- Finished page: Open the web frontend in the browser (if the service was started; the setup code is shown in a copyable field) or Start the copier now (console with web frontend).
Install folder: fixed, C:\Program Files\trade-commander.com\NewOrderCopier (cannot be chosen). Data folder: C:\ProgramData\trade-commander.com\NewOrderCopier – one folder shared by console and service (settings, databases, licence key, users, logs). Start menu: New Order Copier (web frontend) (console), New Order Copier (web frontend of the service) (opens http://127.0.0.1:8743/; always port 8743), Uninstall New Order Copier. No desktop icon.
Windows service:
| Property | Value |
|---|---|
| Service name | NewOrderCopier (display name New Order Copier) |
| Start type | Manual after the first installation. For a VPS set it to Automatic in services.msc once everything works; an update keeps your choice. |
| Account | NT AUTHORITY\NetworkService |
| Start / stop | services.msc, or as administrator sc start NewOrderCopier / sc stop NewOrderCopier; autostart: sc config NewOrderCopier start= auto |
| Errors | no console, no browser, no message box: Windows Event Viewer > Windows Logs > Application |
Only one copier per Windows machine: console and service exclude each other. A second one says "New Order Copier already running" and ends.
Update: run the newer setup over the installed one. A running service is stopped first. The data folder is never touched (settings, order database, licence, users are kept). Start the service again afterwards (the setup task can do it). In MetaTrader, remove the EA from the chart and attach it again (MetaTrader does not reload a replaced EA file). An update from an older version deletes the old desktop program.
Update from a version before 1000.712: the old per-user data folder %LOCALAPPDATA%\trade-commander.com\NewOrderCopier is taken over once (without logs). If the service already had its own configuration, the one used last is kept and the other is moved to C:\ProgramData\trade-commander.com\NewOrderCopier.service-<date-time>. Nothing is merged or deleted.
Uninstall: Windows Settings > Apps > New Order Copier > Uninstall (or the Start menu entry). The service is removed. Not removed: the data folder (delete by hand only if it is really no longer needed – it contains the order database) and the MetaTrader components inside the terminals (remove them with Setup > Install MetaTrader components... or mci uninstall).
The setup creates no Windows firewall rule.
3.2 MetaTrader components (Windows)
| Terminal | File | Destination |
|---|---|---|
| MT5 | plugin tcCopierPlugin.dll (64-bit) | MQL5\Libraries\ |
| MT5 | EA NewOrderCopier.ex5 | MQL5\Experts\trade-commander\NewOrderCopier\ |
| MT4 | plugin tcCopierPlugin.dll (32-bit, same file name) | MQL4\Libraries\ |
| MT4 | EA NewOrderCopier.ex4 | MQL4\Experts\trade-commander\NewOrderCopier\ |
A wrong bitness fails exactly like a missing file (cannot load 'tcCopierPlugin.dll' [126]). Do not copy the files by hand. Three ways to install:
- The setup task (MetaTrader must be closed).
- Web frontend: Setup > Install MetaTrader components... (Extra start folder, Scan, tick the terminals, Dry run, Install into / Remove from). Works on the copier's computer. When the copier runs as Windows service, the scan sees the service account's folders, not your user's – use the setup or
mci.exeinstead. mci.exein the install folder (run as the Windows user who owns the MetaTrader):
mci scan [--root <folder>]... [--depth <n>] [--verbose]
mci install --components <folder> [--root <folder>] [--dry-run] [--unconfirmed]
mci uninstall [--root <folder>] [--dry-run] [--unconfirmed]
"C:\Program Files\trade-commander.com\NewOrderCopier\mci.exe" install --components "C:\Program Files\trade-commander.com\NewOrderCopier\components" --root D:\trading
Searched by default: %APPDATA%\MetaQuotes\Terminal and both Program Files trees (depth 6). Portable terminals only via --root. Each terminal gets installed_components.txt (do not edit).
In MetaTrader: Tools > Options > Expert Advisors > Allow DLL imports must be on (also in the EA's own dialog). Attach NewOrderCopier to one chart per account.
EA inputs (MT5 NewOrderCopier): debug_to_expert_log (false, "Write debug information to experts log"), dll_log_level (-1, "Plugin loglevel (-1=auto,0 = system,3=normal,6=highest)"), server_timer_seconds (1), bridge_poll_ms (25, "Bridge poll interval (ms)"), CopierFingerprint ("", "Copier certificate fingerprint (remote copier only)"). EA inputs (MT4 NewOrderCopier): poll_interval_ms (10, "Order detection interval in ms"), bridge_read_ms (10), debug_to_expert_log (false), i_dll_log_level (-1), CopierFingerprint (""). EA panel: Copier IP (default 127.0.0.1), Copy Port (default 29496), COPY FILTERS (Copy MKT orders only, Ignore TP / SL, Allowed symbols, Blocked symbols), IDENT TOKEN + Copy, Connect / Disconnect. Panel title IB Order Copy v<n> - Connected|Disconnected.
Connection procedure:
- Attach the EA, press Copy in the panel (token to clipboard).
- Web: Routing > New Source..., tab MetaTrader, Name, paste Ident token, OK.
- EA panel: Connect. Panel title shows Connected; source header turns green.
MetaTrader on another computer: in the copier switch on Remote API port (Settings > Connection and routing), copy Certificate SHA-256. In the EA: Copier IP = copier's address, Copy Port = the Remote API port (29497), input CopierFingerprint = the fingerprint. Open the port in firewall/router.
3.3 Linux
Requirements: 64-bit x86 (amd64), systemd, glibc 2.38 or newer and libstdc++ 13 (e.g. Ubuntu 24.04, Debian 13, Fedora 39). Built on Ubuntu 24.04. No MetaTrader components on Linux (a Linux copier copies from TWS/Gateway, the Signal API, other copiers, and from MetaTrader on a Windows PC over the Remote API port).
Packages:
| System | File | Install |
|---|---|---|
| Debian, Ubuntu and derivatives | newordercopier-service_<ver>.<build>_amd64.deb | sudo apt install ./newordercopier-service_<ver>.<build>_amd64.deb |
| other systemd distributions | newordercopier-service-<ver>.<build>-linux-x64.tar.gz | tar -xzf <file>, then in that folder sudo ./install.sh |
| checksum | SHA256SUMS_<ver>.txt | sha256sum -c SHA256SUMS_<ver>.txt --ignore-missing |
No GPG signature.
What the installation does: program in /opt/newordercopier, system user/group newordercopier, data folder /var/lib/newordercopier (mode 0700), web port in /etc/newordercopier.conf (NOC_WEB_PORT, default 8743; if busy, the next free port up to +100), service newordercopier.service enabled and started (also at boot), menu entry New Order Copier (opens the web frontend). At the end it prints:
New Order Copier runs as the service newordercopier.service.
Web frontend: http://127.0.0.1:<port>/ (menu: New Order Copier)
Setup code: <12 hex characters> - create the first user with it, then accept the liability exclusion
Log: journalctl -u newordercopier -f
install.sh options:
sudo ./install.sh # from the unpacked tarball: install, set up, start
sudo ./install.sh --port 8750 # same, with another web port
sudo /opt/newordercopier/install.sh --port 8750 # later: change the web port (tarball or .deb)
sudo /opt/newordercopier/install.sh --uninstall # remove (tarball installation only; data kept)
./install.sh --help
The port must be 1024–65535; an explicitly given busy port stops the installation.
Daily commands: systemctl status newordercopier, sudo systemctl stop|start newordercopier, journalctl -u newordercopier -f, setup code again: sudo cat /var/lib/newordercopier/config/web_setup_code.txt.
Update: install the newer package the same way (sudo apt install ./<new .deb> or unpack the new tarball and run sudo ./install.sh). A service you disabled stays disabled (sudo systemctl enable --now newordercopier). Uninstall: .deb: sudo apt remove newordercopier-service (purge removes only /etc/newordercopier.conf). Tarball: sudo /opt/newordercopier/install.sh --uninstall. /var/lib/newordercopier (incl. the order database) and the user newordercopier are always kept.
Console on Linux: running /opt/newordercopier/NewOrderCopierService by hand as a normal user without --datadir uses a separate installation (~/.local/share/NewOrderCopier, ~/.config/NewOrderCopier, ~/.local/state/NewOrderCopier) with its own settings, users, licence and order database. Warning: on Linux the single-instance lock is per data folder, so a console and the service CAN run at the same time and would copy every order twice. Run only one.
Remote access on Linux: the service unit binds the web frontend to 127.0.0.1 (command line overrides config.json). Use an SSH tunnel (see 3.5).
3.4 First start and the setup code
- Start the copier (console: Start menu; service:
sc start NewOrderCopier/ it runs after the Linux install). The console printsNew Order Copier Service v<version> Build <build>and opens the browser. - Open
http://127.0.0.1:8743/(default). - Create the first operator with the one-time setup code (12 hex characters). Where to find it:
- Console: printed in the console window (and in the log).
- Windows service: file
C:\ProgramData\trade-commander.com\NewOrderCopier\config\web_setup_code.txt(readable by administrators; also shown on the setup's Finished page if the service was started there). - Linux: printed by
install.sh; file/var/lib/newordercopier/config/web_setup_code.txt. The code survives a restart and is deleted when the first user exists. There is no default user or password.
- Fields: Setup code, User, Password, Password again → Create and log in. User name 1–32 characters (letters, digits,
.,_,-); password at least 8 characters. The first user is always an operator. - Accept the liability exclusion (operator, tick + password again). Until then nothing is copied (the console status line shows
copier NOT started (liability exclusion)). It is accepted once per data folder and again after a new program version or a text change. Alternative: start with--accept-disclaimer. - Enter the licence key (Info > License...), or use demo accounts without a key (see 5).
- Create targets (New Target...), sources (New Source...), symbol mapping tables, and switch connectors on.
Sessions: logout after inactivity 30 min by default (Users > User management, Log out after inactivity (minutes), 5–720); only clicks/key presses count as activity; absolute limit 12 h. A copier restart logs everyone out. 5 failed logins within 5 minutes from one address → "too many failed logins - wait five minutes".
Users: Users menu: User management (operators: add user, role Viewer / Operator, New password..., delete; the last operator cannot be deleted or demoted; every change asks for your own password), Change password, Audit log (operators; file log/web_audit.log).
Lost password:
- Another operator sets a new one: Users > User management > New password....
- Console: command
passwd <user>sets a random 12-character password and shows it once. - Windows service with no other operator: stop the service, start the console (it uses the same data folder), run
passwd <user>,exit, start the service again. If this does not work, contact support.
3.5 Web frontend address and remote access
- Default:
http://127.0.0.1:8743/– reachable from the same computer only. - Change port/address: config.json
/Web/port,/Web/bind, or command line--web-port,--web-bind(next start). Linux:sudo /opt/newordercopier/install.sh --port <p>. - Any address other than loopback is served as HTTPS only, with the installation's own certificate (the browser warns once).
0.0.0.0= all addresses. - Recommended remote access: SSH tunnel
ssh -L 8743:127.0.0.1:8743 <user>@<server>, then openhttp://127.0.0.1:8743/locally, or a VPN. - If the copier is updated while a browser tab is open: "This page still runs the old version - reload it." → press Reload.
3.6 Command line of NewOrderCopierService
| Option | Effect |
|---|---|
--datadir <path> | data folder (default: env NEWORDERCOPIER_DATADIR, else Windows C:\ProgramData\trade-commander.com\NewOrderCopier) |
--web-bind <address> | web address (default 127.0.0.1; non-loopback = HTTPS only) |
--web-port <port> | web port (default 8743) |
--no-browser | do not open the browser |
--accept-disclaimer | accept the liability exclusion |
--licensekey <key> | store this licence key once the server accepts it |
--install-service | Windows, admin: register the service (manual start, NetworkService) |
--prepare-data-dir | Windows, admin: create/secure the data folder for this user |
--remove-service | Windows: stop and unregister the service (data kept) |
--stop-service | Windows: stop the service |
--help, -h | usage |
Exit codes: 0 normal · 1 could not start (data folder, licence, core) · 2 liability exclusion not accepted · 3 web frontend could not start (port taken/invalid) · 64 unknown option · 75 another copier is already running.
Console commands (interactive console only, not in a service): clear errors, emstop (asks; only YES executes), errors, exit (quit), gui (reopen the browser), help (?), passwd <user>, positions, report, routes, signals, sources, status, targets, users, version, warnings. Ctrl+C stops the copier; copy text with Shift + mouse.
3.7 Data folder
| Path | Content |
|---|---|
config\config.json | the settings file |
config\license.dat | licence key (encrypted for this machine on Windows) |
config\web_users.json | web users (hashed passwords) |
config\web_setup_code.txt | first-user setup code (until the first user exists) |
config\api_cert.pem, api_key.pem | the installation's TLS certificate (remote port, HTTPS) |
data\config.mtibdb | sources, targets, connectors |
data\orders.db | the order database – never delete while positions are open |
data\mappings.db, contract.db | mapping tables, contracts |
data\ignored.db, rejected.db, excluded.db, performance.db, ... | records and performance data |
log\main.log | program log (complete only after a clean shutdown) |
log\main.csv | order history (Orders journal) |
log\source\<name>\, log\target\<name>\, log\route\ | per-source / per-target / per-route logs |
log\web_audit.log | web audit log |
Windows permissions: SYSTEM and Administrators full control; NetworkService and the Windows user who ran the setup may modify; inheritance off. They are set again on every start.
Moving to a new PC / backup: there is no built-in backup or move function. Facts:
- Stop the copier cleanly before copying (this also releases its licence units).
- On Windows the licence key file cannot be decrypted on another PC – enter the key again on the new PC.
- A copied data folder is treated as a new installation (new installation ID); existing targets keep their stored client IDs.
- Never run the old and the new copier at the same time against the same accounts.
4. Configuration reference
General rules:
- Settings page: side bar System > Settings. No OK button: a switch/list applies on change; a number/text applies with Save or Enter. If a number was out of range the banner says "saved as N (the allowed value)". Viewers see everything read-only.
- Most settings take effect at once; exceptions are marked (next start).
- Edit
config.jsonby hand only while the copier is stopped – a running copier writes its own copy back at shutdown and overwrites hand edits.
4.1 Settings > Copying
| UI label | config.json key | Default | Values | Meaning |
|---|---|---|---|---|
| Copy new entries | /CommonOrder/copyNewEntries | on | on/off | Off: no new entry (position or pending order) reaches any target; SL/TP, modifies, closes, cancels continue. A missed entry is not placed later. |
| Copy netting reversals | /CommonOrder/copyReversal | on | on/off | MT5 netting: a long↔short deal copied as one order of old + new size. Off: not copied, target keeps its old position. |
| Ignore stop loss / take profit | /CommonOrder/ignoreTPSL | off | on/off | House default for connectors set to "house setting". |
| Copy position changes only | /CommonOrder/positionsOnly | off | on/off | House default for connectors: no pending orders; a pending order filling at the source is copied at market. |
| TWS source: fill turns the copy into a market order | /CommonOrder/fillToMarket | off | on/off | TWS sources only, see 2.1. |
| Stale entry timeout (s) | /misc/stacked_entry_ttl | 45 | ≥ 0; 0 = never | While no target can trade, held MetaTrader market entries older than this are dropped (and their later close/modify). Pending orders, closes, cancels are never dropped. (The ⓘ tooltip of this row describes it differently; this table is correct.) |
| Flatten target when source is flat | /Routing/flatten_on_flat | off | on/off | House default for targets set to "use global setting". Closes what this source copied on a contract when the source is flat (cancel first, reduce-only). |
| Performance entry filter | /Routing/perf_filter | off | on/off | Main switch for the per-source performance rules. |
| Max. openings and changes (Pacing) | /Pacing/max_messages | 10 | 0–1000000; 0 = no limit | Per source per window. |
| Time window (s) (Pacing) | /Pacing/window_s | 1 | 1–3600 | Counting window. |
| Withdraw resting entries (Pacing) | /Pacing/withdraw_resting | on | on/off | On: resting entries are cancelled at every target when a suspension begins and never copied again. Off: they stay; moves are held until release. |
4.2 Settings > Signal Output (Client Mode sender)
| UI label | Key | Default | Meaning |
|---|---|---|---|
| Sender name | /SignalOutput/sender_name | empty | How receivers name your signals: <signal> (<sender name>); also used in token mails. |
| Hub address | /SignalOutput/public_host | empty | Host name (preferred) or IP under which receivers reach this copier; port = Remote API port. Written into every token: tokens made before a change no longer reach you. |
4.3 Settings > Subscriptions
| UI label | Key | Default | Meaning |
|---|---|---|---|
| Subscription folder | /ClientMode/customer_folder | empty = off | Folder for subscription JSON files (see 2.9). Browse... only works in a browser on the copier's computer and not with the Windows service. |
4.4 Settings > Mail (SMTP for token mails)
| UI label | Key | Default | Values / meaning |
|---|---|---|---|
| SMTP server | /Mail/server | empty | empty = no mail |
| SMTP port | /Mail/port | 587 | 1–65535; 587 STARTTLS, 465 SSL/TLS |
| Encryption | /Mail/security | STARTTLS | STARTTLS, SSL/TLS, none (local server only); the server certificate is always verified |
| SMTP user | /Mail/user | empty | empty = no login |
| SMTP password | encrypted file | none | write-only ("stored" / "none stored", Remove) |
| Sender e-mail | /Mail/from | empty | also the default address of the test mail |
| Copy to (Bcc) | /Mail/bcc | empty | optional own copy |
| Mail texts… | /Mail/texts/... | built-in per language | subject + text for "new subscription (the token)" and "cancellation"; placeholders {name} {group} {sender} {token} {order_id} {email}; {token} is mandatory in a new-subscription text; Default text restores the built-in text |
| Send a test mail… | – | – | result arrives later as a message |
4.5 Settings > Connection and routing
| UI label | Key | Default | Range | Meaning / when |
|---|---|---|---|---|
| Copy port (MetaTrader) | /MTConnection/CommPort | 29496 | 1–65535 | Port for EAs on this computer (127.0.0.1). New number used the next time the port opens (switch off and on). |
| Copy port on | /MTConnection/CommPortEnabled | on | on/off | Off asks first and drops every EA on this computer. |
| Local API port | /MTConnection/ApiPort | 7788 | 1–65535 | Signal API clients on this computer (127.0.0.1 only). Not needed for MetaTrader or TWS. |
| Local API port on | /MTConnection/ApiPortEnabled | off | on/off | Switched on automatically when a Signal API source is added. |
| Remote API port | /MTConnection/RemotePort | 29497 | 1–65535 | The TLS port for other computers (remote EAs, remote Signal API, Client Mode copiers). Applies at once. Must be opened in router/firewall. |
| Remote API port on | /MTConnection/RemotePortEnabled | off | on/off | |
| Certificate SHA-256 | – | generated per installation | read-only + Copy | What a remote client pins (EA input CopierFingerprint, Signal API fingerprint); Client Mode receivers get it in the token. |
| API channels (TWS targets) | /APIConnection/channels | 1 | 1–3 | Not applied yet – every target uses one connection. |
| Send threads (0 = automatic) | /Routing/send_threads | 0 | 0–32 | 0 = one per target up to the number of CPU cores. Change only on support advice. |
| Routing matrix tooltip | /Routing/matrix_tooltip | off | on/off | Explanatory tooltip over the routing matrix. |
Each port shows its state: open / off / FAILED - see the log. The web frontend's own port is not affected by these switches.
4.6 Settings > Log files
| UI label | Key | Default | Range | Meaning |
|---|---|---|---|---|
| Loglevel | /general/loglevel | warning | system, error, warning, important, message, detail, verbose | One level for every log (program, sources, targets, broker connections, MetaTrader plugin). WIRE>/WIRE< lines only from important on. |
| Order history (Orders page) | /Logging/order_history | on | on/off | Records every order step into log/main.csv (Orders journal, order trace). Independent of the log level. Off = nothing recorded. |
| Write logs asynchronously | /Logging/async | on | on/off | (next start) Off: written immediately by each thread (nothing lost on a hard crash, slower). |
| Log folder budget in MB (0 = no limit) | /Logging/budget_mb | 500 | 0–100000 (1–49 raised to 50) | (next start) Oldest rotated files removed until under budget; live files never. |
| Data folder limit in MB | /Data/budget_mb | 1000 | ≥ 100, rounded to the nearest 100 | (next start) Warning in the log + Control page tile if the databases exceed it. Nothing is deleted. |
| Keep finished records for days | /Data/keep_days | 30 | ≥ 8 | (next start) Deletes older finished and flat order groups and old not-sent/refused records. Open positions, working orders and performance records are never deleted. |
| Order trail: MB per file | /Logging/trail_max_mb | 25 | 1–1024 | (next start) Size at which main.csv rotates. |
| Order trail: files kept behind each | /Logging/trail_backups | 2 | 0–20 | (next start) Rotated copies kept. |
| Broker messages not shown in the Log page | /Logging/ignored_messages | 201:already filled; 201:cancelled already | ;-separated code or code:text | Hidden from the Log page, its tab colour and the status line; still written to the log files. |
4.7 Settings > AI reading
| UI label | Key | Default | Values |
|---|---|---|---|
| Enabled | /AI/enabled | off | Off: no figures leave the machine. |
| Provider | /AI/provider | Local (this machine) | Local (this machine), OpenRouter, OpenAI, Anthropic, Google Gemini, Grok (x.ai) |
| Local endpoint | /AI/endpoint | http://localhost:11434 | OpenAI-compatible URL (Ollama 11434, LM Studio 1234) |
| API key | encrypted store | none | write-only; shows the last 4 characters; Clear |
| Model | /AI/model | empty | model id as the provider spells it |
| Remove names and money before sending | /AI/redact | on | always on for internet providers |
| Run a connection test | – | – | sends a short test prompt |
4.8 Settings > Confirmations
| UI label | Key | Default |
|---|---|---|
| Password to close positions and for the Emergency Stop | /Web/password_for_closes | on |
| Ask before all of them | (switches the six below) | – |
| Ask before deleting a source | /Confirm/delete_source | on |
| Ask before deleting a target | /Confirm/delete_target | on |
| Ask before switching ALL sources off | /Confirm/all_sources_off | on |
| Ask before switching ALL targets off | /Confirm/all_targets_off | on |
| Ask before switching ALL connectors off | /Confirm/all_connectors_off | on |
| Ask before editing a mapping table another connector uses | /Confirm/edit_shared_mapping | on |
The Emergency Stop and Maintain Source Positions always ask.
4.9 Source dialog (New Source / Edit Source)
| Kind | UI label | Default | Rules |
|---|---|---|---|
| all | Name | empty | see 2.1 |
| all | Active bar | on for a new source | |
| MetaTrader | Ident token | – | required; "Invalid token" / "Source exists" |
| MetaTrader | Positive Magic #s / Negative Magic #s | empty | MT5 only |
| MetaTrader | Order status broadcast | off | sends the status of copied orders back to the EA |
| TWS / Gateway | IP | 127.0.0.1 | identity – cannot be changed later |
| TWS / Gateway | Port | 7496 | > 0; identity |
| TWS / Gateway | Client ID | 0 | ≥ 0; identity |
| TWS / Gateway | Master account | – | required |
| Signal API | Token | – | SIG-..., 8–63 characters; read-only after creation |
| Remote Copier | Access token (from your signal provider) | – | see 2.1 |
| all (Edit) | Pacing: Max. openings and changes, Time window (s), Withdraw resting entries | empty = Settings value | per-source override; 0 = no limit |
| all (Edit) | Suspend... / Resume | not suspended | see 2.11 |
4.10 Target dialog (New Target / Edit Target)
| Section | UI label | Default | Meaning |
|---|---|---|---|
| top | Active bar | off for a new target | active targets connect at start and take part in routing |
| Connection | IP | 127.0.0.1 | required |
| Connection | Port | 7497 | TWS 7496/7497, Gateway 4001/4002 |
| Accounts | Master account | – | required; verified on every connect; also the target's name |
| Accounts | Accounts of this login | read-only | |
| Licensed accounts | text | empty | comma-separated accounts of an FA login that may receive copies and count as licence units; empty = all accounts |
| Account Protection | Enabled | off | |
| Account Protection | Drawdown % | 10 | 0 < x < 100 |
| Account Protection | Watched account | master account | an account or All |
| Account Protection | Trail | off | |
| Contracts | List mode / Symbols | off | stored but not applied – use the connector's symbol filter |
| Positions | Flatten when source is flat | use global setting | use global setting / off / on |
4.11 Connector dialog (double-click a matrix tile / Edit connector...)
| Section | UI label | Default (new connector) | Values / meaning |
|---|---|---|---|
| top | Connector Active/Inactive | Inactive | takes effect immediately (Cancel does not undo it) |
| What is copied | Ignore stop loss / take profit | house setting | house setting / no / yes |
| What is copied | Copy position changes only | house setting | house setting / no / yes |
| Order size | Multiplier | 1 | > 0 |
| Order size | Use balance factor | off | target NLV / source balance |
| Order size | Balance factor (live) | read-only | |
| Symbol mapping | Mapping table | default table of the direction | <no mapping table> or a table |
| Symbol filter | Active list | off | off / whitelist / blacklist |
| Symbol filter | Whitelist / Blacklist | empty | comma-separated symbols |
| Allocation | Allocate to | account | account / group |
| Allocation | Account / group | empty | empty = TWS decides. With licensed accounts set on the target, empty = no new entries. |
| Allocation | Allocation method | NetLiq | NetLiq, AvailableEquity, EqualQuantity, PctChange (groups) |
| Allocation | Percentage (PctChange) | 0 | only with PctChange |
| footer | Maintain Source Positions... | – | see 2.11 |
| links | Open Symbol Mapping..., Open Log, Trace An Order... |
4.12 Per-browser preferences
| Menu | Choices | Default |
|---|---|---|
| Language | 10 languages | stored choice, else the copier's language, else the browser's, else English. Applies immediately. |
| View > Theme | System, Graphite, Light, Grey, Midnight blue, Terminal, Forest green, Purple, Orange | System |
| View > Typeface | IBM Plex, Inter + JetBrains Mono, Geist, System | IBM Plex |
4.13 config.json-only settings (no UI)
Edit only while the copier is stopped.
| Key | Default | Meaning |
|---|---|---|
/Web/port | 8743 | web frontend port (next start; --web-port overrides) |
/Web/bind | 127.0.0.1 | web address; non-loopback = HTTPS only |
/Web/open_browser | 1 | 0 = do not open the browser at start |
/Web/session_idle_min | 30 | also on the Users page (5–720) |
/MTConnection/RemoteBind | 0.0.0.0 | interface of the Remote API port |
/misc/boarding_timeout | 10 (s) | max hold time after an EA connects (and for Signal API after a start) |
/Signal/stale_entry_s | 45 (s) | Signal API: MKT place older than this is not sent; 0 = never |
/Routing/park_removed_pct | 0.5 | distance of a parked SL/TP (max 0.9) |
/general/language | empty | copier language at start (empty = Windows display language if supported, else English) |
5. Licensing
5.1 Activation
- Web: Info > License... → page Licence: paste the key from the purchase e-mail, press Activate (operators only). Alternatively start once with
--licensekey <key>. - The key is checked online against
https://license.trade-commander.com(outgoing HTTPS must be allowed). It is stored only after the server accepted it; a refused key is not stored and a previously stored key stays. - The key is stored in the data folder (
config\license.dat), shared by console and service; on Windows it is encrypted for this machine. - The licence is bound to the machine (machine ID).
- The licence page shows the key masked (last four characters) and the Digistore24 Order ID – support asks for it first.
- The licence is refreshed in the background. If the server cannot be reached, the copier stays licensed during an offline tolerance granted per licence by the server (shown on the page as "Last successful check ... (offline tolerance N h)").
5.2 What counts: target accounts
- 1 unit = 1 target account. A TWS/Gateway login managing several accounts (FA) counts once per account.
- Only connected targets count. Sources never count.
- Targets are licensed in connect order, first fit; a target is licensed whole or not at all. Which target is locked can therefore differ from start to start.
- With Licensed accounts set on a target, only those accounts count, and no new entry reaches another account of that login (directly or through an FA group; an FA group with an unlicensed or unknown member is refused).
- A Client Mode group = 1 unit while at least one of its copiers is connected.
- A running copier always holds at least one unit on the licence server. The server adds up the units of all running installations of the same key.
- A locked or unlicensed live target receives no NEW entries. Stop/target changes, modifies, cancels, partial closes, closes, account protection and the Emergency Stop continue. A position that missed a target because of the lock stays left out there for its whole life, also after the licence is fixed.
- Control page: e.g. "Licensed: 2 of 3 target account(s) in use".
5.3 Demo accounts and trial
- Demo targets are free: a target whose broker reports every account as demo (IBKR paper accounts starting with
DUorDF, MetaTrader demo) is served with or without a licence and never counts as a unit. An account that cannot be classified counts as live. - Without a licence key the copier copies new entries to demo targets only (free trial on paper accounts). Title bar:
DEMO MODE - demo accounts only, no license key (Info > License...). - Trial licences work like a bought licence until their end day; shown in turquoise as Licensed - trial, "Trial - N days left (until YYYY-MM-DD)" / "Trial - ends today". A trial ends without grace period.
5.4 Editions
- One licence product (NewOrderCopier) for all editions. The Pro version adds performance reports, Σ-Report, Publish and AI reading. Without Pro: "Pro version required" on those pages; copying is unaffected; the licence page lists the feature as "not included in this license".
- A key of another trade-commander product is refused: "This license key belongs to a different product."
5.5 Licence states
| State | Colour |
|---|---|
| Licensed | green (amber when targets are locked) |
| Licensed - trial | turquoise |
| Licensed - grace period | amber (payment grace or server unreachable within the offline tolerance) |
| Not licensed (+ reason) | red |
| Checking the license... | grey |
5.6 Transfer to a new PC
- There is no "deactivate" button. Procedure: close the copier cleanly on the old PC (this releases its activation and units on the licence server), install on the new PC, enter the key again (on Windows the key file of the old PC cannot be used).
- After a crash, units are released when the lease expires (at least 90 seconds).
- How many machines a licence may use is set per licence on the server. If the new PC reports "This license is already active on the maximum number of machines.", contact support with the Order ID.
6. Error messages and log lines
Log line format: <weekday> <date> <time>|<severity>|<function>|<thread>|<message>. Default log level is warning. main.log is complete only after a clean shutdown.
6.1 "Not sent" reasons (Log > Copy Errors, amber NOT SENT; Control page Not sent by the copier)
Row format: NOT copied - <label> (<code>)[: <detail>]. <explanation>. Nothing in this record is replayed later.
| Label (code) | Cause | Fix |
|---|---|---|
no connector (no_route) | The source has no connector to any target. | Create a connector on the Routing page. |
connector switched off (connector_disabled) | Connector exists but is off. | Switch it on (tile menu / connector dialog). |
target not reachable (target_unavailable) | Target not connected or not finished syncing. | Check TWS/Gateway and the target state. |
symbol filtered out (symbol_filtered) | The connector's symbol filter excludes the instrument. | Edit Active list / Whitelist / Blacklist. |
symbol not in the mapping (symbol_unmapped) – shown red as ERROR | The connector's mapping table has no row for the symbol (or no table): no contract and no factor. | Add the symbol to the connector's mapping table (Open Symbol Mapping...). |
symbol in no connector's mapping table (symbol_no_contract) | None of the source's active connectors has this MetaTrader symbol in its table. | Add the symbol on the Symbol Mapping page. |
size came out zero (size_zero) | Lots × mapping factor × multiplier gave zero contracts. | Check Conv. factor and Multiplier. |
source inactive (source_inactive) | The source is switched off. | Activate the source. |
blocked by the entry filter (perf_filter) | The performance filter refused this entry (detail shows figures, e.g. profit_factor 0.87 < 1.00 over the last 100 (n=100)). Closes are never refused. | Source menu > Performance filter..., or switch the filter off. |
magic number blocked (magic_blocked) | MT5 magic number filter. | Edit Positive/Negative Magic #s. |
message incomplete (incomplete_message) | MetaTrader sent the order without ticket, symbol or size (EA/plugin fault). | Send a support extract. |
opened and closed while the copier was down (replay_netted) | Nothing left to copy. | No action needed. |
the license does not cover this target (license_limit) | Target locked by the licence limit, or no valid licence (live target). | More target accounts / valid licence; see 5. |
target not connected when the signal arrived (target_not_connected) | A Signal API entry arrived while the target could not trade; signals are not buffered. | Keep targets connected. |
the account is not licensed for this target (account_not_licensed) | The order would reach an account not listed in the target's Licensed accounts (or FA group members unknown yet). | Edit Licensed accounts or the connector's allocation. |
new entries are switched off (entries_off) | Copy new entries is off. | Settings > Copying > Copy new entries on. |
contract not known to this copier (contract_unknown) | A TWS source names a contract whose description could not be fetched from TWS in time. | Make sure a target is connected; add the contract via Contract search. |
the source is suspended (source_suspended) | Pacing violation or suspended by hand. | Wait (auto-release after 10 s calm) or Resume in the source menu. |
the MetaTrader target cannot carry this order (unsupported_type) | MetaTrader target only (frozen feature). | – |
no reason recorded (none) | Gap in the copier. | Report with the order trace. |
Related source-log lines:
[STACKED COMMAND DROPPED] ticket=<n> trans=<n> reason=market entry older than the configured timeout– a held market entry exceeded Stale entry timeout (s) while no target could trade.[STACKED COMMAND DROPPED] ... reason=entry expired - close/change would open a reverse position– the close/change of such a dropped entry (intended).[STACKED COMMANDS REPLAYED] forwarded=<n>– held messages sent after a target became ready.
6.2 Refused by the broker (Copy Errors, red REFUSED)
| Text | Meaning | Fix |
|---|---|---|
REFUSED by the broker (<role>, uid <n>) - <TWS text> | TWS received the order and refused it. Reason column = IBKR's description of the code, or "not in IBKR's list". | Look at the IBKR code (6.8); fix at broker/account level (permissions, contract, margin). |
[REJECTED] target <n>: ... REFUSED by the broker - code <n>: <text> | Same, in the target log. | Same. |
| BROKER NOTE | Broker accepted but commented (e.g. repriced). | Info. |
| Finding "An order was SENT and never acknowledged by the broker." / journal "sent, no answer from the broker yet" | The order usually stands untransmitted in TWS. | Check the order in TWS; transmit or cancel it there; send a support extract. |
6.3 Licence messages
| Exact text | Fix |
|---|---|
| "The license key is not valid." | Paste the key again from the purchase e-mail. |
| "This license has been revoked." | Contact support. |
| "This license has expired." | Renew the licence. |
| "This license is already active on the maximum number of machines." | Close the copier on the other PC (releases it) or contact support. |
| "<n> target account(s) needed, but <m> of the <x> licensed are held by other installations." | Free target accounts on other installations or buy more. |
| "The license server cannot be reached." | Allow outgoing HTTPS to license.trade-commander.com (firewall/proxy). The offline tolerance applies meanwhile. |
| "The license server's answer could not be verified." | Check for an intercepting proxy; contact support. |
| "This license key belongs to a different product." | Use the New Order Copier key. |
| "License configuration error (server address, key, machine id or number of target accounts) - please contact support." | Contact support. |
| "License check failed: <code>" | Contact support with the code. |
| "The machine id cannot be read - the license cannot be checked." | Contact support. |
| "DEMO MODE - demo accounts only, no license key (Info > License...)" | No key: only demo targets get new entries. |
| "UNLICENSED - <reason>" | See reason. |
| "Without a license new entries are copied to demo accounts only; live accounts receive no new entries." | Info. |
| "LICENSE GRACE (...) - ..." / "Licensed - grace period" / "The payment grace period is running." | Payment grace or server unreachable; renew / check connection. |
| "<n> target(s) LOCKED by the license limit" / "LOCKED - needs <n>, more than is free. Receives no new entries." | More connected live target accounts than licensed. |
| "connected - not licensed, receives no new entries" | Target has no unit. |
| "Client Mode group LOCKED - needs <n>, more than is free. Its copiers receive no new entries." | Group over the licence. |
| "not managed by this login, not counted: <acct> - check the spelling" | A Licensed accounts entry is not an account of this login. |
| "No license key has been entered yet. Paste the key from your purchase e-mail below and press Activate." | First start. |
| "Version <x> is available." / "This version is no longer supported. Please update to <x>." | Install the newer version (nothing is downloaded automatically). |
Log: [LICENSE] no license key stored - only DEMO targets receive new entries until one is entered (Info > License...) | Enter a key. |
6.4 Web frontend, console and start-up
| Exact text | Cause | Fix |
|---|---|---|
| "wrong user or password" | Typo / unknown user. | Retry; see lost password (3.4). |
| "too many failed logins - wait five minutes" | 5 failed logins in 5 minutes. | Wait five minutes. |
| "wrong setup code" | Setup code typed wrong. | Take the code from console / config\web_setup_code.txt. |
| "setup is done already" | A user exists. | Log in normally. |
| "not logged in" | Session ended (idle, 12 h, restart, user changed). | Log in again. |
| "CSRF token missing or wrong" | Stale tab / session renewed elsewhere. | Reload the page and log in. |
| "foreign origin" | Request from another origin (e.g. a reverse proxy or a different host name). | Open the page by the address the copier serves. |
| "the password is wrong" | Password re-entry for close / Emergency Stop / disclaimer wrong; nothing was sent. | Type your login password. |
| "a viewer cannot change anything" / "A viewer cannot change this." / "Operators only" | Viewer role. | Log in as operator. |
| "The last operator cannot be deleted." / "The last operator cannot become a viewer." | At least one operator must remain. | Create a second operator first. |
"the liability exclusion has not been accepted yet" / console copier: NOT started - the liability exclusion waits for an operator in the web frontend | Disclaimer not accepted; nothing is copied. | Accept it as operator, or start with --accept-disclaimer. |
| "the user file could not be written" / "the acceptance could not be written" | Data folder not writable. | Check data folder permissions (--prepare-data-dir as admin). |
ERROR: the web frontend could not start on <bind>:<port> - <why> + "Change /Web/port (and /Web/bind) in <config>/config.json or start with --web-port <port>. The service ends." (exit code 3) | Port in use / invalid / certificate problem. | Choose another port. |
port <n> could not be opened on <addr> (in use by another program?) | Another program uses the port. | Free it or change the port. |
the TLS certificate or key could not be loaded (<file>) / the TLS certificate could not be created - refusing to serve on <bind> | HTTPS bind without a usable certificate. | Check data folder permissions; contact support. |
| "New Order Copier already running" – "A New Order Copier is already running on this machine. Only one copier may run at a time: ..." (exit code 75) | A console or the service is already running. | Use the running one, or close it / stop the service first. |
| "This Windows user may not use the data folder ... Run the setup again ... or, as administrator: NewOrderCopierService --prepare-data-dir" | The Windows user has no rights on the data folder. | Run the setup again as this user, or the command as administrator. |
Browser "This site can't be reached" at http://127.0.0.1:8743/ | Copier not running (the service starts manually by default). | Start the console or the service. |
| "This page still runs the old version - reload it." | Copier was updated. | Reload. |
| Header reconnecting (orange) | The page lost its live feed. | Wait; check the copier still runs. |
| "#1 NOT connected - cannot be touched" / "Nothing was closed - this target is not connected, so its positions could not be touched. They may still be open." | Emergency Stop / close on a disconnected target. | Connect the target or close in TWS. |
| "The multiplier must be greater than 0." | Connector multiplier ≤ 0. | Enter a positive value. |
| "Invalid token" / "Source exists" | New Source with a wrong or already used token. | Copy the token again from the EA panel. |
| "Endpoint not changed" | Tried to change IP/Port/Client ID of a TWS source. | Delete and recreate the source. |
| "Invalid account protection" | Drawdown % not between 0 and 100. | Correct the value. |
source name '<x>' refused (empty, too long, a quote, or in use) | Invalid or duplicate name. | Choose another name. |
6.5 Connection log lines (TWS / IB Gateway)
| Exact text | Cause | Fix |
|---|---|---|
target <x>: [connection LOST,] TWS not reachable (IB code 502) - TWS not running, API not enabled or wrong port. If TWS IS running: another Order Copier on this configuration, or one killed without closing, may still hold the API client id. Retrying quietly; reported again every 15 min. | TWS/Gateway not running, API off, wrong port, or a second copier holds the client ID. | Start TWS/Gateway, enable the API, check the port; close a second copier or restart TWS. |
target <x>: TWS still not reachable (for <time>, <n> attempts) | Outage continues (reminder every 15 min). | Same. |
target <x>: TWS connected again after <time> (<n> refused attempts) | Recovered. | – |
[IBSRC] <source>: ... TWS not reachable (IB code 502) ... | Same for a TWS source. | Same. |
Target <n> MASTER ACCOUNT MISMATCH: configured '<acct>', but <host>:<port> reports [<accts>] - disconnecting and deactivating this target | The login does not manage the configured master account. | Correct the master account or IP/port; activate the target again. |
[IBSRC] <source> MASTER ACCOUNT MISMATCH: ... | Same for a source. | Same. |
Target <n> has no master account - open it and set one before activating | No master account. | Enter it. |
[IBSRC] <source>: NO master account configured - nothing verifies that this is the TWS you meant. accounts reported: ... | Source without master account. | Enter it. |
Target <a> and target <b> use the SAME API client id <n> on <host>:<port> - TWS accepts only one of them. Give one of the two its own client id. | Two targets, same TWS, same client ID. There is no client ID field. | Send a support extract to support. |
[IBSRC] <source>: REFUSED and DISCONNECTED - ... A copier that watches an account it also trades copies its own orders back to itself. | Source shares an account with a target. | Use separate accounts. |
[IBSRC] <source>: REFUSED - its endpoint is also <host:port>. No host:port may be both a source and a target; ... | Same TWS as a target. | Use another TWS/Gateway for the source. |
[IBSRC] <source>: order permId=<n> ... is not a restable order (type='<t>' ...) - NOT copied. | Unsupported order type at the TWS source. | Use MKT, LMT, STP or STP LMT. |
[IBSRC] <source>: permId=<n> waited <ms> ms for its parent permId=<n> and the source never reported it - copied ... | Bracket child copied unattached after 2 s. | Check the copy's bracket in TWS. |
CONNECT: no active target configured - create one (Create target) and set its master account first | No active target. | Create/activate a target. |
route <x>-><y>: balance factor armed but NLV/balance unknown (...) - factor not applied | Use balance factor on, a value unknown. | Connect both ends. |
[ACCOUNT PROTECTION TRIGGERED] target <x> | Drawdown limit hit: orders cancelled, positions closed on that target. | Review the limit. |
[EMERGENCY STOP] connector <x>-><y> could NOT be disabled - it may still copy | A connector could not be switched off. | Switch it off by hand. |
6.6 Order path log lines
| Exact text | Meaning / fix |
|---|---|
WIRE> | Sent to TWS (visible only at log level important). |
WIRE< | TWS answered – the only proof the broker has the order. |
WIRE! ... REFUSED LOCALLY: <reason> - nothing sent to TWS | The copier refused the instruction itself (reasons e.g. MISSING_ACTION, MISSING_ORDERTYPE, MISSING_SIZE, MISSING_PRICE, INVALID_CONTRACT, PARENT_UNKNOWN, NOT_AUTHORIZED (licence), NO_UID (data folder not writable), UID_UNKNOWN, NOT_MODIFIABLE). Send a support extract; for NO_UID check the data folder. |
WIRE! modifyOrder id=<n> dropped - TWS reports it <state> - nothing sent | Modify of an order TWS already reports finished. Info. |
<source>: NO route to any target - this order is copied NOWHERE. Check the routing matrix (connector enabled?) and the symbol filter. | No usable connector. |
MetaTrader symbol <X> has no mapping to an IBKR contract - it is not copied. See Log > Copy Errors. | Add a mapping row. |
FILL NOT ATTRIBUTABLE - <side> <symbol> <qty>@<price> ... (ERROR) | A live fill whose order the copier cannot resolve. Check the position in TWS immediately and send a support extract. |
FILL replayed on connect, order no longer in memory - ... | TWS replays the day's executions on connect. Info. |
[BOOK] <source> <symbol>: position <id> is already CLOSED - this late message is ignored (nothing sent, the book is not changed) | A late change for a closed position was ignored (protection against re-opening). No action. |
[POSCHECK] ... copy_gone: "the source holds <n>, and this copier holds NOTHING at this target ..." | The copy was closed while the copier was not running (e.g. a protective order filled). The source position is unprotected at this target. Close it in MetaTrader or re-open the copy deliberately. |
[POSCHECK] ... ledger_stale: "our own fills say <n>, the account holds nothing on this contract" | Closed elsewhere (by hand in TWS, Emergency Stop, account protection). Nothing at risk. |
[SYNC] <sym>: MetaTrader holds <n> lot(s) and this copier holds NOTHING of it on target <x> - NOT opened. | Maintain Source Positions never opens positions. |
[SYNC] <source>: this EA reports no order list - copies of pending orders cannot be reconciled. Deploy the current EA to that terminal. | Old EA – install the current MetaTrader components. |
[SYNC] <source>: Maintain Source Positions skipped - the TWS source is not synced, its lists are not complete | Retry after the source has synced. |
... the source is FLAT and this copier still holds <n> on target <x> - but this source has no ENABLED connector ... | Reconciliation needs an enabled connector. |
CLOSE <sym> ... whole share(s) closed through the API - the fraction <x> cannot be (IBKR refuses fractional orders from the API, code 10243); it stays until it is closed in TWS | Close the fractional remainder in TWS by hand. |
Close positions refused: target <n> cannot place orders / Close position: no connected target owns account '<a>' - ... NOT closed | Target not connected. |
[BOARDING] <source> (EA <n>): no end-of-boarding message after <ms> ms. This EA is older than the copier, OR the terminal is still running the expert it had loaded before the deploy - replacing an .ex5 does NOT reload a running one. Releasing the <n> held message(s) unjudged. | Update the EA and attach it to the chart again. |
[PACING] <source> sent more than <n> opening(s) and change(s) within <s> s - SUSPENDED: no new entries and no changes are copied, closes still go out. It is released when it has stayed within its limit for <s> s. | Pacing violation; wait or raise the limit. |
[PACING] ... suspended by hand / ... resumed / source <n> is calm again - released | Suspend/Resume state changes. |
[COPY] house setting: new entries are NOT copied - stops, modifies, closes and cancels are copied either way | Copy new entries is off. |
[COPY] house setting: a netting reversal (long to short in one deal) is NOT copied - the target keeps its old position | Copy netting reversals is off. |
[CLEANUP] data folder <path>: <x> MB before, <y> MB after, limit <n> MB | Start-up cleanup; above the limit = warning + Control tile. |
order registry could not be opened <path> - orders will not survive a restart (and similar "could not be opened" lines for other records) | Data folder not writable / disk full. Fix immediately; contact support. |
uid block could NOT be reserved - ... / installation id could NOT be stored in orders.db - ... | Same – urgent. |
6.7 Copy port, EA registration, Signal API
| Exact text | Cause | Fix |
|---|---|---|
MetaTrader copy port <n> is switched OFF - not listening. No MetaTrader can connect. | Copy port switched off. | Settings > Connection and routing > Copy port on. |
Failed to start MetaTrader - bridge communication at port <n>: <why>. Consider to change port # in Menu / Setup / Com channel ports ... (port state FAILED - see the log) | The copy port could not be opened (in use). The menu path in this text is outdated. | Change Copy port (MetaTrader) in Settings and the EA panel's Copy Port to the same free number. |
MT registration REJECTED: no source with this ident token. Create the source in the copier first. token=... | EA token unknown. | Create the source with the token, press Connect in the EA. |
MT registration REJECTED: the token belongs to a source that is not a MetaTrader source (...) | A Signal API token used by an EA. | Use the EA's own token. |
MT registration REFUSED: source is deactivated. token=... | Source switched off. | Activate the source, press Connect. |
MT registration REFUSED: sync mode is exclusive - detach the other ... first. | Two EAs for one source. | Detach the other EA. |
[SIGNAL] <session> REFUSED (<code>): <text> – e.g. unknown_type "type '<x>' - only MKT LMT STP STPLMT", oid_in_use "oid '<x>' is still live", oid_unknown "oid '<x>' is not live", not_modifiable "<field> cannot be modified - cancel and place again", tif_not_restable "<tif> cannot rest - use it with MKT, or GTC / DAY" | Signal API client error. | Fix the client message. |
[SIGNAL] session <n> (...): malformed message refused - ... / [SIGNAL] HTTP from <addr>: malformed body refused - ... | Invalid JSON. | Fix the client. |
[SIGNAL] boarding over - held signals went out | Held signals sent after targets became ready. | Info. |
Local API port (Signal API) DISABLED / remote port (TLS) DISABLED | Port off. | Switch on in Settings. |
6.8 MetaTrader EA and plugin messages (Experts / Journal tab)
| Exact text | Cause | Fix |
|---|---|---|
ERROR: In order to run NewOrderCopier properly: ,ENABLE ALLOW DLL FOR EXPERT ADVISOR (Menu/Tools/Options/Exper Advisors) | DLL imports not allowed. | Tools > Options > Expert Advisors > Allow DLL imports; attach the EA again. |
You have to allow DLLs for ClickMax to work (alert; the EA does not start) | Same cause (the product name in this alert text is wrong; it is the New Order Copier EA). | Same fix. |
ATTENTION: In order to run NewOrderCopier properly: EXPERT NOT INTENDED FOR TESTING | EA started in the Strategy Tester. | Use a live chart. |
... TERMINAL NOT CONNECTED (no trades accepted at MetaTrader, no trades at IB) | Terminal not connected to its broker. | Connect the terminal. |
cannot load 'tcCopierPlugin.dll' [126] (MetaTrader's own text) | Plugin missing or wrong bitness (MT4 = 32-bit, MT5 = 64-bit; same file name). | Install with Setup > Install MetaTrader components... or mci.exe. |
NewOrderCopier rejected by copier: unknown / unregistered ident-token <token> (IDENT TOKEN turns red) | No source with this token. The EA does not retry by itself. | Create the source, press Connect. |
NewOrderCopier refused by copier: this source is DEACTIVATED (token <token>); panel title ... - Source deactivated in copier | Source off. | Activate the source, press Connect. |
Panel stays IB Order Copy v<n> - Disconnected | Copy Port differs from the copier's copy port, port off or failed, or copier not running. | Compare with Settings > Connection and routing; port state must be open. |
NewOrderCopier connect failed (already attached to <chart> ?) / Sync already attached to antoher chart (MT4) | EA attached twice in one terminal. | One copier EA per terminal/account. |
NewOrderCopier registered; waiting for bridge connection status... | Info. | – |
#warning: Transaction ignored: Copier not connected | A trade happened while the EA was not connected. | Keep the copier running; use Maintain Source Positions if needed. |
NewOrderCopier ident token copied to clipboard: <t> / clipboard copy FAILED: <t> | Copy button. | If failed, copy the token from the Experts log line NewOrderCopier ident token: <t>. |
Plugin log copier <host>:<port> not connected: <reason> – reasons: the copier is not reachable (is the port open?), no answer in time, the host name could not be resolved, the TLS certificate was not accepted (pin the copier's fingerprint), the connection broke, WinHTTP error <n> | Copier not running / port / remote TLS. | Start the copier, check the port; for a remote copier set CopierFingerprint. |
the copier's certificate does not match the fingerprint given (<hash>) - NOT connected | Pinned fingerprint differs (other copier or new installation). | Copy Certificate SHA-256 from the copier's Settings into the EA input CopierFingerprint. |
connection to the copier lost: <why> / message NOT sent - kept in the queue. | Link dropped; the message is kept and resent. | Usually heals itself (reconnect after 1–2 s). |
failed to open database=<file> code=<n> / Failed to create database tables | The plugin's local database in the terminal's Files folder is not writable. | Check the terminal data folder permissions. |
6.9 IBKR message codes
Severity: error = error line, counted, row in Refused; warning = warning line only; info = not written. A code unknown to the copier is treated as error and shown as "not in IBKR's list". The copier explains codes only with IBKR's own text: <https://www.interactivebrokers.com/docs/tws-api/doc/error-handling/error-codes>
| Code | Severity | IBKR text | Context |
|---|---|---|---|
| 103 | error | "Duplicate order ID." | Can follow a second client on the same client ID. |
| 104 | warning | "Can't modify a filled order." | Modify arrived after the fill. |
| 105 | error | "Order being modified does not match original order." | |
| 107 | error | "Cannot transmit incomplete order." | |
| 110 | error | "The price does not conform to the minimum price variation for this contract." | Price not on the tick grid. |
| 135 | info | "Can't find order with ID =" | Cancel found nothing – not a failure. |
| 136 | error | "This order cannot be cancelled." | The order still stands. |
| 154 | error | "Orders cannot be transmitted for a halted security." | |
| 161 | info | "Cancel attempted when order is not in a cancellable state." | Not a failure. |
| 200 | error | "No security definition has been found for the request." | Wrong contract – check the mapping row. |
| 201 | error | "Order rejected - Reason: ..." | Read the reason (margin, permissions, ...). 201:already filled and 201:cancelled already are hidden on the Log page by default. |
| 202 | info | "Order cancelled - Reason:" | Cancel confirmation (paper: STP ≈ 0.1 s, LMT up to ≈ 60 s). |
| 326 | error | "Unable to connect as the client id is already in use. Retry with a unique client id." | Second copier or a killed copier holds the client ID: close it or restart TWS. |
| 354 | warning | "Requested market data is not subscribed." | Market data only. |
| 382 / 383 | error | Price ticks / size constraint of the default order settings | TWS precautionary settings. |
| 387 / 388 | error | "Unsupported order type for this exchange and security type." / "Order size is smaller than the minimum requirement." | |
| 404 | warning | "Shares for this order are not immediately available for short sale. ..." | |
| 434 | error | "The order size cannot be zero." | |
| 436 | error | "You must specify an allocation (either a single account, group, or profile)." | FA login: set Allocation in the connector. |
| 502 | error | "Couldn't connect to TWS. Confirm that "Enable ActiveX and Socket Clients" is enabled and connection port is the same as "Socket Port" ..." | Logged once per outage (6.5). |
| 504 | error | "Not connected." | |
| 1100 | warning | "Connectivity between IB and the TWS has been lost." | |
| 1101 | warning | "Connectivity between IB and TWS has been restored- data lost." | The copier resyncs. |
| 1102 | info | "Connectivity between IB and TWS has been restored- data maintained." | |
| 1300 | warning | "TWS socket port has been reset and this connection is being dropped. Please reconnect on the new port - <port>" | Change the port in the target dialog. |
| 2103 / 2105 / 2157 | warning | Market data / historical / sec-def data farm disconnected or broken | Usually repairs itself. |
| 2104 / 2106 / 2158 / 2107 / 2108 / 2119 | info | Data farm connection OK / inactive / connecting | Normal on connect, not errors. |
| 2109 | warning | "Order Event Warning: Attribute "Outside Regular Trading Hours" is ignored based on the order type and destination. PlaceOrder is now processed." | |
| 2110 | warning | "Connectivity between TWS and server is broken. It will be restored automatically." | |
| 10147 / 10148 | info | "Order to be canceled was not found." / "OrderId that needs to be cancelled can not be cancelled, state: ..." | Not a failure. |
| 10243 | error | "Fractional-sized order cannot be placed via API. Please use desktop version to place this order." | Fractional stock positions (FA): close the fraction in TWS. |
| 10289 | error | "You must set Cash Quantity for this order" | |
| 10311 | info | "This order will be directly routed to ... Direct routed orders may result in higher trade fees." | |
| 10325 / 10326 / 10327 | error | "OCA group is not supported" / "OCA group revision is not allowed" / "OCA group type revision is not allowed" | The copier is designed to avoid these; if seen, send a support extract. |
7. Troubleshooting and FAQ
7.1 TWS / IB Gateway API settings
In TWS: Edit > Global Configuration > API > Settings. In IB Gateway: Configure > Settings > API > Settings.
| Setting | Value |
|---|---|
| Enable ActiveX and Socket Clients | on (otherwise "TWS not reachable (IB code 502)") |
| Read-Only API | off on every target login (otherwise TWS refuses the copier's orders) |
| Socket port | TWS 7496 live / 7497 paper; IB Gateway 4001 live / 4002 paper – the same number as Port in the target/source dialog |
| Allow connections from localhost only | on when TWS runs on the copier's computer; otherwise off and add the copier's IP to Trusted IPs |
| Trusted IPs | 127.0.0.1 or the copier computer's IP |
| Master API client ID | only relevant for a TWS source (see 2.1); targets choose their own ID |
| Download open orders on connection | recommended, not required (the copier requests open orders itself) |
| Bypass Order Precautions for API Orders (Precautions page) | optional, at your own risk – otherwise TWS can show a confirmation dialog for copied orders |
| Lock and Exit: Auto restart | recommended – TWS restarts daily and the copier reconnects by itself |
- The copier reconnects by itself (first after 5 s, then doubling up to 30 s). An outage is logged once, then every 15 minutes, and once on recovery.
- After every connect the master account is verified (see
MASTER ACCOUNT MISMATCH). - FA logins: enter the advisor's master account; choose sub-account or group per connector.
7.2 Client IDs
- Targets have no client ID field. The ID is calculated on first save from the master account and the installation, stored and never changed (a TWS client can only modify/cancel its own orders). It is never 0.
- TWS source: Client ID 0 (sees the session including manual orders) or the Master API client ID.
- Error 326 / "TWS not reachable ... may still hold the API client id": another program uses the same ID – typically a second copier (e.g. a copied data folder started on another PC) or a copier killed without closing. Close it or restart TWS.
- "Target A and target B use the SAME API client id": send a support extract to support.
7.3 MetaTrader
cannot load 'tcCopierPlugin.dll' [126]: wrong bitness or missing plugin – reinstall the components (MetaTrader closed).- DLL message: enable Allow DLL imports, attach the EA again.
- After an update the old EA keeps running: remove it from the chart and attach it again (or restart MetaTrader).
- The installer reports a file in use: close every MetaTrader and install again.
- IDENT TOKEN red: create the source with exactly this token, press Connect. Another account = another token.
- EA stays Disconnected: EA Copy Port = Settings Copy port (MetaTrader) (29496), Copy port on, state open; the copier must be running.
- The source EA only needs Allow DLL imports; it does not place trades.
- One chart per account.
- MT4 orders are not filtered by magic number; MT5 orders are.
- The EA's own COPY FILTERS stop orders before they reach the copier.
7.4 "Nothing is copied" – checklist
- Is the liability exclusion accepted? (Only an operator can accept it; until then nothing is copied.)
- Routing matrix: source header green, target row green, connector tile green live.
- Log > Copy Errors: read the reason (6.1) – most common: no connector, connector switched off, symbol not in the mapping (a MetaTrader → IBKR connector without a mapping row copies nothing), magic number blocked, the license does not cover this target, new entries are switched off.
- No licence key: only demo targets (DU/DF paper accounts) receive new entries (DEMO MODE in the title).
- Source suspended (yellow header): pacing violation (more than 10 openings/changes per second) – released automatically after 10 s calm; a manual Suspend needs Resume.
- Order sent but no broker answer: it is usually untransmitted in TWS – check TWS.
- Was a market entry held because no target could trade? It is dropped after 45 s (Stale entry timeout (s)).
- A position opened before the connector was switched on is not copied afterwards; there is no automatic synchronisation.
7.5 Ports and firewall
| Port | Default | Bind | Purpose |
|---|---|---|---|
| Web frontend | 8743 | 127.0.0.1 | browser UI (HTTPS only if bound to another address) |
| Copy port (MetaTrader) | 29496 | 127.0.0.1 | EAs on the same computer (on by default) |
| Local API port | 7788 | 127.0.0.1 | Signal API on the same computer (off by default) |
| Remote API port | 29497 | 0.0.0.0 | TLS only: remote EAs, remote Signal API, Client Mode receivers (off by default) |
| TWS / Gateway | 7496 / 7497 / 4001 / 4002 | – | outgoing from the copier |
| Licence server | 443 (license.trade-commander.com) | – | outgoing HTTPS |
- The setup creates no firewall rule; opening a port (e.g. the Remote API port for Client Mode) is your decision.
- Browsers cannot reach the trading ports (requests with an
Originheader are refused). - Ports are bound exclusively; a second program cannot use the same port.
- The copier contacts nothing else on its own (no auto-update). An AI provider and an SMTP server are contacted only if you set them up.
7.6 VPS / server
- Use the Windows service component; set the service to Automatic in
services.msconce it works. - Open the web frontend via SSH tunnel or locally on the VPS.
- Setup code:
C:\ProgramData\trade-commander.com\NewOrderCopier\config\web_setup_code.txt(as administrator). - Errors of the service: Event Viewer > Windows Logs > Application.
- Use TWS Auto restart and keep TWS/Gateway logged in.
- Linux VPS:
.debor tarball + service; logs withjournalctl -u newordercopier -f.
7.7 Only one copier
- Windows: only one copier (console or service) per machine. Close the console (
exit) or stop the service before starting the other. - Linux: one per data folder – do not run a console and the service at the same time (double copies).
7.8 Logs for support
- Set Settings > Log files > Loglevel to important for a support case (shows
WIRE>/WIRE<broker traffic); set it back to warning afterwards (files grow fast). - Paths:
log/main.log,log/main.csv,log/source/<name>/,log/target/<name>/. main.logis complete only after a clean shutdown (exitin the console, or stop the service). A killed process loses the end.
7.9 Support extract
- Operators only. Log > Orders: click the order → Write support extract...; or in Log files click a line → Write support extract....
- Question "Remove the account numbers from the extract?": No for a file sent to the vendor's support, Yes for a file you publish.
- One ZIP (
log_extract_...zip) is written into the data folder and downloaded by the browser. It contains the order trace, the matching log lines and the environment. Nothing is sent automatically. - Send it to contact@trade-commander.de together with the licence Order ID (shown on the Licence page).
7.10 FAQ
Can I copy from one IBKR account to other IBKR accounts? Yes: create a TWS/Gateway source (Client ID 0 to include manual orders) and TWS targets. The source must use another TWS/Gateway login (host:port) than the targets and must not share an account with a target.
Can I copy to an FA group? Yes: target = the advisor login, connector Allocation > Allocate to group, method NetLiq / AvailableEquity / EqualQuantity / PctChange.
Do I need a symbol mapping? For MetaTrader and Signal API sources: yes – every symbol needs a row in the connector's mapping table, otherwise nothing is copied. For TWS sources: no (1:1).
How do I copy half the size? Connector Multiplier 0.5. Or Use balance factor to scale by account size.
Are SL/TP copied? Yes, as IBKR stop/limit orders (with hedging/MT4 as one net bracket per contract). Switch off with Ignore stop loss / take profit.
What if the copier was off while I traded? Changes are delivered by the EA on reconnect; positions opened and closed in the meantime are not copied. Use Maintain Source Positions to close copies the source no longer holds. Missing positions are never opened automatically.
Does the copier close my manual positions? Only the Emergency Stop, Close all / Close selected on the Positions page and account protection do. Maintain Source Positions and Flatten when source is flat only close what the copier copied for that source.
Can I test without a licence? Yes, with IBKR paper accounts (DU/DF) as targets.
Can I run it on Linux with MetaTrader? MetaTrader runs on Windows; its EA can connect to a Linux copier over the Remote API port (TLS) with CopierFingerprint.
Can I change the language? Language menu in the web frontend (per browser, immediately).
Is there an auto-update? No. A notice "Version X is available." appears; install the new setup yourself.
8. Limits and known issues
- Platforms: no macOS. No MetaTrader components on Linux. Windows Server 2016/2019 not supported. No desktop program (browser only).
- MetaTrader as a target is frozen and not offered to new customers.
- Not yet verified against a live account by the vendor: MT5 netting accounts (including reversals), account protection firing, the closing branch of Flatten when source is flat, Maintain Source Positions, Signal API on a live account and from a remote machine, anything on Linux, DarkIce algo on futures. Test these on a paper account first.
- TWS source copies only MKT, LMT, STP, STP LMT (plus bracket children and iceberg/algo attributes). Other order types are not copied. TWS sends no indicator that a manual order is a close, so such an order is copied as an ordinary order. While an order is Inactive, Filled or PendingCancel nothing is sent.
- TWS paper: a cancelled source LMT order is confirmed only about 60 s after placement (error 202), so the copy's cancel can follow late.
- Fractional stock positions (e.g. FA NetLiq allocation): IBKR refuses fractional orders over the API (10243). The copier closes the whole shares; the fraction must be closed in TWS by hand.
- MT4: a pending-order change made while the copier is not running is not resent after the copier starts.
- A position closed in MetaTrader without the copier being told stays in the copier's position book until a restart (unless the EA's report removes it); use Maintain Source Positions.
- No automatic reconciliation: nothing is aligned when an EA connects; Maintain Source Positions only closes, never opens.
- Held MetaTrader market entries are dropped after 45 s while no target can trade (with their close).
- Signal API: commands for a target that cannot trade are dropped, not buffered. The only reply is the ack.
- Licence lock: a position that missed a target stays left out there for its whole life.
- Stored but not applied: mapping Invert; target List mode / Symbols; API channels. Balance factor (live) always shows "unknown". The Executions column Total is not meaningful.
- Reports: equity drawdowns, MFE and MAE are shown as "-" (no market data). The time from the source event to the copier ("arrival") cannot be measured.
- Large FA structures: IBKR rejects the FA group "All" for more than 50 accounts – use a named group.
- Account protection compares the target's total net liquidation; a reading below half the reference is treated as a data error.
- Licence: the copier always holds at least one target account while running; check is online with an offline tolerance only.
- Linux: the single-instance lock is per data folder (console + service could run together).
- Sounds are not played by the web frontend; alerts appear as a red Attention banner.
9. Version history highlights
Version format: v1000 Build N (build number counted per platform). Dates are development dates.
| Version | Date | Highlights |
|---|---|---|
| 1000.719–720 | 2026-11-04 | A closed position stays closed (a late SL/TP change after a take-profit close no longer re-creates it). A filled copy of a resting order is never placed again; its SL/TP keep following the source. |
| 1000.712–718 | 2026-11-03 | One data folder for console, service and plugin in C:\ProgramData\trade-commander.com\NewOrderCopier (old per-user folder taken over once; licence key moves there). Fixed install folder. Help in ten languages. |
| 1000.706–711 | 2026-11-03 | Pacing and Suspend (replaces "Block source"). Client Mode group dialog. Web in all languages. |
| 1000.699–705 | 2026-11-02 | Demo accounts free and never counted; without a key only demo targets get entries. Trial licences (turquoise). Desktop program removed – web frontend only. |
| 1000.687–698 | 2026-10-31 | TWS source fetches unknown contracts automatically; fractional positions closed in whole shares. Setup shows the first-user setup code. |
| 1000.683–686 | 2026-10-30 | Licence bound to the product name (Pro and Standard share it). |
| 1000.676–682 | 2026-10-29 | Linux set-up in one step (install.sh), setup code survives a restart, Linux release built on Ubuntu 24.04. |
| 1000.646–675 | 2026-10-28 | New web design with themes; web user management (operator/viewer, audit log). |
| 1000.637–645 | 2026-10-27 | Windows service (NetworkService, manual start); iceberg and algo orders copied from TWS sources; one copier per machine. |
| 1000.639–640 | 2026-10-26 | First code-signed release. |
| 1000.621–636 | 2026-10-25 | Start-up cleanup and data folder limit; full function set in the web frontend; logs always English. |
| 1000.598–620 | 2026-10-23 | Faster send path (targets in parallel, asynchronous logs). Copy new entries / Copy netting reversals settings. |
| 1000.582–597 | 2026-10-22 | TWS source: TIF and outside RTH copied, resting copy fills by itself, MKT copied when submitted. Signal API completed (TIF, fills, virtual position, token registration). |
| 1000.571–581 | 2026-10-20 | Client Mode: groups of receiving copiers as targets; subscriptions by file with token mail. |
| 1000.543–570 | 2026-10-17 | Signal Output / Remote Copier (copier to copier over TLS); every source has its own name. |
| 1000.492–524 | 2026-10-14 | Ten UI languages; licensed accounts per target (FA). |
| 1000.461–491 | 2026-10-12 | Per-connector Ignore SL/TP and Copy position changes only; reconciliation only on demand; all ports WebSocket, remote port TLS only. |
| 1000.437–460 | 2026-10-11 | Quiet TWS outage logging; Control page tiles; first Linux build and web frontend. |
| 1000.419–436 | 2026-10-08 | One settings file config.json; Windows 10 minimum; Σ-Report publishing; reports as Pro option. |
| 1000.397–418 | 2026-10-03 | Licence system (target accounts); Signal API introduced. |
| 1000.319–396 | 2026-09-26 | Product named New Order Copier; support extract; order trace; Σ-Report; boarding after start; order journal. |
| 1000.238–318 | 2026-09-22 | TWS / IB Gateway as source; mapping table per connector decides contract and factor; performance report and filter. |
| 1000.1–237 | 2026-07-25 – 09-11 | Rebuild on the official TWS API; multiple targets; ident-token registration; master-account check; account protection; Emergency Stop; symbol mapping page. |
10. Links and contact
- Support: contact@trade-commander.de (include the licence Order ID and, for order problems, a support extract)
- Product page: https://www.trade-commander.com/en/products/new-order-copier/ (German: https://www.trade-commander.com/de/produkt/new-order-copier/)
- Interactive setup guide: https://www.trade-commander.com/en/products/new-order-copier/setup/
- IBKR API error codes: https://www.interactivebrokers.com/docs/tws-api/doc/error-handling/error-codes