
A estratégia é um sistema de negociação de confirmação em vários níveis baseado no William Alligator e no RSI, concebido para um período de tempo de 15 minutos. A estratégia gera um sinal de negociação julgando a relação de posição do preço com o triângulo do crocodilo e os valores do RSI. O sinal de compra precisa satisfazer quatro condições: um preço de fechamento acima da linha do lábio, uma linha do lábio acima da linha do dente, uma linha do dente acima da linha do crocodilo e um RSI maior que 55.
O princípio central da estratégia é baseado no uso integrado do William Herschel e do RSI. O William Herschel é composto por três linhas médias: a linha de Herschel (azul, 13 períodos SMA, 8 períodos de atraso), a linha de dentes (vermelho, 8 períodos SMA, 5 períodos de atraso) e a linha de lábios (verde, 5 períodos SMA, 3 períodos de atraso). A ordem de interseção e a passagem de preços dessas três linhas pode indicar a direção e a força da tendência do mercado.
Quando a linha do lábio está acima da linha do dente e a linha do dente está acima da linha do alfinete, indica que o mercado está em uma tendência ascendente; ao contrário, quando a linha do lábio está abaixo da linha do dente e a linha do dente está abaixo da linha do alfinete, indica que o mercado está em uma tendência descendente. Ao mesmo tempo, a estratégia também é confirmada em combinação com o indicador RSI, com RSI maior que o apoio de overbought em 55 e menor que o apoio de shorted em 45, o que fornece um sinal de confirmação adicional para decisões de negociação.
Durante a execução da estratégia, o sistema monitora várias condições de stop loss: para posições multi-cabeça, o stop loss é acionado quando o RSI cai abaixo de 50, o preço de fechamento cai abaixo da linha do dente ou a linha do lábio cai abaixo da linha do dente; para posições em branco, o stop loss é acionado quando o RSI ultrapassa 50 e o preço de fechamento ultrapassa a linha do dente ou a linha do lábio ultrapassa a linha do dente.
Mecanismo de confirmação múltiplaA estratégia exige que quatro condições sejam atendidas simultaneamente para a entrada, reduzindo efetivamente os falsos sinais e aumentando a qualidade das negociações. A linha de três linhas do indicador William Herschel confirma a direção da tendência, enquanto o valor do RSI confirma a dinâmica.
Regras claras de entrada e saídaA estratégia fornece sinais claros de entrada e saída, reduzindo o julgamento subjetivo e tornando o processo de negociação mais regulamentado e disciplinado.
Controle de risco perfeitoA estratégia estabelece condições de parada múltiplas, incluindo sinais de reversão baseados no RSI, mudanças na relação entre preço e linha de dentes e mudanças na relação entre a posição da linha de dentes e a linha de lábios. Este mecanismo de controle de risco em vários níveis ajuda a parar o máximo de risco em uma única transação em tempo hábil.
Comentários visuaisA estratégia marca os sinais de compra e venda, os pontos de parada e ganho no gráfico, e aumenta consideravelmente a visualização do processo de negociação, mostrando em tempo real o cumprimento das condições através da tabela.
Altamente adaptável: Embora os parâmetros de estratégia estejam configurados por defeito, todos os parâmetros-chave podem ser ajustados por meio da entrada, permitindo que o comerciante o otimize de acordo com diferentes cenários de mercado ou preferências pessoais.
Pequenas e frequentes transações em mercados de tremoresOs preços podem frequentemente atravessar a linha do bacalhau em momentos de pequenas oscilações no mercado, e o RSI pode também oscilar perto dos valores críticos, resultando em excesso de sinais de negociação e frequentes entradas e saídas, aumentando os custos de negociação. A solução é adicionar condições de confirmação ou prolongar o tempo de observação.
Risco de um deslizamento rápido e forteQuando uma notícia importante surge no mercado e leva a uma rápida e forte oscilação de preços, o preço de transação real pode ter uma grande diferença com o preço do sinal de ação, aumentando o risco de deslizamento. É recomendado usar com cautela ou suspender a estratégia antes do lançamento de dados importantes.
Objetivo de lucro conservadorA estratégia define o objetivo de lucro em 2 unidades de menor variação, o que pode ser muito conservador e não permitir uma melhor compreensão da tendência em mercados com maior volatilidade. Pode-se considerar o ajuste do objetivo de lucro de acordo com a dinâmica da volatilidade do mercado, ou adotar uma estratégia de liquidação em lotes.
Indicador de atrasoO William Herschel e o RSI apresentam um certo atraso e podem não ser capazes de capturar os pontos de inflexão em tempo hábil quando o mercado muda rapidamente. Recomenda-se o julgamento auxiliar em combinação com outros indicadores de liderança ou análise de comportamento de preços.
Sensibilidade do parâmetroO desempenho da estratégia é mais sensível à configuração de parâmetros, especialmente a configuração do limiar do RSI. Diferentes combinações de parâmetros podem ter um desempenho diferente em diferentes ambientes de mercado, e é necessário encontrar a combinação de parâmetros ideal por meio de retrospectivas.
Dinâmico RSI: A estratégia atual usa os limites fixos do RSI ((55 e 45), e pode considerar ajustar esses limites de acordo com a dinâmica da taxa de volatilidade do mercado. Use limites mais flexíveis em mercados de alta volatilidade e limites mais rigorosos em mercados de baixa volatilidade para se adaptar a diferentes condições de mercado.
Adição de filtros de transaçãoIntrodução de confirmação de volume de negociação, filtro de volatilidade ou indicador de intensidade de tendência, filtrando os sinais fracos em mercados de turbulência, entrando apenas quando a tendência é clara, aumentando a taxa de vitória.
Optimizar estratégias de prevençãoA estratégia atual de parar com 2 ticks fixos é muito simples, e você pode considerar implementar uma estratégia de parar dinâmica, como parar seguindo um stop ou um stop baseado no ATR (Average True Range) para obter mais ganhos em situações de forte tendência.
Filtro de tempoAumentar o filtro de tempo para evitar períodos de baixa liquidez ou de variação anormal, como 15 minutos antes e depois do início do jogo ou durante a divulgação de dados importantes, para reduzir riscos desnecessários.
Otimização da gestão de fundosA estratégia atual é usar uma proporção fixa de capital ((100%) para negociar, podendo considerar o tamanho da posição de ajuste dinâmico com base na volatilidade do mercado ou na mudança no valor líquido da conta, para uma gestão de fundos mais científica.
A estratégia de negociação de confirmação em múltiplos níveis, combinada com o RSI, é um sistema de negociação bem estruturado e com lógica clara, que cria um quadro de decisão de negociação em vários níveis, integrando a capacidade de discernimento de tendências do indicador William Herschel e a função de confirmação dinâmica do RSI. A principal vantagem da estratégia reside no mecanismo de confirmação múltipla e no controle de risco perfeito, mas também enfrenta desafios como excesso de sinais de mercado de choque, risco de deslizamento e meta de lucro conservador.
A estratégia promete melhorar ainda mais a sua estabilidade e rentabilidade, através da adaptação dinâmica do limiar RSI, o aumento do filtro de negociação, a otimização da estratégia de stop-loss, a adição do filtro de tempo e a melhoria da gestão de fundos. No geral, é uma estratégia de negociação quantitativa de valor prático, adequada para os comerciantes que têm um certo conhecimento dos indicadores técnicos e desejam obter um rendimento estável no mercado de futuros.
/*backtest
start: 2024-08-19 00:00:00
end: 2025-08-18 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_OKX","currency":"ETH_USDT","balance":5000}]
*/
//@version=5
strategy("Natural Gas Alligator RSI Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// =====================================
// INPUTS
// =====================================
// Williams Alligator Settings (default)
jaw_length = input.int(13, title="Jaw Length", minval=1)
jaw_offset = input.int(8, title="Jaw Offset", minval=0)
teeth_length = input.int(8, title="Teeth Length", minval=1)
teeth_offset = input.int(5, title="Teeth Offset", minval=0)
lips_length = input.int(5, title="Lips Length", minval=1)
lips_offset = input.int(3, title="Lips Offset", minval=0)
// RSI Settings (default)
rsi_length = input.int(14, title="RSI Length", minval=1)
// Natural Gas tick size (typically 0.001)
tick_size = input.float(0.001, title="Tick Size", minval=0.0001, step=0.0001)
// =====================================
// INDICATORS
// =====================================
// Williams Alligator
jaw = ta.sma(hl2, jaw_length)[jaw_offset]
teeth = ta.sma(hl2, teeth_length)[teeth_offset]
lips = ta.sma(hl2, lips_length)[lips_offset]
// RSI
rsi = ta.rsi(close, rsi_length)
// =====================================
// PLOT INDICATORS
// =====================================
plot(jaw, "Alligator Jaw", color=color.blue, linewidth=2)
plot(teeth, "Alligator Teeth", color=color.red, linewidth=2)
plot(lips, "Alligator Lips", color=color.green, linewidth=2)
// RSI (plotted in separate pane)
hline(50, "RSI Mid Line", color=color.gray, linestyle=hline.style_dashed)
hline(55, "RSI Buy Level", color=color.green, linestyle=hline.style_dotted)
hline(45, "RSI Sell Level", color=color.red, linestyle=hline.style_dotted)
plot(rsi, "RSI", color=color.purple)
// =====================================
// STRATEGY CONDITIONS
// =====================================
// Buy Conditions
buy_condition_1 = close > lips
buy_condition_2 = lips > teeth
buy_condition_3 = teeth > jaw
buy_condition_4 = rsi > 55
buy_signal = buy_condition_1 and buy_condition_2 and buy_condition_3 and buy_condition_4
// Sell Conditions
sell_condition_1 = close < lips
sell_condition_2 = lips < teeth
sell_condition_3 = teeth < jaw
sell_condition_4 = rsi < 45
sell_signal = sell_condition_1 and sell_condition_2 and sell_condition_3 and sell_condition_4
// Stop Loss Conditions for Long Position
long_stop_condition_1 = rsi < 50
long_stop_condition_2 = ta.crossunder(close, teeth)
long_stop_condition_3 = lips < teeth
long_stop_loss = long_stop_condition_1 or long_stop_condition_2 or long_stop_condition_3
// Stop Loss Conditions for Short Position
short_stop_condition_1 = rsi > 50
short_stop_condition_2 = ta.crossover(close, teeth)
short_stop_condition_3 = lips > teeth
short_stop_loss = short_stop_condition_1 or short_stop_condition_2 or short_stop_condition_3
// =====================================
// STRATEGY EXECUTION
// =====================================
// Variables to track entry prices
var float long_entry_price = na
var float short_entry_price = na
// Long Entry
if buy_signal and strategy.position_size == 0
strategy.entry("Long", strategy.long)
long_entry_price := close
alert("Buy Signal Generated", alert.freq_once_per_bar)
// Short Entry
if sell_signal and strategy.position_size == 0
strategy.entry("Short", strategy.short)
short_entry_price := close
alert("Sell Signal Generated", alert.freq_once_per_bar)
// Long Exit Conditions
if strategy.position_size > 0
// Take Profit: 2 ticks above entry
long_take_profit = long_entry_price + (2 * tick_size)
if close >= long_take_profit
strategy.close("Long", comment="Take Profit")
alert("Take Profit - Long Position Closed", alert.freq_once_per_bar)
long_entry_price := na
// Stop Loss
if long_stop_loss
strategy.close("Long", comment="Stop Loss")
alert("Stop Loss - Long Position Closed", alert.freq_once_per_bar)
long_entry_price := na
// Short Exit Conditions
if strategy.position_size < 0
// Take Profit: 2 ticks below entry
short_take_profit = short_entry_price - (2 * tick_size)
if close <= short_take_profit
strategy.close("Short", comment="Take Profit")
alert("Take Profit - Short Position Closed", alert.freq_once_per_bar)
short_entry_price := na
// Stop Loss
if short_stop_loss
strategy.close("Short", comment="Stop Loss")
alert("Stop Loss - Short Position Closed", alert.freq_once_per_bar)
short_entry_price := na
// =====================================
// CHART LABELS AND ALERTS
// =====================================
// Buy Signal Label
if buy_signal and strategy.position_size == 0
label.new(bar_index, low - (high - low) * 0.1, "BUY\nSIGNAL",
color=color.green, style=label.style_label_up,
textcolor=color.white, size=size.small)
// Sell Signal Label
if sell_signal and strategy.position_size == 0
label.new(bar_index, high + (high - low) * 0.1, "SELL\nSIGNAL",
color=color.red, style=label.style_label_down,
textcolor=color.white, size=size.small)
// Stop Loss Labels
if strategy.position_size > 0 and long_stop_loss
label.new(bar_index, high + (high - low) * 0.1, "STOP\nLOSS",
color=color.orange, style=label.style_label_down,
textcolor=color.white, size=size.small)
if strategy.position_size < 0 and short_stop_loss
label.new(bar_index, low - (high - low) * 0.1, "STOP\nLOSS",
color=color.orange, style=label.style_label_up,
textcolor=color.white, size=size.small)
// Take Profit Labels
if strategy.position_size > 0 and not na(long_entry_price) and close >= (long_entry_price + (2 * tick_size))
label.new(bar_index, high + (high - low) * 0.1, "TAKE\nPROFIT",
color=color.blue, style=label.style_label_down,
textcolor=color.white, size=size.small)
if strategy.position_size < 0 and not na(short_entry_price) and close <= (short_entry_price - (2 * tick_size))
label.new(bar_index, low - (high - low) * 0.1, "TAKE\nPROFIT",
color=color.blue, style=label.style_label_up,
textcolor=color.white, size=size.small)
// =====================================
// TABLE FOR CURRENT CONDITIONS
// =====================================
var table info_table = table.new(position.top_right, 2, 8, bgcolor=color.white, border_width=1)
if barstate.islast
table.cell(info_table, 0, 0, "Condition", bgcolor=color.gray, text_color=color.white)
table.cell(info_table, 1, 0, "Status", bgcolor=color.gray, text_color=color.white)
table.cell(info_table, 0, 1, "Close > Lips", bgcolor=color.white)
table.cell(info_table, 1, 1, buy_condition_1 ? "✓" : "✗", text_color=buy_condition_1 ? color.green : color.red)
table.cell(info_table, 0, 2, "Lips > Teeth", bgcolor=color.white)
table.cell(info_table, 1, 2, buy_condition_2 ? "✓" : "✗", text_color=buy_condition_2 ? color.green : color.red)
table.cell(info_table, 0, 3, "Teeth > Jaw", bgcolor=color.white)
table.cell(info_table, 1, 3, buy_condition_3 ? "✓" : "✗", text_color=buy_condition_3 ? color.green : color.red)
table.cell(info_table, 0, 4, "RSI > 55", bgcolor=color.white)
table.cell(info_table, 1, 4, buy_condition_4 ? "✓" : "✗", text_color=buy_condition_4 ? color.green : color.red)
table.cell(info_table, 0, 5, "RSI < 45", bgcolor=color.white)
table.cell(info_table, 1, 5, sell_condition_4 ? "✓" : "✗", text_color=sell_condition_4 ? color.red : color.green)
table.cell(info_table, 0, 6, "Current RSI", bgcolor=color.white)
table.cell(info_table, 1, 6, str.tostring(math.round(rsi, 2)), text_color=color.black)
table.cell(info_table, 0, 7, "Position", bgcolor=color.white)
position_text = strategy.position_size > 0 ? "LONG" : strategy.position_size < 0 ? "SHORT" : "NONE"
position_color = strategy.position_size > 0 ? color.green : strategy.position_size < 0 ? color.red : color.gray
table.cell(info_table, 1, 7, position_text, text_color=position_color)