이 전략은 변동성이 낮고 변동성이 높을 때 자산을 구매하는 차이점을 연구하는 것을 목표로합니다. 사용자가 모드 입력 변수를 변경하여 낮은 또는 높은 변동성 기간 동안 구매할지 여부를 선택할 수 있습니다.
이 전략은 ATR 및 그 SMA를 계산하여 변동성을 결정한다. 구체적으로, ATR의 SMA를 계산하고, 그 다음 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)