TUTORIAL · PINE SCRIPT · JULIO 2026

alert() de Pine Script para webhooks, bien hecho.

TradingView te da tres maneras distintas de disparar una alerta desde código — y elegir mal es la razón de que tantos setups de webhook muestren popups en pantalla pero nunca muevan una orden. Esta guía ordena alertcondition() vs alert() vs alert_message, enseña payloads copiables para cada una y lista los cuatro fallos que rompen la automatización en silencio.

Los tres mecanismos de alerta, en un minuto

  • alertcondition() — solo indicadores. El mensaje se escribe en el diálogo al crear la alerta; el script no puede cambiarlo después. Vale para payloads estáticos.
  • alert() — indicadores y estrategias. El mensaje se construye en código en tiempo real, así que puede llevar valores vivos (precio, ticker, lote calculado). Crea la alerta con la condición Any alert() function call.
  • alert_message — solo estrategias. Adjuntas un mensaje a cada strategy.entry() / strategy.exit() y lo referencias en el diálogo con el placeholder {{strategy.order.alert_message}}. Una sola alerta cubre todas las órdenes de tu estrategia.

alert(): JSON dinámico desde un indicador o estrategia

Es la vía más flexible. Construye el JSON exacto que espera tu puente — el payload de abajo es el formato documentado de SignalForge (referencia completa), pero la técnica es idéntica para cualquier receptor de webhooks:

//@version=6
indicator("Demo alertas webhook", overlay = true)

cruceAlcista = ta.crossover(ta.ema(close, 9), ta.ema(close, 21))

if cruceAlcista
    alert('{"action":"buy","symbol":"' + syminfo.ticker + '","lot":0.01,"sl":50,"tp":100}',
          alert.freq_once_per_bar_close)

Dos detalles hacen todo el trabajo. syminfo.ticker hace que el mismo script funcione en cualquier gráfico sin editar el mensaje. Y alert.freq_once_per_bar_close dispara solo en velas confirmadas — la bandera más importante de toda esta guía (ver fallos).

alert_message: una alerta para toda la estrategia

//@version=6
strategy("Demo estrategia webhook", overlay = true)

condLarga = ta.crossover(ta.ema(close, 9), ta.ema(close, 21))

if condLarga
    strategy.entry("L", strategy.long,
         alert_message = '{"action":"buy","symbol":"' + syminfo.ticker + '","lot":0.01}')

strategy.exit("XL", "L", loss = 500, profit = 1000,
     alert_message = '{"action":"close","symbol":"' + syminfo.ticker + '"}')

Después crea UNA alerta sobre la estrategia, elige Order fills events y pon exactamente esto en la caja de mensaje:

{{strategy.order.alert_message}}

Cada fill envía ahora su payload adjunto. Si prefieres construir el mensaje en el diálogo, los placeholders genéricos también funcionan: {{ticker}}, {{close}}, {{strategy.order.action}}, {{strategy.order.contracts}}.

Los cuatro fallos que matan la automatización en silencio

1. Disparar intrabar (cebo de repintado)

Con alert.freq_once_per_bar o condiciones en tiempo real, la alerta puede saltar con una señal que desaparece al cerrar la vela: el backtest no se parece en nada a los fills reales. Usa alert.freq_once_per_bar_close salvo motivo concreto.

2. JSON roto por concatenación

Una comilla que falta alrededor de un valor concatenado — "lot":' + str.tostring(lote) + ' vs "lot":"' + ... + '" — y el receptor descarta el mensaje. Los números van sin comillas, los strings con comillas, y un valor na convierte el payload en basura a mitad de cadena. Pega la salida exacta en nuestro tester de webhooks gratuito y mira qué parsearía un puente antes de ir en real.

3. El diálogo de la alerta no está cableado

La URL del webhook vive en la pestaña Notificaciones de la alerta y hay que re-guardarla cada vez que la editas. Y una llamada a alert() solo llega al mundo exterior si la alerta se creó con Any alert() function call — un popup en pantalla no demuestra nada del webhook.

4. Plan gratuito de TradingView

Las notificaciones por webhook necesitan plan de pago (Essential en adelante). Si la casilla está en gris, esa es la respuesta — más modos de fallo silencioso en la guía de las 12 soluciones.

¿No quieres escribir Pine en absoluto? El AI Script Builder convierte una descripción en lenguaje normal en una estrategia Pine Script v6 completa y validada con el payload del webhook ya cableado para MT5 — 100 estrategias/mes en el plan Starter de 4,99 $. Describe, pega, automatiza.

Preguntas frecuentes

¿Diferencia entre alert() y alertcondition()?

alertcondition() registra una condición cuyo mensaje queda fijado en el diálogo; alert() envía un mensaje construido en código en tiempo real. Para payloads dinámicos (precios vivos, tickers, tamaños calculados) quieres alert() o alert_message.

¿Una sola alerta puede cubrir todas las órdenes de mi estrategia?

Sí: adjunta alert_message a cada entrada/salida y crea una única alerta en Order fills events con {{strategy.order.alert_message}} como mensaje.

¿Qué formato de payload necesita el puente?

SignalForge parsea JSON ({"action":"buy","symbol":"EURUSD","lot":0.01}), key=value y mensajes estilo PineConnector. Quince payloads listos por caso de uso en la biblioteca de payloads JSON.

Autor: Benjamin SF es el fundador de SignalForge y experto en automatización de algoritmos de trading. Construye y opera el puente SignalForge para traders de prop firms y mantiene su benchmark público de latencia (187 ms de mediana).

Automatiza tus señales de TradingView en MT5

SignalForge enruta tus alertas a MetaTrader 5 en milisegundos. 14 días gratis, sin tarjeta.

SignalForge AI es una herramienta de ejecución de órdenes. No ofrecemos asesoramiento de inversión. Operar conlleva riesgo de pérdida.