
El objetivo de esta estrategia es estudiar las diferencias entre comprar activos durante períodos de baja volatilidad y alta volatilidad. Permite a los usuarios elegir comprar durante períodos de baja volatilidad y alta volatilidad cambiando las variables de entrada de modo.
Esta estrategia determina la volatilidad calculando el ATR y su SMA. Específicamente, calcula el SMA del ATR y luego calcula la proporción del ATR con su SMA. Si esta proporción es superior al umbral de volatilityTargetRatio definido por el usuario, se considera que la volatilidad es alta; si es inferior a ese umbral, se considera que la volatilidad es baja.
Dependiendo del modo elegido por el usuario, la estrategia genera una señal de compra cuando la volatilidad es alta o baja. Una vez comprada, la estrategia mantiene un cierto número de bares (definido por sellAfterNBarsLength) y luego se despeja.
Las principales ventajas de esta estrategia son:
Los principales riesgos de esta estrategia son los siguientes:
El riesgo se puede mitigar mediante la modificación de los parámetros y la combinación de compras con diferentes niveles de volatilidad.
La estrategia puede ser optimizada aún más:
Esta estrategia puede comparar eficazmente el rendimiento de las estrategias de compra de baja volatilidad y alta volatilidad. Utiliza el SMA para suavizar el ATR y generar señales de negociación en función del nivel de volatilidad. La estrategia se puede mejorar mediante la adaptación de los parámetros y la optimización de las condiciones. En general, esta estrategia ofrece una herramienta eficaz para el estudio de las estrategias de volatilidad.
/*backtest
start: 2023-01-01 00:00:00
end: 2024-01-07 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/
// © I11L
//@version=5
strategy("I11L - Better Buy Low Volatility or High Volatility?", overlay=false)
mode = input.string("Buy low Volatility",options = ["Buy low Volatility","Buy high Volatility"])
volatilityTargetRatio = input.float(1,minval = 0, maxval = 100,step=0.1, tooltip="1 equals the average atr for the security, a lower value means that the volatility is lower")
atrLength = input.int(14)
atr = ta.atr(atrLength) / close
avg_atr = ta.sma(atr,atrLength*5)
ratio = atr / avg_atr
sellAfterNBarsLength = input.int(5, step=5, minval=0)
var holdingBarsCounter = 0
if(strategy.opentrades > 0)
holdingBarsCounter := holdingBarsCounter + 1
isBuy = false
if(mode == "Buy low Volatility")
isBuy := ratio < volatilityTargetRatio
else
isBuy := ratio > volatilityTargetRatio
isClose = holdingBarsCounter > sellAfterNBarsLength
if(isBuy)
strategy.entry("Buy",strategy.long)
if(isClose)
holdingBarsCounter := 0
strategy.exit("Close",limit=close)
plot(ratio, color=isBuy[1] ? color.green : isClose[1] ? color.red : color.white)
plot(1, color=color.white)