Top TradingView Indicators for BUY & SELL Signals

Finding clear BUY and SELL signals on TradingView can be challenging when the chart is filled with too many indicators. The goal of a good trading indicator is not simply to generate more signals, but to help traders identify potential entries, confirm market direction, and manage risk.

TradingView makes this easier because traders can combine technical indicators with custom Pine Script strategies. In this guide, we will explore 10 popular BUY/SELL indicators and concepts and provide simple Pine Script v5 code examples that you can use as a starting point for your own TradingView indicators.

What Are BUY & SELL Signal Indicators?

A BUY/SELL signal indicator analyzes price, volume, momentum, volatility, or trend conditions and displays a potential trading signal on the chart.

For example:

  • BUY → Green arrow below the candle
  • SELL → Red arrow above the candle
  • Trend confirmation → Moving average or trend line
  • Momentum confirmation → RSI, MACD, or Stochastic
  • Volatility confirmation → Bollinger Bands or ATR

A strong trading system generally combines several confirmations instead of relying on a single signal.

1. EMA Crossover BUY & SELL Indicator

The Exponential Moving Average (EMA) is one of the most widely used trend-following tools.

A simple strategy uses two EMAs:

  • Fast EMA: 9 periods
  • Slow EMA: 21 periods

BUY condition

A BUY signal occurs when the fast EMA crosses above the slow EMA.

SELL condition

A SELL signal occurs when the fast EMA crosses below the slow EMA.

Pine Script v5

//@version=5
indicator("EMA Crossover BUY SELL", overlay=true)

fastLength = input.int(9, "Fast EMA")
slowLength = input.int(21, "Slow EMA")

fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)

buySignal = ta.crossover(fastEMA, slowEMA)
sellSignal = ta.crossunder(fastEMA, slowEMA)

plot(fastEMA, title="Fast EMA")
plot(slowEMA, title="Slow EMA")

plotshape(buySignal, title="BUY", style=shape.labelup,
     location=location.belowbar, text="BUY")

plotshape(sellSignal, title="SELL", style=shape.labeldown,
     location=location.abovebar, text="SELL")

EMA crossovers can work well in trending markets, but they may generate multiple false signals during sideways conditions.

2. RSI BUY & SELL Indicator

The Relative Strength Index (RSI) measures momentum on a scale from 0 to 100.

Traditional levels include:

  • RSI below 30 → Oversold
  • RSI above 70 → Overbought

However, traders should not automatically BUY whenever RSI reaches 30 or SELL whenever it reaches 70. Price confirmation is important.

Pine Script v5

//@version=5
indicator("RSI BUY SELL Signals", overlay=true)

rsiLength = input.int(14, "RSI Length")
rsi = ta.rsi(close, rsiLength)

buySignal = ta.crossover(rsi, 30)
sellSignal = ta.crossunder(rsi, 70)

plotshape(buySignal, title="BUY", style=shape.labelup,
     location=location.belowbar, text="BUY")

plotshape(sellSignal, title="SELL", style=shape.labeldown,
     location=location.abovebar, text="SELL")

RSI is particularly useful as a momentum confirmation tool rather than a standalone trading system.

3. MACD BUY & SELL Indicator

MACD (Moving Average Convergence Divergence) is another popular momentum and trend indicator.

It consists of:

  • MACD line
  • Signal line
  • Histogram

A basic approach is to monitor MACD crossovers.

BUY

MACD crosses above the Signal line.

SELL

MACD crosses below the Signal line.

Pine Script v5

//@version=5
indicator("MACD BUY SELL Signals", overlay=true)

fast = input.int(12, "Fast Length")
slow = input.int(26, "Slow Length")
signalLength = input.int(9, "Signal Length")

[macdLine, signalLine, histogram] =
     ta.macd(close, fast, slow, signalLength)

buySignal = ta.crossover(macdLine, signalLine)
sellSignal = ta.crossunder(macdLine, signalLine)

plotshape(buySignal, title="BUY", style=shape.labelup,
     location=location.belowbar, text="BUY")

plotshape(sellSignal, title="SELL", style=shape.labeldown,
     location=location.abovebar, text="SELL")

For additional confirmation, traders can combine MACD crossovers with trend direction and support/resistance.

4. Supertrend BUY & SELL Indicator

The Supertrend indicator is popular among trend-following and intraday traders because it provides a simple visual representation of market direction.

It uses ATR (Average True Range) to calculate dynamic trend levels.

A basic Supertrend system can use:

  • BUY when the trend changes bullish
  • SELL when the trend changes bearish

