Estrategia de seguimiento de la volatilidad

El autor:¿ Qué pasa?, Fecha: 2023-12-01 17:53:36
Las etiquetas:

img

Resumen general

Esta es una estrategia de seguimiento de tendencia de stop loss basada en la volatilidad de precios. Utiliza el rango verdadero promedio (ATR) para establecer líneas de stop loss para las fluctuaciones de precios. ATR refleja la volatilidad y el nivel de riesgo de los precios. Cuando el precio excede la línea de stop loss, la estrategia juzga la inversión de tendencia y toma las acciones correspondientes para abrir posiciones o detener las pérdidas.

Principio de la estrategia

La estrategia primero calcula el rango verdadero promedio (ATR) durante un cierto período. Luego, en función de la dirección de la tendencia del precio actual, si es una tendencia alcista, la línea de stop loss se establece en el precio más alto actual menos n veces el ATR; si es una tendencia bajista, la línea de stop loss se establece en el precio más bajo actual más n veces el ATR. El valor n se puede ajustar a través de parámetros para controlar la distancia entre la línea de stop loss y el precio.

Cuando el precio rompe la línea de stop loss de la tendencia alcista o bajista, se considera que la tendencia ha cambiado.

En resumen, la estrategia utiliza la volatilidad de precios para establecer líneas de stop loss para lograr un juicio preciso de los cambios de tendencia.

Ventajas de la estrategia

  • Utilizar las características de volatilidad de los precios para juzgar las tendencias y captar con precisión los puntos de inflexión de los precios
  • Detener las pérdidas y cambiar de posición a tiempo para reducir los riesgos de reversión del mercado
  • Ajuste flexible de parámetros para controlar la distancia entre la línea de stop loss y las fluctuaciones de precios
  • Los parámetros se pueden optimizar para productos específicos para una mejor adaptabilidad

Riesgos de la estrategia

  • Riesgos de error de valoración debido a breakouts inválidos Los precios pueden tener breakouts inválidos insostenibles, lo que provoca errores de valoración de los cambios de tendencia
  • Por ejemplo, cuando el valor n es demasiado grande, la línea de stop loss está demasiado cerca y las pequeñas fluctuaciones pueden desencadenarla.
  • Los valores más pequeños de ATR significan que las líneas de stop loss están más cerca de los precios

Direcciones de optimización

  • Se pueden introducir indicadores auxiliares como el volumen de negociación o la aceleración de la volatilidad para evitar una evaluación errónea de los breakouts no válidos.
  • Ajustar el valor n en función de las características de los diferentes productos para que la distancia de detención de pérdida sea más adecuada
  • El período ATR también se puede optimizar para elegir el parámetro de período más adecuado para juzgar la volatilidad de la brecha de precios

Resumen de las actividades

En general, esta es una buena implementación de algoritmos para establecer líneas de stop loss basadas en la volatilidad de los precios. Su precisión en juzgar las tendencias de los precios es alta y puede capturar puntos de inflexión clave de las tendencias. También proporciona algo de espacio para ajustar los parámetros para una mejor adaptabilidad.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © laptevmaxim92

//@version=4
strategy("Volatility stop strategy", overlay=true)

length = input(20)
mult = input(2, step = 0.1)
utp = input(false, "Use take profit?")
pr = input(100, "Take profit pips")
usl = input(false, "Use stop loss?")
sl = input(100, "Stop loss pips")
fromday = input(01, defval=01, minval=01, maxval=31, title="From Day")
frommonth = input(01, defval=01, minval= 01, maxval=12, title="From Month")
fromyear = input(2000, minval=1900, maxval=2100, title="From Year")
today = input(31, defval=01, minval=01, maxval=31, title="To Day")
tomonth = input(12, defval=12, minval=01, maxval=12, title="To Month")
toyear = input(2039, minval=1900, maxval=2100, title="To Year")

use_date = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00))

atr_ = atr(length)
max_ = 0.0
min_ = 0.0
max1 = 0.0
max1 := max(nz(max_[1]), close)
min1 = 0.0
min1 := min(nz(min_[1]), close)
vstop = 0.0
is_uptrend = false
is_uptrend_prev = false
is_uptrend_prev := nz(is_uptrend[1], true)
stop = is_uptrend_prev ? max1 - mult * atr_ : min1 + mult * atr_
vstop_prev = nz(vstop[1])
vstop1 = is_uptrend_prev ? max(vstop_prev, stop) : min(vstop_prev, stop)
is_uptrend := close - vstop1 >= 0
is_trend_changed = is_uptrend != is_uptrend_prev
max_ := is_trend_changed ? close : max1
min_ := is_trend_changed ? close : min1
vstop := is_trend_changed ? is_uptrend ? max_ - mult * atr_ : min_ + mult * atr_ : vstop1
plot(vstop, color = is_uptrend ? color.green : color.red, linewidth=2)

longCondition = is_uptrend
if (longCondition and use_date)
    strategy.entry("BUY", strategy.long)

shortCondition = not is_uptrend
if (shortCondition and use_date)
    strategy.entry("SELL", strategy.short)
    
if (utp and not usl)
    strategy.exit("TP", "BUY", profit = pr)
    strategy.exit("TP", "SELL", profit = pr)
    
if (usl and not utp)
    strategy.exit("SL", "BUY", loss = sl)
    strategy.exit("SL", "SELL", loss = sl)
    
if (usl and utp)
    strategy.exit("TP/SL", "BUY", loss = sl, profit = pr)
    strategy.exit("TP/SL", "SELL", loss = sl, profit = pr)

Más.