Estrategia de negociación de inversión de ruptura de volatilidad

El autor:¿ Qué pasa?, Fecha: 2024-02-19 15:12:44
Las etiquetas:

img

Resumen general

La estrategia de negociación de reversión de ruptura de volatilidad es una estrategia de negociación de reversión que rastrea los canales de precios con puntos de stop profit y stop loss móviles adaptativos.

Estrategia lógica

La estrategia utiliza primero el indicador de rango verdadero promedio (ATR) de Wilder para medir la volatilidad de los precios. Luego calcula la constante de rango promedio (ARC) basada en los valores de ATR. El ARC representa la mitad del ancho del canal de precios. Luego, las bandas superior e inferior del canal se calculan como los puntos de stop profit y stop loss, también conocidos como los puntos SAR. Cuando los precios rompen por encima de la banda superior, se abre una posición corta. Cuando los precios rompen por debajo de la banda inferior, se abre una posición larga.

Específicamente, el ATR sobre las últimas N barras se calcula primero. El ATR se multiplica por un factor para obtener el ARC, que controla el ancho del canal de precios. Agregar el ARC al precio de cierre más alto sobre N barras da la banda superior del canal, o el SAR alto. Sustraer el ARC del precio de cierre más bajo da la banda inferior, o el SAR bajo. Si los precios se cierran por encima de la banda superior, se toma una posición corta. Si los precios se cierran por debajo de la banda inferior, se toma una posición larga.

Ventajas

  1. Utiliza la volatilidad para calcular canales adaptativos que rastrean los cambios del mercado
  2. Mercados de inversión de tendencias
  3. Se aplicará el método de cálculo de las pérdidas y ganancias.

Los riesgos

  1. El comercio de inversión es propenso a quedar atrapado, los parámetros necesitan ajuste adecuado
  2. Los movimientos bruscos de volatilidad pueden cerrar posiciones prematuramente
  3. Los parámetros inadecuados pueden provocar una sobrecomercialización

Soluciones:

  1. Optimizar el período ATR y el factor ARC para un ancho de canal razonable
  2. Añadir filtro de tendencia para señales de entrada
  3. Aumentar el período ATR a una menor frecuencia de operaciones

Oportunidades de mejora

  1. Optimizar el período ATR y el factor ARC
  2. Añadir condiciones de entrada como el MACD
  3. Incorporar una estrategia de stop loss

Conclusión

La estrategia de negociación de reversión de ruptura de volatilidad utiliza canales para rastrear los cambios de precios e invertir posiciones cuando la volatilidad sube. Funciona bien en mercados de rango con reversiones, generando buenos retornos si los puntos de reversión se identifican con precisión. Se debe tener cuidado de evitar que las paradas sean demasiado amplias y los parámetros sobreajustados.


