//@version=4
study("Todas as chamadas Alert")
r = rsi(close, 20)
// Detectar cruzamento
xUp = crossover(r, 50)
xDn = crossunder(r, 50)
// Disparar alerta no cruzamento
if xUp
alert("Comprar (RSI é " + tostring(r, "#.00)"))
else if xDn
alert("Vender (RSI é " + tostring(r, "#.00)"))
plotchar(xUp, "Compra", "▲", location.bottom, color.lime, size = size.tiny)
plotchar(xDn, "Venda", "▼", location.top, color.red, size = size.tiny)
hline(50)
plot(r)
Notas:
Ao contrário da função alertcondition() que é usada apenas no escopo global do script (coluna 0) - a função alert() normalmente é usada dentro do escopo de um teste condicional if para que seja chamada apenas quando a condição necessária for satisfeita.
Se a função alert() é usada no escopo global - esta será chamada em todas as barras - o que provavelmente não é o comportomento desejado.
Este exemplo não poderia ser replicado exatamente igual usando a função alertcondition() pois esta aceita apenas strings constantes e não aceita o segundo componente de nossa string usando tostring().
Porque a função alert() permite construir mensagens dinamicante durante a execução, nós poderiamos substituir nosso código com:
// Disparar alerta no cruzamento
if xUp or xDn
firstPart = (xUp ? "Comprar" : "Vender") + " (RSI é "
alert(firstPart + tostring(r, "#.00)"))
//@version=4
study("Chamadas Seletivas Alert")
// Parâmetros
detecCompra = input(true, "Alertar Compra")
detecVenda = input(true, "Alertar Venda")
r = rsi(close, 20)
// Detectar cruzamento.
xUp = crossover(r, 50)
xDn = crossunder(r, 50)
// Apenas gerar alertas para as direções configuradas.
alC = detecCompra and xUp
alV = detecVenda and xDn
// Disparar o alerta apenas quando o grupo de condições são satisfeitas.
if alC
alert("Compra (RSI é " + tostring(r, "#.00)"))
else if alV
alert("Vender (RSI é " + tostring(r, "#.00)"))
plotchar(alC, "Compra", "▲", location.bottom, color.lime, size = size.tiny)
plotchar(alV, "Venda", "▼", location.top, color.red, size = size.tiny)
hline(50)
plot(r)