Trendfolgestrategie basierend auf gleitendem Durchschnitt


Erstellungsdatum: 2023-10-07 15:04:00 zuletzt geändert: 2023-10-07 15:04:00
Kopie: 0 Klicks: 626
1
konzentrieren Sie sich auf
1617
Anhänger

Überblick

Die Strategie ermittelt die aktuelle Trendrichtung durch die Berechnung von Moving Averages für verschiedene Perioden und sendet ein Kauf- und Verkaufssignal in Verbindung mit dem RSI. Wenn ein kurzfristiger Moving Average einen langfristigen Moving Average überschreitet, wird der Trend als aufwärts betrachtet und ein Kauf ausgeführt.

Strategieprinzip

  1. Berechnen Sie einen einfachen gleitenden Durchschnitt für 10, 20, 50, 100 und 200 Tage.

  2. Der 14-Tage-RSI wird berechnet.

  3. Ein Kauf erfolgt, wenn der 10-Tage-SMA über dem 50-Tage-SMA liegt und der RSI größer als 30 ist und der 20-Tage-SMA höher oder gleich dem 100-Tage-SMA ist oder der 50-Tage-SMA höher oder gleich dem 100-Tage-SMA ist.

  4. Setzen Sie den Stop-Loss-Preis für den Kaufpunkt mit 1 minus den Stop-Loss-Prozentsatz.

  5. Der Verkauf erfolgt, wenn:

    • Der 10-Tage-SMA überschreitet den 50-Tage-SMA und der Schlusskurs liegt unter dem 20-Tage-SMA: Trend umgekehrt Verkauf
    • Schlusskurs unter 95% des Kaufpreises: Stop loss und Verkauf
    • Verkauf unterhalb des Stop-Loss-Preises: Trend nach dem Stop-Loss

Die Strategie beurteilt die Richtung des Markttrends anhand von Moving Averages und setzt Stop-Losses, um das Risiko zu kontrollieren. Der RSI-Indikator wird verwendet, um falsche Durchbrüche zu filtern. Kaufen Sie auf kurzfristigen SMAs, wenn sie langfristige SMAs durchbrechen, was einen Aufwärtstrend anzeigt, und setzen Sie eine Stop-Line, wenn Sie Aktien halten.

Analyse der Stärken

  • Die Verwendung von Moving Averages, um die Richtung des Trends zu bestimmen, und die Kaufphase des Trends zu vermeiden, um einen wackligen Markt zu bereinigen
  • Die Verwendung von mehrperiodischen gleitenden Durchschnitten verhindert, dass Sie von kurzfristigen Preisschwankungen getäuscht werden
  • Der RSI-Indikator wird verwendet, um falsche Signale zu filtern.
  • Setzen Sie eine Stop-Loss-Linie, um das Risiko eines Einzelschädels zu kontrollieren
  • Trend-Tracking-Stopps zum Sperren von Gewinnen

Risikoanalyse

  • Der Moving Average liegt hinterher und verpasst möglicherweise die beste Zeit für eine Preisumkehr
  • Eine zu lockere Stop-Loss-Einstellung kann zu größeren Einzelschäden führen.
  • Eine zu enge Stop-Loss-Einstellung kann zu häufigen Stop-Losses führen
  • Der Trend-Tracking-Stopp könnte zu früh aufhören und mehr Geld verlieren.

Optimierung kann durch die Anpassung der Moving-Average-Periode, die Anpassung der Stop-Loss-Punkte und andere Methoden erfolgen. Es kann auch in Verbindung mit anderen Indikatoren in Betracht gezogen werden, um die Entscheidungsgenauigkeit zu verbessern.

Optimierungsrichtung

  • Anpassung der Moving-Average-Periode an unterschiedliche Marktumstände
  • Optimierung der RSI-Parameter zur Verbesserung der Genauigkeit bei Überkauf und Überverkauf
  • Static Stop und Trail Stop sind je nach Sorte angemessen
  • Das ist eine sehr wichtige Frage, die wir uns stellen müssen.
  • Die Stop-Loss-Position kann dynamisch an Indikatoren wie der Volatilität angepasst werden
  • Parameter, die automatisch durch maschinelles Lernen optimiert werden können

Zusammenfassen

