O recurso está a ser carregado... Carregamento...

Estratégia de negociação por pivô adaptativa de suporte e resistência dinâmicos

Autora:ChaoZhang, Data: 2025-01-10 15:08:24
Tags:ATRPivot

 Dynamic Support and Resistance Adaptive Pivot Trading Strategy

Resumo

Esta estratégia é um sistema de negociação adaptativo baseado na identificação dinâmica de níveis de suporte e resistência usando pontos de pivô de preços. Determina os níveis de preço principais calculadores de máximos e mínimos locais em tempo real e executa as negociações em conformidade.

Princípios de estratégia

A lógica central baseia-se em vários elementos-chave: 1. cálculo de pivô dinâmico: usa o parâmetro de comprimento de pivô ajustável (padrão 2) para identificar altos e baixos locais 2. Zonas de suporte/resistência: Estabelece intervalos baseados em porcentagem (default 0.4%) em torno de pontos pivô para definir áreas de negociação válidas 3. Geração de sinal: sinais longos quando o preço quebra acima do suporte, sinais curtos quando o preço quebra abaixo da resistência Gestão de riscos: implementa níveis dinâmicos de stop-loss (10%) e take-profit (27%), com dimensionamento de posições baseado no património da conta

Vantagens da estratégia

  1. Alta adaptabilidade: Ajusta dinamicamente os níveis de suporte/resistência com base nas condições do mercado, evitando atraso em relação aos níveis estáticos
  2. Risco controlado: mantém um risco razoável por transação através de paradas baseadas em percentagem e dimensionamento dinâmico das posições
  3. Escalabilidade: Suporta vários prazos e combinações de parâmetros para otimização em diferentes ambientes de mercado
  4. Transparência: lógica de negociação clara com todos os sinais e níveis de preços visualizados nos gráficos

Riscos estratégicos

  1. Risco de ruptura falsa: pode gerar sinais falsos frequentes em mercados variados, exigindo ajuste dos parâmetros da zona de suporte/resistência
  2. Efeito do deslizamento: os preços de execução efetivos podem diferir significativamente dos preços do sinal em condições de mercado menos líquidas
  3. Dependência da tendência: A estratégia tem um melhor desempenho em mercados em tendência, mas pode gerar sinais excessivos durante as fases de consolidação
  4. Sensibilidade dos parâmetros: o desempenho é altamente dependente das configurações dos parâmetros, exigindo um exame posterior minucioso para otimização

Orientações de otimização

  1. Adicionar módulo de reconhecimento do ambiente de mercado para ajustamento automático de parâmetros com base na volatilidade
  2. Incorporar volume e indicadores técnicos adicionais como sinais de confirmação
  3. Otimizar o algoritmo de dimensionamento de posições com ajustamentos dinâmicos com base na volatilidade do mercado
  4. Implementar filtros de tempo para evitar a negociação durante períodos desfavoráveis
  5. Desenvolver um algoritmo adaptativo de stop-loss com ajustamento dinâmico com base na volatilidade do mercado

Resumo

A estratégia fornece uma estrutura confiável para a negociação de tendência e reversão através da identificação dinâmica dos principais níveis de preço combinados com um controle rigoroso do risco. Embora exiba alguma sensibilidade de parâmetros e dependência do ambiente de mercado, a otimização e refinamento contínuos permitem um desempenho consistente em diferentes condições de mercado.


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © felipemiransan

//@version=6
strategy("Dynamic Support and Resistance Pivot Strategy ", overlay=true)

// Strategy parameters
pivot_length = input.int(2, title="Pivot Length", tooltip="Pivot size to identify peaks and troughs")
support_resistance_distance = input.float(0.4, title="Support/Resistance Distance %", tooltip="Distance to consider a support or resistance level in %")

// Stop Loss and Take Profit parameters
stop_loss_pct = input.float(10.0, title="Stop Loss %", tooltip="Stop loss percentage", minval=0.1) / 100
take_profit_pct = input.float(26.0, title="Take Profit %", tooltip="Take profit percentage", minval=0.1) / 100

// Functions to identify high and low pivots
pivot_high = ta.pivothigh(high, pivot_length, pivot_length)
pivot_low = ta.pivotlow(low, pivot_length, pivot_length)

// Storing support and resistance levels
var float resistance_level = na
var float support_level = na
var float last_pivot_high = na
var float last_pivot_low = na

// Updating support and resistance based on pivots
if (not na(pivot_high))
    resistance_level := high[pivot_length]
    last_pivot_high := high[pivot_length]

if (not na(pivot_low))
    support_level := low[pivot_length]
    last_pivot_low := low[pivot_length]

// Function to check if the current price is near a support or resistance level
is_near_resistance = (not na(resistance_level)) and (close >= resistance_level * (1 - support_resistance_distance / 100)) and (close <= resistance_level * (1 + support_resistance_distance / 100))
is_near_support = (not na(support_level)) and (close >= support_level * (1 - support_resistance_distance / 100)) and (close <= support_level * (1 + support_resistance_distance / 100))

// Cross conditions variables
long_cross = ta.crossover(close, support_level) and not na(support_level)
short_cross = ta.crossunder(close, resistance_level) and not na(resistance_level)

// Entry conditions
long_condition = is_near_support and long_cross  // Buy when crossing support from below
short_condition = is_near_resistance and short_cross  // Sell when crossing resistance from above

// Order execution
if (long_condition)
    strategy.entry("Long", strategy.long)

if (short_condition)
    strategy.entry("Short", strategy.short)

// Stop Loss and Take Profit
if (strategy.opentrades > 0)
    if (strategy.position_size > 0)  // For long position
        avg_price_long = strategy.position_avg_price
        long_stop_level = avg_price_long * (1 - stop_loss_pct)
        long_take_profit_level = avg_price_long * (1 + take_profit_pct)
        strategy.exit("Exit Long", from_entry="Long", stop=long_stop_level, limit=long_take_profit_level)

    if (strategy.position_size < 0)  // For short position
        avg_price_short = strategy.position_avg_price
        short_stop_level = avg_price_short * (1 + stop_loss_pct)
        short_take_profit_level = avg_price_short * (1 - take_profit_pct)
        strategy.exit("Exit Short", from_entry="Short", stop=short_stop_level, limit=short_take_profit_level)

// Plotting support and resistance levels on the chart
plot(support_level, title="Support", color=color.green, linewidth=2, style=plot.style_line)
plot(resistance_level, title="Resistance", color=color.red, linewidth=2, style=plot.style_line)

// Adding labels to show pivot values
if (long_condition and not na(support_level))
    label.new(bar_index, low[pivot_length], str.tostring(low[pivot_length]), style=label.style_label_up, color=color.green, textcolor=color.white, size=size.small)

if (short_condition and not na(resistance_level))
    label.new(bar_index, high[pivot_length], str.tostring(high[pivot_length]), style=label.style_label_down, color=color.red, textcolor=color.white, size=size.small)


Relacionados

Mais.