Trendverfolgung der Kreuzung von gleitenden Durchschnitten

Schriftsteller:ChaoZhang, Datum: 2024-01-29 16:52:46
Tags:

img

Übersicht

Dies ist eine einfache gleitende Durchschnittsbasierte Strategie, die gut mit verschiedenen Münzpaaren funktioniert. Sie zeichnet den gleitenden Durchschnittseröffnungs- und Schlusskurs auf und entscheidet, ob man eine Long-Position eintritt oder aussteigt, je nachdem, ob sich die beiden Linien gekreuzt haben. Die Idee ist, dass man eine Position eintritt, wenn der durchschnittliche Schlusskurs steigt, was auf eine Aufwärtsdynamik der Preise hinweist. Dann tritt es aus der Position, wenn der durchschnittliche Schlusskurs sinkt, was auf eine Abwärtsdynamik hinweist. Dies ist spekulativ, aber manchmal kann es die Preisbewegung sehr gut vorhersagen.

Strategie Logik

Diese Strategie wählt zunächst die Art des gleitenden Durchschnitts aus, einschließlich EMA, SMA, RMA, WMA und VWMA. Dann setzt sie die Lookback-Periode für den gleitenden Durchschnitt, in der Regel zwischen 10 und 250 Bar. Verschiedene Kombinationen von gleitendem Durchschnittstyp und Lookback-Periode können für verschiedene Münzpaare sehr unterschiedliche Ergebnisse liefern.

Die spezifische Handelslogik lautet:

  1. Berechnung des gleitenden Durchschnitts des Eröffnungs- und des Schlusskurses;
  2. Vergleichen Sie die gleitenden Durchschnittswerte zwischen dem Schlusskurs und dem Eröffnungskurs;
  3. Eintritt eine Long-Position, wenn der gleitende Durchschnitt des geschlossenen Kurses über dem gleitenden Durchschnitt des offenen Kurses liegt;
  4. Schließen der Long-Position, wenn der gleitende Durchschnitt des geschlossenen Kurses unter dem gleitenden Durchschnitt des offenen Kurses liegt.

Eintritt in eine Position gilt als Zeichen einer Kursbewegung nach oben, Ausstieg als Zeichen einer Kursbewegung nach unten.

Analyse der Vorteile

Die wichtigsten Vorteile dieser Strategie sind:

  1. Flexible Parameter-Einstellungen, die für verschiedene Münzpaare optimiert werden können, um eine bessere Spezifität zu erzielen;
  2. Einfache Logik, die leicht zu verstehen und umzusetzen ist;
  3. Für einige Münzpaare sehr hohe Renditen, allgemein gute Stabilität;
  4. Hohe Anpassbarkeit bei der Anzeige verschiedener Indikatoren.

Risikoanalyse

Diese Strategie birgt auch einige Risiken:

  1. Für einige Münzpaare und Parameter können Renditen und Stabilität gering sein;
  2. Kann nicht gut auf kurzfristige Kursschwankungen reagieren, schlechte Leistung bei hochvolatilen Münzen;
  3. Auswahl der gleitenden Durchschnittsrückblickperiode nicht wissenschaftlich genug, etwas subjektiv.

Lösungen und Optimierung:

  1. Verwenden Sie längere Zeitrahmen wie 12H, 1D, um unnötige Transaktionen zu reduzieren und die Stabilität zu verbessern;
  2. Hinzufügen von Parameteroptimierungsfunktionen, um automatisch verschiedene Parameterkombinationen für die besten Parameter zu testen;
  3. Hinzufügen einer adaptiven Auswahl der gleitenden Durchschnittsrückblicksperiode, damit das System automatisch über die optimale Periode entscheidet.

Schlussfolgerung

Zusammenfassend ist dies eine einfache Strategie, bei der gleitende Durchschnittsindikatoren verwendet werden, um den Preistrend und die Wendepunkte zu bestimmen. Sie kann durch Anpassung von Parametern sehr gute Ergebnisse erzielen und ist eine effektive Trendverfolgungsstrategie, die weiter verbessert und angewendet werden sollte.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//Author @divonn1994

