Ehler's indicators for NT8

1


EHLER'S INDICATORS

MT4: go here
MT5: go here
👤 Background & Career

Ehlers trained as an electrical engineer: he holds a BSEE and MSEE from the University of Missouri. Later, he completed doctoral work at George Washington University, specializing in fields & waves and information theory.
Before becoming a full-time independent trader, he worked at Raytheon, retiring as a Senior Engineering Fellow.
He began trading privately in 1976. Over time, his engineering background shaped his approach to market analysis and algorithmic trading.

📈 What He’s Known For — DSP + Market Analysis

Ehlers is widely regarded as a pioneer in applying digital signal processing (DSP) — including spectral analysis and filter theory — to financial market data (stocks, futures, forex, etc.).
One of his landmark innovations: the MESA algorithm (Maximum Entropy Spectrum Analysis), a method to detect dominant cycles in price data and adapt indicator parameters accordingly, rather than relying on arbitrary/fixed periods.
His philosophy: before coding or deploying any trading technique, one should test it on theoretical waveforms (idealized data) to validate the math; only then apply to real-world data. In his view, this reduces overfitting and miscalibration.

✍️ Publications & Code — For Traders & Coders

Ehlers has authored numerous books, such as MESA and Trading Market Cycles, Rocket Science for Traders, and Cybernetic Analysis for Stocks and Futures.
He has been a frequent contributor to Technical Analysis of Stocks & Commodities magazine (often abbreviated “S&C Magazine”), where he published many indicator designs, trading system ideas, and code snippets (e.g. for various trading platforms).
His indicators often aim for “zero-lag” or minimal-lag filtering — smoothing price data without introducing too much delay. Tools like the “Directional Movement w/ Hann Windowing (DMH)”, “Zero-Lag filters”, “Laguerre filters”, custom oscillators, and cycle filters are widely attributed to him and used in algorithmic trading systems.

⚠️ What to Know — Strengths and Criticisms

Strengths: Ehlers’ approach is mathematically rigorous, explicitly uses engineering and DSP principles, and avoids “magic numbers” (like fixed-length 14-day RSI) by adapting to changing market cycles. This can produce more robust, adaptive trading indicators relative to standard ones.
Challenges / Criticisms: Some trading-community explorations of his systems (e.g. one based on his “Instantaneous Trendline” indicator) have shown poor performance with trend-following logic in out-of-sample backtests — leading some to invert the signal and use a mean-reversion logic instead.
This suggests that while the math or filtering ideas may be sound, actual trading success still depends heavily on how the filters/indicators are used, optimized, and tested — underscoring the need for rigorous backtesting and risk management.

🎯 Relevance & Influence — Why Traders Still Follow Him

Ehlers’ work helped popularize the use of DSP and adaptive filter design in trading tools, influencing many modern algorithmic traders, coders, and quantitative analysts.

Many “custom indicators” in trading platforms — especially those promising less lag and more responsiveness — trace their conceptual lineage to Ehlers’ research.

For traders with a coding background (e.g. using EasyLanguage, Python, or other algo-trading platforms), Ehlers’ papers and book content remain valuable as a mathematical foundation for building custom, tailored trading systems.


Re: NinjaTrader Ehler's indicators

2
Below is the definitive short list traders
(coders, quants, and magazine readers) encounter most from Ehlers.

===============================================================================
1️⃣ MESA (Maximum Entropy Spectrum Analysis)
Category: Cycle detection
Why it’s important:
  • This is Ehlers’ signature invention.
  • It analyzes price like a signal to find the dominant cycle length in real time.
  • Helps create adaptive moving averages, filters, and oscillators.
Used for:
  • Adapting indicator length dynamically
  • Cycle-based entries and exits
  • Avoiding fixed-period indicators (like standard RSI 14)
===============================================================================
2️⃣ Ehlers’ Instantaneous Trendline

Category: Zero-lag trend detection
Features:
  • Attempts to extract trend with nearly no lag.
  • Reacts faster than SMA/EMA while staying smoother.
Used for:
  • Trend-following systems
  • Fast directional bias without repainting
===============================================================================
3️⃣ Super Smoother Filter

Category: Low-lag smoothing
Description:
  • A 2-pole filter that removes noise while keeping responsiveness.
  • Works like a zero-lag EMA on steroids.
Used for:
  • Creating smoother versions of RSI, MACD, Stochastics
  • Reducing whipsaw during choppy forex markets
