Diese Strategie erzeugt Handelssignale basierend auf der historischen Volatilitätsspanne des Preises. Sie berechnet die Differenz zwischen den höchsten und niedrigsten Preisen über einen bestimmten Zeitraum und bildet einen Volatilitätsspanne unter Verwendung gleitender Durchschnitte. Handelssignale werden ausgelöst, wenn der Preis die oberen oder unteren Bands des Bereichs durchbricht. Sie gehört zu den Trend-nachfolgenden Breakout-Strategien.
Der Kernindikator ist die historische Preisvolatilität.
Berechnen Sie die Differenz zwischen den höchsten und niedrigsten Preisen über die letzten N-Barren, genannt HL
Berechnen Sie den Durchschnitt der höchsten und niedrigsten Preise über N Balken, avg ((H, L)
Volatilität = HL / Durchschnitt ((H, L)
Hierbei ist N der Parameter
Nach Erfassung der Volatilität werden die Bands berechnet:
Obergrenze = Laufende Schließung + Laufende Schließung * Volatilität
Unterer Band = aktueller Abschluss - aktueller Abschluss * Volatilität
Die Bänder werden dann durch WMA mit Periode als
Wenn der Preis über das obere Band bricht, gehen Sie lang. Wenn der Preis unter das untere Band bricht, gehen Sie kurz.
Ausgangssignale werden durch
Wenn der Ausgangstyp Volatilität MA ist, wird der Ausgang durchgeführt, wenn der Preis wieder unter die WMA fällt.
Wenn der Ausgangstyp Range Crossover ist, treten Sie aus, wenn der Preis wieder unter die Bands fällt.
Die Risiken können verringert werden, indem
Die Strategie kann verbessert werden, indem
Verschiedene Längenwerte testen, um optimale Kombinationen zu finden.
Überprüfen Sie beispielsweise, ob der MACD auch goldene Kreuzungen zeigt, wenn der Preis über das obere Band bricht.
Optimierung für Hinterhalt statt einfacher Range Break Stops.
Regeln für den Wiedereintritt festlegen, um Trends nach dem Stoppen wieder zu erfassen.
Dynamische Anpassung der Größen anhand der Marktvolatilität.
Diese Strategie funktioniert gut für Trending-Märkte im Allgemeinen, indem sie volatilitätsbasierte Bands verwendet, um die Trendstärke und die WMA zu messen, um zuverlässige Handelsbereiche für Breakout-Signale zu bilden.
/*backtest start: 2023-09-13 00:00:00 end: 2023-09-20 00:00:00 period: 5m basePeriod: 1m 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/ // © wbburgin //@version=5 strategy("Volatility Range Breakout Strategy [wbburgin]", shorttitle = "VRB Strategy [wbburgin]", overlay=true, pyramiding=20,max_bars_back=2000,initial_capital=10000) wma(float priceType,int length,float weight) => norm = 0.0 sum = 0.0 for i = 0 to length - 1 norm := norm + weight sum := sum + priceType[i] * weight sum / norm // This definition of volatility uses the high-low range divided by the average of that range. volatility(source,length) => h = ta.highest(source,length) l = ta.lowest(source,length) vx = 2 * (h - l) / (h + l) vx vm1 = input.int(100,"Average Length") volLen = input.int(100,"Volatility Length") vsrc = input.source(close,"Volatility Source") cross_type = input.source(close,"Exit Source") exit_type = input.string("Volatility MA",options=["Volatility MA","Range Crossover"],title="Exit Type") volatility = volatility(vsrc,volLen) highband1 = close + (close * volatility) lowband1 = close - (close * volatility) hb1 = wma(highband1,vm1,volatility) lb1 = wma(lowband1,vm1,volatility) hlavg = math.avg(hb1,lb1) upcross = ta.crossover(high,hb1) //Crossing over the high band of historical volatility signifies a bullish breakout dncross = ta.crossunder(low,lb1) //Crossing under the low band of historical volatility signifies a bearish breakout vlong = upcross vshort = dncross vlong_exit = switch exit_type == "Volatility MA" => ta.crossunder(cross_type,hlavg) exit_type == "Range Crossover" => ta.crossunder(cross_type,hb1) vshort_exit = switch exit_type == "Volatility MA" => ta.crossover(cross_type,hlavg) exit_type == "Range Crossover" => ta.crossover(cross_type,lb1) if vlong strategy.entry("Long",strategy.long) if vlong_exit strategy.close("Long") if vshort strategy.entry("Short",strategy.short) if vshort_exit strategy.close("Short") plot(hlavg,color=color.white,title="Weighted Volatility Moving Average") t = plot(hb1,color=color.new(color.red,50),title="Volatility Reversal Band - Top") b = plot(lb1,color=color.new(color.green,50),title="Volatility Reversal Band - Bottom") alertcondition(vlong,"Volatility Long Entry Signal") alertcondition(vlong_exit,"Volatility Long Exit Signal") alertcondition(vshort,"Volatility Short Entry Signal") alertcondition(vshort_exit,"Volatility Short Exit Signal") fill(t,b,color=color.new(color.aqua,90))