Your Entries Aren’t the Problem. Your Exits Are.
How an ADX exit filter took a basic NQ breakout from 3.42 to 6.12 RET/DD.
Research and education only. Results are hypothetical and based on backtests and simulations. Past performance does not predict future results. Futures and derivatives involve significant risk. Test on your own data, costs, execution, and infrastructure before trading.
Most traders don’t ruin their systems at the entry.
They ruin them at the exit.
You can be right on direction…
and still butcher the trade.
That’s what dumb exits do.
They don’t know when trend strength is still alive.
They just pull the plug on schedule.
So I tested a different idea:
Use ADX for exits, not entries.
Not to ask:
Should I take this trade?
But to ask:
Does this trade still deserve to be held?
That one shift changed everything.
On a simple long-only NQ breakout, the baseline produced a 3.42 return-to-drawdown ratio.
Once ADX started managing the exit, that climbed to 5.63.
And when I pushed the framework further, it reached 6.12.
Same market.
Same core entry idea.
Smarter exit logic.
That’s what this article is about.
Most traders are solving the wrong problem
If you’ve built systems for any length of time, you’ve probably felt this.
You catch the move.
You survive the noise.
Then you either cut the winner too early…
or sit there giving back open profit because your exit has no feel for whether the trend is still healthy.
That’s the part that stings.
Not being totally wrong.
Being almost right and still walking away with less than you should.
Most traders respond by hunting for a better entry.
Another filter.
Another setup.
Another layer of confirmation.
But a lot of the time, the entry isn’t the real leak.
The leak is what happens after you get in.
That’s why I wanted to test ADX in a different role.
The contrarian angle
ADX is usually treated like a gatekeeper.
Trade only when trend strength is present.
That’s the standard play.
And sometimes it works.
But I think a lot of traders are using it too early in the decision chain.
Because once you’re already in the trade, the question changes.
You no longer need help deciding whether to participate.
You need help deciding whether the trade still deserves your capital.
That’s a different job.
Less prediction.
More trade management.
And for breakout systems, that distinction matters.
A lot.
What ADX is really useful for
ADX measures trend strength.
Not direction.
That’s what makes it so interesting here.
A good exit tool does not need to predict the next bar.
It does not need to forecast.
It does not need to tell you the future.
It just needs to answer one practical question:
Is there still enough strength behind this move to justify staying in?
That’s it.
That’s the entire idea.
Instead of using ADX as a front-door filter, I used it like a pressure gauge during the trade.
If the move still had strength, the trade could breathe.
If that strength deteriorated enough, the position no longer deserved to be held.
Simple concept.
Very different outcome.
The baseline
To test it properly, I started with a clean baseline.
Nothing fancy.
Long-only NQ breakout.
60-minute chart.
Buy above the highest high of the last 5 bars.
Exit after 14 bars if nothing else closes the trade first.
Commission included.
One tick of slippage included.
That baseline produced:
Net Profit: $287,817
Profit Factor: 1.13
Trades: 2,445
Largest Trade Drawdown: $23,940
RET/DD: 3.42
That’s a solid control.
Not spectacular.
Not terrible.
Exactly the kind of simple base model worth improving.
What changed
I didn’t change the market.
I didn’t change the core breakout concept.
I didn’t pile on ten new entry conditions.
I changed the exit logic.
That was the whole experiment.
Can ADX do a better job managing the life of the trade than a fixed hold alone?
The answer was yes.
And not by a little.
Once ADX started deciding whether trend strength still justified staying in the trade, the system improved materially.
The first major improvement took the strategy to:
Net Profit: $319,355**
Profit Factor: 1.16
Trades: 3,300
Largest Trade Drawdown: $20,045
RET/DD: 5.63
That gets my attention for a few reasons.
More net profit.
Better return relative to drawdown.
Lower largest trade drawdown.
Same entry.
Better trade management.
That’s exactly the kind of improvement I want to see in strategy research.
Not some Frankenstein rebuild.
Just a cleaner way to manage an open position.
The first layer of implementation
I also wanted this article to be practical, not just conceptual.
So below is the exact snippet used for the initial ADX exit logic. Just add this to your strategy and run your own experiments.
ADX exit snippet
//------------------------------------------------------------------
// ADX Exit Filter (Filters 1-4)
// Add inputs, vars, calc, and filter block to your strategy
//
// ExitFilterMult optimization range: 0.5 to 2.0 step 0.1
// Each filter's base constant is calibrated so that this range
// produces meaningful variation without degenerate edge cases.
//------------------------------------------------------------------
// ================================================================
// INPUTS — add to your inputs section
// ================================================================
// ExitFilterSelect(0), { 0=off, 1=ADX rising, 2=ADX floor,
// 3=ADX strong-trend floor, 4=DI+ above DI- }
// ExitFilterMult(1.0), { 0.5=lenient 1.0=default 2.0=strict }
// ADXPeriod(14);
// ================================================================
// VARS — add to your vars section
// ================================================================
// TrueHigh(0),
// TrueLow(0),
// DM_Plus(0),
// DM_Minus(0),
// SmoothedDMPlus(0),
// SmoothedDMMinus(0),
// SmoothedTR(0),
// Prev_SmoothedDMPlus(0),
// Prev_SmoothedDMMinus(0),
// Prev_SmoothedTR(0),
// DI_Plus(0),
// DI_Minus(0),
// DX(0),
// ADX_Wilder(0),
// Prev_ADX(0),
// ExitFilterOK(0);
// ================================================================
// ADX CALCULATION — place before filter block
// ================================================================
TrueHigh = MaxList(High, Close[1]);
TrueLow = MinList(Low, Close[1]);
if High - High[1] > Low[1] - Low then
DM_Plus = MaxList(High - High[1], 0)
else
DM_Plus = 0;
if Low[1] - Low > High - High[1] then
DM_Minus = MaxList(Low[1] - Low, 0)
else
DM_Minus = 0;
if CurrentBar <= ADXPeriod then begin
SmoothedDMPlus = Prev_SmoothedDMPlus + DM_Plus;
SmoothedDMMinus = Prev_SmoothedDMMinus + DM_Minus;
SmoothedTR = Prev_SmoothedTR + (TrueHigh - TrueLow);
end else begin
SmoothedDMPlus = Prev_SmoothedDMPlus - (Prev_SmoothedDMPlus / ADXPeriod) + DM_Plus;
SmoothedDMMinus = Prev_SmoothedDMMinus - (Prev_SmoothedDMMinus / ADXPeriod) + DM_Minus;
SmoothedTR = Prev_SmoothedTR - (Prev_SmoothedTR / ADXPeriod) + (TrueHigh - TrueLow);
end;
Prev_SmoothedDMPlus = SmoothedDMPlus;
Prev_SmoothedDMMinus = SmoothedDMMinus;
Prev_SmoothedTR = SmoothedTR;
if SmoothedTR <> 0 then begin
DI_Plus = 100 * SmoothedDMPlus / SmoothedTR;
DI_Minus = 100 * SmoothedDMMinus / SmoothedTR;
end;
if DI_Plus + DI_Minus <> 0 then
DX = 100 * AbsValue(DI_Plus - DI_Minus) / (DI_Plus + DI_Minus);
if CurrentBar <= ADXPeriod then
ADX_Wilder = (Prev_ADX * (CurrentBar - 1) + DX) / CurrentBar
else
ADX_Wilder = (Prev_ADX * (ADXPeriod - 1) + DX) / ADXPeriod;
Prev_ADX = ADX_Wilder;
// ================================================================
// ADX EXIT FILTER BLOCK (1-4)
// Place before entry logic
// ================================================================
ExitFilterOK = 1;
if ExitFilterSelect > 0 and MarketPosition > 0 then begin
// 1: ADX rising — hold while trend momentum is strengthening bar-over-bar
// Exit when ADX ticks down or goes flat
// ExitFilterMult has no effect on this filter (pure direction check)
if ExitFilterSelect = 1 then begin
if ADX_Wilder <= ADX_Wilder[1] then ExitFilterOK = 0;
end;
// 2: ADX above floor — hold while trend is strong enough to trade
// Base = 15 | Mult 0.5 = floor 7.5 (lenient)
// | Mult 1.0 = floor 15 (default)
// | Mult 2.0 = floor 30 (strict)
if ExitFilterSelect = 2 then begin
if ADX_Wilder < 15 * ExitFilterMult then ExitFilterOK = 0;
end;
// 3: ADX above strong-trend floor — stricter version of filter 2
// Base = 20 | Mult 0.5 = floor 10 (lenient)
// | Mult 1.0 = floor 20 (default)
// | Mult 2.0 = floor 40 (strict)
if ExitFilterSelect = 3 then begin
if ADX_Wilder < 20 * ExitFilterMult then ExitFilterOK = 0;
end;
// 4: DI+ above DI- — hold while bulls have directional edge
// Exit when bearish pressure overtakes bullish momentum
// ExitFilterMult has no effect on this filter (pure crossover check)
if ExitFilterSelect = 4 then begin
if DI_Plus <= DI_Minus then ExitFilterOK = 0;
end;
end;
// Apply filter — place immediately after block above
if ExitFilterOK = 0 then begin
if MarketPosition > 0 then Sell("ExitADXFilter") this bar on close;
end;
Even at this stage, the takeaway is already clear:
you do not need to reinvent the entry to materially improve the system.
You need the trade to stop acting blind after it opens.
Why this matters more than most traders think
This is the opportunity most traders miss.
They spend months trying to perfect the setup.
Meanwhile their exit is still using a kitchen timer.
That works fine when the move behaves perfectly.
But markets don’t care about your timer.
Some trades need more room.
Some trades are already dying before the hold period ends.
Some are still healthy when the default exit forces them closed.
That’s why exit logic matters so much.
A fixed exit is blind.
It cannot tell the difference between a strong trend and a tired one.
ADX can.
Not perfectly.
Nothing does.
But it can at least give the strategy a way to respond to the quality of the move instead of just the passage of time.
And that changes the shape of the equity curve.
The real takeaway
The biggest lesson here wasn’t that ADX is magic.
It’s not.
The lesson was that a simple strategy can get a lot stronger when the exit stops acting blind.
That’s the kind of improvement I care about.
Not more complexity.
Not more indicators.
Not more knobs to optimize.
Just a more intelligent answer to one question:
Should this trade still be open?
And when you frame the problem that way, ADX starts making a lot more sense on the exit side than most traders realise.
Where the jump gets interesting
Up to this point, you’ve seen the idea.
You’ve seen the baseline.
You’ve seen the first lift in performance.
And you’ve seen the initial implementation.
But the part that made this worth publishing was what happened when I pushed the framework further.
That version produced:
Net Profit: $353,971
Profit Factor: 1.17
Trades: 2,529
Largest Trade Drawdown: $23,940
RET/DD: 6.12
That’s where this stops being a neat concept…
and starts becoming something you can actually build with.
Because now we’re not talking about a small cosmetic improvement.
We’re talking about a meaningful upgrade in risk-adjusted performance.
And if you’ve ever watched a good trade slowly die because your exit was too dumb to adapt, this is the moment that should hit home.
Because the difference between a decent strategy and a strong one is often not the entry.
It’s whether your exit knows when strength is still alive…
and when it’s quietly dying.





