tradingview:alertas:alertas_em_strategy
Tabela de conteúdos
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: 30/01/2022 01:44 por schillerapp