Eine Supertrend-Strategie ist eine Trendverfolgungsstrategie, die auf der Berechnung der durchschnittlichen tatsächlichen Breite basiert. Sie verwendet die durchschnittliche tatsächliche Breite, um eine Stop-Loss-Linie einzurichten und die Richtung des Trends zu bestimmen, indem sie beurteilt, ob der Preis die Stop-Loss-Linie überschritten hat, um ein Handelssignal zu erzeugen.
Die Strategie berechnet zunächst die durchschnittliche tatsächliche ATR für einen bestimmten Zeitraum. Dann werden die langen und kurzen Stop-Lines mit einem Skalierungsfaktor multipliziert, um die ATR-Werte zu berechnen.
atr = mult * atr(length)
longStop = hl2 - atr
shortStop = hl2 + atr
Dabei ist length die Berechnung der ATR-Zykluslänge, und mult ist der Skalierungsfaktor des ATR.
Nach der Berechnung der Stop-Line beurteilt die Strategie kontinuierlich, ob der Preis die Stop-Line der vorherigen K-Linie überschreitet, um die Richtung des Trends zu bestimmen:
dir := dir == -1 and close > shortStopPrev ? 1 :
dir == 1 and close < longStopPrev ? -1 : dir
Wenn die langen Linien die Stop-Line brechen, wird der Trend als übertrieben angesehen. Wenn die kurzen Linien die Stop-Line brechen, wird der Trend als übertrieben angesehen.
Der Trend zeigt sich in einer Reihe von Faktoren, wie z.B. der Preis, die Menge der Aktien, die Preise und die Anzahl der Aktien.
buySignal = dir == 1 and dir[1] == -1
sellSignal = dir == -1 and dir[1] == 1
Schließlich werden die entsprechenden Transaktionen durchgeführt, wenn ein Kauf- und Verkaufssignal auftritt.
Die Berechnung einer Stop-Line mit einer durchschnittlichen realen Breite ermöglicht es, Marktlärm zu filtern und zuverlässige Trendsignale zu erfassen.
Weniger Strategieparameter, leicht zu verstehen und zu bedienen. ATR-Zyklen und Multiplikatoren können an unterschiedliche Marktbedingungen angepasst werden.
Mit dem Durchbruch der Stop-Line kann die Trendrichtung beurteilt werden, um das Risiko effektiv zu kontrollieren und die Verluste rechtzeitig zu stoppen.
Sie können für mehrere oder zwei Wege konfiguriert werden, um verschiedene Handelsstile zu erfüllen.
Es kann in jeder Zeitspanne verwendet werden und ist für verschiedene Handelsarten geeignet.
In einem Schock kann der ATR-Wert erhöht werden, was dazu führt, dass die Stop-Line zu breit wird und mehr falsche Signale erzeugt werden.
Es ist unmöglich, die optimale Kombination von Parametern zu bestimmen, die ATR-Zyklen und die Multiplikatoren müssen entsprechend der Marktlage optimiert werden.
Es ist unmöglich, die optimale Handelsphase für die Handelsvariante zu bestimmen, und es ist notwendig, für jede Handelsvariante zu testen.
Es gibt eine gewisse Verzögerung bei der Bestimmung des optimalen Eintrittszeitraums.
Es besteht eine gewisse Risikopositionslücke, die bei schwachen Trends auftreten kann.
Es besteht die Gefahr, dass die Stop-Loss-Grenze überschritten wird, und die Stop-Loss-Grenze sollte entsprechend gelockert werden.
Eine Filterung in Kombination mit anderen Indikatoren kann in Betracht gezogen werden, um falsche Signale in schwankenden Situationen zu vermeiden. Zum Beispiel MACD, RSI usw.
Die optimale Kombination von Parametern kann durch Maschinelles Lernen oder genetische Algorithmen ermittelt werden.
Die Parameter können für verschiedene Sorten optimiert werden, um die optimale ATR-Periode und den Multiplikationsfaktor zu ermitteln.
Es kann eine Kombination von quantitativen Indikatoren verwendet werden, um den Zeitpunkt der Zulassung zu bestimmen, z. B. die Anzahl der Anmeldungen, um eine vorzeitige Zulassung zu vermeiden.
Eine Lock-out-Strategie kann in Erwägung gezogen werden, um eine Position zu halten, wenn die Position leer ist.
Der Stop-Loss-Bereich kann entsprechend erweitert werden und die Stop-Loss-Position kann in Kombination mit dem Trendstärke-Indikator optimiert werden.
Die Supertrend-Strategie ist eine zuverlässige und risikokontrollierbare Trendverfolgungsstrategie, die durch die Berechnung einer dynamischen Stop-Line und die Bestimmung eines Preisbruchs bei der Ermittlung von Trendveränderungen ermittelt wird. Die Strategie ist einfach zu verwenden und eignet sich für mehrere Handelsarten, muss jedoch für die Parameter und die Strategie-Regeln optimiert werden, um in verschiedenen Märkten eine bessere Wirkung zu erzielen.
/*backtest
start: 2023-09-12 00:00:00
end: 2023-10-12 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
// strategy("SuperTrend Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000)
LongOnly = input(title="Long Only ?", type=input.bool, defval=true)
length = input(title="ATR Period", type=input.integer, defval=22)
mult = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
showLabels = input(title="Show Buy/Sell Labels ?", type=input.bool, defval=true)
////////////////////////////////////////////////////////////////////////////////
// BACKTESTING RANGE
// From Date Inputs
fromDay = input(defval=1, title="From Day", minval=1, maxval=31)
fromMonth = input(defval=1, title="From Month", minval=1, maxval=12)
fromYear = input(defval=2019, title="From Year", minval=1970)
// To Date Inputs
toDay = input(defval=1, title="To Day", minval=1, maxval=31)
toMonth = input(defval=1, title="To Month", minval=1, maxval=12)
toYear = input(defval=2020, title="To Year", minval=1970)
// Calculate start/end date and time condition
startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true
////////////////////////////////////////////////////////////////////////////////
atr = mult * atr(length)
longStop = hl2 - atr
longStopPrev = nz(longStop[1], longStop)
longStop := close[1] > longStopPrev ? max(longStop, longStopPrev) : longStop
shortStop = hl2 + atr
shortStopPrev = nz(shortStop[1], shortStop)
shortStop := close[1] < shortStopPrev ? min(shortStop, shortStopPrev) : shortStop
dir = 1
dir := nz(dir[1], dir)
dir := dir == -1 and close > shortStopPrev ? 1 :
dir == 1 and close < longStopPrev ? -1 : dir
longColor = color.green
shortColor = color.red
plot(dir == 1 ? longStop : na, title="Long Stop", style=plot.style_linebr, linewidth=2, color=longColor)
buySignal = dir == 1 and dir[1] == -1
plotshape(buySignal ? longStop : na, title="Long Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=longColor, transp=0)
plotshape(buySignal and showLabels ? longStop : na, title="Buy Label", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=longColor, textcolor=color.white, transp=0)
plot(dir == 1 ? na : shortStop, title="Short Stop", style=plot.style_linebr, linewidth=2, color=shortColor)
sellSignal = dir == -1 and dir[1] == 1
plotshape(sellSignal ? shortStop : na, title="Short Stop Start", location=location.absolute, style=shape.circle, size=size.tiny, color=shortColor, transp=0)
plotshape(sellSignal and showLabels ? shortStop : na, title="Sell Label", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=shortColor, textcolor=color.white, transp=0)
if LongOnly
if buySignal and time_cond
strategy.entry("Long", strategy.long, comment="Long")
if(sellSignal and time_cond)
strategy.close("Long")
else
if buySignal and time_cond
strategy.entry("Long", strategy.long, comment="Long")
else
strategy.cancel("Long")
if sellSignal and time_cond
strategy.entry("Short", strategy.short, comment="Short")
else
strategy.cancel("Short")
if not time_cond
strategy.close_all()