Estratégia de Momentum de Tendência - Sistema de Temporização de Banda Dinâmica Multiperíodo Zigzag

SL TP PH PL
Data de criação: 2025-02-18 13:29:06 última modificação: 2025-02-18 13:29:06
cópia: 1 Cliques: 343
1
focar em
1617
Seguidores

Estratégia de Momentum de Tendência - Sistema de Temporização de Banda Dinâmica Multiperíodo Zigzag

Visão geral

A estratégia é um sistema de negociação multidimensional que combina o indicador ZigZag e o indicador William. Com o indicador ZigZag, identifica-se os altos e baixos de um período importante, enquanto o indicador William é usado para confirmar os pontos de entrada quando o mercado atinge um estado de sobrecompra ou sobrevenda. Esta combinação não só é capaz de capturar os principais pontos de mudança de tendência do mercado, mas também pode aumentar a precisão da negociação por meio da confirmação de dinâmica.

Princípio da estratégia

A lógica central da estratégia baseia-se em dois componentes principais:

  1. Os indicadores de palavras identificam os altos e baixos de bandas significativas por meio de profundidade e parâmetros de desvio definidos, filtrando o ruído do mercado e determinando a direção da tendência. Quando um novo baixo de banda é formado, indica o início de uma tendência ascendente, e um novo alto de banda indica o início de uma tendência descendente.
  2. O indicador William calcula o estado de dinamismo do mercado comparando o preço atual com o preço máximo em um determinado período. Quando o valor do indicador ultrapassa 80 indica um excesso de venda (oportunidade de compra potencial), e um excesso de venda (oportunidade de venda potencial) indica um excesso de compra (oportunidade de venda potencial).

As regras de negociação da estratégia são as seguintes:

  • Multicondicionamento: o indicador de palavras identifica novos baixos de banda e o indicador de William se move para cima da zona de oversold
  • Condições de vazio: o indicador de palavras identifica o novo ponto mais alto do intervalo e o indicador de William se move para baixo da zona de sobrecompra
  • Stop loss em 1%, stop loss em 2%.

Vantagens estratégicas

  1. Confirmação multidimensional: aumenta a confiabilidade dos sinais de negociação através da dupla confirmação de tendências e dinâmicas
  2. Adaptável: os parâmetros de desvio do indicador de palavras podem ser ajustados de acordo com a dinâmica da volatilidade do mercado
  3. Controle de risco perfeito: uma estratégia de stop loss de porcentagem fixa para controlar o risco de cada transação
  4. Boa visualização: sinais de negociação apresentados com clareza por meio de etiquetas e gráficos para facilitar a análise e otimização

Risco estratégico

  1. Risco de turbulência no mercado: Falso sinal de ruptura pode ser frequente no mercado horizontal
  2. Risco de deslizamento: pode haver um deslizamento maior em condições de velocidade
  3. Sensibilidade de parâmetros: a escolha dos parâmetros do indicador tem maior influência no desempenho da estratégia
  4. Lagarda de sinais: pode-se perder alguns movimentos rápidos devido à necessidade de confirmar a formação de novos pontos de banda

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

  1. Adição de filtros de cenário de mercado: pode ser adicionado um indicador de volatilidade para identificar o estado do mercado, usando diferentes configurações de parâmetros em diferentes cenários
  2. Optimização de stop loss dinâmico: pode ser ajustado a posição de stop loss baseado em ATR ou taxa de flutuação dinâmica
  3. Introdução de confirmação de transação: adicionar a verificação de transação quando o sinal é gerado
  4. Filtro de tempo: pode ser adicionado um filtro de período de negociação para evitar negociação em períodos de maior volatilidade

Resumir

Trata-se de um sistema de negociação completo que combina o acompanhamento de tendências e a negociação dinâmica. Com a sinergia de vários indicadores técnicos, é possível controlar eficazmente o risco, mantendo uma alta taxa de vitória. Embora haja algum atraso, o efeito de negociação estável pode ser alcançado com a otimização de parâmetros razoáveis e gerenciamento de risco.

