Esta estrategia tiene como objetivo estudiar la diferencia entre comprar activos cuando la volatilidad es baja y cuando es alta.
Esta estrategia determina la volatilidad calculando el ATR y su SMA. Específicamente, calcula el SMA de ATR, y luego calcula la relación entre el ATR y su SMA. Si esta relación es superior a la volatilidad de umbral definida por el usuarioTargetRatio, la volatilidad se considera alta. Si es inferior al umbral, la volatilidad se considera baja.
Dependiendo del modo elegido por el usuario, la estrategia genera señales de compra cuando la volatilidad es alta o baja. Una vez comprada, la estrategia se mantendrá durante un número de barras definidas por sellAfterNBarsLength y luego cerrará la posición.
Las principales ventajas de esta estrategia son las siguientes:
Los principales riesgos de esta estrategia son:
Los riesgos anteriores pueden mitigarse ajustando los parámetros y combinando compras de diferentes niveles de volatilidad.
Esta estrategia se puede optimizar aún más mediante:
Esta estrategia puede comparar eficazmente el rendimiento de las estrategias de compra de baja volatilidad y de alta volatilidad. Utiliza SMA para suavizar el ATR y genera señales comerciales basadas en los niveles de volatilidad. La estrategia se puede mejorar a través del ajuste de parámetros y la optimización de condiciones. En general, esta estrategia proporciona una herramienta efectiva para investigar estrategias basadas en la 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)