이것은 볼륨 가중 평균 가격 (VWAP) 과 가르만 클래스 변동성 (GKV) 에 기반한 적응 거래 전략이다. 이 전략은 지능적인 시장 트렌드 추적을 달성하기 위해 변동성을 통해 VWAP의 표준 편차 대역을 동적으로 조정합니다. 가격이 상위 대역을 넘어서면 긴 포지션을 열고 하위 대역을 넘어서면 포지션을 닫습니다. 높은 변동성이 더 높은 브레이크업 임계로 이어지고 낮은 변동성이 더 낮은 임계로 이어집니다.
이 전략의 핵심은 VWAP와 GKV 변동성을 결합한다. 먼저 VWAP를 가격 피보트로 계산하고, 그 다음 폐쇄 가격의 표준편차를 사용하여 밴드를 구축한다. 핵심은 변동성 계산에 GKV 공식을 사용하여 네 가지 가격 포인트 (오픈, 하이, 로우, 클로즈) 를 고려하고 있으며 전통적인 변동성 측정보다 더 정확하다. 변동성은 동적으로 밴드 폭을 조정한다. 변동성이 증가하면 밴드는 넓어지며, 브레이크업 임계치를 높인다. 변동성이 감소하면 밴드는 좁아지고, 브레이크업 임계치를 낮추고 있다. 이 적응 메커니즘은 잘못된 브레이크업을 효과적으로 피한다.
이 전략은 혁신적인 VWAP 및 GKV 변동성 조합을 통해 동적인 시장 추적을 달성합니다. 적응성 성격은 다른 시장 환경에서 안정적인 성능을 가능하게합니다. 일부 잠재적 인 위험이 있지만 전략은 적절한 위험 통제와 지속적인 최적화로 좋은 응용 가능성을 보여줍니다.
/*backtest start: 2019-12-23 08:00:00 end: 2024-12-18 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Adaptive VWAP Bands with Garman Klass Volatility", overlay=true) // Inputs length = input.int(25, title="Volatility Length") vwapLength = input.int(14, title="VWAP Length") vol_multiplier = input.float(1,title="Volatility Multiplier") // Function to calculate Garman-Klass Volatility var float sum_gkv = na if na(sum_gkv) sum_gkv := 0.0 sum_gkv := 0.0 for i = 0 to length - 1 sum_gkv := sum_gkv + 0.5 * math.pow(math.log(high[i]/low[i]), 2) - (2*math.log(2)-1) * math.pow(math.log(close[i]/open[i]), 2) gcv = math.sqrt(sum_gkv / length) // VWAP calculation vwap = ta.vwma(close, vwapLength) // Standard deviation for VWAP bands vwapStdDev = ta.stdev(close, vwapLength) // Adaptive multiplier based on GCV multiplier = (gcv / ta.sma(gcv, length)) * vol_multiplier // Upper and lower bands upperBand = vwap + (vwapStdDev * multiplier) lowerBand = vwap - (vwapStdDev * multiplier) // Plotting VWAP and bands plot(vwap, title="VWAP", color=color.blue, linewidth=2) plot(upperBand, title="Upper Band", color=color.green, linewidth=1) plot(lowerBand, title="Lower Band", color=color.red, linewidth=1) var barColor = color.black // Strategy: Enter long above upper band, go to cash below lower band if (close > upperBand) barColor := color.green strategy.entry("Long", strategy.long) else if (close < lowerBand) barColor := color.fuchsia strategy.close("Long") barcolor(barColor)