Trendverfolgungsstrategie auf Basis des gleitenden Durchschnitts

Schriftsteller:ChaoZhang, Datum: 2023-10-07 15:04:00 Uhr
Tags:

Übersicht

Diese Strategie identifiziert die aktuelle Trendrichtung, indem sie gleitende Durchschnitte verschiedener Zeiträume berechnet und Handelssignale in Kombination mit dem RSI-Indikator erzeugt. Wenn der kurze Zeitraum gleitende Durchschnitt über den langen Zeitraum gleitenden Durchschnitt kreuzt, wird der Trend betrachtet und ein Kaufsignal erzeugt. Wenn der kurze Zeitraum gleitende Durchschnitt unter dem langen Zeitraum gleitenden Durchschnitt kreuzt, wird der Trend als umgekehrt betrachtet und ein Verkaufssignal erzeugt. Der RSI-Indikator wird verwendet, um falsche Signale zu vermeiden, die durch geringfügige Preisschwankungen verursacht werden.

Strategie Logik

  1. Berechnen Sie einfache gleitende Durchschnitte für 10, 20, 50, 100 und 200 Tage.

  2. Berechnen Sie den 14-Tage-RSI-Wert.

  3. Wenn der 10-Tage-SMA über den 50-Tage-SMA liegt und der RSI größer als 30 ist und der 20-Tage-SMA größer oder gleich dem 100-Tage-SMA oder der 50-Tage-SMA größer oder gleich dem 100-Tage-SMA ist, kauft man.

  4. Der Stop-Loss-Preis wird mit dem Eintrittspreis multipliziert mit (1 - Stop-Loss-Prozentsatz) festgelegt.

  5. Verkaufen, wenn:

    • 10-Tage-SMA überschreitet den 50-Tage-SMA und schließt unter dem 20-Tage-SMA: Trendumkehr Verkaufssignal
    • Schließung unter 95% des Einstiegspreises: Stop-Loss-Verkauf
    • Schließung unter dem Stop-Loss-Preis: Verkauf von Stop-Loss

Diese Strategie beurteilt den Markttrend anhand gleitender Durchschnitte und setzt Stop Loss, um Risiken zu kontrollieren. Der RSI filtert falsche Ausbrüche aus. Er kauft, wenn der kurzfristige SMA über den langfristigen SMA überschreitet, was einen Aufwärtstrend anzeigt, und setzt eine Stop Loss-Linie, um Risiken während der Halteperiode zu kontrollieren. Er verkauft, wenn ein Trendumkehrsignal auftritt oder der Stop Loss-Preis ausgelöst wird.

Analyse der Vorteile

  • Die Verwendung gleitender Durchschnitte zur Bestimmung der Trendrichtung, der Kauf während des Aufwärtstrends vermeidet den Handel in Bereichsmärkten
  • Die Verwendung mehrjähriger gleitender Durchschnitte verhindert, dass man durch kurzfristige Kursschwankungen irregeführt wird
  • Kombination mit RSI filtert falsche Signale aus
  • Festlegung von Stop-Loss-Kontrollen für das Abwärtsrisiko für jeden Handel
  • Verwenden von Trailing Stop Loss, um Gewinne zu erzielen

Risikoanalyse

  • Gleitende Durchschnitte haben Verzögerungen und können den besten Zeitpunkt für eine Preisumkehr verpassen
  • Bei Einzelgeschäften kann ein zu lockeres Stop Loss-Set zu großen Verlusten führen.
  • Zu eng eingestellte Stop-Losss können zu häufige Stop-Loss-Trigger verursachen
  • Nachläufiger Stop-Loss kann zu früh aussteigen und größere Gewinne verpassen

Die Optimierung kann durch Anpassung der gleitenden Durchschnittsperioden, Stop-Loss-Levels usw. erfolgen.

Optimierungsrichtlinien

  • Anpassung gleitender Durchschnittsperioden an unterschiedliche Marktbedingungen
  • Optimierung der RSI-Parameter zur besseren Identifizierung von Überkauf/Überverkauf
  • Auf der Grundlage der Instrumenteneigenschaften angemessene statische Stoppverluste und Trail-Stop-Niveaus festlegen
  • Hinzufügen anderer Indikatoren, um falsche Signale zu vermeiden
  • Dynamische Anpassung des Stop-Loss basierend auf der Volatilität usw.
  • Automatische Optimierung der Parameter über maschinelles Lernen

Zusammenfassung

Die Strategie hat insgesamt eine klare Logik, indem sie gleitende Durchschnitte für die Trendbestimmung und die Einstellung von Stop-Loss zur Risikokontrolle verwendet. Es ist eine typische Trendverfolgungsstrategie. Weitere Verbesserungen können durch Parameter-Tuning und Hinzufügen anderer Indikatoren erzielt werden. Aber keine Strategie ist perfekt, kontinuierliche Anpassungen und Optimierungen sind erforderlich, um mit Marktunsicherheiten zusammen mit einem angemessenen Risikomanagement fertig zu werden.


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


Mehr