Estrategia de stop loss dinámico con confirmación múltiple y gráfico de franjas de Nadaraya-Watson

ADX DI RSI MAE
Fecha de creación: 2024-05-24 17:58:47 Última modificación: 2024-05-24 17:58:47
Copiar: 0 Número de Visitas: 1065
1
Seguir
1617
Seguidores

Estrategia de stop loss dinámico con confirmación múltiple y gráfico de franjas de Nadaraya-Watson

Descripción general

La estrategia utiliza el gráfico de bandas de Nadezhda-Watson para suavizar el precio y calcular el alza y bajada en función del precio después de la suavización. Luego, utiliza los indicadores ADX y DI para determinar la fuerza y dirección de la tendencia, el indicador RSI para confirmar la dinámica de la tendencia y, al mismo tiempo, para identificar posibles rupturas a través de la subida y bajada del precio. Finalmente, combina múltiples señales como tendencia, ruptura y dinámica para ejecutar la operación y utiliza un stop loss dinámico para administrar el riesgo.

Principio de estrategia

  1. Se utiliza el gráfico de bandas de Nadleria-Watson para suavizar el precio y calcular el ascenso y el descenso.
  2. Utilice los indicadores ADX y DI para determinar la fuerza y dirección de la tendencia. Cuando el ADX es mayor que el umbral y el +DI es mayor que el -DI, representa una tendencia alcista, al contrario de una tendencia descendente.
  3. Para determinar si el precio ha roto la banda de arriba o la banda de abajo, indique un potencial salto hacia arriba y un potencial descenso.
  4. Confirme la dinámica de la tendencia con el indicador RSI. Cuando el RSI es mayor que 70, indica una dinámica ascendente, y menor que 30, indica una dinámica descendente.
  5. La combinación de múltiples señales como tendencias, breakouts y dinámicas para ejecutar operaciones:
    • Las posiciones excedentarias se abren cuando hay una fuerte tendencia al alza, una ruptura hacia arriba y un aumento de la dinámica.
    • Cuando haya una fuerte tendencia a la baja, abre el depósito en caso de una ruptura hacia abajo y una caída de la dinámica.
  6. El riesgo se gestiona mediante el uso de stop loss dinámico, cuyo precio de stop loss se calcula a partir del precio máximo/mínimo y el precio de cierre.
  7. Indica las líneas de tendencia, los puntos de ruptura y las señales de dinámica en el gráfico para mostrar las señales de la estrategia de forma intuitiva.

Ventajas estratégicas

  1. El gráfico de bandas de Nadaraya-Watson puede ser eficaz para suavizar los datos de precios y reducir la interferencia de ruido.
  2. El mecanismo de confirmación de múltiples señales mejora la fiabilidad de las señales, las señales de tendencia, punto de ruptura y energía se complementan entre sí para verificar las oportunidades de negociación.
  3. La gestión dinámica de la pérdida puede adaptarse mejor a las fluctuaciones del mercado y reducir el riesgo. El precio de la pérdida se calcula en función del precio máximo / mínimo y el precio de cierre, que puede ajustarse al mercado.
  4. Indica las líneas de tendencia, los puntos de ruptura y las señales de energía dinámica en el gráfico para que el usuario pueda observar y leer las señales de estrategia.

Riesgo estratégico

  1. En un mercado convulso o en un período de cambio de tendencia, las frecuentes señales de ruptura pueden provocar exceso de operaciones y pérdidas.
  2. Los paros dinámicos pueden no detenerse a tiempo cuando la tendencia se invierte, lo que aumenta la retirada.
  3. Los parámetros de la estrategia, como el ancho de banda del gráfico de banda de Nadleria-Watson, el umbral de ADX, etc., necesitan ser optimizados para diferentes mercados y estándares, y el ajuste inadecuado de los parámetros puede afectar la eficacia de la estrategia.

Dirección de optimización de la estrategia

  1. Introducción de más indicadores eficaces de determinación de tendencias, como MACD, sistema de medición, etc., para mejorar la precisión y la estabilidad de la determinación de tendencias.
  2. Optimización de los métodos de cálculo de pérdidas dinámicas, tales como ATR, SAR y otros indicadores relacionados con la volatilidad, para que las pérdidas sean más flexibles y efectivas.
  3. Establecer diferentes combinaciones de parámetros para diferentes características del mercado, como tendencias y oscilaciones, para mejorar la adaptabilidad de la estrategia.
  4. Admite el módulo de gestión de posiciones, ajusta las posiciones de forma dinámica según las tendencias del mercado, la volatilidad y otros factores, y controla el riesgo.