initial_balance = 100
strategy(title='Close v Open Moving Averages Strategy', shorttitle = 'Close v Open', overlay=true, pyramiding=0, default_qty_value=100, default_qty_type=strategy.percent_of_equity, precision=7, currency=currency.USD, commission_value=0.1, commission_type=strategy.commission.percent, initial_capital=initial_balance)

//Input for number of bars for moving average, Switch to choose moving average type, Display Options and Time Frame of trading----------------------------------------------------------------

bars = input.int(66, "Moving average length (number of bars)", minval=1, group='Strategy') //66 bars and VWMA for BTCUSD on 12 Hours.. 35 bars and VWMA for BTCUSD on 1 Day
strategy = input.string("VWMA", "Moving Average type", options = ["EMA", "SMA", "RMA", "WMA", "VWMA"], group='Strategy')

redOn = input.string("On", "Red Background Color On/Off", options = ["On", "Off"], group='Display')
greenOn = input.string("On", "Green Background Color On/Off", options = ["On", "Off"], group='Display')
maOn = input.string("On", "Moving Average Plot On/Off", options = ["On", "Off"], group='Display')

startMonth = input.int(title='Start Month 1-12 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=12, group='Beginning of Strategy')
startDate = input.int(title='Start Date 1-31 (set any start time to 0 for furthest date)', defval=1, minval=0, maxval=31, group='Beginning of Strategy')
startYear = input.int(title='Start Year 2000-2100 (set any start time to 0 for furthest date)', defval=2011, minval=2000, maxval=2100, group='Beginning of Strategy')

endMonth = input.int(title='End Month 1-12 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=12, group='End of Strategy')
endDate = input.int(title='End Date 1-31 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=31, group='End of Strategy')
endYear = input.int(title='End Year 2000-2100 (set any end time to 0 for today\'s date)', defval=0, minval=0, maxval=2100, group='End of Strategy')

//Strategy Calculations-----------------------------------------------------------------------------------------------------------------------------------------------------------------------

inDateRange = true

maMomentum = switch strategy
    "EMA" => (ta.ema(close, bars) > ta.ema(open, bars)) ? 1 : -1
    "SMA" => (ta.sma(close, bars) > ta.sma(open, bars)) ? 1 : -1
    "RMA" => (ta.rma(close, bars) > ta.rma(open, bars)) ? 1 : -1
    "WMA" => (ta.wma(close, bars) > ta.wma(open, bars)) ? 1 : -1
    "VWMA" => (ta.vwma(close, bars) > ta.vwma(open, bars)) ? 1 : -1
    =>
        runtime.error("No matching MA type found.")
        float(na)

openMA = switch strategy
    "EMA" => ta.ema(open, bars)
    "SMA" => ta.sma(open, bars)
    "RMA" => ta.rma(open, bars)
    "WMA" => ta.wma(open, bars)
    "VWMA" => ta.vwma(open, bars)
    =>
        runtime.error("No matching MA type found.")
        float(na)
        
closeMA = switch strategy
    "EMA" => ta.ema(close, bars)
    "SMA" => ta.sma(close, bars)
    "RMA" => ta.rma(close, bars)
    "WMA" => ta.wma(close, bars)
    "VWMA" => ta.vwma(close, bars)
    =>
        runtime.error("No matching MA type found.")
        float(na)

//Enter or Exit Positions--------------------------------------------------------------------------------------------------------------------------------------------------------------------

if ta.crossover(maMomentum, 0)
    if inDateRange
        strategy.entry('long', strategy.long, comment='long')
if ta.crossunder(maMomentum, 0)
    if inDateRange
        strategy.close('long')

//Plot Strategy Behavior---------------------------------------------------------------------------------------------------------------------------------------------------------------------

plot(series = maOn == "On" ? openMA : na, title = "Open moving Average", color = color.new(color.purple,0), linewidth=3, offset=1)
plot(series = maOn == "On" ? closeMA : na, title = "Close Moving Average", color = color.new(color.white,0), linewidth=2, offset=1)
bgcolor(color = inDateRange and (greenOn == "On") and maMomentum > 0 ? color.new(color.green,75) : inDateRange and (redOn == "On") and maMomentum <= 0 ? color.new(color.red,75) : na, offset=1)

Mehr