--[[
Indicador: Reversão em Suporte/Resistência de Picos/Vales (SR Auto)
Autor: Exemplo Didático
Versão: 1.1
Identifica S/R baseado nos highs/lows recentes e sinaliza reversões
confirmadas pelo cruzamento do Estocástico saindo de zonas extremas.
Funciona em M5/M15. NÃO executa trades.
]]
-- Nome que aparecerá na lista de indicadores
name = "SR Pico/Vale Reversal (Auto)"
short_name = "SRPV_Rev" -- Nome curto
type = "Indicator" -- Tipo de script
-- === INPUTS (Parâmetros Configuráveis) ===
inputs = {
-- Período para buscar Picos (Resistência) e Vales (Suporte)
{ name = "sr_lookback", type = "integer", defval = 20, minval = 3, title =
"Período Lookback S/R"},
-- Parâmetros do Estocástico
{ name = "stoch_k_period", type = "integer", defval = 14, minval = 1, title =
"Período %K Estocástico"},
{ name = "stoch_d_period", type = "integer", defval = 3, minval = 1, title =
"Período %D Estocástico" },
{ name = "stoch_slowing", type = "integer", defval = 3, minval = 1, title =
"Suavização Estocástico" },
{ name = "stoch_overbought", type = "number", defval = 80.0, title = "Nível
Sobrecompra Estocástico" },
{ name = "stoch_oversold", type = "number", defval = 20.0, title = "Nível
Sobrevenda Estocástico" }
}
-- === PLOTS (O que será desenhado no gráfico) ===
plots = {
-- Seta de Compra (verde, abaixo da vela)
{ name = "BuySignal", type = "arrow_up", color = rgba(0, 255, 0, 210), width =
2 },
-- Seta de Venda (vermelha, acima da vela)
{ name = "SellSignal", type = "arrow_down", color = rgba(255, 0, 0, 210), width
= 2 }
-- Opcional: Linhas de S/R (podem poluir o gráfico)
-- { name = "ResistanceLine", type = "line", color = rgba(255, 100, 100, 150),
width = 1 },
-- { name = "SupportLine", type = "line", color = rgba(100, 255, 100, 150),
width = 1 }
}
-- Variáveis para armazenar valores anteriores do Estocástico (%K)
local k_prev = nil
-- Variáveis para S/R
local resistance_level = nil
local support_level = nil
-- === UPDATE FUNCTION (Lógica principal, executada a cada vela) ===
function update(source, inputs)
-- Inicializa os plots com nil (nenhum sinal/linha)
local buy_signal = nil
local sell_signal = nil
-- local resistance_line_plot = nil -- Descomente se for usar plot de linhas
-- local support_line_plot = nil -- Descomente se for usar plot de linhas
local current_index = #source.close -- Último índice disponível (vela atual)
-- Precisa de dados suficientes para o lookback S/R e Estocástico
if current_index < inputs.sr_lookback + 1 or current_index <
inputs.stoch_k_period then
return nil -- Retorna nulo para todos os plots se não houver dados
end
-- Calcula o Estocástico
-- Estocástico retorna: %K, %D
local k, d = stochastic(source, inputs.stoch_k_period, inputs.stoch_d_period,
inputs.stoch_slowing)
-- Verifica se temos dados do Estocástico e valor anterior de K
if #k < 2 or k_prev == nil then
if #k >= 1 then k_prev = k[1] end -- Tenta armazenar K atual para a próxima
vez
return nil -- Retorna nulo se não houver dados suficientes do Estocástico
end
local current_k = k[1]
local current_high = source.high[1]
local current_low = source.low[1]
-- Encontra o maior High (Resistência) e o menor Low (Suporte) no período de
lookback ANTERIOR
local highest_high_prev = source.high[2] -- Começa com a vela anterior
local lowest_low_prev = source.low[2] -- Começa com a vela anterior
-- O loop vai da vela anterior (índice 2) até a vela `sr_lookback` atrás
(índice sr_lookback + 1)
for i = 3, inputs.sr_lookback + 1 do
if source.high[i] > highest_high_prev then
highest_high_prev = source.high[i]
end
if source.low[i] < lowest_low_prev then
lowest_low_prev = source.low[i]
end
end
resistance_level = highest_high_prev
support_level = lowest_low_prev
-- --- Condição de VENDA (PUT - Reversão na Resistência) ---
-- 1. Máxima atual testa (igual ou maior) a resistência recente
local price_tests_resistance = current_high >= resistance_level
-- 2. Estocástico (%K) cruzou ABAIXO do nível de sobrecompra NESTA vela
local stoch_cross_down = current_k < inputs.stoch_overbought and k_prev >=
inputs.stoch_overbought
if price_tests_resistance and stoch_cross_down then
-- Coloca a seta acima do máximo da vela
sell_signal = current_high + (current_high - current_low) * 0.3 -- Ajuste
vertical
end
-- --- Condição de COMPRA (CALL - Reversão no Suporte) ---
-- 1. Mínima atual testa (igual ou menor) o suporte recente
local price_tests_support = current_low <= support_level
-- 2. Estocástico (%K) cruzou ACIMA do nível de sobrevenda NESTA vela
local stoch_cross_up = current_k > inputs.stoch_oversold and k_prev <=
inputs.stoch_oversold
if price_tests_support and stoch_cross_up then
-- Coloca a seta abaixo do mínimo da vela
buy_signal = current_low - (current_high - current_low) * 0.3 -- Ajuste
vertical
end
-- Armazena o valor atual de K para a próxima iteração
k_prev = current_k
-- Opcional: Define os valores para plotar as linhas de S/R (serão linhas
horizontais)
-- resistance_line_plot = resistance_level
-- support_line_plot = support_level
-- Retorna os valores para desenhar os plots
-- Se buy_signal/sell_signal for nil, nada é desenhado para eles.
-- return buy_signal, sell_signal, resistance_line_plot, support_line_plot --
Se for plotar linhas
return buy_signal, sell_signal -- Se for plotar apenas as setas
end
--[[ Fim do Script ]]--