NinjaTrader 8 Copy Trading: Complete Integration Guide
NinjaTrader 8 sits on both sides of a copy setup. It can be the account you trade in, sending every fill out to your other accounts, and it can be a destination receiving trades from MT5, TradingView, cTrader, Telegram or a TopstepX account. The two directions use completely different mechanisms, and most setup problems come from mixing them up.
This guide covers both, the contract symbol format that causes more failed orders than anything else, and what does and does not work on a NinjaTrader destination depending on which version of the Add-On you have installed.
The two integration paths
| Role | Mechanism | What you install |
|---|---|---|
| NinjaTrader as source | Add-On webhook | NinjaTraderAddOn.zip |
| NinjaTrader as destination | Order Instruction Files (OIF) | Nothing. NinjaTrader reads OIF natively |
You can run both at once. A NinjaTrader account can be a source feeding three prop firm accounts while a fourth NinjaTrader account receives from somewhere else entirely.
Step 1: NinjaTrader as a source
The source side needs the Add-On, because NinjaTrader has no native way to broadcast fills to an outside application.
- In NinjaTrader, open Tools → Import → NinjaScript Add-On.
- Select the
NinjaTraderAddOn.zipshipped with Trade Dispensary. Import it as-is; do not unzip it first. - Restart NinjaTrader so the assembly loads.
- In Trade Dispensary, add a source account of type NinjaTrader and point it at the account name exactly as NinjaTrader shows it, for example
Sim101.
Once loaded, the Add-On reports entries, exits, partial exits and stop or target modifications. It runs inside NinjaTrader on your machine and talks to Trade Dispensary locally, so no order information leaves the computer.
Keep the Add-On current
Add-On features are version gated, and the destination cards in Trade Dispensary show the version they detect so you can see at a glance whether an update would unlock something. The current release is 7.2. When you re-import an update, import it under the same name so it replaces the old assembly rather than installing alongside it.
Step 2: NinjaTrader as a destination
The destination side needs no Add-On at all. NinjaTrader watches a folder for Order Instruction Files and executes anything valid that appears in it.
- In Trade Dispensary go to Accounts → Destination Accounts and click Add.
- Set the platform to NinjaTrader.
- Set the OIF folder path to NinjaTrader's incoming folder, normally
Documents\NinjaTrader 8\incoming. - Enter the account name exactly as NinjaTrader displays it. This is case sensitive and it is the single most common cause of orders that appear to send but never appear.
- Click Test Connection and confirm a file appears in the incoming folder and then disappears as NinjaTrader consumes it.
A file that appears and stays is the useful diagnostic: the path is right and the write succeeded, so the problem is inside NinjaTrader. Usually the account name does not match, or NinjaTrader is not connected to the broker.
What an OIF looks like
An OIF instruction is a single line of thirteen semicolon separated fields:
PLACE;Sim101;MNQ 03-26;BUY;2;MARKET;;;DAY;;NT48210_a4f1;;
Reading across: the command, the account, the instrument, the direction, the quantity, the order type, limit price, stop price, time in force, the OCO group id, the order id, an optional ATM strategy, and a trailing field. Empty fields still need their semicolons, which is why the line looks like it has gaps in it.
The OCO group id is how brackets hold together. A stop and a target written with the same group id cancel each other when either one fills, which is what stops a filled target from leaving a live stop order behind on a flat account. Trade Dispensary writes all of this for you, including CHANGE lines when a stop moves on the source and CLOSEPOSITION when a position needs flattening. You never edit them by hand, but knowing what they contain makes the troubleshooting below make sense.
Contract symbols: the part that actually breaks
NinjaTrader wants futures contracts as root, space, month, hyphen, two digit year:
MNQ 03-26 Micro Nasdaq, March 2026
ES 06-26 E-mini S&P, June 2026
MGC 04-26 Micro Gold, April 2026
Exchange style symbols such as NQH6 or MGCJ6 are converted automatically using the standard futures month codes, so those work too. What does not work is a source symbol in some third format, which is exactly what TradingView sends. A TradingView alert on NQ1! has to be mapped to NQ 03-26 in the copy rule, because there is no reliable way to guess which contract month a continuous symbol means.
The root symbol is usually not the ticker
This one catches nearly everybody. The E-mini S&P trades as ES but its root is EP. The Nasdaq is NQ with root ENQ. Gold is GC with root GCE. Of the 51 tradeable products, 35 have a root that differs from the ticker, and there is no pattern connecting them.
Trade Dispensary's managed contracts feature exists for this. Define the contract once, and it generates the correct symbol for every platform: MNQH26 for TopstepX, MNQ 03-26 for NinjaTrader, and whatever override you set for MT5 or cTrader. When the contract expires, one rollover updates every copy rule that references it instead of you editing each one.
What works on a NinjaTrader destination
| Capability | Requires |
|---|---|
| Market orders | Any version |
| OCO bracket orders, in points or dollars | Any version |
| Price Translate for CFD to futures copying | Any version |
| Partial and scaled exits | Add-On 5.6 or later |
| Panic close | Any version |
| Live account balance and per-account Risk Guard | Add-On 7.2 or later |
Price Translate
Price Translate is NinjaTrader specific and it solves a real problem. If you trade XAUUSD on MT5 and copy to Micro Gold futures, the two instruments do not print the same price. Copying the stop and target across unchanged puts them at levels that make no sense on the destination, and they either fill immediately or never. Price Translate queries the live futures price and rebases the bracket levels so the risk distance is preserved rather than the raw number.
Balances and Risk Guard, and one thing to know about them
Add-On 7.2 lets Trade Dispensary read a NinjaTrader account's live balance, which is what makes per-account drawdown protection possible on the platform. Each destination account can then carry its own daily loss limit and its own trailing drawdown floor, and only the account that breaches gets flattened.
There is a specific trap here worth knowing about even if you never build anything yourself. A disconnected NinjaTrader account reports NetLiquidation as zero while its cash balance sits untouched at the real figure. Anything that reads that number without checking connection state first concludes the account has lost everything and flattens a perfectly healthy account because a data feed dropped. Trade Dispensary refuses to act on a balance unless the Add-On confirms the account is connected, and treats an unreadable balance as unknown rather than as a loss. The drawdown protection write-up covers this and the equivalent problem on browser-based platforms.
Prop firms on Tradovate
Worth knowing if your firm moved platforms recently. When ProjectX withdrew licensing from third-party prop firms in February 2026, most of them went to Tradovate, NinjaTrader or WealthCharts. Only Topstep remains on ProjectX.
Tradovate is not supported directly, but Tradovate and NinjaTrader are the same company, and almost every firm offering Tradovate also offers NinjaTrader. Set those accounts up as NinjaTrader accounts and everything in this guide applies to them.
Troubleshooting
Orders send but nothing happens in NinjaTrader
- Check the account name character for character. It is case sensitive.
- Confirm NinjaTrader is connected to the broker, not just open.
- Look in the incoming folder. Files sitting there unconsumed means NinjaTrader is rejecting them, not that the write failed.
- Check the instrument string resolves to a real contract that is currently trading.
No file appears in the incoming folder
- The path is wrong or not writable. Try creating a file there by hand.
- Check the Trade Dispensary status log for a write error.
Orders fill at the wrong size
- Check the copy rule's sizing mode. A fixed multiplier applies the same contract count regardless of account size, which puts very different percentage risk on accounts of different balances.
- Confirm you are not running two copies of the Add-On, which happens if an update was imported under a different name than the original.
Brackets do not appear
- Brackets are configured per copy rule, not globally. A rule with no stop or target attached sends a bare market order.
- Partial exits need Add-On 5.6 or later. On older versions a scale-out on the source will not reduce correctly here.
Before you go live
- Test on Sim101 first, with one contract, and watch the incoming folder while you do it.
- Confirm the contract month is current. An expired contract fails silently as an unrecognised instrument.
- Size each destination account from its own balance rather than copying the source contract count.
- Check your Add-On version against the capability table above before assuming a feature is broken.
- Set a daily loss limit and trailing drawdown floor per account if you are on Add-On 7.2 or later.
Trade Dispensary includes the NinjaTrader Add-On, the MT5 Expert Advisor and the cTrader cBot in the box, and runs entirely on your own machine with no cloud relay. One-time licence, $149.
Frequently asked questions
Do I need the NinjaTrader Add-On to receive copied trades?
No. The Add-On is only needed when NinjaTrader is the source of trades. As a destination NinjaTrader reads Order Instruction Files natively, so no install is required at all. You point Trade Dispensary at NinjaTrader's incoming folder and it writes instruction files there.
Why do my orders send but never appear in NinjaTrader?
Almost always the account name. It must match what NinjaTrader displays character for character and it is case sensitive. Check the incoming folder: if files appear and sit there unconsumed, the path and the write are fine and NinjaTrader is rejecting the instruction, usually because of the account name or because it is open but not connected to the broker.
What contract symbol format does NinjaTrader need?
Root, space, month, hyphen, two digit year, for example MNQ 03-26 for March 2026 Micro Nasdaq. Exchange style symbols such as NQH6 are converted automatically. TradingView continuous symbols such as NQ1! are not, because there is no reliable way to know which contract month they mean, so those need mapping in the copy rule.
Can I copy from MT5 to NinjaTrader futures?
Yes, and it is a common setup, but the two instruments do not print the same price. Price Translate queries the live futures price and rebases the stop and target so the risk distance is preserved rather than the raw price level. Without it, brackets copied from a CFD land at levels that either fill instantly or never.
Which features need a newer Add-On version?
Market orders, OCO brackets, Price Translate and panic close work on any version. Partial and scaled exits need Add-On 5.6 or later. Live account balance and per-account Risk Guard need 7.2 or later. The destination card in Trade Dispensary shows the version it detects, so you can see whether an update would unlock something.
My prop firm moved to Tradovate. Is that supported?
Set the account up as NinjaTrader. Tradovate and NinjaTrader are the same company and almost every firm offering Tradovate also offers NinjaTrader, so the NinjaTrader path in this guide covers those accounts.
Related Posts
Continue learning about copy trading with these related articles: