Drei-Index-Gleitende-Durchschnitt-Stop-Profit- und Stop-Loss-Strategie


Erstellungsdatum: 2024-02-04 10:38:42 zuletzt geändert: 2024-02-04 10:38:42
Kopie: 0 Klicks: 680
1
konzentrieren Sie sich auf
1617
Anhänger

Drei-Index-Gleitende-Durchschnitt-Stop-Profit- und Stop-Loss-Strategie

Überblick

Die 3-Index-Gewinn-Stop-Loss-Strategie ist eine Trend-Tracking-Strategie, bei der die Markteintritte auf Basis von Index-Moving Averages aus drei verschiedenen Perioden durchgeführt werden. Sie verwendet gleichzeitig die mittlere reale Bandbreite, um die Stop-Loss-Position einzustellen und das Risiko zu verwalten.

Strategieprinzip

Die Strategie verwendet drei Index-Moving Averages: die Schnelle, die Mittlere und die Langlebige. Die mittlere Linie ist hoch, wenn sie die Langlebige durchläuft; die mittlere Linie ist flach, wenn sie die mittlere Linie unterhalb der Schnelle durchläuft. Es ist eine typische Trend-Tracking-Strategie, die die Richtung des Trends durch die mehrere Spalten der drei Gleichlinien beurteilt.

Gleichzeitig berechnet die Strategie die Stop-Loss-Position anhand des Indikators für die durchschnittliche tatsächliche Breite. Konkret sind mehrere Ein-Stopp-Positionen der Einstiegspreis + die durchschnittliche tatsächliche Breite.*Stopp-Faktor; Leerstand als Einstiegspreis - durchschnittliche reale Breite*Der Stopp-Koeffizient. Das Stop-Loss-Prinzip ist ähnlich wie bei einem Stopp. Dies kann einseitige Risiken wirksam begrenzen.

Analyse der Stärken

  1. Die Entscheidungskennzahlen sind intuitiv, klar und leicht verständlich.
  2. Die Daten sind systematisch und leicht zu quantifizieren.
  3. Es ist wichtig, die Trends zu verfolgen und die Risiken zu kontrollieren.

Risikoanalyse

  1. Es gibt eine gewisse Verzögerung, die es nicht möglich macht, die Umkehrungen rechtzeitig zu erfassen.
  2. Die Schwingung ist leicht zu beeinträchtigen.
  3. Die Parameter-Einstellungen müssen optimiert werden.

Die Risikomanagementmaßnahmen umfassen: angemessene Verkürzung der Durchschnittszyklen, Optimierung des Stop-Loss-Koeffizienten und Hinzufügung anderer Entscheidungskennzahlen zur Unterstützung der Beurteilung.

Optimierungsrichtung

  1. Verschiedene Kombinationen von Mittellinien zur Suche nach dem optimalen Parameter.
  2. Hinzufügen von anderen technischen Indikatoren wie MACD, RSI usw.
  3. Automatische Optimierung der Parameter mit Hilfe eines Machine-Learning-Algorithmus.
  4. Die Stop-Loss-Position wird auf Basis der dynamischen Entwicklung der tatsächlichen Bandbreite angepasst.
  5. Es ist wichtig, dass man sich nicht überfordert fühlt, wenn man mit einem emotionalen Index handelt.

Zusammenfassen

Die Strategie ist insgesamt eine Effekt-stabile Trend-Tracking-Strategie, mit einfachen Parameter-Einstellungen und einfacher Umsetzung. Einseitige Risiken können durch dynamische Stop-Loss-Stopps mit einer durchschnittlichen realen Wellenlänge begrenzt werden. Es ist jedoch darauf zu achten, die Parameter-Optimierung und die Kombination der Indikatoren zu optimieren, um Überoptimierung und Entscheidungsverzögerung zu verhindern.

Strategiequellcode
/*backtest
start: 2024-01-04 00:00:00
end: 2024-02-03 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
//© Densz
strategy("3EMA with TP & SL (ATR)", overlay=true )

// INPUTS
startTime           =       input(title="Start Time", type = input.time, defval = timestamp("01 Jan 2017 00:00 +0000"))
endTime             =       input(title="End Time", type = input.time, defval = timestamp("01 Jan 2022 00:00 +0000"))

slowEMALength       =       input(title="Slow EMA Length", type = input.integer, defval = 55)
middleEMALength     =       input(title="Middle EMA Length", type = input.integer, defval = 21)
fastEMALength       =       input(title="Fast EMA Length", type = input.integer, defval = 9)

trendMALength       =       input(title="Trend indicator MA Length", type = input.integer, defval = 200)

atrLength           =       input(title="ATR Length", type = input.integer, defval = 14)
tpATRMult           =       input(title="Take profit ATR multiplier", type = input.integer, defval = 3)
slATRMult           =       input(title="Stop loss ATR multiplier", type = input.integer, defval = 2)

rsiLength           =       input(title="RSI Length", type = input.integer, defval = 14)

// Indicators
slowEMA             =       ema(close, slowEMALength)
middEMA             =       ema(close, middleEMALength)
fastEMA             =       ema(close, fastEMALength)
atr                 =       atr(atrLength)

rsiValue            =       rsi(close, rsiLength)
isRsiOB             =       rsiValue >= 80
isRsiOS             =       rsiValue <= 20

sma200              =       sma(close, trendMALength)

inDateRange         =       true

// Plotting
plot(slowEMA, title="Slow EMA", color=color.red, linewidth=2, transp=50)
plot(middEMA, title="Middle EMA", color=color.orange, linewidth=2, transp=50)
plot(fastEMA, title="Fast EMA", color=color.green, linewidth=2, transp=50)

plot(sma200, title="SMA Trend indicator", color=color.purple, linewidth=3, transp=10)
plotshape(isRsiOB, title="Overbought", location=location.abovebar, color=color.red, transp=0, style=shape.triangledown, text="OB")
plotshape(isRsiOS, title="Oversold", location=location.belowbar, color=color.green, transp=0, style=shape.triangledown, text="OS")

float takeprofit    =       na
float stoploss      =       na

var line tpline     =       na
var line slline     =       na

if strategy.position_size != 0
    takeprofit := takeprofit[1]
    stoploss := stoploss[1]
    line.set_x2(tpline, bar_index)
    line.set_x2(slline, bar_index)
    line.set_extend(tpline, extend.none)
    line.set_extend(slline, extend.none)
    
// STRATEGY
goLong  = crossover(middEMA, slowEMA) and inDateRange
closeLong = crossunder(fastEMA, middEMA) and inDateRange


if goLong
    takeprofit := close + atr * tpATRMult
    stoploss := close - atr * slATRMult
    // tpline := line.new(bar_index, takeprofit, bar_index, takeprofit, color=color.green, width=2, extend=extend.right, style=line.style_dotted)
    // slline := line.new(bar_index, stoploss, bar_index, stoploss, color=color.red, width=2, extend=extend.right, style=line.style_dotted)
    // label.new(bar_index, takeprofit, "TP", style=label.style_labeldown)
    // label.new(bar_index, stoploss, "SL", style=label.style_labelup)
    strategy.entry("Long", strategy.long, when = goLong)
    strategy.exit("TP/SL", "Long", stop=stoploss, limit=takeprofit)
if closeLong
    takeprofit := na
    stoploss := na
    strategy.close(id = "Long", when = closeLong)

if (not inDateRange)
    strategy.close_all()