/*backtest
start: 2023-02-12 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
//@author=LucF

// Volatility System [LucF]
// v1.0, 2019.04.14

// The Volatility System was created by Welles Wilder.
// It first appeared in his seminal masterpiece "New Concepts in Technical Trading Systems" (1978).
// He describes it on pp.23-26, in the chapter discussing the first presentation ever of the "Volatility Index",
// which later became known as ATR.
// Performance of the strategy usually increases with the time frame.
// Tuning of ATR length and, especially, the ARC factor, is key.

// This code runs as a strategy, which cannot generate alerts.
// If you want to use the alerts it must be converted to an indicator.
// To do so:
//      1. Swap the following 2 lines by commenting the first and uncommenting the second.
//      2. Comment out the last 4 lines containing the strategy() calls.
//      3. Save.
strategy(title="Volatility System by Wilder [LucF]", shorttitle="Volatility System [Strat]", overlay=true, precision=8, pyramiding=0, initial_capital=100000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1)
// study("Volatility System by Wilder [LucF]", shorttitle="Volatility System", precision=8, overlay=true)

// -------------- Colors
MyGreenRaw = color(#00FF00,0),      MyGreenMedium = color(#00FF00,50),  MyGreenDark = color(#00FF00,75),    MyGreenDarkDark = color(#00FF00,92)
MyRedRaw = color(#FF0000,0),        MyRedMedium = color(#FF0000,30),    MyRedDark = color(#FF0000,75),      MyRedDarkDark = color(#FF0000,90)

// -------------- Inputs
LongsOnly = input(false,"Longs only")
ShortsOnly = input(false,"Shorts only")
AtrLength = input(9, "ATR length", minval=2)
ArcFactor = input(1.8, "ARC factor", minval=0, type=float,step=0.1)
ShowSAR = input(false, "Show all SARs (Stop & Reverse)")
HideSAR = input(false, "Hide all SARs")
ShowTriggers = input(false, "Show Entry/Exit triggers")
ShowTradedBackground = input(false, "Show Traded Background")

FromYear  = input(defval = 2000,    title = "From Year", minval = 1900)
FromMonth = input(defval = 1,      title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1,       title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999,    title = "To Year", minval = 1900)
ToMonth   = input(defval = 1,       title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1,       title = "To Day", minval = 1, maxval = 31)

// -------------- Date range filtering
FromDate = timestamp(FromYear, FromMonth, FromDay, 00, 00)
ToDate = timestamp(ToYear, ToMonth, ToDay, 23, 59)
TradeDateIsAllowed() => true

// -------------- Calculate Stop & Reverse (SAR) points using Average Range Constant (ARC)
Arc   = atr(AtrLength)*ArcFactor
SarLo = highest(close, AtrLength)-Arc
SarHi = lowest(close, AtrLength)+Arc

// -------------- Entries/Exits
InLong = false
InShort = false
EnterLong = TradeDateIsAllowed() and not InLong[1] and crossover(close, SarHi[1])
EnterShort = TradeDateIsAllowed() and not InShort[1] and crossunder(close, SarLo[1])
InLong := (InLong[1] and not EnterShort[1]) or (EnterLong[1] and not ShortsOnly)
InShort := (InShort[1] and not EnterLong[1]) or (EnterShort[1] and not LongsOnly)

// -------------- Plots
// SAR points
plot( not HideSAR and ((InShort or EnterLong) or ShowSAR)? SarHi:na, color=MyRedMedium, style=circles, linewidth=2, title="SAR High")
plot( not HideSAR and ((InLong or EnterShort) or ShowSAR)? SarLo:na, color=MyGreenMedium, style=circles, linewidth=2, title="SAR Low")
// Entry/Exit markers
plotshape( ShowTriggers and not ShortsOnly and EnterLong, style=shape.triangleup, location=location.belowbar, color=MyGreenRaw, size=size.small, text="")
plotshape( ShowTriggers and not LongsOnly and EnterShort, style=shape.triangledown, location=location.abovebar, color=MyRedRaw, size=size.small, text="")
// Exits when printing only longs or shorts
plotshape( ShowTriggers and ShortsOnly and InShort[1] and EnterLong, style=shape.triangleup, location=location.belowbar, color=MyRedMedium, transp=70, size=size.small, text="")
plotshape( ShowTriggers and LongsOnly and InLong[1] and EnterShort, style=shape.triangledown, location=location.abovebar, color=MyGreenMedium, transp=70, size=size.small, text="")
// Background
bgcolor( color=ShowTradedBackground? InLong and not ShortsOnly?MyGreenDarkDark: InShort and not LongsOnly? MyRedDarkDark:na:na)

// ---------- Alerts
alertcondition( EnterLong or EnterShort, title="1. Reverse", message="Reverse")
alertcondition( EnterLong, title="2. Long", message="Long")
alertcondition( EnterShort, title="3. Short", message="Short")

// ---------- Strategy reversals
strategy.entry("Long", strategy.long, when=EnterLong and not ShortsOnly)
strategy.entry("Short", strategy.short, when=EnterShort  and not LongsOnly)
strategy.close("Short", when=EnterLong and ShortsOnly)
strategy.close("Long", when=EnterShort and LongsOnly)


Más.