Pine Script v5

//@version=5
indicator("Supertrend BUY SELL", overlay=true)

atrPeriod = input.int(10, "ATR Period")
factor = input.float(3.0, "Factor")

[supertrend, direction] =
     ta.supertrend(factor, atrPeriod)

buySignal = ta.change(direction) < 0
sellSignal = ta.change(direction) > 0

plot(supertrend, title="Supertrend")

plotshape(buySignal, title="BUY", style=shape.labelup,
     location=location.belowbar, text="BUY")

plotshape(sellSignal, title="SELL", style=shape.labeldown,
     location=location.abovebar, text="SELL")

Supertrend can be useful for trend-following strategies, particularly when combined with a higher-timeframe trend filter.

5. Bollinger Bands BUY & SELL Indicator

Bollinger Bands consist of:

  • Middle moving average
  • Upper band
  • Lower band

They are commonly used to study volatility and potential price extremes.

One possible approach is:

BUY

Price crosses back above the lower Bollinger Band.

SELL

Price crosses back below the upper Bollinger Band.

Pine Script v5

//@version=5
indicator("Bollinger Bands BUY SELL", overlay=true)

length = input.int(20, "Length")
mult = input.float(2.0, "Multiplier")

basis = ta.sma(close, length)
dev = mult * ta.stdev(close, length)

upper = basis + dev
lower = basis - dev

buySignal = ta.crossover(close, lower)
sellSignal = ta.crossunder(close, upper)

plot(basis, title="Basis")
plot(upper, title="Upper Band")
plot(lower, title="Lower Band")

plotshape(buySignal, title="BUY", style=shape.labelup,
     location=location.belowbar, text="BUY")

plotshape(sellSignal, title="SELL", style=shape.labeldown,
     location=location.abovebar, text="SELL")

Bollinger Bands are especially useful for studying volatility, ranges, and potential breakout conditions.

6. Stochastic Oscillator BUY & SELL

The Stochastic Oscillator compares the closing price with its recent trading range.

Common levels include:

  • 20 → Oversold
  • 80 → Overbought

A basic signal can be created when the %K line crosses the %D line.

Pine Script v5

//@version=5
indicator("Stochastic BUY SELL", overlay=true)

kLength = input.int(14, "K Length")
smoothK = input.int(3, "K Smoothing")
smoothD = input.int(3, "D Smoothing")

rawK = ta.stoch(close, high, low, kLength)
k = ta.sma(rawK, smoothK)
d = ta.sma(k, smoothD)

buySignal = ta.crossover(k, d) and k < 20
sellSignal = ta.crossunder(k, d) and k > 80

plotshape(buySignal, title="BUY", style=shape.labelup,
     location=location.belowbar, text="BUY")

plotshape(sellSignal, title="SELL", style=shape.labeldown,
     location=location.abovebar, text="SELL")

Stochastic signals can be noisy, so combining them with a trend filter can help reduce low-quality setups.

7. VWAP BUY & SELL Indicator

VWAP (Volume Weighted Average Price) is widely used by intraday traders.

It provides a reference price based on both price and volume.

A simple concept is:

BUY

Price crosses above VWAP.

SELL

Price crosses below VWAP.

Pine Script v5

//@version=5
indicator("VWAP BUY SELL Signals", overlay=true)

vwapValue = ta.vwap(hlc3)

buySignal = ta.crossover(close, vwapValue)
sellSignal = ta.crossunder(close, vwapValue)

plot(vwapValue, title="VWAP")

plotshape(buySignal, title="BUY", style=shape.labelup,
     location=location.belowbar, text="BUY")

plotshape(sellSignal, title="SELL", style=shape.labeldown,
     location=location.abovebar, text="SELL")

VWAP is often more useful for intraday analysis than for longer-term swing trading.

8. ADX Trend Strength BUY & SELL Filter

The Average Directional Index (ADX) measures trend strength rather than directly predicting whether price will rise or fall.

A common interpretation is:

  • ADX below 20 → Weak/no clear trend
  • ADX above 20–25 → Stronger trend environment

ADX can therefore be used as a filter for another BUY/SELL system.

For example:

Only accept BUY or SELL signals when ADX is above a selected threshold.

This can help avoid taking every crossover during low-volatility sideways markets.

A practical system might combine:

EMA crossover + ADX filter

instead of using ADX by itself.

9. Donchian Channel Breakout Indicator

The Donchian Channel identifies recent highs and lows.

A basic breakout strategy looks for:

BUY

