Estrategia de impulso de tendencia: sistema de cronometraje de banda dinámica multiperíodo en zigzag

SL TP PH PL
Fecha de creación: 2025-02-18 13:29:06 Última modificación: 2025-02-18 13:29:06
Copiar: 1 Número de Visitas: 343
1
Seguir
1617
Seguidores

Estrategia de impulso de tendencia: sistema de cronometraje de banda dinámica multiperíodo en zigzag

Descripción general

La estrategia es un sistema de negociación multidimensional que combina el indicador ZigZag y el indicador William. A través del indicador ZigZag, se identifican los altos y bajos de las bandas importantes, y se utiliza el indicador William para confirmar los puntos de entrada cuando el mercado alcanza un estado de sobrecompra o sobreventa. Esta combinación no solo puede capturar los principales puntos de cambio de tendencia del mercado, sino que también puede mejorar la precisión de las operaciones mediante la confirmación de la dinámica.

Principio de estrategia

La lógica central de la estrategia se basa en dos componentes principales:

  1. El indicador literal identifica los puntos altos y bajos de la banda significativa a través de la profundidad y los parámetros de desviación establecidos, filtra el ruido del mercado y determina la dirección de la tendencia. Cuando se forma un nuevo punto bajo de la banda, indica el comienzo de una tendencia alcista, y un nuevo punto alto de la banda indica el comienzo de una tendencia descendente.
  2. El índice William calcula el estado de la dinámica del mercado comparando el precio actual con el precio más alto en un período determinado. Cuando el índice supera los 80 indica sobreventa (oportunidad potencial de compra), y el descenso de 20 indica sobreventa (oportunidad potencial de venta).

Las reglas de negociación de la estrategia son las siguientes:

  • Multicondicionamiento: el WYSIWYG identifica un nuevo nivel bajo de la banda y el WYSIWYG rompe hacia arriba desde la zona de sobreventa
  • Condiciones de vacío: el indicador de palabras identifica un nuevo punto alto de la banda y el indicador de William se rompe hacia abajo desde la zona de sobrecompra
  • El stop loss está en el 1% y el stop loss está en el 2%.

Ventajas estratégicas

  1. Confirmación multidimensional: mejora la fiabilidad de las señales de negociación mediante la doble confirmación de tendencias y dinámicas
  2. Adaptabilidad: los parámetros de desviación de los indicadores en forma de palabras se pueden ajustar a la fluctuación dinámica del mercado
  3. Control de riesgo perfecto: estrategia de stop loss con porcentaje fijo para controlar el riesgo de cada operación
  4. Buena visualización: muestra claramente las señales de negociación a través de etiquetas y gráficos para facilitar su análisis y optimización

Riesgo estratégico

  1. Riesgo de un mercado convulso: Falsas brechas frecuentes en el mercado horizontal
  2. Riesgo de deslizamiento: Es posible que haya un deslizamiento mayor en un trayecto rápido
  3. Sensibilidad de parámetros: la elección de los parámetros indicadores tiene un mayor impacto en el rendimiento de la estrategia
  4. Lagrangea de la señal: es posible que se pierda algo de velocidad debido a la necesidad de confirmar la formación de nuevos puntos de banda

Dirección de optimización de la estrategia

  1. Aumentar el filtro de entornos de mercado: se puede agregar un indicador de volatilidad para identificar el estado del mercado, utilizando diferentes configuraciones de parámetros en diferentes entornos
  2. Optimización de stop loss dinámico: se puede ajustar la posición de stop loss dinámicamente en función del ATR o de la volatilidad
  3. Introducir confirmación de transacción: agregar verificación de transacción cuando se genera la señal
  4. Filtrado de tiempo: se puede agregar un filtro de período de negociación para evitar el comercio en períodos de mayor volatilidad

Resumir

Se trata de un sistema de negociación completo que combina el seguimiento de tendencias y el comercio de volúmenes. A través de la sinergia de múltiples indicadores técnicos, se puede controlar el riesgo de manera efectiva y al mismo tiempo mantener una alta tasa de ganancias. Si bien existe un cierto retraso, se puede lograr un efecto de negociación estable a través de una racional optimización de los parámetros y la gestión del riesgo.

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