Resumir

La estrategia utiliza el gráfico de banda de Nadaraya-Watson para suavizar los precios, combinando indicadores de tendencia como el ADX, el DI y el indicador de energía RSI, así como múltiples señales como los puntos de ruptura de los precios, para construir un sistema de negociación más completo. La gestión de stop loss dinámica puede adaptarse a los cambios en el mercado y controlar el riesgo hasta cierto punto.

Código Fuente de la Estrategia
/*backtest
start: 2024-04-01 00:00:00
end: 2024-04-18 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Nadaraya-Watson Envelope with Multi-Confirmation and Dynamic Stop-Loss", overlay=true)

// Input parameters
h = input.float(7.2, "Bandwidth", minval=0)
mult = input.float(2.1, minval=0)
src = input(close, "Source")

// ADX and DI Input Parameters
adxLength = input.int(14, "ADX Length")
adxThreshold = input.float(25, "ADX Threshold")
adxSmoothing = input.int(14, "ADX Smoothing")

// Calculate ADX and DI
[dmiPlus, dmiMinus, adx] = ta.dmi(adxLength, adxSmoothing)
strongTrendUp = dmiPlus > dmiMinus and adx > adxThreshold
strongTrendDown = dmiMinus > dmiPlus and adx > adxThreshold

// Nadaraya-Watson Envelope Calculation
gauss(x, h) =>
    math.exp(-(math.pow(x, 2) / (h * h * 2)))

coefs = array.new_float(0)
den = 0.0

for i = 0 to 100
    w = gauss(i, h)
    array.push(coefs, w)

den := array.sum(coefs)

out = 0.0
for i = 0 to 100
    out += src[i] * array.get(coefs, i)
out /= den
mae = ta.sma(math.abs(src - out), 100) * mult

upper = ta.sma(out + mae, 10)
lower = ta.sma(out - mae, 10)

// Confirmations
breakoutUp = ta.crossover(src, upper)
breakoutDown = ta.crossunder(src, lower)

// Original RSI period and thresholds
rsiPeriod = input.int(14, "RSI Period")
rsi = ta.rsi(src, rsiPeriod)
momentumUp = rsi > 70 and adx > adxThreshold
momentumDown = rsi < 30 and adx > adxThreshold

// // Plot ADX-based Trend Confirmation Lines
// if (strongTrendUp)
//     line.new(bar_index, low, bar_index + 1, low, color=color.new(color.blue, 50), width=2, style=line.style_dashed)

// if (strongTrendDown)
//     line.new(bar_index, high, bar_index + 1, high, color=color.new(color.red, 50), width=2, style=line.style_dashed)

// Plot Breakout Confirmation Dots
plotshape(series=breakoutUp, style=shape.circle, location=location.abovebar, color=color.blue, size=size.tiny, title="Breakout Up")
plotshape(series=breakoutDown, style=shape.circle, location=location.belowbar, color=color.orange, size=size.tiny, title="Breakout Down")

// Plot Momentum Confirmation Arrows
plotshape(series=momentumUp, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny, title="Momentum Up")
plotshape(series=momentumDown, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny, title="Momentum Down")

// Strategy Entry and Exit
var float stopLossLevel = na
var float highestPrice = na

potentialBuy = strongTrendUp and breakoutUp
potentialSell = strongTrendDown and breakoutDown
momentumConfirmUp = potentialBuy and momentumUp
momentumConfirmDown = potentialSell and momentumDown

if (momentumConfirmUp)
    strategy.entry("Buy", strategy.long)
    stopLossLevel := close * 0.90
    highestPrice := close

if (momentumConfirmDown)
    strategy.entry("Sell", strategy.short)
    stopLossLevel := close * 1.10
    highestPrice := close

if (strategy.position_size > 0)
    highestPrice := math.max(highestPrice, close)
    stopLossLevel := math.max(highestPrice * 0.85, close * 0.90)

if (strategy.position_size < 0)
    highestPrice := math.min(highestPrice, close)
    stopLossLevel := math.min(highestPrice * 1.15, close * 1.10)

// Close position if stop loss is hit
if (strategy.position_size > 0 and close < stopLossLevel)
    strategy.close("Buy")

if (strategy.position_size < 0 and close > stopLossLevel)
    strategy.close("Sell")