===============================================================================
4️⃣ Roofing Filter

Category: Band-pass filter
Purpose:
  • Removes both low-frequency drift (trend) and high-frequency noise.
  • Leaves only the tradable cyclical component of the price.
Used for:
  • Oscillator construction
  • Cycle-based scalping
  • Indicators like Ehlers’ Sinewave
===============================================================================
5️⃣ Ehlers Sine Wave / Lead Sine

Category: Cycle oscillator
Features:
  • Plots a sine and lead-sine line.
  • Shows turning points before RSI/MACD do.
Used for:
  • Early cycle reversals
  • Identifying peak/trough moments
  • Sideways market scalping
===============================================================================
6️⃣ Fisher Transform (Ehlers Fisher)

Category: Probability-based oscillator
Why it’s popular:
  • Converts price into a Gaussian-like distribution, making turning points more statistically meaningful.
  • Extremely sharp turning points.
Used for:
  • Reversal signals
  • Converting price swings into clear highs/lows
  • Foundation of many MT4/MT5 custom indicators
===============================================================================
7️⃣ Laguerre Filter / Laguerre RSI

Category: Recursive filter
Purpose:
  • Smooths data with almost no lag and incredibly little noise.
  • Uses gamma (γ) to control memory depth.
Used for:
  • Building “no-lag RSI,” “no-lag MACD,” etc.
  • Intraday scalping
  • Eliminating false signals
===============================================================================
8️⃣ Instantaneous Frequency & Hilbert Transform Tools

Category: Advanced DSP
Includes:
  • Hilbert Transform
  • Quadrature components
  • Dominant cycle measurement
Used for:
  • Adaptive indicators
  • Determining if market is trending or cycling
  • Identifying cycle phase (peak, trough, slope)
===============================================================================
9️⃣ Mesa Adaptive Moving Average (MAMA) & FAMA

Category: Adaptive moving averages
Features:
  • Uses the measured dominant cycle to adjust speed.
  • Fast in trends, slow in chop — automatically.
Used for:
  • Trend trading
  • Filtering noise
  • Adaptive support/resistance
===============================================================================
🔟 Decycler / De-Trending Indicator

Category: Removing cycles
Purpose:
  • Instead of filtering noise to isolate cycles, this filter removes cycles to show pure trend.
Used for:
  • Trend direction without oscillations
  • Hybrid cycle/trend systems when paired with Roofing Filter
===============================================================================
🔥 Honorable Mentions

These are also referenced frequently in S&C Magazine:
  • Zero-Lag EMA — modified EMA formula with reduced lag
  • Adaptive RSI — RSI using dominant cycle length
  • Homodyne Discriminator — cycle measurement technique
  • Band-Pass filters for scalping systems
  • Gaussian filters for ultra-smooth lines
  • Ehlers’ Cyber Cycle — a highly responsive oscillator
===============================================================================
🎯 Why Ehlers Matters for Coders

Ehlers is the bridge between engineering DSP theory and trading indicators.
He uses:
  • Digital filters
  • Spectral analysis
  • Hilbert transforms
  • Smoothing algorithms
  • Zero-lag techniques
This makes his indicators codable, modular, and mathematically consistent.

That’s why platforms like:
  • MT4/MT5
  • TradingView
  • NinjaTrader
  • ThinkorSwim
  • AmiBroker
all have large libraries of Ehlers-based indicators.
===============================================================================

Re: NinjaTrader Ehler's indicators

3
Laguerre Filters

█ CONCEPTS

As Ehlers explains in his article, the Laguerre filter is a form of transversal filter. A transversal filter calculates an output signal using a tapped delay line. It creates multiple delayed versions of an input signal, applies weight to each delay, and then calculates their sum to generate the filtered result.

The Laguerre filter's structure relies on Laguerre polynomials — solutions to a differential equation solved by Edmond Laguerre in the 1800s. When Ehlers analyzed the formula for these polynomials on discrete systems (e.g., financial time series), he found that the first term's expression corresponds to an EMA response, and all subsequent terms correspond to an all-pass response. In contrast to other filter types, an all-pass filter produces phase shift (i.e., delay) in an input signal's components without affecting its amplitude.

