Estratégia de negociação quantitativa adaptativa de pivô de resistência de suporte dinâmico

ATR Pivot
Data de criação: 2025-01-10 15:08:24 última modificação: 2025-01-10 15:08:24
cópia: 3 Cliques: 416
1
focar em
1617
Seguidores

Estratégia de negociação quantitativa adaptativa de pivô de resistência de suporte dinâmico

Visão geral

Esta estratégia é um sistema de negociação adaptável que identifica dinamicamente os níveis de suporte e resistência com base nos pontos de pivô do preço. Ele determina os principais níveis de preços calculando máximas e mínimas locais em tempo real e executa negociações com base nisso. O cerne dessa estratégia está em sua natureza dinâmica, que pode ajustar os parâmetros de negociação ao longo do tempo de acordo com as mudanças nas condições de mercado e é adequada para mercados voláteis e com tendências.

Princípio da estratégia

A lógica central da estratégia é baseada nos seguintes elementos-chave:

  1. Cálculo de ponto de pivô dinâmico: usa um parâmetro de comprimento de pivô ajustável (o padrão é 2) para identificar máximas e mínimas locais
  2. Faixa de suporte e resistência: defina uma faixa percentual (padrão 0,4%) com base no ponto de pivô para definir a área de negociação efetiva
  3. Geração de sinal de negociação: quando o preço rompe o nível de suporte por baixo, um sinal longo é gerado, e quando ele rompe o nível de resistência por cima, um sinal curto é gerado.
  4. Controle de risco: configurações dinâmicas de stop loss (10%) e lucro (27%) são usadas, e o tamanho da posição é ajustado automaticamente de acordo com o patrimônio da conta

Vantagens estratégicas

  1. Forte adaptabilidade: A estratégia pode ajustar dinamicamente as posições de suporte e resistência de acordo com o status do mercado para evitar o atraso causado por níveis estáticos
  2. Risco controlável: por meio de stop loss percentual rigoroso e gerenciamento dinâmico de posição, o risco de cada transação é controlado dentro de uma faixa razoável
  3. Escalabilidade: Suporta múltiplos períodos de tempo e combinações de parâmetros para facilitar a otimização de acordo com diferentes ambientes de mercado
  4. Alta transparência: a lógica de negociação é clara e todos os sinais e níveis de preço podem ser exibidos intuitivamente no gráfico

Risco estratégico

  1. Risco de falso rompimento: Sinais frequentes de falso rompimento podem ocorrer em um mercado volátil, o que precisa ser reduzido ajustando os parâmetros de intervalo de suporte e resistência.
  2. Impacto do deslizamento: Em um ambiente de mercado com baixa liquidez, o preço real da transação pode divergir muito do preço do sinal.
  3. Dependência de tendência: a estratégia tem melhor desempenho em um mercado com tendências fortes, mas pode gerar muitos sinais de negociação em uma fase lateral
  4. Sensibilidade dos parâmetros: o desempenho da estratégia é sensível às configurações dos parâmetros, e o backtesting é necessário para determinar a combinação ideal de parâmetros.

Direção de otimização da estratégia

  1. Adicionado módulo de reconhecimento do ambiente de mercado para ajustar automaticamente os parâmetros de acordo com a volatilidade
  2. Introduzir volume e outros indicadores técnicos como sinais auxiliares de confirmação
  3. Otimize algoritmos de gerenciamento de posição e faça ajustes dinâmicos com base na volatilidade do mercado
  4. Adicione filtro de tempo para evitar gerar sinais de negociação durante períodos desfavoráveis
  5. Desenvolver um algoritmo de stop loss adaptável para ajustar dinamicamente a posição de stop loss de acordo com a volatilidade do mercado

Resumir

A estratégia fornece uma estrutura sólida para acompanhamento de tendências e negociação de reversão, identificando dinamicamente os principais níveis de preço, combinados com um rigoroso controle de risco. Embora haja um certo grau de sensibilidade dos parâmetros e dependência do ambiente de mercado, por meio de otimização e melhoria contínuas, é possível manter um desempenho estável em diferentes ambientes de mercado. A operação bem-sucedida da estratégia exige que os traders tenham um profundo entendimento de seus princípios e façam ajustes de parâmetros apropriados com base em condições específicas de mercado.

Código-fonte da estratégia
/*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)