Native watchlist alerts and Pine Script

TradingView alerts for an entire watchlist

TradingView supports native watchlist alerts: open the watchlist menu and choose Add alert on the list, then select the condition. Each symbol is evaluated independently. Premium currently includes 2 active watchlist alerts and Ultimate includes 15. A custom Pine script that requests several symbols is a separate design with its own data and execution limits.

See the decision guide

Create a native watchlist alert

Open the watchlist dropdown and select Add alert on the list. Alternatively, choose the list in the Symbols field of Create alert. Set the condition, interval where applicable, trigger, expiration and notifications, then create the alert.

  • Check the session: Extended includes pre-market and post-market for US stocks and ETFs. Futures use electronic trading hours regardless of this setting.
  • Adding a symbol includes it in the alert; removing one excludes it. The condition applies independently to each member.
  • Use Alerts Log to distinguish a condition that did not trigger from a notification that did not arrive.

Plan limits are separate from technical alerts

The current TradingView pricing comparison lists watchlist alerts separately from price and technical alerts. The figures below were checked on October 16, 2026; check the linked pricing page before subscribing.

  • A technical-alert allowance is not a watchlist-alert allowance.
  • A custom multi-symbol script still requires a plan that supports the corresponding technical alert; a request budget does not grant alert access.
PlanActive watchlist alertsPractical consequence
Basic, Essential and Plus0No native watchlist alert allowance.
Premium2Two active list-wide alert rules.
Ultimate15Fifteen active list-wide alert rules.

Condition and frequency must match the task

Choose from the conditions actually available after selecting your list. Price operators and indicator-based conditions have different timing options. Do not assume that every strategy event, drawing or custom script trigger can be applied to a watchlist merely because it works on one chart.

  • Once-only behavior is tracked per symbol for a native watchlist alert; the list alert can remain active while other symbols have not triggered.
  • A Pine indicator can expose alertcondition() triggers or alert() calls. Confirm that the specific trigger is available for the selected scope before deploying it.
Alert mechanismFrequency controlWhat to verify
Regular price conditionOnly Once or Every TimePrice-based alerts are independent of the chart interval.
Interval-dependent indicator conditionOptions can include Once Per Bar and Once Per Bar CloseA bar-close trigger evaluates the completed bar condition.
Pine alert() callThe script controls frequency and messageSelect Any alert() function call for the chart-based script example below.

Native list tracking and multi-symbol Pine are different

A native watchlist alert tracks list membership. A chart-based Pine monitor evaluates explicit requests from one script instance. The example below reads two symbol inputs; changing a TradingView watchlist does not change those inputs.

  • The 40 or 64 limit applies to unique request.*() calls across the script. Additional timeframes and expressions can use more requests; repeated identical requests generally reuse data.
  • Tuple requests can group values from one context. Tuple size, execution time and memory limits still apply, so a request allowance is not a guaranteed symbol capacity.
  • The host chart controls when the script executes. Requested data can arrive at different times, especially across sessions and exchanges.
DesignMembershipMaintenance
Native watchlist alertThe selected TradingView listList additions and removals apply automatically.
Separate custom script alertsOne chart symbol per alertCreate and maintain the required alerts for each symbol.
Multi-symbol Pine monitorSymbols requested by the scriptUpdate the inputs or code, then recreate the running alert.

A two-symbol example using completed higher-timeframe bars

This teaching indicator checks whether RSI crossed above 50 on the previous completed requested bar. Use a standard time-based chart with an interval below the requested timeframe. It combines matching symbols into one message on the host bar close when a new requested bar is observed. It deliberately waits for completed data; it is not an immediate intrabar scanner.

  • The [1] offset is inside the requested expression and is paired with lookahead_on. Removing the offset can leak future higher-timeframe values into historical bars.
  • The chart bar closing does not itself confirm every requested symbol. This example obtains previous completed requested bars and detects each timestamp change separately.
  • The script does not backfill historical alert notifications or guarantee that every external event is observed while the host market is closed.
Pine Script v6: two explicit symbols, one aggregated alertpinescript
//@version=6
indicator("Two-symbol confirmed RSI monitor", overlay=false)
string symbol1 = input.symbol("NASDAQ:AAPL", "Symbol 1")
string symbol2 = input.symbol("NASDAQ:MSFT", "Symbol 2")
string requestedTf = input.timeframe("1D", "Requested timeframe")
int length = input.int(14, "RSI length", minval=2)

if timeframe.in_seconds(requestedTf) <= timeframe.in_seconds()
    runtime.error("Requested timeframe must be higher than the chart timeframe.")

confirmedSignal() =>
    float rsi = ta.rsi(close, length)
    bool crossed = ta.crossover(rsi, 50)
    [crossed[1], time[1], rsi[1]]

[hit1, stamp1, rsi1] = request.security(symbol1, requestedTf, confirmedSignal(), lookahead=barmerge.lookahead_on)
[hit2, stamp2, rsi2] = request.security(symbol2, requestedTf, confirmedSignal(), lookahead=barmerge.lookahead_on)
bool fresh1 = not na(stamp1[1]) and stamp1 != stamp1[1]
bool fresh2 = not na(stamp2[1]) and stamp2 != stamp2[1]
string message = ""
if fresh1 and hit1
    message += symbol1 + " RSI crossed above 50; RSI=" + str.tostring(rsi1, "#.##") + "; "
if fresh2 and hit2 and symbol2 != symbol1
    message += symbol2 + " RSI crossed above 50; RSI=" + str.tostring(rsi2, "#.##") + "; "
if barstate.isconfirmed and str.length(message) > 0
    alert(message, alert.freq_once_per_bar_close)

plot(rsi1, "Symbol 1 confirmed RSI", color=color.blue)
plot(rsi2, "Symbol 2 confirmed RSI", color=color.orange)
hline(50, "Threshold")

Verify the alert before relying on it

Add the example to a chart, choose two symbols, and set a higher requested timeframe. Create one technical alert with the script and Any alert() function call. These are verification steps, not results from a live delivery test.

  • Compare the plotted RSI values with the previous completed bar on each requested symbol and timeframe.
  • Observe a qualifying realtime event and compare the symbol, requested bar and host bar timing with Alerts Log.
  • Recreate the alert after changing the script, symbols, timeframe or inputs: a running script alert uses its saved snapshot.
  • Check runtime errors, expiration and notification settings. Script alerts that trigger more than 15 times in three minutes can be stopped automatically.
  • A webhook sends a request to a receiver. Order routing and execution require a separately tested integration; an alert is not an order confirmation.
Where Pineify fits

Pine Script AI Coding Agent

Use Pineify to draft or revise a bounded multi-symbol indicator. Specify the symbols, timeframes, condition and desired message, then review the generated code and validate its behavior in TradingView.

Build a custom alert script

Frequently asked questions

Educational programming reference, not investment advice. The example has not been tested for live notification delivery or broker execution. Data availability, sessions and host-chart updates affect alert behavior.

Sources and verification

Published by Pineify. Pineify is an independent product and is not affiliated with TradingView. Sources support the technical explanations; examples do not establish trading performance.