Ferramentas do usuário

Ferramentas do site


tradingview:alertas:alertas_em_strategy

Alertas em Strategy()

Eventos de Alertas

alert

  • A função alert() pode ser chamada em estratégias da mesma forma que é chamada em estudos.
  • Enquanto eventos de alertas usarão eventos de envio de ordens (order fill events) para disparar um alerta quando o emulador enviar a ordem - a função alert() também pode ser chamada para disparar outros alertas em estratégias.
  • Este exemplo chama a função alert() quando o RSI se move contra o trade por 3 barras consecutivas.
//@version=4
strategy("Chamadas Seletivas Alert - Strategy")
 
r = rsi(close, 20)
 
// Detectar cruzamento.
xUp = crossover(r, 50)
xDn = crossunder(r, 50)
 
// Enviar ordem no cruzamento.
if xUp
    strategy.entry("Compra", strategy.long)
else if xDn
    strategy.entry("Venda", strategy.short)
 
// Disparar alertar quando o trade vai na direção contrária.
dirCompra  = strategy.position_size > 0 and falling(r, 3)
dirVenda = strategy.position_size < 0 and rising(r, 3)
 
if dirCompra
    alert("AVISO: RSI Caindo", alert.freq_once_per_bar_close)
if dirVenda
    alert("AVISO: RSI Subindo", alert.freq_once_per_bar_close)
 
plotchar(xUp, "Compra", "▲", location.bottom, color.lime, size = size.tiny)
plotchar(xDn, "Venda", "▼", location.top, color.red, size = size.tiny)
 
plotchar(dirCompra, "AVISO: RSI Caindo", "•", location.top, color.red, size = size.tiny)
plotchar(dirVenda, "AVISO: RSI Subindo",  "•", location.bottom, color.lime, size = size.tiny)
 
hline(50)
plot(r)
  • Se um usuário criar um evento de alerta usando esse script - incluindo ambos eventos de envio de ordens e chamadas de função alert() - alertas serão disparados sempre que uma ordem for executada (no emulador do TradingView) e/ou quando uma chamada da função alert() ocorrer na iteração do script em uma barra de tempo real, ou seja, quando barstate.isrealtime e barstate.isconfirmed forem ambas verdadeiras (true).
  • A chamada da função alert() irá disparar o alerta apenas quando a barra de tempo real fechar porque alert.freq_once_per_bar_close é o argumento usado para o parâmetro freq na chamada da função alert.

Eventos de Envio de Ordens (Order fill events)

  • Um evento de envio de ordens se refere a qualquer evento causado pelo emulador do TradingView que causa com que uma ordem simulada seja executada.
    • Isto é o equivalente a uma ordem sendo preenchida por uma corretora/broker.
  • Ordens não são necessariamente executadas quando são enviadas. (*ordens stop)
  • Em estratégias - strategy() - a execução da ordem pode ser detectada apenas de forma indireta e depois do fato.
    • Para fazer essa confirmação, é necessário fazer uso de variáveis nativas (incorporadas) como:
      • strategy.opentrades
      • strategy.position_size
  • Portanto, em eventos de alerta configurados para eventos de envio de ordens (Order fill events) - o disparo do alerta pode ser feito no momento preciso da execução da ordem - ou seja - antes da lógica do script poder detectá-la.
    • Isso acontence porque o emulador é quem faz esse disparo independemente da execução do script.

Customizar mensagem de alerta

  • É possível customizar a mensagem de alerta quando há uma execução de ordem.
    • Não é um pré-requisito para o evento de envio de ordens (Order fill events).
    • Porém, mensagens customizadas podem ser úteis para integrar ordens reais com corretoras/broker através de webhooks com ferramentas de terceiros.
      • Isto é feito usando o argumento alert_message em funções como:
        • strategy.close()
        • strategy.entry()
        • strategy.exit()
        • strategy.order()
      • O argumento usado é uma “series string” - portanto pode ser construída dinamicamente usando variáveis disponíveis ao script - desde que sejam convertidas para string quando necessário.
//@version=4
strategy("Estratégia usando alert_message")
 
r = rsi(close, 20)
 
// Detectar cruzamento
xUp = crossover(r, 50)
xDn = crossunder(r, 50)
 
// Enviar ordens no cruzamento usando alert_message customizado
if xUp
    strategy.entry("Compra", strategy.long, stop = high, alert_message = "Compra-Stop execuata (stop foi em " + tostring(high) + ")")
else if xDn
    strategy.entry("Venda", strategy.short, stop = low, alert_message = "Venda-Stop executada (stop foi em " + tostring(low) + ")")
 
plotchar(xUp, "Comprar", "▲", location.bottom, color.lime, size = size.tiny)
plotchar(xDn, "Vender", "▼", location.top, color.red, size = size.tiny)
 
hline(50)
plot(r)
  • O parâmetro stop é usado na chamada de strategy.entry() - o que cria ordens de compra stop e ordens de venda stop. Isso significa que:
    • Ordens de compra serão executada apenas quando o preço for maior que a máxima da barra onde a ordem foi enviada,
    • Ordens de venda serão executadas apenas quando o preço for menor que a mínima da barra onde a ordem foi enviada.
  • As setas para cima e para baixo plotadas com plotchar() são desenhadas quando as ordens são enviadas. Pode levar um número de barras até que a ordem seja de fato executada.
  • Porque nós usamos o mesmo id para todas as compras - toda nova ordem de compra enviada antes de uma ordem anterior ter sido executada irá substituir esta ordem anterior. O mesmo ocorre para as ordens de venda.
  • As variáveis utilizadas no argumento alert_message serão atribuidas apenas no momento em que a ordem for executada, ou seja, quando há o disparto do alerta.
  • Quando o argumento alert_message é usado em uma ordem gerada pela chamada de funções strategy.*() - o evento de alerta deve incluir o placeholder {{strategy.order.alert_message}} na caixa de diálogo “Criar Alerta” no campo “Mensagem” - quando criando um evento de alerta com eventos de envio de ordens (Order fill events).
  • Quando usando o placeholder {{strategy.order.alert_message}} - o evento de alerta buscará sempre o texto do argumento alert_message como parâmetro para mensagem. Isso significa que se um script possuir várias chamadas de funções strategy.*() para envio de ordem - se o argumento alert_message dessas ou algumas dessas não for especificado a mensagem será vazia, ou em branco.
  • Existem outros placeholders que podem ser usados no campo “Mensagem” na caixa de diálogo “Criar Alerta”, porém estes não podem ser utilizados no argumento alert_message.


tradingview/alertas/alertas_em_strategy.txt · Última modificação: 05/04/2023 08:25 por 127.0.0.1