Retração percentual ZigZag multinível combinada com estratégia de negociação de indicador estocástico

ZZ ATR RSI STOCH SMA
Data de criação: 2025-02-21 11:18:39 última modificação: 2025-02-21 11:18:39
cópia: 0 Cliques: 477
2
focar em
319
Seguidores

Retração percentual ZigZag multinível combinada com estratégia de negociação de indicador estocástico Retração percentual ZigZag multinível combinada com estratégia de negociação de indicador estocástico

Visão geral

A estratégia é um sistema de negociação que combina a percentagem de retração ZigZag e o indicador aleatório [[Stochastic]]. A estratégia identifica os pontos de inflexão críticos da tendência do mercado através do indicador ZigZag ajustado dinamicamente e combina os sinais de sobrevenda e sobrevenda do indicador aleatório para otimizar o momento de entrada no mercado. O sistema também integra mecanismos de stop loss e stop-loss para realizar a gestão de risco.

Princípio da estratégia

A lógica central da estratégia é baseada nos seguintes componentes principais:

  1. Indicador de ZigZag Dinâmico - Percentagem de retirada de ajustes dinâmicos do ATR com suporte a configuração manual ou com base em diferentes períodos ((5-250)
  2. Filtragem de indicadores aleatórios - indicadores aleatórios com 9 ciclos de K-valores e 3 ciclos de suavidade
  3. Geração de sinais de transação:
    • Condições de compra: Preço quebrou a linha de inversão e o valor K do indicador aleatório é inferior a 20
    • Condições de venda: preço abaixo da linha de inversão e K-valor aleatório acima de 80
  4. Gerenciamento de risco - Stop loss (de 100) e stop loss (de 300) com um número fixo de pontos

Vantagens estratégicas

  1. Adaptabilidade - Adaptação dinâmica da estratégia para melhor adaptar-se a diferentes cenários de mercado através do ATR
  2. Confirmação múltipla - Combinação de tendências e indicadores de dinâmica para reduzir falsos sinais
  3. Riscos controlados - com um bom mecanismo de prevenção de perdas
  4. Sinais claros - sinais de negociação claros e fáceis de executar
  5. Flexibilidade de parâmetros - suporte a várias configurações de parâmetros para otimização

Risco estratégico

  1. Risco de mercado de turbulência - pode desencadear frequentemente um stop loss em situações de turbulência inter-zonal
  2. Risco de deslizamento - pode haver um deslizamento maior em situações de velocidade
  3. Risco de stop loss fixo - o stop loss de ponto fixo pode não ser adequado para todas as circunstâncias do mercado
  4. Risco de Falso Breakout - Pode produzir um falso sinal de breakout no intervalo de compilação
  5. Sensibilidade de parâmetros - a escolha de parâmetros tem maior influência no desempenho da estratégia

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

  1. Optimização de stop loss dinâmico - Considere o uso de ATR ou taxa de flutuação para ajustar dinamicamente a posição de stop loss
  2. Filtragem do cenário de mercado - adicionar um indicador de intensidade de tendência e abrir posições apenas quando a tendência é forte
  3. Reforço de confirmação de sinal - adição de confirmação de volume de entrega pode ser considerada
  4. Otimização do tempo de entrada - introdução de reconhecimento de configuração de preço para aumentar a precisão de entrada
  5. Perfeita gestão de posições - ajustamento dinâmico do porte das posições com base na volatilidade

Resumir

A estratégia, em combinação com ZigZag e indicadores aleatórios, constrói um sistema de negociação mais completo. As principais características da estratégia são a clareza de sinais e o risco controlado, mas os parâmetros ainda precisam ser otimizados de acordo com as condições reais do mercado. É recomendável fazer um bom feedback antes da negociação em massa e melhorar continuamente a estratégia em combinação com a experiência do mercado.

Código-fonte da estratégia
/*backtest
start: 2025-02-18 14:00:00
end: 2025-02-20 00:00:00
period: 5m
basePeriod: 5m
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/

//@version=5
strategy("[RS]ZigZag Percent Reversal with Stochastic Strategy", overlay=true)

//  ||---}---------------------------------------------------------------------||

//  |--------------------------------------------------------------------------||
//  |   ZigZag:                                                                ||
//  |--------------------------------------------------------------------------||
//  |{
string percent_method = input.string(
         defval="MANUAL", 
         title="Method to use for the zigzag reversal range:", 
         options=[
             "MANUAL", 
             "ATR005 * X", "ATR010 * X", "ATR020 * X", "ATR050 * X", "ATR100 * X", "ATR250 * X"
             ]
         )

var float percent = input.float(
         defval=0.25, 
         title="Percent of last pivot price for zigzag reversal:", 
         minval=0.0, maxval=99.0
         ) / 100

float percent_multiplier = input.float(
         defval=1.0, 
         title="Multiplier to apply to ATR if applicable:"
         )
if percent_method == "ATR005 * X"
    percent := ta.atr(5) / open * percent_multiplier
if percent_method == "ATR010 * X"
    percent := ta.atr(10) / open * percent_multiplier
if percent_method == "ATR020 * X"
    percent := ta.atr(20) / open * percent_multiplier
if percent_method == "ATR050 * X"
    percent := ta.atr(50) / open * percent_multiplier
if percent_method == "ATR100 * X"
    percent := ta.atr(100) / open * percent_multiplier
if percent_method == "ATR250 * X"
    percent := ta.atr(250) / open * percent_multiplier

//  ||-------------------------------------------------------------------------||
//  ||  zigzag function:
//  ||-------------------------------------------------------------------------||
//  |{
f_zz(_percent)=>


    //  direction after last pivot
    var bool _is_direction_up = na
    //  track highest price since last lower pivot
    var float _htrack = na
    //  track lowest price since last higher pivot
    var float _ltrack = na
    //  zigzag variable for plotting
    var float _pivot = na
    //  range needed for reaching reversal threshold
    float _reverse_range = 0.0
    //  real pivot time
    var int _real_pivot_time = na
    var int _htime = na
    var int _ltime = na
    //  reverse line
    var float _reverse_line = na
    
    if bar_index >= 1
        
        if na(_is_direction_up)
            _is_direction_up := true
        
        _reverse_range := nz(_pivot[1]) * _percent
        
        if _is_direction_up
            _ltrack := na
            _ltime := time
            
            if na(_htrack)
                if high > high[1]
                    _htrack := high
                    _htime := time
                else
                    _htrack := high[1]
                    _htime := time[1]
            else
                if high > _htrack
                    _htrack := high
                    _htime := time

            // Reversal line calculation based on the current candle's closing price
            _reverse_line := _htrack - _reverse_range
            
            // If close <= reversal line, mark pivot and reverse direction
            if close <= _reverse_line
                _pivot := _htrack
                _real_pivot_time := _htime
                _is_direction_up := false

        if not _is_direction_up
            _htrack := na
            _htime := na
            
            if na(_ltrack)
                if low < low[1]
                    _ltrack := low
                    _ltime := time
                else
                    _ltrack := low[1]
                    _ltime := time[1]
            else
                if low < _ltrack
                    _ltrack := low
                    _ltime := time
                
            // Reversal line calculation based on the current candle's closing price
            _reverse_line := _ltrack + _reverse_range
            
            // If close >= reversal line, mark pivot and reverse direction
            if close >= _reverse_line
                _pivot := _ltrack
                _real_pivot_time := _ltime
                _is_direction_up := true

    [_pivot, _is_direction_up, _reverse_line, _real_pivot_time]

[pivot, direction_up, reverse_line, pivot_time] = f_zz(percent)

// Çizim
// Sabit Reversal Line (fiyat seviyesinde sabit)
var float static_reverse_line = na
if (not na(reverse_line))
    static_reverse_line := reverse_line

plot(series=static_reverse_line, color=color.gray, style=plot.style_line, title="Reversal Line", trackprice=false)

//  ||-------------------------------------------------------------------------||
//  ||  Stochastic:                                                            ||
//  ||-------------------------------------------------------------------------||
//  |{
K_length = 9
K_smoothing = 3

// Stochastic %K hesaplama
stochK = ta.sma(ta.stoch(close, high, low, K_length), K_smoothing)

//  ||-------------------------------------------------------------------------||
//  ||  Custom Buy/Sell Signals:
//  ||-------------------------------------------------------------------------||
//  |{
// Buy sinyali: Fiyat reversal line'ının üstünde ve stochastic K değeri 20'nin altında ise
buy_signal = close > static_reverse_line and stochK < 20

// Sell sinyali: Fiyat reversal line'ının altındaysa ve stochastic K değeri 80'in üstünde ise
sell_signal = close < static_reverse_line and stochK > 80

// Alım ve satım sinyali için strateji girişlerini ekle
long_condition = buy_signal
short_condition = sell_signal

// **Burada Stop Loss ve Take Profit değerleri ayarlandı**
stop_loss_pips = 100  // Stop Loss 10 pip
take_profit_pips = 300  // Take Profit 30 pip

// Stop Loss ve Take Profit seviyeleri hesaplanıyor
long_stop_loss = close - stop_loss_pips * syminfo.mintick
long_take_profit = close + take_profit_pips * syminfo.mintick
short_stop_loss = close + stop_loss_pips * syminfo.mintick
short_take_profit = close - take_profit_pips * syminfo.mintick

// Long stratejisi: Alım sinyali ve stop loss/take profit seviyeleri ile
if long_condition
    strategy.entry("Buy", strategy.long, stop=long_stop_loss, limit=long_take_profit)
    strategy.exit("Take Profit / Stop Loss", from_entry="Buy", stop=long_stop_loss, limit=long_take_profit)
    // Webhook ile alım bildirimi gönder
    alert("Buy Signal Triggered!", alert.freq_once_per_bar)

// Short stratejisi: Satım sinyali ve stop loss/take profit seviyeleri ile
if short_condition
    strategy.entry("Sell", strategy.short, stop=short_stop_loss, limit=short_take_profit)
    strategy.exit("Take Profit / Stop Loss", from_entry="Sell", stop=short_stop_loss, limit=short_take_profit)
    // Webhook ile satım bildirimi gönder
    alert("Sell Signal Triggered!", alert.freq_once_per_bar)

// Alım sinyali gösterimi
plotshape(series=buy_signal, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal", text="BUY", textcolor=color.white)
// Satım sinyali gösterimi
plotshape(series=sell_signal, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal", text="SELL", textcolor=color.white)