Die Best ATR Stop Multiple Strategie ist eine Trend-folgende Strategie, die Multiples des Average True Range (ATR) verwendet, um Stop-Loss-Punkte zu setzen und das Risiko dynamisch anzupassen.
Die Strategie berechnet zunächst die einfachen gleitenden Durchschnitte der schnellen und langsamen SMA-Perioden.
Nach dem Eintritt überwacht es den ATR-Wert in Echtzeit. Der ATR stellt die durchschnittliche Volatilität über einen bestimmten Rückblickzeitraum dar. Die Strategie ermöglicht es uns, den ATR-Zeitraum (Standard 14) und den Multiplikator (Standard 2) festzulegen. Das System berechnet den ATR-Wert beim Eintritt und multipliziert ihn dann mit dem festgelegten Multiplikator als Stoppdistanz.
Zum Beispiel, wenn der ATR nach dem Eintritt 50 Punkte beträgt und der Multiplikator auf 2 gesetzt ist, dann wäre die Stop-Distanz 100 Punkte. Wenn sich der Preis dann mehr als 100 Punkte bewegt, wird die Stop-Loss-Order ausgelöst. Dies ermöglicht zeitnahe Stop-Losses, um übermäßige Verluste zu vermeiden.
Die Strategie berücksichtigt auch die Trendbestimmung. Der lange Stop Loss ist nur aktiviert, wenn das Kaufsignal einem Aufwärtstrend entspricht. Der kurze Stop Loss entspricht einem Abwärtstrend.
Die Stop-Loss-Linien sind auf dem Chart gezeichnet, so dass wir sie in Echtzeit überprüfen können.
Der größte Vorteil dieser Strategie besteht darin, dass sie die Stop-Loss-Distanz dynamisch anpasst und das Risiko automatisch basierend auf Änderungen der Marktvolatilität anpasst. Wenn die Volatilität wächst, steigt auch die Stop-Distanz, wodurch die Wahrscheinlichkeit, dass ein Stop-Loss getroffen wird, reduziert wird.
Im Vergleich zu festen Stop-Loss-Distanzen kontrolliert dieser Ansatz die Verluste effektiv pro Handel und verfolgt dabei Trends.
Darüber hinaus können solche Stop-Loss-Methoden in Kombination mit der Trendbestimmung die Wahrscheinlichkeit verringern, dass sie in Konsolidierungszonen durch Whipsaws gestoppt werden.
Das Hauptrisiko dieser Strategie ist die Wahrscheinlichkeit, dass sich die Preise kurzfristig während einer Position zurückziehen und den Stop-Loss auslösen.
Ein weiteres Risiko besteht darin, dass die Preise bei gewaltsamen Bewegungen durch das Stop-Loss-Niveau gehen können. Dies würde größere ATR-Multiplikator-Einstellungen erfordern, bedeutet aber auch ein geringeres Gewinnpotenzial.
Schließlich berücksichtigt die Strategie nicht den Einfluss des Handels nach den Öffnungs- und Vormarktzeiten auf die ATR-Werte, was zu einer ungenauen Berechnung der ATR-Daten bei Eröffnungen und Schließungen führen kann.
Die Strategie kann in mehreren Aspekten optimiert werden:
Optimierung der ATR-Periodenparameter und Prüfung der besten Kombinationen für verschiedene Märkte
Vergleichen von festen und dynamischen ATR-Multiplikatoren in Bezug auf Rendite
Einbeziehung der Daten nach der Arbeitszeit in die ATR-Berechnung zur Verringerung der Lücken bei den Öffnungen
Einstellung der ATR-Bedingungen: Stopps werden nur aktiviert, wenn die ATR bestimmte Werte erreicht, und unnötige Stopps in Umgebungen mit geringer Volatilität werden vermieden.
Mehr Filter einzubeziehen: Haupttrends, Volumen-/Impulsindikatoren usw.
Die Best ATR Stop Multiple Strategy balanciert effektiv Trendfolgung und Risikokontrolle durch dynamische Anpassung der Stoppdistanzen. Im Vergleich zu festen Stops gewährleistet sie Gewinnpotenzial und begrenzt gleichzeitig effektiv Verluste.
Natürlich bleiben einige Risiken bestehen, wie Preislücken und überempfindliche Stopps.
/*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)