How It Trades
- From each bar's high and low, compute the 14-bar +DI and −DI (how much of the recent movement has been upward versus downward) and ADX, which measures how decisively one side is winning.
- Buy when +DI sits above −DI and ADX is above 25 at the same time: the direction is up and the move is strong enough to be a trend rather than noise inside a range.
- Sell when +DI crosses back below −DI. The exit deliberately does not wait on ADX: a fading ADX with price rolling over would otherwise strand the position.
Example Strategy
Pine Script
Paste it into TradingView’s Pine Editor to run these rules on any chart.
//@version=6
// ADX DMI Trend — sort.finance. Fills at the signal bar's close, 0.02% fee a side,
// whole account per trade, as the backtest. History and indicator warm-up
// differ from the site's, so expect close to the same trades, not identical.
strategy("ADX DMI Trend", overlay=false,
initial_capital=100, default_qty_type=strategy.percent_of_equity,
default_qty_value=100, commission_type=strategy.commission.percent,
commission_value=0.02, process_orders_on_close=true, pyramiding=0)
// The bar the current position opened on, and the bar the last one closed on.
var int entryBar = na
var int exitBar = -1
// ── Signals ──────────────────────────────────────────────────────────────
[plusDI, minusDI, adx] = ta.dmi(14, 14)
bullish = plusDI > minusDI
confirmed = bullish and adx > 25
enterNow = confirmed and not confirmed[1]
exitNow = not bullish and bullish[1]
// ── Orders ───────────────────────────────────────────────────────────────
// Open on the first bar the entry holds while flat; close on the first
// later bar the exit holds; never reopen on the bar a position closed.
inTrade = strategy.position_size != 0
if inTrade and bar_index > entryBar and exitNow
strategy.close("Long")
exitBar := bar_index
else if not inTrade and bar_index > exitBar and enterNow
strategy.entry("Long", strategy.long)
entryBar := bar_index
// ── Drawing ──────────────────────────────────────────────────────────────
plot(plusDI, "+DI 14", color=#459b61)
plot(minusDI, "-DI 14", color=#b54a48)
plot(adx, "ADX 14", color=#4d8dff)
hline(25, "Trend 25", color=color.new(#8a92a0, 40), linestyle=hline.style_dashed)