Ehlers observed that these characteristics of Laguerre polynomials make them suitable for use in a transversal filter structure, and thus the Laguerre filter was born. However, he notes that EMAs are not great filters in general. As such, to improve on the Laguerre filter's design, Ehlers modified it by replacing the EMA term with his UltimateSmoother filter. The resulting Laguerre filter has significantly reduced lag, achieving a tighter response to market fluctuations while maintaining smoothness. Ehlers suggests that traders can analyze crossings between the UltimateSmoother and this Laguerre filter, or those between two Laguerre filters of different order, for helpful buy and sell signals.

In addition to the Laguerre filter, Ehlers derived a smooth, low-lag oscillator based on the difference between the first and second terms in the modified filter structure, scaled by the root mean square (RMS). The resulting oscillator provides an alternative filtered representation of market data, which can help traders identify swing and mean-reversion signals.


█ USAGE

This indicator calculates both the Laguerre filter and the Laguerre oscillator described in Ehlers' article. It displays the Laguerre filter on the main chart pane and the oscillator in a separate pane.

Users can control the behavior of the filter and oscillator with the inputs in the "Settings/Inputs" tab:
  • The "Period" input defines the critical period of the UltimateSmoother used in the Laguerre filter and oscillator calculations. Its default value is 30.
  • The "Gamma" input determines the weighting behavior of the Laguerre filter and oscillator. It accepts a positive value between 0 and 1. Use a lower value for quicker responsiveness to market changes, and a higher value for trends. The default value is 0.5.
  • The "RMS length" input determines the length of the RMS calculation for oscillator normalization. The default value is 100 bars.
--------------------------------------------------------------------------------------------------------------------------------------
NinjaTrader: July 2025
In his article “Laguerre Filters” in this issue, John Ehlers presents two indicators, the Laguerre filter and the Laguerre oscillator. The indicators are available for download at the following link for NinjaTrader 8:

Once the file is downloaded, you can import the indicators into NinjaTrader 8 from within the control center by selecting Tools → Import → NinjaScript Add-On and then selecting the downloaded file for NinjaTrader 8.

You can review the indicator source code in NinjaTrader 8 by selecting the menu New → NinjaScript Editor → Indicators folder from within the control center window and selecting the file.

Re: NinjaTrader Ehler's indicators

4
PMA: projected moving average

█ CONCEPTS

In his article, Ehlers explains that the average price in a time series represents a statistical estimate for a block of price values, where the estimate is positioned at the block's center on the time axis. In the case of a simple moving average (SMA), the calculation moves the analyzed block along the time axis and computes an average after each new sample. Because the average's position is at the center of each block, the SMA inherently lags behind price changes by half the data length.

As a solution to removing moving average lag, Ehlers proposes a new projected moving average (PMA). The PMA smooths price data while maintaining responsiveness by calculating a projection of the average using the data's linear regression slope.

The slope of linear regression on a block of financial time series data can be expressed as the covariance between prices and sample points divided by the variance of the sample points. Ehlers derives the PMA by adding this slope across half the data length to the SMA, creating a first-order prediction that substantially reduces lag:

PMA = SMA + Slope * Length / 2

In addition, the article includes methods for calculating predictions of the PMA and the slope based on second-order and fourth-order differences. The formulas for these predictions are as follows:

PredictPMA = PMA + 0.5 * (Slope - Slope[2]) * Length
PredictSlope = 1.5 * Slope - 0.5 * Slope[4]

Ehlers suggests that crossings between the predictions and the original values can help traders identify timely buy and sell signals.


█ USAGE

This indicator displays the SMA, PMA, and PMA prediction for a specified series in the main chart pane, and it shows the linear regression slope and prediction in a separate pane. Analyzing the difference between the PMA and SMA can help to identify trends. The differences between PMA or slope and its corresponding prediction can indicate turning points and potential trade opportunities.

Users can customize the source series, data length, and plot colors via the inputs in the "Settings/Inputs" tab.

-----------------------------------------------------------------------------------------------------------------------------------------------------
NinjaTrader: March 2025
In “Removing Moving Average Lag” in this issue, John Ehlers presents the projected moving average (PMA) and some accompanying indicators. Several of the indicators discussed in the article are available for download at the following link for NinjaTrader 8:

Once the file is downloaded, you can import the indicator into NinjaTrader 8 from within the control center by selecting Tools → Import → NinjaScript Add-On and then selecting the downloaded file for NinjaTrader 8.

You can review the indicator source code in NinjaTrader 8 by selecting the menu New → NinjaScript Editor → Indicators folder from within the control center window and selecting the file.

