Cette stratégie vise à étudier la différence entre l'achat d'actifs lorsque la volatilité est faible et lorsqu'elle est élevée.
Cette stratégie détermine la volatilité en calculant l'ATR et sa SMA. Plus précisément, elle calcule la SMA de l'ATR, puis calcule le rapport entre l'ATR et sa SMA. Si ce ratio est supérieur au seuil de volatilité défini par l'utilisateurTargetRatio, la volatilité est considérée comme élevée. Si elle est inférieure au seuil, la volatilité est considérée comme faible.
En fonction du mode choisi par l'utilisateur, la stratégie génère des signaux d'achat lorsque la volatilité est élevée ou faible. Une fois achetée, la stratégie se tiendra pendant un certain nombre de barres définies par sellAfterNBarsLength, puis ferme la position.
Les principaux avantages de cette stratégie sont les suivants:
Les principaux risques de cette stratégie sont les suivants:
Les risques susmentionnés peuvent être atténués en ajustant les paramètres et en combinant des achats de différents niveaux de volatilité.
Cette stratégie peut être encore optimisée par:
Cette stratégie peut comparer efficacement les performances des stratégies d'achat à faible volatilité et à forte volatilité. Elle utilise le SMA pour lisser l'ATR et génère des signaux de trading basés sur les niveaux de volatilité.
/*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)