En la carga de los recursos... Cargando...

Estrategia de supertrend dinámica ajustada a la volatilidad en varias etapas

El autor:¿ Qué pasa?, Fecha: 2024-11-29 16:57:19
Las etiquetas:El ATRLa SMAEnfermedad de transmisión sexualTP

img

Resumen general

La Estrategia de Supertrend Dinámica Ajustada a la Volatilidad en múltiples pasos es un innovador sistema de negociación que combina los indicadores Vegas Channel y SuperTrend. La singularidad de la estrategia radica en su capacidad de adaptarse dinámicamente a la volatilidad del mercado y su mecanismo de toma de ganancias en múltiples pasos para optimizar las relaciones riesgo-recompensa. Al combinar el análisis de volatilidad del Canal de Vegas con las capacidades de seguimiento de tendencias de SuperTrend, la estrategia ajusta automáticamente sus parámetros a medida que cambian las condiciones del mercado, proporcionando señales comerciales más precisas.

Principio de la estrategia

La estrategia opera en tres componentes principales: cálculo del canal de Vegas, detección de tendencias y mecanismo de toma de ganancias en varios pasos. El canal de Vegas utiliza el promedio móvil simple (SMA) y la desviación estándar (STD) para definir los rangos de volatilidad de precios, mientras que el indicador de SuperTrend determina la dirección de la tendencia basada en los valores de ATR ajustados. Las señales comerciales se generan cuando cambian las tendencias del mercado. El mecanismo de toma de ganancias en varios pasos permite salidas parciales a diferentes niveles de precios, un método que tanto bloquea las ganancias como permite que las posiciones restantes capturen ganancias potenciales.

Ventajas estratégicas

  1. Adaptabilidad dinámica: la estrategia se adapta automáticamente a las diferentes condiciones del mercado mediante el factor de ajuste de volatilidad.
  2. Gestión de riesgos: el mecanismo de obtención de beneficios en varios pasos proporciona un enfoque sistemático para la realización de beneficios.
  3. Personalizabilidad: ofrece múltiples configuraciones de parámetros para adaptarse a diferentes estilos comerciales.
  4. Cobertura completa del mercado: Apoya tanto el comercio largo como el corto.
  5. Retroalimentación visual: proporciona una interfaz gráfica clara para el análisis y la toma de decisiones.

Riesgos estratégicos

  1. Sensibilidad de los parámetros: las diferentes combinaciones de parámetros pueden dar lugar a variaciones significativas en el rendimiento.
  2. Lag: Los indicadores basados en medias móviles tienen un retraso inherente.
  3. Riesgo de ruptura falsa: puede generar señales falsas en mercados variados.
  4. Compromiso con la toma de ganancias: las tomas de ganancias tempranas pueden perder tendencias importantes, las tomas de ganancias tardías corren el riesgo de perder ganancias acumuladas.

Direcciones para la optimización de la estrategia

  1. Introducir filtros del entorno de mercado para ajustar los parámetros de la estrategia en diferentes condiciones de mercado.
  2. Añadir análisis de volumen para mejorar la fiabilidad de la señal.
  3. Desarrollar mecanismos adaptativos de obtención de ganancias que ajusten dinámicamente los niveles de ganancias en función de la volatilidad del mercado.
  4. Integrar indicadores técnicos adicionales para la confirmación de la señal.
  5. Implementar un dimensionamiento dinámico de las posiciones basado en el riesgo de mercado.

Resumen de las actividades

La Estrategia Dinámica SuperTendencia Ajustada a la Volatilidad de múltiples pasos representa un enfoque comercial cuantitativo avanzado, que combina múltiples indicadores técnicos y mecanismos innovadores de obtención de ganancias para proporcionar a los operadores un sistema comercial integral. Su adaptabilidad dinámica y características de gestión de riesgos lo hacen particularmente adecuado para operar en varios entornos de mercado, con buena escalabilidad y potencial de optimización. A través de la mejora y optimización continuas, la estrategia muestra promesa para ofrecer un rendimiento comercial más estable en el futuro.


