Bidirektionale MA-Trailing-Stop-Loss-Strategie


Erstellungsdatum: 2023-11-16 17:18:59 zuletzt geändert: 2023-11-16 17:18:59
Kopie: 1 Klicks: 590
1
konzentrieren Sie sich auf
1617
Anhänger

Bidirektionale MA-Trailing-Stop-Loss-Strategie

Überblick

Die Strategie baut auf zwei-Wege-Moving-Averages, um ein Mehrfach-Signal zu erzeugen, um Verlust zu verfolgen. Die Kernidee besteht darin, die Richtung des Trends mit einem Moving-Average zu bestimmen, in der Richtung des Trends mehr zu machen und den Stop-Loss mit ATR zu berechnen, um Verlust zu verfolgen.

Strategieprinzip

Diese Strategie verwendet hl2 als Quellpreis und berechnet den ATR für eine bestimmte Periode als Stop-Loss-Margin. Auftrage und Abtrage werden mit bestimmten Multiplikatoren nach dem ATR-Wert multipliziert. Ein Kaufsignal wird erzeugt, wenn der Preis auftritt, und ein Verkaufssignal wird erzeugt, wenn der Preis unterhalb der Abfahrt ist.

Nach dem Börsengang wird der Stop-Loss-Level anhand der Echtzeitänderungen des ATR angepasst, um eine Stop-Loss-Verfolgung zu realisieren. Insbesondere wird der Unterlauf nach dem neuesten Tief nach oben angepasst, um eine Stop-Loss-Verfolgung zu realisieren. Nach dem Leerlauf wird der Oberlauf nach dem neuesten Hoch nach unten angepasst, um eine Stop-Loss-Verfolgung zu realisieren.

So nutzt die Strategie die Funktion eines beweglichen Durchschnitts, um die Richtung des Trends zu bestimmen, und fügt einen auf ATR basierenden Stop-Loss-Tracking-Mechanismus hinzu, um die Richtigkeit der Handelsrichtung zu gewährleisten und das Handelsrisiko zu kontrollieren.

Strategische Vorteile

Der größte Vorteil dieser Strategie liegt in der Risikokontrolle. Die herkömmliche Moving-Average-Strategie berücksichtigt nur die Richtungsentscheidung und ist leicht zu platzieren. Die Strategie kombiniert den Tracking-Stop mit der ATR-Berechnung und kann die Stop-Loss-Position dynamisch an die Marktfluktuation anpassen, um das Handelsrisiko effektiv zu kontrollieren.

Darüber hinaus kann die Strategie die Richtung der Position bei einer Trendwende im Vergleich zu einer einseitigen Strategie rechtzeitig anpassen, um zu vermeiden, dass sie in derselben Richtung feststeckt, was die Erträge der Strategie erhöht.

Strategisches Risiko

Das Risiko dieser Strategie liegt vor allem in der Einstellung der ATR-Zyklen und der Multiplikatoren. Wenn die ATR-Zyklen zu kurz oder die Multiplikatoren zu groß sind, ist der Stop-Loss zu klein, um das Risiko effektiv zu kontrollieren. Wenn die ATR-Zyklen oder die Multiplikatoren zu lang sind, ist der Stop-Loss zu locker und es ist schwierig, einen Gewinn zu erzielen.

Durch die Optimierung der Parameterzyklen und der Multiplikatoren können Stop-Loss-Gewinne ausgeglichen werden. In Kombination mit anderen Indikatoren können Falschbrüche gefiltert, die Signalqualität verbessert und das Risiko verringert werden.

Optimierungsrichtung

Diese Strategie kann in folgenden Bereichen optimiert werden:

  1. Optimierung der Moving-Average-Perioden, um die beste Kombination von Parametern zu finden

  2. Hinzufügen von Filtern für andere Indikatoren wie MACD, KDJ und andere, um die Signalqualität zu verbessern

  3. Erhöhung der Position-Management-Strategien, wie Fixed Share, Martingale, etc., um die strategischen Erträge zu erhöhen

  4. Die Parameterdifferenzen zwischen verschiedenen Sorten können untersucht und optimiert werden.

  5. Die Parameter können in Kombination mit maschinellen Lernmethoden wie genetischen Algorithmen optimiert werden.

Zusammenfassen

Die Strategie berücksichtigt die Trendentscheidung und Risikokontrolle und konzentriert sich auf die Reduzierung von Rückgängen bei der Erzielung von Erträgen. Die Erträge der Strategie können durch Optimierung der Parameter und Kombinationen weiter gesteigert werden.

Strategiequellcode
/*backtest
start: 2022-11-09 00:00:00
end: 2023-11-15 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © KivancOzbilgic


//@version=4
strategy("Trenbolone Strategy", overlay = true)
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=false)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
barcoloring = input(title="Bar Coloring On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       
window()  => time >= start and time <= finish ? true : false
longCondition = buySignal
if (longCondition)
    strategy.entry("BUY", strategy.long, when = window())
shortCondition = sellSignal
if (shortCondition)
    strategy.entry("SELL", strategy.short, when = window())
buy1 = barssince(buySignal)
sell1 = barssince(sellSignal)
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(barcoloring ? color1 : na)