Estrategia de negociación con retroceso porcentual en zigzag multinivel combinada con indicador estocástico

ZZ ATR RSI STOCH SMA
Fecha de creación: 2025-02-21 11:18:39 Última modificación: 2025-02-21 11:18:39
Copiar: 0 Número de Visitas: 477
2
Seguir
319
Seguidores

Estrategia de negociación con retroceso porcentual en zigzag multinivel combinada con indicador estocástico Estrategia de negociación con retroceso porcentual en zigzag multinivel combinada con indicador estocástico

Descripción general

La estrategia es un sistema de negociación que combina el porcentaje de retractación ZigZag y el indicador aleatorio {Stochastic}. La estrategia identifica los puntos de inflexión clave de la tendencia del mercado a través del indicador ZigZag ajustado dinámicamente y combina las señales de sobreventa y sobreventa de los indicadores aleatorios para optimizar el momento de entrada. El sistema también integra mecanismos de stop loss y stop loss para lograr la gestión del riesgo.

Principio de estrategia

La lógica central de la estrategia se basa en los siguientes componentes clave:

  1. Indicador de ZigZag Dinámico - porcentaje de retroceso de ajuste dinámico ATR que admite ajustes manuales o basados en diferentes períodos ((5-250)
  2. Filtrado de indicadores aleatorios - indicadores aleatorios con 9 ciclos de K-valores y 3 ciclos de suavidad
  3. Se generan señales de transacción:
    • Condiciones de compra: el precio rompe la línea inversa y el valor de K del indicador aleatorio es inferior a 20
    • Condiciones de venta: Precio por debajo de la línea inversa y K-valor aleatorio superior a 80
  4. Gestión de riesgos - con puntos fijos de stop loss (de 100 puntos) y stop loss (de 300 puntos)

Ventajas estratégicas

  1. Adaptabilidad - Adaptación dinámica de las estrategias a diferentes entornos del mercado a través de ATR
  2. Confirmación múltiple - Combinación de indicadores de tendencia y dinámica para reducir las falsas señales
  3. El riesgo es controlado - con un buen mecanismo de prevención de pérdidas
  4. Las señales son claras - las señales de negociación son claras y fáciles de ejecutar
  5. Flexibilidad de parámetros - soporte para la personalización de varios parámetros para una optimización fácil

Riesgo estratégico

  1. Riesgo de mercado en movimiento - se puede activar el stop loss con frecuencia en situaciones de movimiento de la zona
  2. Riesgo de deslizamiento - Es posible que se produzcan deslizamientos más grandes a alta velocidad
  3. Riesgo de pérdidas fijas - las pérdidas de puntos fijos pueden no ser adecuadas para todos los entornos de mercado
  4. Riesgo de falsa brecha - puede generar falsas señales de brecha en el intervalo de ajuste
  5. Sensibilidad de parámetros - la selección de parámetros tiene un mayor impacto en el rendimiento de la estrategia

Dirección de optimización de la estrategia

  1. Optimización dinámica de la parada de pérdidas - Considere el uso de ATR o el ajuste dinámico de la posición de parada de pérdidas
  2. Filtración de entornos de mercado: añade indicadores de intensidad de tendencia para abrir posiciones cuando la tendencia es fuerte
  3. Refuerzo de confirmación de la señal - Se puede considerar la confirmación de la entrega adicional
  4. Optimización de la hora de entrada - Introducción de la identificación de patrones de precios para mejorar la precisión de la entrada
  5. Gestión perfecta de las posiciones - ajuste dinámico del tamaño de las posiciones basado en la volatilidad

Resumir

La estrategia, combinada con ZigZag y indicadores aleatorios, construye un sistema de negociación más completo. Las principales características de la estrategia son la claridad de la señal y el control del riesgo, pero aún así se necesita optimizar los parámetros en función de la situación real del mercado. Se recomienda realizar una adecuada retroalimentación antes de la negociación en vivo y mejorar continuamente la estrategia en combinación con la experiencia del mercado.

Código Fuente de la Estrategia
/*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)