
Die optimale ATR-Stopp-Loss-Multiplikator-Strategie ist eine Trend-Tracking-Strategie, die ein Multiplikator der mittleren realen Breite der Welle (ATR) verwendet, um einen Stop-Loss-Punkt zu setzen und das Risiko dynamisch anzupassen. Wenn sich der Preisentwicklung ändert, kann es rechtzeitig gestoppt werden, um große Verluste zu vermeiden.
Die Strategie berechnet zunächst den einfachen Moving Average für die schnellen SMA-Zyklen und die langsamen SMA-Zyklen, wobei ein Plus bei einem langsamen SMA auf der schnellen SMA und ein Minus bei einem langsamen SMA unter der schnellen SMA berechnet wird.
Nach dem Eintritt überwacht es die ATR-Werte in Echtzeit. ATR ist die durchschnittliche Schwankungsbreite in der Vergangenheit in einem bestimmten Zeitraum. Diese Strategie erlaubt uns, die ATR-Zykluslänge (Standard 14) und das Multiplikator (Standard 2) einzustellen.
Wenn beispielsweise der ATR nach dem Eintritt 50 Punkte beträgt und die Multiplikation auf 2 gesetzt ist, ist die Stop-Loss-Distanz 100 Punkte. Wenn der Preis danach über 100 Punkte läuft, wird ein Stop-Loss-Bill ausgelöst. Dies kann den Verlust rechtzeitig stoppen und zu große Verluste vermeiden.
Die Strategie berücksichtigt auch die Trendentscheidung und aktiviert den Long-Stop nur, wenn ein Kaufsignal mit einem Aufwärtstrend übereinstimmt. Der Short-Stop wird aktiviert, wenn ein Short-Signal mit einem Abwärtstrend übereinstimmt.
Die Stop-Line wird auf der Grafik gezeichnet und wir können sie in Echtzeit überprüfen. Wenn die Stop-Bedingungen ausgelöst werden, wird die entsprechende Position automatisch vom System ausgeglichen.
Der größte Vorteil dieser Strategie besteht darin, dass die Stop-Loss-Distanz dynamisch angepasst wird, so dass die Risikogrenze automatisch angepasst wird, wenn die Marktvolatilität ändert. Wenn die Volatilität wächst, wird die Stop-Loss-Distanz erweitert, was die Wahrscheinlichkeit verringert, dass die Stop-Loss-Distanz überschritten wird.
Im Gegensatz zu einer festen Stop-Loss-Distanz kann diese Methode den Einzelschaden effektiv kontrollieren, während sie den Trend verfolgt. Sie garantiert sowohl Gewinnspielraum als auch Risikomanagement.
Darüber hinaus kann ein solcher Stopp in Kombination mit Trendbeurteilungen die Ausfallwahrscheinlichkeit von Erschütterungen in der Umschlagzone verringern.
Das Hauptrisiko dieser Strategie besteht darin, dass die Kurzlinie während der Haltestellung zurückgezogen wird und die Stop-Loss-Anweisungen ausgelöst werden. Insbesondere bei zu kurzen ATR-Zyklen kann die Stop-Loss-Distanz die Auswirkungen von kurzfristigen Schwankungen nicht vollständig filtern.
Ein weiteres Risiko besteht darin, dass bei extremen Ereignissen die Preissprungsbewegung die Stop-Loss-Linie direkt überschreiten kann. Dies erfordert eine größere Stop-Loss-Multiplizierung, bedeutet aber auch einen geringeren Gewinnraum.
Schließlich berücksichtigt die Strategie nicht die Auswirkungen von Overnight- und Pre-Overnight-Handel auf den ATR-Wert. Dies kann dazu führen, dass die ATR-Daten, die die Strategie berechnet, bei Eröffnung oder Schließung nicht korrekt sind.
Diese Strategie kann in folgenden Bereichen optimiert werden:
Optimierung der ATR-Zyklusparameter, um die optimale Kombination von Parametern in verschiedenen Märkten zu testen
Vergleiche der Rendite bei festem und dynamischem Multiplikator
ATR in Kombination mit Nacht- und Vorlaufdaten zur Verringerung der Auswirkungen von Preisschwankungen bei der Eröffnung
Einstellung der ATR-Bedingung: Nur aktiviert, wenn die ATR ein bestimmtes Niveau erreicht, um unnötige Verluste in einem Markt mit geringer Volatilität zu vermeiden
Mehr Filterbedingungen, wie z. B. Trends auf der Großebene, Kennzahlen für die Energiequoten
Die optimale ATR-Stopp-Loss-Multiplikator-Strategie bietet eine effektive Balance zwischen Trendverfolgung und Risikokontrolle durch dynamische Anpassung der Stop-Loss-Distanz. Im Vergleich zu einer festen Stop-Loss-Distanz kann sie die Einzelschäden effektiv begrenzen, während sie den Gewinnraum gewährleistet.
Natürlich müssen wir auf potenzielle Risiken achten, wie z. B. Preissprung, überempfindliche Stop-Loss-Situationen. Wir können die Stabilität und die Rendite der Strategie auf mehreren Ebenen weiter optimieren.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
//@author=Daveatt
//This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
SystemName = "BEST ATR Stop Multiple Strategy"
TradeId = "BEST"
InitCapital = 100000
InitPosition = 100
InitCommission = 0.075
InitPyramidMax = 1
CalcOnorderFills = true
CalcOnTick = true
DefaultQtyType = strategy.fixed
DefaultQtyValue = strategy.fixed
Precision = 2
Overlay=true
strategy(title=SystemName, shorttitle=SystemName, overlay=Overlay )
fastSMAperiod = input(defval=15, title='Fast SMA', type=input.integer, minval=2, step=1)
slowSMAperiod = input(defval=45, title='Slow SMA', type=input.integer, minval=2, step=1)
src = close
// Calculate moving averages
fastSMA = sma(src, fastSMAperiod)
slowSMA = sma(src, slowSMAperiod)
// Calculate trading conditions
enterLong = crossover(fastSMA, slowSMA)
enterShort = crossunder(fastSMA, slowSMA)
// trend states
since_buy = barssince(enterLong)
since_sell = barssince(enterShort)
buy_trend = since_sell > since_buy
sell_trend = since_sell < since_buy
is_signal = enterLong or enterShort
// get the entry price
entry_price = valuewhen(enterLong or enterShort, src, 0)
// Plot moving averages
plot(series=fastSMA, color=color.teal)
plot(series=slowSMA, color=color.orange)
// Plot the entries
plotshape(enterLong, style=shape.circle, location=location.belowbar, color=color.green, size=size.small)
plotshape(enterShort, style=shape.circle, location=location.abovebar, color=color.red, size=size.small)
///////////////////////////////
//======[ Trailing STOP ]======//
///////////////////////////////
// use SL?
useSL = input(true, "Use stop Loss")
// ATR multiple Stop
stop_atr_length = input(14,title="ATR Length", minval=1, type=input.integer)
stop_atr_mult = input(2,title="ATR Multiple", minval=0.05, step=0.1, type=input.float)
// Global STOP
stop_price = 0.0, stop_price := nz(stop_price[1])
// STOP ATR
var stop_atr = 0.0
var entry_stop_atr = 0.0
stop_atr := nz(atr(stop_atr_length))
if enterLong or enterShort
entry_stop_atr := stop_atr * stop_atr_mult
// display the ATR value multiple
plotshape(enterLong, title='ATR Long Stop value', style=shape.labelup,
location=location.bottom, color=color.green, transp=0, text='', textcolor=color.navy, editable=true, size=size.small, show_last=1, size=size.small)
// var label atr_long_label = na
// var label atr_short_label = na
lapos_y_entry_up = lowest(30)
lapos_y_entry_dn = highest(30)
// text_label = "ATR value: " + tostring(stop_atr, '#.#') + "\n\nATR Multiple value: " + tostring(entry_stop_atr, '#.#')
// if enterLong
// label.delete(atr_long_label)
// atr_long_label := label.new(bar_index, lapos_y_entry_up, text=text_label,
// xloc=xloc.bar_index, yloc=yloc.price, color=color.green, style=label.style_labelup, textcolor=color.white,
// size=size.normal)
// if enterShort
// label.delete(atr_short_label)
// atr_short_label := label.new(bar_index, lapos_y_entry_dn, text=text_label,
// xloc=xloc.bar_index, yloc=yloc.price, color=color.red, style=label.style_labeldown, textcolor=color.black,
// size=size.normal)
// Determine trail stop loss prices
longStopPrice = 0.0, shortStopPrice = 0.0
longStopPrice := if useSL and buy_trend
stopValue = entry_price - entry_stop_atr
else
0
shortStopPrice := if useSL and sell_trend
stopValue = entry_price + entry_stop_atr
else
999999
//////////////////////////////////////////////////////////////////////////////////////////
//*** STOP LOSS HIT CONDITIONS TO BE USED IN ALERTS ***//
//////////////////////////////////////////////////////////////////////////////////////////
cond_long_stop_loss_hit = useSL and buy_trend and crossunder(low, longStopPrice[1])
cond_short_stop_loss_hit = useSL and sell_trend and crossover(high, shortStopPrice[1])
// Plot stop loss values for confirmation
plot(series=useSL and buy_trend and low >= longStopPrice
? longStopPrice : na,
color=color.fuchsia, style=plot.style_cross,
linewidth=2, title="Long Trail Stop")
plot(series=useSL and sell_trend and high <= shortStopPrice
? shortStopPrice : na,
color=color.fuchsia, style=plot.style_cross,
linewidth=2, title="Short Trail Stop")
close_long = cond_long_stop_loss_hit
close_short = cond_short_stop_loss_hit
// Submit entry orders
strategy.entry(TradeId + " L", long=true, when=enterLong)
strategy.close(TradeId + " L", when=close_long)
//if (enterShort)
strategy.entry(TradeId + " S", long=false, when=enterShort)
strategy.close(TradeId + " S", when=close_short)