Ranges from swings
At the defaults a range needs at least two swing highs and two swing lows that alternate and cluster, a height of 1 to 6 ATRs and a span of at least 8 bars. Every number is a setting.
NinjaTrader 8 indicator, NinjaScriptSupreme Range Profile Structure finds sideways ranges from the chart's swing highs and lows, shades them and builds a volume profile with a point of control inside each one. A move that closes outside and comes back gets a diamond at its extreme. A break takes closes beyond the edge, never wicks, and each confirmed break draws an entry, a stop and three targets from the range height. Ranges are rare at the defaults: a chart can go long stretches with no range at all, and that is normal for it.
$77one payment, lifetime licence
Get the lifetime licence
Drawing a range means deciding which swings count, where the edges sit and when the market has really left. Two traders draw two different boxes on one chart, and a wick through the top looks like a break until the next bar says otherwise.
The volume is a second job. You anchor a profile to the bars of the range by hand, then move it each time you change your mind about the edges. The failed moves and the breaks you mark yourself, and the stop and targets you work out on the side.
Supreme Range Profile Structure applies one rule to the swings and does the rest from there. The rule is strict, so ranges are rare, and a trending market rarely forms one. It also takes time: a range can only be found once its swings are confirmed, so its shading reaches back over bars that had already closed, and the candle tint shows where it was really on the chart.
The user guide is public: every parameter and the verification are in it. Read it before you pay.
One indicator in the price panel: the ranges, the profile, the breaks and the plan together.
At the defaults a range needs at least two swing highs and two swing lows that alternate and cluster, a height of 1 to 6 ATRs and a span of at least 8 bars. Every number is a setting.
A new swing close to an edge moves that edge a fifth of the way towards it, and the line grows more solid with each touch. Edge Adaptation at 0 keeps the edges where they were found.
14 rows by default, growing leftwards from the range's right end, grey while active, then Bullish, Bearish or grey by how the range ended. The point of control runs through the busiest row.
Two closes in a row beyond the edge plus 0.10 ATR by default. Wicks never count, and a close inside the buffer resets the count. Both numbers are settings.
A close outside the range and then a close back inside. The diamond sits at the move's extreme, on the bar that made it, and outlives its range until Deviation History removes it.
ENTRY on the broken edge, SL on the opposite edge, and TP1, TP2 and TP3 at 0.50, 1.00 and 2.00 times the range height, drawn for 10 bars. The labels show names, not prices.
While a range is active a candle's body runs from Bullish at the bottom edge through the Profile colour to Bearish at the top. A close outside takes the full colour. Two instances on one chart overwrite each other's tint.
Range Breakout, Range Breakdown, Range High Deviation and Range Low Deviation, each with its own switch, in realtime only. There is no alert for a new range or for a level being reached.
The two active edges and the four events can be read by NinjaScript strategies and shown as Market Analyzer columns. They follow the calculation, not the drawing switches.
Every picture below is a NinjaTrader 8 capture with numbered notes added. Nothing on the charts is drawn by hand. Click any image to enlarge it.

The range at the top of this SI chart is still active: grey profile rows, tinted candles, no tag and no tool. Its diamond marks a close above the top edge that came back inside. While a range is open a new swing close to an edge can move that edge, and the profile is then built again from the range's first bar.
Look at where the tint starts. A range can only be found once its swings are confirmed, so the shading reaches back over bars that had already closed, and the tint shows when it was really on the chart. The lower range shows the cost: only closes from the bar a range is found on count towards its break, so this BREAKOUT printed with the bars far above all three targets. ENTRY sits on the broken edge, not at the close of the bar that confirmed the break, and there the two are far apart.

