Dynamische Strategie zur Verfolgung des gleitenden Durchschnitts

Schriftsteller:ChaoZhang, Datum: 2023-11-24 16:59:25
Tags:

img

Übersicht

Die Kernidee dieser Strategie besteht darin, den dynamischen gleitenden Durchschnitt für die Trendverfolgung zu verwenden, Stop-Loss und Take-Profit festzulegen und Heikin Ashi-Candlestick-Techniken für das Long/Short-Signal zu kombinieren. Der ATR-Indikator wird zur Berechnung des dynamischen gleitenden Durchschnitts und der Stop-Loss-Position verwendet.

Grundsätze

Die Strategie berechnet zuerst den ATR-Indikator, kombiniert dann die Eingabepreisquelle und Parameter, um den dynamischen gleitenden Durchschnitt zu berechnen.

Speziell werden zuerst der ATR-Indikator und der Parameter nLoss berechnet. Dann werden der Preis des aktuellen Zeitraums und die Stop-Loss-Position des vorherigen Zeitraums verglichen, um die Stop-Loss-Linie zu aktualisieren. Wenn der Preis durch die Stop-Loss-Linie des vorherigen Zeitraums bricht, werden lange/kurze Signale pos und entsprechende Farben generiert. Wenn Handelssignale ausgelöst werden, werden Pfeilmarkierungen gezeichnet. Schließlich werden Positionen basierend auf der Stop-Loss/Take-Profit-Logik geschlossen.

Analyse der Vorteile

Der größte Vorteil dieser Strategie ist die Verwendung von dynamischen gleitenden Durchschnitten, um Preisänderungen in Echtzeit zu verfolgen. Dies erfasst Trends besser als herkömmliche feste gleitende Durchschnitte und reduziert die Wahrscheinlichkeit eines Stop-Loss. Darüber hinaus ermöglicht die Kombination von ATR-basierten Stop-Loss-Positionen eine flexible Anpassung der Stop-Loss-Position basierend auf der Marktvolatilität, um Risiken effektiv zu kontrollieren.

Risiken und Lösungen

Das Hauptrisiko dieser Strategie besteht darin, dass der Preis erheblich nach oben oder unten gehen kann, was zu falschen Signalen führt, wenn ein Stop-Loss getroffen wird.

Lösungen umfassen die Optimierung der gleitenden Durchschnittsperiode, die Anpassung von ATR und Stop-Loss-Koeffizienten, um die Wahrscheinlichkeit falscher Signale zu verringern.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Verschiedene Arten und Perioden gleitender Durchschnitte testen, um optimale Parameterkombinationen zu finden

  2. Optimierung des ATR-Periodenparameters, um die Stopp-Loss-Empfindlichkeit auszugleichen

  3. Hinzufügen von zusätzlichen Filtern und Indikatoren zur Verbesserung der Signalqualität

  4. Anpassung der Stop-Loss-/Take-Profit-Werte zur Optimierung des Risiko-Gewinn-Verhältnisses

Schlussfolgerung

Die Kernidee dieser Strategie besteht darin, den dynamischen gleitenden Durchschnitt zu verwenden, um Preisänderungen in Echtzeit zu verfolgen, den ATR-Indikator zu nutzen, um Stop-Loss-Positionen dynamisch festzulegen, das Risiko streng zu kontrollieren und dabei Trends zu verfolgen.


/*backtest
start: 2022-11-23 00:00:00
end: 2023-11-05 05:20:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"BTC_USDT","stocks":0}]
*/

//@version=5
strategy(title='UT Bot v5', overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
//CREDITS to HPotter for the orginal code. The guy trying to sell this as his own is a scammer lol. 
//Edited and converted to @version=5 by SeaSide420 for Paperina
// Inputs
AllowBuy = input(defval=true, title='Allow Buy?')
AllowSell = input(defval=false, title='Allow Sell?')
h = input(false, title='Signals from Heikin Ashi Candles')
//revclose = input(defval=true, title='Close when reverse signal?')
Price = input(defval=open, title='Price Source (recommended OPEN to avoid repainting)')
smoothing = input.string(title="Moving Average Type", defval="HMA", options=["SMA", "EMA", "WMA", "HMA"])
MA_Period = input(2, title='This changes the MAPeriod')
a = input.float(1, title='This changes the sensitivity',step=0.1)
c = input(11, title='ATR Period')
TakeProfit = input.int(defval=50000, title='Take Profit ($)', minval=1)
StopLoss = input.int(defval=50000, title='Stop Loss ($)', minval=1)
xATR = ta.atr(c)
nLoss = a * xATR
src = h ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, Price, lookahead=barmerge.lookahead_off) : Price
xATRTrailingStop = 0.0
iff_1 = src > nz(xATRTrailingStop[1], 0) ? src - nLoss : src + nLoss
iff_2 = src < nz(xATRTrailingStop[1], 0) and src[1] < nz(xATRTrailingStop[1], 0) ? math.min(nz(xATRTrailingStop[1]), src + nLoss) : iff_1
xATRTrailingStop := src > nz(xATRTrailingStop[1], 0) and src[1] > nz(xATRTrailingStop[1], 0) ? math.max(nz(xATRTrailingStop[1]), src - nLoss) : iff_2
pos = 0
iff_3 = src[1] > nz(xATRTrailingStop[1], 0) and src < nz(xATRTrailingStop[1], 0) ? -1 : nz(pos[1], 0)
pos := src[1] < nz(xATRTrailingStop[1], 0) and src > nz(xATRTrailingStop[1], 0) ? 1 : iff_3
xcolor = pos == -1 ? color.red : pos == 1 ? color.green : color.blue
ma_function(src, MA_Period) =>
    switch smoothing
        "SMA" => ta.sma(src, MA_Period)
        "EMA" => ta.ema(src, MA_Period)
        "WMA" => ta.wma(src, MA_Period)
        => ta.hma(src, MA_Period)
thema = ma_function(src, MA_Period)
above = ta.crossover(thema, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, thema)
buy = src > xATRTrailingStop and above
sell = src < xATRTrailingStop and below
barbuy = src > xATRTrailingStop
barsell = src < xATRTrailingStop
plot(thema,title="The M.A.",color=color.green,linewidth=2)
plot(xATRTrailingStop,title="The M.A.",color=color.red,linewidth=2)
plotshape(buy,  title = "Buy",  text = "Buy",  style = shape.labelup,   location = location.belowbar, color= color.green, textcolor = color.white, size = size.tiny)
plotshape(sell, title = "Sell", text = "Sell", style = shape.labeldown, location = location.abovebar, color= color.red,   textcolor = color.white, size = size.tiny)
barcolor(barbuy ? color.green : na)
barcolor(barsell ? color.red : na)
strategy.close_all(when=strategy.openprofit>TakeProfit,alert_message="Close- TakeProfit", comment = "TP")
strategy.close_all(when=strategy.openprofit<StopLoss-(StopLoss*2),alert_message="Close- StopLoss", comment = "SL")
strategy.close("buy", when =  sell and AllowSell==false , comment = "close buy")
strategy.close("sell", when =  buy and AllowBuy==false, comment = "close sell")
strategy.entry("buy", strategy.long, when = buy and AllowBuy)
strategy.entry("sell", strategy.short, when = sell and AllowSell)

Mehr