/*backtest
start: 2024-10-01 00:00:00
end: 2024-10-31 23:59:59
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Multi-Step Vegas SuperTrend - strategy [presentTrading]", shorttitle="Multi-Step Vegas SuperTrend - strategy [presentTrading]", overlay=true, precision=3, commission_value=0.1, commission_type=strategy.commission.percent, slippage=1, currency=currency.USD)

// Input settings allow the user to customize the strategy's parameters.
tradeDirectionChoice = input.string(title="Trade Direction", defval="Both", options=["Long", "Short", "Both"]) // Option to select the trading direction
atrPeriod = input(10, "ATR Period for SuperTrend") // Length of the ATR for volatility measurement
vegasWindow = input(100, "Vegas Window Length") // Length of the moving average for the Vegas Channel
superTrendMultiplier = input(5, "SuperTrend Multiplier Base") // Base multiplier for the SuperTrend calculation
volatilityAdjustment = input.float(5, "Volatility Adjustment Factor") // Factor to adjust the SuperTrend sensitivity to the Vegas Channel width

// User inputs for take profit settings
useTakeProfit = input.bool(true, title="Use Take Profit", group="Take Profit Settings")
takeProfitPercent1 = input.float(3.0, title="Take Profit % Step 1", group="Take Profit Settings")
takeProfitPercent2 = input.float(6.0, title="Take Profit % Step 2", group="Take Profit Settings")
takeProfitPercent3 = input.float(12.0, title="Take Profit % Step 3", group="Take Profit Settings")
takeProfitPercent4 = input.float(21.0, title="Take Profit % Step 4", group="Take Profit Settings")

takeProfitAmount1 = input.float(25, title="Take Profit Amount % Step 1", group="Take Profit Settings")
takeProfitAmount2 = input.float(20, title="Take Profit Amount % Step 2", group="Take Profit Settings")
takeProfitAmount3 = input.float(10, title="Take Profit Amount % Step 3", group="Take Profit Settings")
takeProfitAmount4 = input.float(15, title="Take Profit Amount % Step 4", group="Take Profit Settings")

numberOfSteps = input.int(4, title="Number of Take Profit Steps", minval=1, maxval=4, group="Take Profit Settings")

// Calculate the Vegas Channel using a simple moving average and standard deviation.
vegasMovingAverage = ta.sma(close, vegasWindow)
vegasChannelStdDev = ta.stdev(close, vegasWindow)
vegasChannelUpper = vegasMovingAverage + vegasChannelStdDev
vegasChannelLower = vegasMovingAverage - vegasChannelStdDev

// Adjust the SuperTrend multiplier based on the width of the Vegas Channel.
channelVolatilityWidth = vegasChannelUpper - vegasChannelLower
adjustedMultiplier = superTrendMultiplier + volatilityAdjustment * (channelVolatilityWidth / vegasMovingAverage)

// Calculate the SuperTrend indicator values.
averageTrueRange = ta.atr(atrPeriod)
superTrendUpper = hlc3 - (adjustedMultiplier * averageTrueRange)
superTrendLower = hlc3 + (adjustedMultiplier * averageTrueRange)
var float superTrendPrevUpper = na
var float superTrendPrevLower = na
var int marketTrend = 1

// Update SuperTrend values and determine the current trend direction.
superTrendPrevUpper := nz(superTrendPrevUpper[1], superTrendUpper)
superTrendPrevLower := nz(superTrendPrevLower[1], superTrendLower)
marketTrend := close > superTrendPrevLower ? 1 : close < superTrendPrevUpper ? -1 : nz(marketTrend[1], 1)
superTrendUpper := marketTrend == 1 ? math.max(superTrendUpper, superTrendPrevUpper) : superTrendUpper
superTrendLower := marketTrend == -1 ? math.min(superTrendLower, superTrendPrevLower) : superTrendLower
superTrendPrevUpper := superTrendUpper
superTrendPrevLower := superTrendLower

// Enhanced Visualization
// Plot the SuperTrend and Vegas Channel for visual analysis.
plot(marketTrend == 1 ? superTrendUpper : na, "SuperTrend Upper", color=color.green, linewidth=2)
plot(marketTrend == -1 ? superTrendLower : na, "SuperTrend Lower", color=color.red, linewidth=2)
plot(vegasChannelUpper, "Vegas Upper", color=color.purple, linewidth=1)
plot(vegasChannelLower, "Vegas Lower", color=color.purple, linewidth=1)

// Apply a color to the price bars based on the current market trend.
barcolor(marketTrend == 1 ? color.green : marketTrend == -1 ? color.red : na)

// Detect trend direction changes and plot entry/exit signals.
trendShiftToBullish = marketTrend == 1 and marketTrend[1] == -1
trendShiftToBearish = marketTrend == -1 and marketTrend[1] == 1

plotshape(series=trendShiftToBullish, title="Enter Long", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(series=trendShiftToBearish, title="Enter Short", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")

// Define conditions for entering long or short positions, and execute trades based on these conditions.
enterLongCondition = marketTrend == 1
enterShortCondition = marketTrend == -1

// Check trade direction choice before executing trade entries.
if enterLongCondition and (tradeDirectionChoice == "Long" or tradeDirectionChoice == "Both")
    strategy.entry("Long Position", strategy.long)

if enterShortCondition and (tradeDirectionChoice == "Short" or tradeDirectionChoice == "Both")
    strategy.entry("Short Position", strategy.short)

// Close all positions when the market trend changes.
if marketTrend != marketTrend[1]
    strategy.close_all()

// Multi-Stage Take Profit Logic
if (strategy.position_size > 0)
    entryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1)
    if numberOfSteps >= 1
        strategy.exit("Take Profit 1", from_entry="Long Position", qty_percent=takeProfitAmount1, limit=entryPrice * (1 + takeProfitPercent1 / 100))
    if numberOfSteps >= 2
        strategy.exit("Take Profit 2", from_entry="Long Position", qty_percent=takeProfitAmount2, limit=entryPrice * (1 + takeProfitPercent2 / 100))
    if numberOfSteps >= 3
        strategy.exit("Take Profit 3", from_entry="Long Position", qty_percent=takeProfitAmount3, limit=entryPrice * (1 + takeProfitPercent3 / 100))
    if numberOfSteps >= 4
        strategy.exit("Take Profit 4", from_entry="Long Position", qty_percent=takeProfitAmount4, limit=entryPrice * (1 + takeProfitPercent4 / 100))

if (strategy.position_size < 0)
    entryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1)
    if numberOfSteps >= 1
        strategy.exit("Take Profit 1", from_entry="Short Position", qty_percent=takeProfitAmount1, limit=entryPrice * (1 - takeProfitPercent1 / 100))
    if numberOfSteps >= 2
        strategy.exit("Take Profit 2", from_entry="Short Position", qty_percent=takeProfitAmount2, limit=entryPrice * (1 - takeProfitPercent2 / 100))
    if numberOfSteps >= 3
        strategy.exit("Take Profit 3", from_entry="Short Position", qty_percent=takeProfitAmount3, limit=entryPrice * (1 - takeProfitPercent3 / 100))
    if numberOfSteps >= 4
        strategy.exit("Take Profit 4", from_entry="Short Position", qty_percent=takeProfitAmount4, limit=entryPrice * (1 - takeProfitPercent4 / 100))


Relacionados

Más.