On this GC chart two closes below the bottom edge confirmed a BREAKDOWN. ENTRY sits on the broken edge and SL on the opposite edge, so the stop distance is the range height and the targets are multiples of it. A reward box runs from the entry to TP3 and a risk box from the entry to the stop.
Then the closes went back above the entry and a wick went through the stop level. The chart marks none of that, because the levels are a plan and not a tracker: they are drawn on the break bar and stay as they are, and nothing is marked as reached. A chart that shows only the breaks that worked would tell you nothing, so this one is here. The targets are reference levels, not predictions.
The calculations are not tied to an instrument. The captures below were taken in NinjaTrader 8 on the free simulation feed: index, energy, metal, currency and rate futures, from 1-minute to 30-minute bars, with the indicator at its default settings on every one.
On a futures chart the profile reads real contract volume. A bar's volume is shared across the rows its high-to-low span covers, which is an estimate, because the indicator works from bars and not from tick data. Swings, edges, breaks and the position tool come from open, high, low and close alone. These charts were picked because each one shows a range, and that is why their intervals differ. A chart can go long stretches with no range, as the two hours after the range on the MNQ chart show, and that is normal for it.












The same order on every closed bar. Every number here is a default you can change.
A swing high is a bar whose high no bar within 5 bars on either side exceeds, and it is known 5 bars later. The newest 10 swings are kept, and two highs or two lows in a row merge into the more extreme one.
While no range is active, the newest swings form one if they hold at least two highs and two lows, the highs lie within 0.6 ATR of each other and the lows too, the height is 1 to 6 ATRs and the span at least 8 bars. The largest set that passes wins.
The shading is drawn back to the oldest swing, the profile is built and the candles are tinted from this bar on. A new swing close to an edge moves that edge, and the profile is built again.
Two closes in a row beyond an edge by more than 0.10 ATR make a break. A close beyond that buffer followed by a close back between the edges makes a diamond. A move that becomes a break gets no diamond.
The tag, ENTRY, SL and three targets are drawn on the break bar and, in realtime, the alert goes out. The swings are then cleared, and 4 bars must pass before a new range can be found.
| Hand-drawn range | Supreme Range Profile Structure | |
|---|---|---|
| Finding the range | You pick the swings by eye | By a rule on swing highs and lows |
| When it appears | When you draw it | Once its swings are confirmed, shaded back to the oldest |
| Edges | Where you put them | Move towards each new touch, or stay fixed at 0 |
| Volume inside it | A separate tool, anchored by hand | A profile and a point of control in each range |
| Failed moves | You spot them | A diamond at the move's extreme |
| What counts as a break | Your call | Closes beyond the edge plus an ATR buffer; never wicks |
| Entry, stop and targets | You work them out | Drawn on the break bar from the range height |
The engine that computes everything also runs outside NinjaTrader. With its diagnostic dump switched on, the NinjaTrader edition writes every committed bar with the values it drew; those bars are replayed through the engine outside the platform, and the two files are compared value by value.
On 4,923 MNQ 1-minute bars every one of the 121 series compared was equal on every bar. A second run, with Calculate set to each tick and the chart left live across the switch from history to live bars, gave the same result on 4,213 bars.
What that proves: the indicator receives exactly one closed bar per chart bar with the right open, high, low, close and volume, never double-feeds or skips a bar, and shows the values the engine produced. What it does not claim: it is a test of correct calculation, not of trading results, and it says nothing about future performance.
The full method is in the user guide: User Guide (PDF) and Installation and Quick Start (PDF).
No subscription and no renewal. Pay once and the indicator stays licensed to your NinjaTrader account, updates included.