Re: NinjaTrader Ehler's indicators

5
Ultimate Smoother

The UltimateSmoother, which is introduced in the article “The Ultimate Smoother” in this issue by John Ehlers, is available for download at the following link for NinjaTrader 8:

Once the file is downloaded, you can import the indicator into NinjaTrader 8 from within the control center by selecting Tools → Import → NinjaScript Add-On and then selecting the downloaded file for NinjaTrader 8.

You can review the indicator source code in NinjaTrader 8 by selecting the menu New → NinjaScript Editor → Indicators folder from within the control center window and selecting the file.

A chart displaying the indicator is shown below:


Re: NinjaTrader Ehler's indicators

6
Ultimate Channel

TASC = Technical Analysis of Stocks & Commodities
TASC magazine May 2024 issue

The ultimate channel and ultimate bands indicators, which are described in the article “Ultimate Channels And Ultimate Bands” in this issue by John Ehlers, are available for download at the following link for NinjaTrader 8:

Once the file is downloaded, you can import the indicator into NinjaTrader 8 from within the control center by selecting Tools → Import → NinjaScript Add-On and then selecting the downloaded file for NinjaTrader 8.

You can review the indicator source code in NinjaTrader 8 by selecting the menu New → NinjaScript Editor → Indicators folder from within the control center window and selecting the file.

Sample charts demonstrating the two indicators are shown below:

Re: NinjaTrader Ehler's indicators

7
The One Euro Filter

OVERVIEW

This script implements the One Euro filter, developed by Georges Casiez, Nicolas Roussel, and Daniel Vogel, and adapted by John F. Ehlers in his article "Low-Latency Smoothing" from the December 2025 edition of the TASC Traders' Tips. The original creators gave the filter its name to suggest that it is cheap and efficient, like something one might purchase for a single Euro.

CONCEPTS

The One Euro filter is an EMA-based low-pass filter that adapts its smoothing factor (alpha) based on the absolute values of smoothed rates of change in the source series. It was designed to filter noisy, high-frequency signals in real time with low latency. Ehlers simplifies the filter for market analysis by calculating alpha in terms of bar periods rather than time and frequency, because periods are naturally intuitive for a discrete financial time series.

In his article, Ehlers demonstrates how traders can apply the adaptive One Euro filter to a price series for simple low-latency smoothing. Additionally, he explains that traders can use the filter as a smoothed oscillator by applying it to a high-pass filter. In essence, similar to other low-pass filters, traders can apply the One Euro filter to any custom source to derive a smoother signal with reduced noise and low lag.

This script applies the One Euro filter to a specified source series, and it applies the filter to a two-pole high-pass filter or other oscillator, depending on the selected "Osc type" option. By default, it displays the filtered source series on the main chart pane, and it shows the oscillator and its filtered series in a separate pane.

INPUTS
  • Source: The source series for the first filter and the selected oscillator.
  • Min period: The minimum cutoff period for the smoothing calculation.
  • Beta: Controls the responsiveness of the filter. The filter adds the product of this value and the smoothed source change to the minimum period to determine the filter's smoothing factor. Larger values cause more significant changes in the maximum cutoff period, resulting in a smoother response.
  • Osc type: The type of oscillator to calculate for the pane display. By default, the indicator calculates a high-pass filter. If the selected type is "None", the indicator displays the "Source" series and its filtered result in a separate pane rather than showing the filter on the main chart. With this setting, users can pass plotted values from another indicator and view the filtered result in the pane.
  • Period: The length for the selected oscillator's calculation.
------------------------------------------------------------------------------------------------------------------
Ninjatrader: December 2025
In “The One Euro Filter” in this issue, John Ehlers discussed the one euro filter. The indicator is available for download at the following link for NinjaTrader 8:

Once the file is downloaded, you can import the indicator into NinjaTrader 8 from within the control center by selecting Tools → Import → NinjaScript Add-On and then selecting the downloaded file for NinjaTrader 8.

You can review the indicator source code in NinjaTrader 8 by selecting the menu New → NinjaScript Editor → Indicators folder from within the control center window and selecting the file.
------------------------------------------------------------------------------------------------------------------

Re: NinjaTrader Ehler's indicators

8
The Continuation Index

