WMA 20 50 200 Early Stack

How this strategy trades, what it scored, and the measurements the score was read from: every symbol and timeframe, on real and resampled history.

How It Trades

  1. Compute the same three weighted moving averages as the 20/50/200 stack: 20, 50 and 200 bars.
  2. Buy as soon as the 20 is above both the 50 and the 200. The plain stack also waits for the 50 to clear the 200, but those two slow averages only cross well after the move that lifted them, so the strict version buys near the end of the leg that proved it right, which is exactly the late entry this variant avoids.
  3. Sell when the 20 drops back below the 50: the same exit as the plain stack, so the entry is the only thing that differs.

Example Strategy

Pine Script

Paste it into TradingView’s Pine Editor to run these rules on any chart.

//@version=6
// WMA 20 50 200 Early Stack — 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("WMA 20 50 200 Early Stack", 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 ──────────────────────────────────────────────────────────────
fast = ta.wma(close, 20)
mid = ta.wma(close, 50)
slow = ta.wma(close, 200)
aligned = fast > mid and fast > slow
enterNow = aligned and not aligned[1]
exitNow = fast < mid

// ── 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(fast, "WMA 20", color=#4d8dff)
plot(mid, "WMA 50", color=#e0a03a)
plot(slow, "WMA 200", color=#8a92a0)