Diese Strategie basiert auf historischen Preisschwankungen, um ein Handelssignal zu ermitteln. Sie berechnet die Differenz zwischen den höchsten und niedrigsten Preisen in einem bestimmten Zeitraum und bildet einen Schwankungsbereich durch einen Moving Average. Sie erzeugt ein Handelssignal, wenn der Preis den Auf- und Abstieg dieser Zone durchbricht.
Der Kern der Strategie ist die historische Schwankungsrate der Preise. Die Berechnungsmethode ist:
Der Unterschied zwischen dem Höchst- und dem Tiefstpreis der letzten N-Reihe Bar wird als HL berechnet.
Berechnen Sie den Mittelwert der höchsten und niedrigsten Preise in der Vergangenheit N-Rückgang Bar (avg ((H, L))
Schwankungsrate = HL / avg (H, L)
N ist das Parameter “Volatility Length”.
Nach Erhalt der Schwankungsrate berechnet man die Auf- und Abfahrt:
Aufwärts = aktuelle Close + aktuelle Close * Volatilität
Unterbahn = aktuelle Close - aktuelle Close * Schwankungen
Die Ober- und Unterstrecke wird durch eine WMA-Gleichlinie mit dem Parameter “Average Length” geschliffen.
Wenn die Preise hochgehen, machen Sie mehr; wenn die Preise untergehen, machen Sie weniger.
Das Ausgangssignal wird nach dem Parameter “Exit Type” angegeben:
Exit Type ist ein Volatility MA, bei dem der Preis die WMA-Durchschnitts-Gleichgewichtsposition wieder durchbricht;
Exit Type ist Range Crossover, der Kurs bricht wieder aus dem oberen und unteren Gleis.
Das Risiko kann durch folgende Maßnahmen verringert werden:
Diese Strategie kann in folgenden Bereichen optimiert werden:
Die optimale Kombination der Parameter wird durch das Testen verschiedener Length-Parameter gefunden.
Zum Beispiel, wenn der MACD bei einem Kursbruch auf die Strecke kommt, wird er mehr tun, wenn der MACD gleichzeitig Goldfork ist.
Es kann optimiert werden, um einen elastischen Tracking-Stopp zu erzeugen, anstatt nur einen einfachen Interval-Breakout-Stopp.
Nach dem Stop-Loss-Ausgang kann die Wiedereintrittsbedingung gesetzt werden, um den Trend erneut zu verfolgen, wenn der Trend fortgesetzt wird.
Die Positionen können dynamisch angepasst werden, je nach Marktvolatilität.
Die Strategie ist im Allgemeinen eher geeignet für Trendbewegungen, um die Richtung und Stärke des Trends anhand der Obergänge und Untergänge der Volatilität zu beurteilen und mit der WMA-Gewinnlinie einen zuverlässigen Handelsbereich zu bilden, wodurch ein Kauf- und Verkaufspunkt entsteht. Es gibt jedoch auch einige Probleme, wie z. B. Trendbeurteilung, Verzögerung, Stop-Loss-Methode kann verbessert werden.
/*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))