Trendfolgende gleitende Durchschnitt-Crossover-Strategie


Erstellungsdatum: 2024-01-29 16:52:46 zuletzt geändert: 2024-01-29 16:52:46
Kopie: 3 Klicks: 596
1
konzentrieren Sie sich auf
1617
Anhänger

Trendfolgende gleitende Durchschnitt-Crossover-Strategie

Überblick

Diese Strategie basiert auf einer einfachen Strategie des Moving Averages, die auf verschiedenen Währungspaaren gute Ergebnisse erzielen kann. Sie zeichnet den Öffnungs- und den Schließungsdurchschnitt aus und entscheidet, ob eine Position eingerichtet oder beendet wird, wenn sich die beiden Linien kreuzen. Die Theorie ist, dass Positionen eingerichtet werden, wenn der Durchschnittsschlusskurs steigt, was auf einen zukünftigen Preisanstieg hindeutet.

Strategieprinzip

Diese Strategie basiert zunächst auf der Auswahl der Arten von Moving Averages, darunter EMA, SMA, RMA, WMA und VWMA. Dann wird die Periode für die Berechnung von Moving Averages festgelegt, die in der Regel zwischen 10 und 250 K-Linien liegt. Die Auswahl der verschiedenen Arten von Moving Averages und der Anzahl der Perioden kann ganz unterschiedliche Ergebnisse erzielen, je nach Währungspaar.

Die spezifische Transaktionslogik der Strategie lautet:

  1. Berechnen Sie die Moving Averages für die Eröffnungs- und die Schließungspreise.
  2. Vergleichen Sie die Werte des Schlussprozesses mit dem Schlussprozess.
  3. Wenn der Schlusskurs durch den Schlusskursdurchschnitt geht, wird eine Mehr-Position eingerichtet.
  4. Wenn der Schlusskurs unter dem Schlusskursdurchschnitt liegt, wird die Position ausgeglichen.

Wenn Sie eine Position aufbauen, ist dies ein Vorzeichen für einen Preisanstieg, wenn Sie eine Position schließen, ist dies ein Vorzeichen für einen Preisrückgang.

Strategische Stärkenanalyse

Diese Strategie hat folgende Vorteile:

  1. Die Parameter sind flexibel eingestellt, so dass die optimalen Parameter für die verschiedenen Währungspaare ausgewählt werden können.
  2. Die Logik ist einfach, leicht zu verstehen und umzusetzen.
  3. In einigen Währungspaaren können sehr hohe Renditen erzielt werden, die insgesamt stabiler sind.
  4. Es können verschiedene Indikatoren angezeigt werden, je nach Bedarf, mit einem hohen Maß an Anpassung.

Risikoanalyse

Die Strategie birgt auch einige Risiken:

  1. In einigen Währungspaaren und Parametern sind die Renditen und die Stabilität nicht hoch.
  2. Die Bank ist nicht in der Lage, auf kurzfristige Preisbewegungen zu reagieren, was für hochflüchtige Währungen unwirksam ist.
  3. Die Auswahl der Perioden für Moving Averages ist nicht wissenschaftlich begründet und ein wenig subjektiv.

Der Präsident: Ja.

  1. Die Auswahl von möglichst langen Zeiträumen, wie z. B. 12 Stunden und 1 Tag, reduziert unnötige Transaktionen und erhöht die Stabilität.
  2. Hinzu kommt die Optimierung von Parametern, die automatisch verschiedene Parameterkombinationen testen, um die optimalen Parameter zu finden.
  3. Hinzugefügt wurde die Funktion, die sich an die Wahl der Moving Average-Periode anpasst, um die optimale Periode automatisch zu bestimmen.

Zusammenfassen

Diese Strategie ist im Allgemeinen einfach und logisch, und verwendet die Moving Average-Indikatoren, um Preistrends und Wendepunkte zu bestimmen. Sie kann durch Anpassung der Parameter sehr gute Ergebnisse erzielen und ist eine effektive Trendverfolgungsstrategie, die es wert ist, weiter zu verbessern und anzuwenden. Es sollte jedoch darauf geachtet werden, das Risiko zu kontrollieren und die richtigen Währungspaare und Parameter auszuwählen, um die größtmögliche Wirkung zu erzielen.

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