Diese Strategie ist klar und konzipiert. Die Verwendung von Moving Averages, um Trends zu beurteilen, und die Einstellung von Stopps, um Risiken zu kontrollieren, ist eine typische Trend-Tracking-Strategie. Durch die Optimierung von Parametern und die Hinzufügung anderer Beurteilungskennzahlen kann die Strategie-Retesting- und Real-Time-Performance weiter verbessert werden.

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

//@version=4
strategy("MA_Script", overlay=true)

// STEP 1:
// Configure trail stop level with input options (optional)
longTrailPerc=input(title="Trail Long Loss (%)", type=input.float, minval=0.0, step=0.05, defval=0.1)

// Configure backtest start date with inputs
startDate=input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31)
startMonth=input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12)
startYear=input(title="Start Year", type=input.integer, defval=2020, minval=1800, maxval=2100)

// See if this bar's time happened on/after start date
afterStartDate=(time >=timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0))

// Calculate Relative Strength Index
rsiValue=rsi(close, 14)

// Calculate moving averages
MA10_Val =sma(close, 10)
//plot(MA10_Val, color=color.yellow, linewidth=1)

MA20_Val =sma(close, 20)
plot(MA20_Val, color=color.green, linewidth=1)

MA50_Val =sma(close, 50)
plot(MA50_Val, color=color.red, linewidth=1)

MA100_Val =sma(close, 100)
plot(MA100_Val, color=color.blue, linewidth=1) 

MA200_Val =sma(close, 200)
plot(MA200_Val, color=color.purple, linewidth=1) 

// Calculate candlestick
C_BodyHi = max(close, open)
C_BodyLo = min(close, open)
C_Body = C_BodyHi - C_BodyLo
C_UpShadow = high - C_BodyHi
C_DnShadow = C_BodyLo - low

// STEP 2:
// Calculate entry trading conditions
buyCondition_1=crossover(MA10_Val, MA50_Val) and (rsiValue > 30) and ((MA20_Val >=  MA100_Val) or (MA50_Val >=  MA100_Val))
avg_price = (close + open)/2

// First Entry
if (afterStartDate)
    strategy.entry(id="Entry_Trade_1", long=true, limit=avg_price, when=buyCondition_1)

plotchar(afterStartDate and crossover(MA10_Val, MA50_Val), textcolor = color.blue, text = 'MA\n')

// Determine trail stop loss prices
longStopPrice=0.0

longStopPrice :=if (strategy.position_size > 0)
    stopValue=C_BodyHi * (1 - longTrailPerc)
    max(stopValue, longStopPrice[1])
else
    0
plot(longStopPrice, color=color.orange, linewidth=1)

bought_1=strategy.position_size[0] > strategy.position_size[1]
entry_Point_1=valuewhen(bought_1, avg_price, 0)

// STEP 3:
// Calculate exit trading conditions
sellCondition_2=crossunder(MA10_Val, MA50_Val) and (close < MA20_Val)
sellCondition_3_temp=valuewhen((C_BodyHi >= entry_Point_1*1.2), 1, 0)
sellCondition_1=(entry_Point_1*0.95 > close) and (sellCondition_3_temp != 1)
sellCondition_3=(sellCondition_3_temp == 1) and (strategy.position_size > 0) and close <= longStopPrice
plotchar((sellCondition_3 == 1) and (strategy.position_size > 0) and close <= longStopPrice, textcolor = color.red, text = 'TS\n', show_last = 11)
plotchar(crossunder(MA10_Val, MA50_Val), textcolor = color.red, text = 'MA\n')

id_val = ""
stop_val = close
condition = false

if sellCondition_1
    id_val := "Exit By Stop Loss At 7%"
    stop_val := entry_Point_1*0.93
    condition := true
else if sellCondition_2
    id_val := "Exit By Take Profit based on MA"
    stop_val := close
    condition := true
else if sellCondition_3
    id_val := "Exit By Trailing Stop"
    stop_val := longStopPrice
    condition := true

// Submit exit orders for trail stop loss price
if (strategy.position_size > 0)
    //strategy.exit(id="Exit By Stop Loss At 7%", from_entry="Entry_Trade_1", stop=entry_Point_1*0.93, when=sellCondition_1)
    //strategy.exit(id="Exit By Take Profit based on MA", from_entry="Entry_Trade_1", stop=close, when=sellCondition_2)
    strategy.exit(id=id_val, from_entry="Entry_Trade_1", stop=stop_val, when=condition)