Dies ist eine anpassungsfähige Handelsstrategie, die auf dem Volumen-gewichteten Durchschnittspreis (VWAP) und der Garman-Klasse-Volatilität (GKV) basiert. Die Strategie passt die Standardabweichungsbänder von VWAP durch Volatilität dynamisch an, um eine intelligente Marktrendverfolgung zu erreichen. Sie eröffnet Long-Positionen, wenn der Preis über den oberen Band bricht, und schließt Positionen, wenn er unter den unteren Band bricht, wobei höhere Volatilität zu höheren Ausbruchsschwellen und niedrigere Volatilität zu niedrigeren Schwellen führt.
Der Kern der Strategie kombiniert VWAP mit der GKV-Volatilität. Er berechnet zuerst VWAP als Preispivot und baut dann Bands anhand der Standardabweichung der Schlusskosten auf. Der Schlüssel ist die Verwendung der GKV-Formel für die Volatilitätsberechnung, die vier Preispunkte (Open, High, Low, Close) berücksichtigt und genauer ist als herkömmliche Volatilitätsmessungen.
Die Strategie erreicht durch eine innovative Kombination aus VWAP und GKV Volatilität eine dynamische Marktverfolgung.
/*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)