Price breaks above the previous high.

SELL

Price breaks below the previous low.

Pine Script v5

//@version=5
indicator("Donchian Breakout BUY SELL", overlay=true)

length = input.int(20, "Channel Length")

upper = ta.highest(high, length)
lower = ta.lowest(low, length)

buySignal = close > upper[1]
sellSignal = close < lower[1]

plot(upper, title="Upper Channel")
plot(lower, title="Lower Channel")

plotshape(buySignal, title="BUY", style=shape.labelup,
     location=location.belowbar, text="BUY")

plotshape(sellSignal, title="SELL", style=shape.labeldown,
     location=location.abovebar, text="SELL")

Donchian breakouts are particularly interesting for trend-following and breakout strategies.

10. Higher High & Lower Low BUY/SELL Indicator

Market structure is another powerful way to analyze price action.

Bullish structure may contain:

Higher High → HH

Higher Low → HL

Bearish structure may contain:

Lower High → LH

Lower Low → LL

Instead of relying entirely on oscillators, traders can use confirmed swing points to understand the current market structure.

How to Combine BUY & SELL Indicators

Using 10 indicators simultaneously is usually unnecessary. A better approach is to create a confluence-based trading system.

For example:

BUY Setup

  1. Price is above the 200 EMA.
  2. Supertrend indicates bullish direction.
  3. MACD crosses above its Signal line.
  4. RSI is above 50.
  5. Price breaks a recent resistance level.
  6. The candle closes before the signal is confirmed.

SELL Setup

  1. Price is below the 200 EMA.
  2. Supertrend indicates bearish direction.
  3. MACD crosses below its Signal line.
  4. RSI is below 50.
  5. Price breaks recent support.
  6. The candle closes before the signal is confirmed.

The trader does not necessarily need all six conditions. The objective is to create a rules-based system that avoids taking low-quality setups.


BUY & SELL Entry Rules

A simple entry framework can be:

BUY Entry

Step 1: Wait for a confirmed BUY signal.

Step 2: Allow the signal candle to close.

Step 3: Enter on the next candle or according to your tested entry method.

Step 4: Place Stop Loss below a logical swing low or other predefined invalidation level.

Step 5: Set Take Profit using a predefined risk/reward ratio, resistance level, or trailing-stop method.

SELL Entry

Step 1: Wait for a confirmed SELL signal.

Step 2: Wait for the signal candle to close.

Step 3: Enter according to your tested SELL entry rules.

Step 4: Place Stop Loss above a logical swing high.

Step 5: Use a predefined Take Profit or trailing-stop strategy.

Which TradingView Indicator Is Best?

There is no single best BUY/SELL indicator for every market and timeframe.

IndicatorBest Use
EMA CrossoverTrend following
RSIMomentum
MACDTrend + momentum
SupertrendTrend direction
Bollinger BandsVolatility/ranges
StochasticMomentum/reversal setups
VWAPIntraday trading
ADXTrend-strength filtering
Donchian ChannelBreakouts
HH/LL StructurePrice action

For Forex and Gold, traders often experiment with EMA, Supertrend, MACD, RSI, VWAP, and market-structure concepts. The ideal combination depends on the instrument, timeframe, volatility, and trading style.

How to Build a Non-Repainting TradingView BUY/SELL Indicator

If you are developing a commercial TradingView indicator, avoiding repainting is particularly important.

A robust signal system should consider:

  • Use confirmed candle closes.
  • Avoid future-looking calculations.
  • Avoid lookahead bias.
  • Be careful with multi-timeframe calculations.
  • Understand how pivot functions behave.
  • Generate signals only when the required conditions are confirmed.
  • Backtest signals using historical data.
  • Test the indicator in real-time market conditions.

For example, instead of triggering a BUY signal while the current candle is still forming, you can require:

buyConfirmed = buySignal and barstate.isconfirmed

Stop Loss and Take Profit

A BUY/SELL indicator should not be considered a complete trading system without risk management.

One simple approach is a 1:2 risk-to-reward ratio.

For example:

  • Entry = 100
  • Stop Loss = 98
  • Risk = 2 points
  • Take Profit = 104
  • Potential reward = 4 points

This produces a 1:2 risk/reward ratio.

Other approaches include:

  • Previous swing high/low
  • Support and resistance
  • ATR-based Stop Loss
  • Trailing Stop
  • Previous day high/low
  • Fixed percentage risk

The correct method should be determined through testing rather than assuming one approach works universally.

Leave a Reply

Your email address will not be published. Required fields are marked *