Эта стратегия направлена на изучение разницы между покупкой активов при низкой волатильности и при высокой волатильности.
Эта стратегия определяет волатильность путем расчета ATR и его SMA. В частности, она рассчитывает SMA ATR, а затем вычисляет соотношение между ATR и его SMA. Если это соотношение выше установленного пользователем порогового уровня волатильностиTargetRatio, волатильность считается высокой. Если ниже порогового уровня, волатильность считается низкой.
В зависимости от выбранного пользователем режима стратегия генерирует сигналы покупки при высокой или низкой волатильности. После покупки стратегия будет действовать в течение ряда бар, определенных sellAfterNBarsLength, а затем закрыть позицию.
Основными преимуществами этой стратегии являются:
Основными рисками этой стратегии являются:
Вышеуказанные риски могут быть смягчены путем корректировки параметров и объединения покупок с различных уровней волатильности.
Эта стратегия может быть дополнительно оптимизирована путем:
Эта стратегия может эффективно сравнивать производительность стратегий покупки с низкой волатильностью и стратегий покупки с высокой волатильностью. Она использует SMA для сглаживания ATR и генерирует торговые сигналы на основе уровней волатильности. Стратегия может быть улучшена путем настройки параметров и оптимизации условий. В целом эта стратегия обеспечивает эффективный инструмент для исследования стратегий, основанных на волатильности.
/*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)