Código-fonte da estratégia
/*backtest
start: 2024-02-18 00:00:00
end: 2025-02-15 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Zig Zag + Williams %R Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=300)

// ====================
// === Parameters
// ====================

// Zig Zag parameters
zigzag_depth = input.int(5, title="Zig Zag Depth", minval=1)
zigzag_deviation = input.float(1.0, title="Zig Zag Deviation (%)", minval=0.1, step=0.1)

// Williams %R parameters
williams_length = input.int(14, title="Williams %R Length", minval=1)
williams_overbought = input.int(-20, title="Williams %R Overbought", minval=-100, maxval=0)
williams_oversold = input.int(-80, title="Williams %R Oversold", minval=-100, maxval=0)

// ====================
// === Zig Zag Calculation
// ====================

// Initialize variables
var float last_pivot_high = na
var float last_pivot_low = na
var int zz_dir = 0  // 1 for uptrend, -1 for downtrend

// Calculate pivots
pivot_high = ta.pivothigh(high, zigzag_depth, zigzag_depth)
pivot_low = ta.pivotlow(low, zigzag_depth, zigzag_depth)

// Update Zig Zag direction and last pivots with deviation
if (not na(pivot_high))
    if (zz_dir != -1)  // Only change to downtrend if not already in downtrend
        if (na(last_pivot_high) or (high[zigzag_depth] > last_pivot_high * (1 + zigzag_deviation / 100)))
            last_pivot_high := high[zigzag_depth]
            zz_dir := -1
            label.new(bar_index[zigzag_depth], high[zigzag_depth], text="PH", color=color.red, style=label.style_label_down)

if (not na(pivot_low))
    if (zz_dir != 1)  // Only change to uptrend if not already in uptrend
        if (na(last_pivot_low) or (low[zigzag_depth] < last_pivot_low * (1 - zigzag_deviation / 100)))
            last_pivot_low := low[zigzag_depth]
            zz_dir := 1
            label.new(bar_index[zigzag_depth], low[zigzag_depth], text="PL", color=color.green, style=label.style_label_up)

// ====================
// === Williams %R Calculation
// ====================

// Calculate Williams %R manually
highest_high = ta.highest(high, williams_length)
lowest_low = ta.lowest(low, williams_length)
williams_r = (highest_high - close) / (highest_high - lowest_low) * -100

// ====================
// === Trade Conditions
// ====================

// Assign crossover and crossunder results to variables
crossover_williams = ta.crossover(williams_r, williams_oversold)
crossunder_williams = ta.crossunder(williams_r, williams_overbought)

// Define trade conditions
longCondition = (zz_dir == 1) and crossover_williams
shortCondition = (zz_dir == -1) and crossunder_williams

// ====================
// === Trading
// ====================

// Enter Long
if (longCondition)
    strategy.entry("Long", strategy.long)
    label.new(bar_index, low, text="BUY", color=color.green, style=label.style_label_up)

// Enter Short
if (shortCondition)
    strategy.entry("Short", strategy.short)
    label.new(bar_index, high, text="SELL", color=color.red, style=label.style_label_down)

// ====================
// === Visualization
// ====================

// Plot Zig Zag pivot shapes
plotshape(series=(not na(pivot_high) and high[zigzag_depth] == last_pivot_high), title="Swing High", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small, text="ZZ High")
plotshape(series=(not na(pivot_low) and low[zigzag_depth] == last_pivot_low), title="Swing Low", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small, text="ZZ Low")

// Plot Williams %R
hline(williams_overbought, "Overbought", color=color.red, linestyle=hline.style_dashed)
hline(williams_oversold, "Oversold", color=color.green, linestyle=hline.style_dashed)
plot(williams_r, title="Williams %R", color=color.blue)

// Debug plot for Zig Zag direction
plot(zz_dir, title="Zig Zag Direction", color=color.orange, linewidth=2)

// ====================
// === Risk Management
// ====================

// Risk parameters
stop_loss_perc = input.float(1.0, title="Stop Loss (%)") / 100
take_profit_perc = input.float(2.0, title="Take Profit (%)") / 100

// Stop Loss and Take Profit for Long
if (longCondition)
    strategy.exit("Long Exit", from_entry="Long", stop=close * (1 - stop_loss_perc), limit=close * (1 + take_profit_perc))

// Stop Loss and Take Profit for Short
if (shortCondition)
    strategy.exit("Short Exit", from_entry="Short", stop=close * (1 + stop_loss_perc), limit=close * (1 - take_profit_perc))