
La estrategia es una estrategia de seguimiento de tendencias de stop loss basada en la volatilidad de los precios. Utiliza la amplitud de fluctuación real promedio (ATR) para establecer una línea de stop loss para las fluctuaciones de los precios. ATR refleja la volatilidad de los precios y el nivel de riesgo.
La estrategia primero calcula el ATR, la amplitud real promedio de fluctuación durante un período determinado. Luego, en función de la dirección de la tendencia de precios actual, si es una tendencia alcista, se establece el límite de pérdida como el ATR de n veces menos el precio más alto actual; si es una tendencia descendente, el límite de pérdida es el ATR de n veces más el precio más bajo actual.
Cuando el precio cae por debajo de la línea de parada de la tendencia alcista o la línea de parada de la tendencia descendente, se determina que la tendencia ha cambiado. En este caso, la estrategia se detiene y se establece una nueva línea de parada de acuerdo con la nueva dirección de la tendencia.
En general, la estrategia tiene la capacidad de determinar con precisión el cambio de tendencia mediante el uso de la volatilidad de los precios para establecer una línea de stop loss. Cuando la tendencia cambia, el stop loss es oportuno y ayuda a la estrategia a tomar la dirección de la nueva tendencia.
La estrategia en general es una mejor implementación de algoritmos para establecer líneas de stop loss basadas en la volatilidad de los precios. Determina con mayor precisión el movimiento de los precios y es capaz de capturar los puntos de inflexión clave de la tendencia. Al mismo tiempo, ofrece un cierto espacio para ajustar los parámetros y es más adaptable. Como una estrategia de stop loss, es capaz de evitar eficazmente el riesgo de un cambio de tendencia, que vale la pena aplicar en el mercado real.
/*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)