How It Trades
- Track the 252-bar high: the highest close of roughly the past year of bars, the market's high-water mark.
- Buy when the close comes within 5% of that high (at or above 95% of it): markets pressing against their yearly high tend to keep going, partly because investors hesitate to buy near a high and the move unfolds slowly.
- Sell only when the close falls more than 15% below the high-water mark: the wide gap between the 5% entry and the 15% exit leaves room for normal pullbacks without shaking the position out.
Example Strategy
Pine Script
Paste it into TradingView’s Pine Editor to run these rules on any chart.
//@version=6
// High Watermark Momentum — 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("High Watermark Momentum", overlay=true,
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 ──────────────────────────────────────────────────────────────
highWater = ta.highest(close, 252)
enterNow = close >= 0.95 * highWater
exitNow = close <= 0.85 * highWater
// ── 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(highWater, "252-Bar High", color=#8a92a0)
plot(0.95 * highWater, "Entry 95%", color=#459b61)
plot(0.85 * highWater, "Exit 85%", color=#b54a48)