Strategie zur dynamischen Verfolgung des gleitenden Durchschnitts


Erstellungsdatum: 2023-11-24 16:59:25 zuletzt geändert: 2023-11-24 16:59:25
Kopie: 0 Klicks: 608
1
konzentrieren Sie sich auf
1617
Anhänger

Strategie zur dynamischen Verfolgung des gleitenden Durchschnitts

Überblick

Die Kernidee der Strategie besteht darin, die dynamischen Moving Averages zu verwenden, um Trends zu verfolgen, Stop Losses zu setzen und in Kombination mit den Hinweisen der Heckling-Ring-Technologie mehrere Leerzeichen zu beurteilen. Der ATR-Indikator wird verwendet, um die dynamischen Moving Averages und die Stop Losses zu berechnen.

Strategieprinzip

Die Strategie berechnet zuerst die ATR-Indikatoren und berechnet dann die dynamischen Moving Averages in Kombination mit den eingegebenen Preisquellen und -parametern. Sie erzeugt ein Über-/Null-Signal, wenn der Preis über / unter dem dynamischen Moving Average liegt. Gleichzeitig wird eine Stop-Loss-Stopp-Position festgelegt, um die Preisänderungen in Echtzeit zu verfolgen.

Konkret wird zunächst der ATR-Indikator und der Parameter nLoss berechnet. Dann werden der aktuelle Zykluspreis und die Stop-Loss-Position des vorherigen Zyklus berechnet und die Stop-Line aktualisiert. Wenn der Preis den Stop-Loss des vorherigen Zyklus überschreitet, wird ein Plus/Null-Signal erzeugt.

Analyse der Stärken

Der größte Vorteil dieser Strategie besteht darin, dass die Verwendung von dynamischen Moving Averages die Preisänderungen in Echtzeit verfolgt. Dies ist besser geeignet, Trends zu erfassen und die Stop-Loss-Möglichkeit zu reduzieren als herkömmliche feste Moving Averages.

Risiken und Lösungen

Das Hauptrisiko dieser Strategie besteht darin, dass die Preise möglicherweise stark springen, was zu falschen Signalen führt, wenn die Stop-Line überschritten wird. Darüber hinaus kann eine falsche Einstellung der Bedingungen zu häufigen Geschäften führen.

Die Lösung besteht darin, die Anzahl der Moving Average Perioden zu optimieren, die ATR- und Stop-Loss-Faktorgröße anzupassen und die Wahrscheinlichkeit von Fehlsignalen zu verringern. Außerdem können Filterbedingungen gesetzt werden, um zu intensiven Geschäften vorzubeugen.

Optimierungsrichtung

Diese Strategie kann optimiert werden durch:

  1. Tests für Moving Averages verschiedener Typen und Perioden, um die beste Kombination von Parametern zu finden

  2. Optimierung der ATR-Zyklusparameter und Ausgleich der Stop-Loss-Sensitivität

  3. Zusätzliche Filterbedingungen und -indikatoren zur Verbesserung der Signalqualität

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

Zusammenfassen

Die Kernidee der Strategie besteht darin, den Preiswechsel in Echtzeit mit einem dynamischen Moving Average zu verfolgen, die Stop-Loss-Position dynamisch mit dem ATR-Indikator einzustellen und die Risiken streng zu kontrollieren, während die Trends verfolgt werden. Durch die Optimierung der Parameter und die Änderung der Regeln kann die Strategie zu einem sehr praktischen Quantifizierungssystem trainiert werden.

Strategiequellcode
/*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)