Supreme Range Profile StructureNinjaTrader 8 indicator
$77one payment, lifetime licence
The licence is issued to your NinjaTrader account through NinjaTrader's Vendor Licensing, by hand, normally within a few hours and always within 24 hours of your form arriving. You get an email with the download link when it is done.
Because a licence cannot be handed back once it is on your account, a sale is final once the licence has been issued. If you paid and the licence has not been issued yet, email me and I will refund you in full. The user guide is public, so you can read exactly what the indicator does before you pay.
The full terms of sale and the privacy notice for buyers are one page each, in plain language.
Trading carries risk of loss. This is an analysis tool, not financial advice, and no indicator can promise a profit.
Breaks, their tags, the position tool, the diamonds, the end of a range by Maximum Range Age and every alert are decided on the closed bar in every Calculate mode, and they do not change afterwards. A swing is confirmed Swing Length bars after its own bar: that is a delay, and what it allows can only happen after the confirmation. So a range is found after its swings, and its shading reaches back over bars that had already closed. With OnEachTick or OnPriceChange the forming bar is also previewed, at most four times a second: before the bar closes a range can appear, an edge can move, the profile can grow and the candle can take a tint, and any of these can change or go if the bar ends differently.
Usually because the market has not formed one. A range needs swing highs and lows that alternate and cluster, inside the width limits, and a trending market rarely does that, so a chart can go long stretches with none. That is normal for it. Scroll back or load more bars. A higher Edge Stability ATR, a wider width window, a lower Minimum Range Span or a lower Swing Length find more; keep Maximum Width ATR above the minimum, because below it the minimum is used as both limits and hardly any range qualifies.
There is no fixed number, but where the history starts decides which swings are remembered and which range is found first. The indicator does not extend the chart's data: Days to load in the Data Series dialog decides how many bars exist, and Bars To Calculate then takes up to 20,000 of the newest. Two charts that loaded different amounts can show other ranges for a while. The chart's Trading Hours template decides which bars exist too. On a continuous contract use back adjustment: a roll that is not back-adjusted can end a range with a false break and inflate the ATR for a while.
No. The levels are drawn on the break bar and stay as they are, and nothing is marked as reached. ENTRY is the broken edge, not the close of the bar that confirmed the break, so price can already be past a target when the tag prints. The labels show names, not prices. TP3 can lie off the panel, because the price axis follows the bars: drag the axis to see it.
Yes. ActiveRangeHigh, ActiveRangeLow, RangeBreakout, RangeBreakdown, RangeHighDeviation and RangeLowDeviation can be read from a NinjaScript strategy and shown as Market Analyzer columns. The four events read 1 on the closed bar of the event and 0 otherwise. With OnEachTick or OnPriceChange the bar that just closed is [1]. Set Bars To Calculate high enough to cover the bars the strategy runs on.
NinjaTrader 8.1 Desktop for Windows; the build is tested on 8.1.9.0. Any data connection that delivers bars works, including the free simulation connection.
No. NinjaTrader 8 is free to download and use for charting and simulation, with free real-time futures data for the simulator. A live account with a broker of your choice is a separate step that this indicator does not need. NinjaTrader is the platform it runs inside, not a broker.
No. The licence is tied to your NinjaTrader account login through NinjaTrader's Vendor Licensing, not to a PC. Log in on any installation and the indicator runs; a new PC needs no transfer.
I issue it by hand in the NinjaTrader Vendor Dashboard. It is normally done within a few hours and always within 24 hours of your form arriving, including weekends.
No. It is one payment of 77 USD for a lifetime licence on one NinjaTrader account, with future updates included.
Once the licence has been issued the sale is final, because a licence on your account cannot be handed back. That is why the user guide is public: read it first. If you paid and the licence has not been issued yet, email me and I will refund you in full.
Yes. Email me from the address you bought with and I will move the licence to your new account login.
No indicator can promise that, and this one does not. It gives you ranges found by a stated rule, the volume traded inside them, and a plan drawn at each break. What you do with that, and how you size positions, decides the outcome.
Each one is a compiled NinjaScript Add-On, 77 USD once, with its own page, charts and public user guide.
A volume profile of the most recent closed bars whose value area, peaks and ranked rows become key levels, with marks for breaks, rejections and retests, and a metrics table.
$77 one payment, lifetime licence
Change-of-character and break-of-structure signals on closed bars, filtered and graded by seven checks, with a trade plan, an adaptive ribbon, OTE zones and a six-timeframe dashboard.
$77 one payment, lifetime licence
An anchored VWAP at each confirmed swing, pullback reclaims on closed bars, seven filter profiles, a stop, three targets and a dashboard of what those plans did on your chart.
$77 one payment, lifetime licence
77 USD once. A lifetime licence on your NinjaTrader account, updates included, and the licence issued within 24 hours.