█ OVERVIEW
This script implements the "Continuation Index" as described by John F. Ehlers in the September 2025 edition of TASC's Trader's Tips. The Continuation Index uses Laguerre filters (featured in the July 2025 edition) to provide an early indication of trend direction, continuation, and exhaustion.

█ CONCEPTS
The idea for the Continuation Index was formed from an observation about Laguerre filters. In his article, Ehlers notes that when price is in trend, it tends to stay to one side of the filter. When considering smoothing, the UltimateSmoother was an obvious choice to reduce lag. With that in mind, The Continuation Index normalizes the difference between UltimateSmoother and the Laguerre filter to produce a two-state oscillator.
To minimize lag, the UltimateSmoother length in this indicator is fixed to half the length of the Laguerre filter.

█ USAGE
The Continuation Index consists of two primary states.
  • +1 suggests that the trader should position on the long side.
  • -1 suggests that the user should position on the short side.
Other readings can imply other opportunities, such as:
  • High Value Fluctuation could be used as a "buy the dip" opportunity.
  • Low Value Fluctuation could be used as a "sell the pop" opportunity.
█ INPUTS
By understanding the inputs and adjusting them as needed, each trader can benefit more from this indicator:
  • Gamma: Controls the Laguerre filter's response. This can be set anywhere between 0 and 1. If set to 0, the filter’s value will be the same as the UltimateSmoother.
  • Order: Controls the lag of the Laguerre filter, which is important when considering the timing of the system for spotting reversals. This can be set from 1 to 10, with lower values typically producing faster timing.
  • Length: Affects the smoothing of the display. Ehlers recommends starting with this value set to the intended amount of time you plan to hold a position. Consider your chart timeframe when setting this input. For example, on a daily chart, if you intend to hold a position for one month, set a value of 20.
----------------------------------------------------------------------------------------------------------------------
NinjaTrader: September 2025
In his article “The Continuation Index” in this issue, John Ehlers presents an indicator named the continuation index. The indicator is available for download at the following link for NinjaTrader 8:

Once the file is downloaded, you can import the indicator into NinjaTrader 8 from within the control center by selecting Tools → Import → NinjaScript Add-On and then selecting the downloaded file for NinjaTrader 8.

You can review the indicator source code in NinjaTrader 8 by selecting the menu New → NinjaScript Editor → Indicators folder from within the control center window and selecting the file.
----------------------------------------------------------------------------------------------------------------------

Re: NinjaTrader Ehler's indicators

9
Cybernetic Oscillator

█ CONCEPTS

Oscillators are indicators widely used by technical traders. These indicators swing above and below a center value, emphasizing cyclic movements within a frequency range. In his article, Ehlers explains that all oscillators share a common characteristic: their calculations involve computing differences. The reliance on differences is what causes these indicators to oscillate about a central point.

The difference between two data points in a series acts as a highpass filter — it allows high frequencies (short wavelengths) to pass through while significantly attenuating low frequencies (long wavelengths). Ehlers demonstrates that a simple difference calculation attenuates lower-frequency cycles at a rate of 6 dB per octave. However, the difference also significantly amplifies cycles near the shortest observable wavelength, making the result appear noisier than the original series. To mitigate the effects of noise in a differenced series, oscillators typically smooth the series with a lowpass filter, such as a moving average.

Ehlers highlights an underlying issue with smoothing differenced data to create oscillators. He postulates that market data statistically follows a pink spectrum, where the amplitudes of cyclic components in the data are approximately directly proportional to the underlying periods. Specifically, he suggests that cyclic amplitude increases by 6 dB per octave of wavelength.

Because some conventional oscillators, such as RSI, use differencing calculations that attenuate cycles by only 6 dB per octave, and market cycles increase in amplitude by 6 dB per octave, such calculations do not have a tangible net effect on larger wavelengths in the analyzed data. The influence of larger wavelengths can be especially problematic when using these oscillators for mean reversion or swing signals. For instance, an expected reversion to the mean might be erroneous because oscillator's mean might significantly deviate from its center over time.

To address the issues with conventional oscillator responses, Ehlers created a new indicator dubbed the Cybernetic Oscillator. It uses a simple combination of highpass and lowpass filters to emphasize a specific range of frequencies in the market data, then normalizes the result based on RMS. The process is as follows:
Apply a two-pole highpass filter to the data. This filter's critical period defines the longest wavelength in the oscillator's passband.
Apply a two-pole SuperSmoother (lowpass filter) to the highpass-filtered data. This filter's critical period defines the shortest wavelength in the passband.
Scale the resulting waveform by its RMS. If the filtered waveform follows a normal distribution, the scaled result represents amplitude in standard deviations.

