Objetivo de ganancia dinámica de ATR y estrategia de stop loss

El autor:¿ Qué pasa?, Fecha: 14 de septiembre de 2023 16:22:53
Las etiquetas:

Estrategia lógica

Esta estrategia utiliza objetivos dinámicos de ganancia y stop loss que se ajustan en función del precio y la volatilidad actuales.

La lógica es:

  1. Calcular el intervalo medio verdadero (ATR) durante un período (por ejemplo, 20 días)

  2. En la tendencia alcista, el objetivo de ganancia/parada es el precio más alto menos el múltiplo ATR

  3. En la tendencia bajista, el objetivo de ganancia/parada es el precio más bajo más el múltiplo ATR

  4. Comercio inverso cuando el precio excede el objetivo de ganancia/detención

  5. Cambios de tendencia cuando el precio supera el objetivo de ganancia/detención

  6. Ajuste del objetivo de ganancia/detención en función del nuevo estado de tendencia

La estrategia aprovecha ATR para establecer automáticamente objetivos y paradas de ganancias dinámicas, lo que permite el cierre oportuno de las ganancias y la prevención de pérdidas excesivas.

Ventajas

  • ATR calcula automáticamente los niveles de ganancia/detención

  • Pistas de ajuste dinámico del precio en tiempo real

  • Control del riesgo de obtención de beneficios y de cese de los mismos a tiempo

Los riesgos

  • Los parámetros ATR requieren optimización

  • Si se detiene demasiado cerca, se arriesga a ser detenido.

  • Necesidad de monitorear los cambios de ATR en tiempo real

Resumen de las actividades

Esta estrategia utiliza ATR para establecer dinámicamente los niveles de ganancia / parada para el seguimiento automático. El ajuste de ATR puede mejorar el rendimiento de la parada.


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

//@version=2
strategy("Dhananjay Volatility stop strategy v1.0", overlay=true)


length = input(20)
mult = input(1)
atr_ = atr(length)
max1 = max(nz(max_[1]), close)
min1 = min(nz(min_[1]), close)
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 ? green : red, style=line, linewidth=2)

bearish = close < vstop 
bullish = close > vstop 


if (bullish)
    strategy.entry("Buy", strategy.long, 1)
    
    

if (bearish)
    strategy.entry("Sell", strategy.short, 1)
    
    

Más.