Lifecycle & Settings
Setup code moves into the right stage of NinjaTrader 8’s lifecycle, and settings keep their names and defaults.
NinjaTrader 7 code doesn’t compile in NinjaTrader 8. We keep your indicator’s or strategy’s logic and update the code for NinjaTrader 8’s API, rendering and threading — checking the result against criteria agreed with you.
protected override void Initialize()protected override void OnStateChange()Add(new Plot(Color.Blue, "EMA"));AddPlot(Brushes.DodgerBlue, "EMA");DrawText("t", "Buy", 0, Low[0], Color.Lime);Draw.Text(this, "t", "Buy", 0, Low[0]);CalculateOnBarClose = true;Calculate = Calculate.OnBarClose;Same indicator — updated for NinjaTrader 8’s API and rendering
NinjaTrader 7 to NinjaTrader 8 conversion means updating NinjaScript written for NinjaTrader 7 so that it runs in NinjaTrader 8. The language is the same family, but NinjaTrader 8 changed how scripts start, plot, draw, handle orders and use threads — so NinjaTrader 7 code doesn’t compile as it is, and NinjaTrader 7 exports can’t be imported. The logic is kept; the code is updated.
Updating a NinjaTrader 7 indicator means moving its setup to NinjaTrader 8’s lifecycle and rebuilding how it plots and draws. The calculations stay the same.
Setup code moves into the right stage of NinjaTrader 8’s lifecycle, and settings keep their names and defaults.
Plots and colours are rebuilt with NinjaTrader 8’s plots and WPF brushes.
Custom drawing written with GDI+ is rebuilt with SharpDX in NinjaTrader 8’s rendering method, with resources handled properly.
Lines, text, shapes and regions drawn by the indicator are updated to NinjaTrader 8’s drawing class.
Extra data series and the logic that switches between them are updated, and Tick Replay is set up where the indicator needs tick data on history.
New settings, filters or functions can be added while upgrading.
Updating a NinjaTrader 7 strategy keeps its trading rules and brings its order handling, events and threading up to NinjaTrader 8.
Managed order logic is updated, and unmanaged order code moves to NinjaTrader 8’s methods.
Logic that reacts to order updates and executions is moved to NinjaTrader 8’s events and checked, so fills are handled as in the original.
Code that starts or manages ATM strategies is updated to NinjaTrader 8. An ATM version is checked on simulation or Playback: ATM strategies don’t run in backtests.
The calculate-on-bar-close setting becomes NinjaTrader 8’s calculation mode, with Tick Replay or extra series where intrabar history is needed. Tick Replay recalculates on history but doesn’t make historical fills more accurate — the fill model is checked separately.
NinjaTrader 7 session templates are matched to NinjaTrader 8’s trading hours templates.
Buttons, panels and other interface code are made safe for NinjaTrader 8’s multi-threaded platform.
Backtest results in NinjaTrader 8 can differ from NinjaTrader 7: data, fill settings and calculation timing can change between versions. We check that entries and exits follow the same rules.
NinjaTrader 8 runs NinjaScript in a different way from NinjaTrader 7. These are the differences that decide whether a converted script behaves like the original — and what we do about each of them.
Separate setup methods that run once at start
One state-based method that runs at each stage of the script’s life
Each piece of setup is moved to the right stage, so settings, data and resources load when they should.
A single switch for calculating on bar close or on every tick
Three calculation modes, and Tick Replay for intrabar history
The original’s calculation timing is kept and checked on history and in real time.
Windows Forms colours and GDI+ drawing
WPF brushes and hardware-accelerated SharpDX rendering
Plots and custom drawing are rebuilt; the look is agreed with you.
Separate methods for each drawing object
A single drawing class with updated parameters
Lines, text and shapes are updated, including their tags and colours.
Older property attributes
New property attributes and categories
Settings keep their names and defaults unless you want them changed.
Older unmanaged order methods and order events
Updated order methods, and order and execution events
Order handling is updated and checked, so fills and order states are handled as in the original.
Mostly single-threaded
Multi-threaded; interface work goes through the dispatcher
Buttons, panels and other interface code are made thread-safe.
Some things depend on the platform itself: NinjaTrader 7 exports and compiled assemblies can’t be imported into NinjaTrader 8, so the source is needed; third-party add-ons the code relies on need NinjaTrader 8 versions or replacements; and some bar types and settings work differently in NinjaTrader 8. We point these out before work starts and agree the closest NinjaTrader 8 equivalent with you.
NinjaTrader publishes a list of code-breaking changes, and working through it can make NinjaTrader 7 code compile in NinjaTrader 8. The risk is an unchecked result: compiled code can still behave differently, because NinjaTrader 8 calls scripts in stages, draws differently and runs on several threads. We keep the logic and update the code by hand.
| Automatic conversion | Manual conversion at Nordman Algorithms | |
|---|---|---|
| Starting point | Often a find-and-replace pass until the code compiles | How the NinjaTrader 7 version behaves |
| Platform differences | Often found later, if at all | Identified before work starts and agreed with you |
| Rendering and threads | Custom drawing and interface code patched until it compiles | Rebuilt for SharpDX rendering and NinjaTrader 8’s threading |
Send it to us — we review it and give you a fixed price and timeline before work starts.
We run the NinjaTrader 7 original and the NinjaTrader 8 version on the same instrument and timeframe, with matching trading sessions and bar timestamps, and compare them against acceptance criteria agreed with you:
If something doesn’t match, we find the cause — price data, platform behaviour or the code — and check the result against the agreed specification.
Share the .cs files, any custom indicators the code uses and your strategy or ATM settings — plus a short description.
You sendSource + dependenciesWe analyse the code, point out anything that works differently in NinjaTrader 8, and agree the target NinjaTrader 8 version and connection, settings, acceptance criteria, price and timeline.
You getFixed price + criteriaThe indicator or strategy is updated for NinjaTrader 8’s API, including any extra features you asked for.
We buildThe NinjaTrader 8 versionThe NinjaTrader 8 version is checked against the acceptance criteria agreed in step 2.
We checkValues, signals, tradesBugs and differences from the agreed specification are fixed after delivery.
You getSource + files to runEvery indicator and strategy is reviewed before we quote. These are the main factors.
How much logic the code contains and how many parts depend on each other.
Charts drawn with GDI+ that need rebuilding with SharpDX.
For strategies: unmanaged orders, order events, ATM strategies and partial exits.
Buttons, panels and windows that need NinjaTrader 8’s interface and threading.
Add-ons or indicators the code relies on — without NinjaTrader 8 versions or source they need a replacement.
NinjaTrader 8 can’t import NinjaTrader 7 assemblies. Without the .cs source, recreating the code from your description is assessed separately.
No. NinjaTrader 8 changed the NinjaScript API — how scripts start, plot, draw, handle orders and use threads — so NinjaTrader 7 code doesn’t compile in NinjaTrader 8 without being updated.
No. NinjaTrader 8 doesn’t import NinjaTrader 7 exports or assemblies, so the .cs source code is needed. Without it, we can assess recreating the indicator or strategy from your description — but an exact match can’t be promised in advance.
No. The logic is kept and the code is updated for NinjaTrader 8. Changes to the logic are made only if you ask for them.
Custom drawing written with GDI+ in NinjaTrader 7 is rebuilt with NinjaTrader 8’s SharpDX rendering. The agreed information is kept, and the look is agreed separately.
On the same data, values should match closely. Differences can come from the calculation mode, Tick Replay, session settings or the data itself; how closely values must match is agreed before work starts, and any difference is traced to its cause.
Yes, when trade management is written in the strategy’s own code: it then runs in the Strategy Analyzer for backtesting and optimisation. Tick Replay helps calculations on history but doesn’t make historical fills more accurate, so the backtest’s fill settings are checked separately. ATM strategies don’t run in backtests, so an ATM version is checked on a simulation account or in Playback.
Yes. New settings, filters or functions can be added as part of the same project; they are agreed and priced before work starts.
No. NinjaTrader’s list of code-breaking changes helps, but the update is done and checked by hand, so the NinjaTrader 8 version behaves like the original.
It depends on the size of the code, custom drawing, the trade handling and any add-ons the code relies on. After reviewing your NinjaScript code we give you a fixed price and an estimated timeline before work starts.
Share the NinjaTrader 7 .cs files with any custom indicators they use, and a short description of what the indicator or strategy does. We will review it and give you a fixed price and timeline before work starts.