The oscillator's two-pole filters attenuate cycles outside the desired frequency range by 12 dB per octave. This rate outweighs the apparent rate of amplitude increase for successively longer market cycles (6 dB per octave). Therefore, the Cybernetic Oscillator provides a more robust isolation of cyclic content than conventional oscillators. Best of all, traders can set the periods of the highpass and lowpass filters separately, enabling fine-tuning of the frequency range for different trading styles.


█ USAGE

The "Highpass period" input in the "Settings/Inputs" tab specifies the longest wavelength in the oscillator's passband, and the "Lowpass period" input defines the shortest wavelength. The oscillator becomes more responsive to rapid movements with a smaller lowpass period. Conversely, it becomes more sensitive to trends with a larger highpass period. Ehlers recommends setting the smallest period to a value above 8 to avoid aliasing. The highpass period must not be smaller than the lowpass period. Otherwise, it causes a runtime error.

The "RMS length" input determines the number of bars in the RMS calculation that the indicator uses to normalize the filtered result.
-------------------------------------------------------------------------------------------------------------------------
NinjaTrader: June 2025
In “Making A Better Oscillator” in this issue, John Ehlers presents a new oscillator he calls the cybernetic oscillator. The indicator discussed in the article is available for download at the following link for NinjaTrader 8:

Once the file is downloaded, you can import the indicator into NinjaTrader 8 from within the control center by selecting Tools → Import → NinjaScript Add-On and then selecting the downloaded file for NinjaTrader 8.

You can review the indicator source code in NinjaTrader 8 by selecting the menu New → NinjaScript Editor → Indicators folder from within the control center window and selecting the file.
A sample chart demonstrating applying the cybernetic oscillator on a chart of ES is shown.
This figure demonstrates application of the author’s example trading strategy based on rate-of-change.

Re: NinjaTrader Ehler's indicators

10
The Ultimate Oscillator

█ CONCEPTS

In his article, Ehlers states that indicators are essentially filters that remove unwanted noise (i.e., unnecessary information) from market data. Simply put, they process a series of data to place focus on specific information, providing a different perspective on price dynamics. Various filter types attenuate different periodic signals within the data. For instance, a lowpass filter allows only low-frequency signals, a highpass filter allows only high-frequency signals, and a bandpass filter allows signals within a specific frequency range.

Ehlers explains that the key to removing indicator lag is to combine filters of different types in such a way that the result preserves necessary, useful signals while minimizing delay (lag). His proposed UltimateOscillator aims to maintain responsiveness to a specific frequency range by measuring the difference between two highpass filters' outputs. The oscillator uses the following formula:

UO = (HP1 - HP2) / RMS

Where:
HP1 is the first highpass filter.
HP2 is another highpass filter that allows only shorter wavelengths than the critical period of HP1.
RMS is the root mean square of the highpass filter difference, used as a scaling factor to standardize the output.


The resulting oscillator is similar to a bandpass filter, because it emphasizes wavelengths between the critical periods of the two highpass filters. Ehlers' UO responds quickly to value changes in a series, providing a responsive view of momentum with little to no lag.


█ USAGE

Ehlers' UltimateOscillator sets the critical periods of its highpass filters using two parameters: BandEdge and Bandwidth:
The BandEdge sets the critical period of the second highpass filter, which determines the shortest wavelengths in the response.
The Bandwidth is a multiple of the BandEdge used for the critical period of the first highpass filter, which determines the longest wavelengths in the response. Ehlers suggests that a Bandwidth value of 2 works well for most applications. However, traders can use any value above or equal to 1.4.
---------------------------------------------------------------------------------------------------------------------------------
NinjaTrader: April 2025
In “The Ultimate Oscillator” in this issue, John Ehlers presents a no-lag oscillator. The indicator discussed in the article is available for download at the following link for NinjaTrader 8:

Once the file is downloaded, you can import the indicator into NinjaTrader 8 from within the control center by selecting Tools → Import → NinjaScript Add-On and then selecting the downloaded file for NinjaTrader 8.

You can review the indicator source code in NinjaTrader 8 by selecting the menu New → NinjaScript Editor → Indicators folder from within the control center window and selecting the file.