Estrategia de ruptura de tendencia de ATR adaptativa

El autor:¿ Qué pasa?, Fecha: 2023-10-31 15:58:46
Las etiquetas:

img

Resumen general

Esta estrategia es una estrategia de ruptura de tendencia basada en el indicador ATR. Su idea principal es tomar operaciones de ruptura de tendencia cuando el precio excede un cierto múltiplo de ATR. La estrategia también incluye la confirmación de tendencia y limitar las operaciones dentro de rangos de fechas.

Principio

La estrategia utiliza el indicador ATR para medir la volatilidad de los precios. ATR significa Rango Verdadero Medio y mide la volatilidad promedio durante un período. El parámetro de longitud en la estrategia calcula el período ATR y numATRs representa el multiplicador ATR para la ruptura.

Cuando el precio se rompe por encima del múltiplo superior de numATRs de ATR, se toma una posición larga.

Además, la estrategia incluye variables de bool needlong y needshort para controlar solo operaciones largas o sólo cortas.

La estrategia utiliza una variable de tamaño para determinar el tamaño de la posición y calcula el tamaño de la orden en función del porcentaje del capital de la cuenta.

Ventajas

  • Utiliza el ATR para adaptarse automáticamente a la volatilidad del mercado sin ajustes manuales de pérdidas y ganancias.

  • Flexible para elegir largo, corto o sólo largo/corto.

  • Puede establecer rangos de fecha para evitar el comercio en eventos importantes.

  • Posicionamiento flexible basado en el porcentaje de capital de la cuenta.

Riesgos y soluciones

  • El ATR solo considera la volatilidad de los precios. Puede tener una parada de pérdida insuficiente durante grandes oscilaciones del mercado. Otros indicadores pueden combinarse.

  • Los límites de rango de fechas pueden perder oportunidades si no hay buenas configuraciones antes/después.

  • El tamaño de porcentaje de capital corre el riesgo de grandes pérdidas en operaciones individuales.

Ideas de optimización

  • Añadir promedios móviles para el filtro de tendencia para reducir el ruido falso de las operaciones de ruptura.

  • Prueba los períodos de ATR para encontrar los parámetros óptimos.

  • Combinar con otras estrategias para utilizar las fortalezas y mejorar la estabilidad.

Conclusión

Esta es una tendencia comprensible después de la estrategia que utiliza ATR para adaptarse a la volatilidad. La optimización de parámetros y la combinación con otras estrategias pueden mejorar aún más el rendimiento y la estabilidad.


/*backtest
start: 2023-09-30 00:00:00
end: 2023-10-30 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's Volty Strategy v1.0", shorttitle = "Volty 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
length = input(5)
numATRs = input(0.75)
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Indicator
atrs = sma(tr, length) * numATRs

//Trading
size = strategy.position_size
lot = 0.0
lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if (not na(close[length])) and needlong
    strategy.entry("L", strategy.long, lot, stop = close + atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[length])) and needlong == false
    strategy.entry("L", strategy.long, 0, stop = close + atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[length])) and needshort
    strategy.entry("S", strategy.short, lot, stop = close - atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if (not na(close[length])) and needshort == false
    strategy.entry("S", strategy.short, 0, stop = close - atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

Más.