Handelsstrategie für gleitende Durchschnitte


Erstellungsdatum: 2024-01-05 15:36:00 zuletzt geändert: 2024-01-05 15:36:00
Kopie: 1 Klicks: 683
1
konzentrieren Sie sich auf
1617
Anhänger

Handelsstrategie für gleitende Durchschnitte

Überblick

Dieser Artikel behandelt eine Handelsstrategie, die auf einfachen Moving Averages basiert. Die Strategie verwendet einen Moving Average mit einer Länge von 17 und vergleicht ihn mit dem Schlusskurs.

Strategieprinzip

Moving Average Berechnung

Die Strategie berechnet den Moving Average anhand der folgenden Parameter:

  • MA Quelle: Default-Durchschnittswert für OHLC
  • MA-Typ: Standard einfacher gleitender Durchschnitt (SMA)
  • MA-Länge: Default: 17

Auf Basis dieser Parameter wird die getMAType () -Funktion verwendet, um den 17-Zyklus-SMA zu berechnen.

Handelssignale erzeugt

Dann vergleichen Sie die Relation zwischen dem Schlusskurs und dem Moving Average:

  • Schlusskurs > Moving Averages: Langzeitsignal
  • Schlusskurs < Moving Average: Leerlaufsignal

Wenn der Schlusskurs den Moving Average von unten durchbricht, erzeugt er ein Mehr-Signal; wenn er von oben nach unten durchbricht, erzeugt er ein Fehlsignal.

Ausführung der Transaktion

In der Rückmessphase wird bei mehr als einem Signal mehr als eine Position eröffnet und bei weniger als einem Signal eine Position geöffnet.

Analyse der Stärken

Der größte Vorteil dieser Strategie besteht darin, dass die Idee sehr einfach und klar ist. Es ist nur ein Indikator, der die Trendwende anhand seiner Richtungsänderung beurteilt. Die Strategie ist leicht zu verstehen, leicht umzusetzen und für Anfänger geeignet.

Außerdem ist ein Moving Average ein Trend-Tracking-Indikator, der Trendwechsel effektiv verfolgt, ohne von kurzfristigen Marktgeräuschen gestört zu werden.

Durch die Anpassung der Parameter kann sie an unterschiedliche Perioden und Sorten angepasst werden.

Risikoanalyse

Erstens basiert die Strategie auf einem einzigen Indikator, der als einmaliger Kriterium gilt und möglicherweise mehr Fehlsignale erzeugt.

Außerdem ist diese Strategie ein Trend-Tracking-System, das nicht in einem konsolidierten und wackligen Markt funktionieren kann.

Darüber hinaus besteht die Gefahr einer Vergrößerung der Verluste, da keine Stop-Loss-Stop-Schaltfläche eingerichtet wurde.

Die Lösung besteht darin, andere Kennzahlen zu kombinieren, die Kombination von Parametern zu optimieren und Fehlsignale zu reduzieren. Ein Stop-Loss-Stopp wird eingestellt, das Risiko wird kontrolliert und die Rücknahme optimiert.

Optimierungsrichtung

Die folgenden Aspekte können als Ideen zur Optimierung der Strategie dienen:

  1. Anpassung der Moving Average-Parameter, Optimierung der Anzahl der Zyklen, z. B. 30 oder 50 Zyklen.

  2. Versuchen Sie mit verschiedenen Arten von Moving Averages, wie EMA, VIDA, etc. Sie sind unterschiedlich empfindlich auf Preisänderungen.

  3. Hinzufügen von Kombinationen mit anderen Indikatoren, z. B. in Kombination mit dem MACD, um eine starke oder schwache Position zu bestimmen, oder in Kombination mit dem RSI, um falsche Signale zu reduzieren.

  4. Erhöhung der Stop-Loss-Mechanismen. Festlegung eines mobilen Stop-Losses in Form eines festen Prozentsatzes oder eines ATR-Wertes. Kontrolle von Einzelschäden.

  5. Erhöhung der Stop-Loss-Mechanismen. Festlegung von Ziel-Profit-Prozentsätzen. Maximierung der Profite.

Diese Optimierungen ermöglichen eine stabilere Strategie und verhindern eine übermäßige Rücknahme.

Zusammenfassen

Dieser Artikel analysiert eine einfache Handelsstrategie, die auf einem 17-Perioden-Moving Average basiert. Die Strategie-Signalquelle ist einfach, leicht zu verstehen und zu implementieren, gehört zu den typischen Trend-Tracking-Systemen. Durch eine eingehende Interpretation der Strategie werden ihre Vorteile und Risiken analysiert und eine mehrdimensionale Optimierungskonzeption gegeben.

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

//@version=4
strategy("Simple 17 BF 🚀", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0)

/////////////// Time Frame ///////////////
testStartYear = input(2012, "Backtest Start Year") 
testStartMonth = input(1, "Backtest Start Month")
testStartDay = input(1, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0)

testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(31, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0)

testPeriod() => true

///////////// Moving Average /////////////
source = input(title="MA Source", defval=ohlc4)
maType = input(title="MA Type", defval="sma", options=["sma", "ema", "swma", "wma", "vwma", "rma"])
length = input(title="MA Length", defval=17)

///////////// Get MA Function /////////////
getMAType(maType, sourceType, maLen) => 
    res = sma(close, 1)
    
    if maType == "ema"
        res := ema(sourceType, maLen)
    if maType == "sma"
        res := sma(sourceType, maLen)
    if maType == "swma"
        res := swma(sourceType)
    if maType == "wma"
        res := wma(sourceType, maLen)
    if maType == "vwma"
        res := vwma(sourceType, maLen)
    if maType == "rma"
        res := rma(sourceType, maLen)
    res
    
MA = getMAType(maType, source, length)

/////////////// Strategy ///////////////
long = close > MA
short = close < MA

last_long = 0.0
last_short = 0.0
last_long := long ? time : nz(last_long[1])
last_short := short ? time : nz(last_short[1])

long_signal = crossover(last_long, last_short)
short_signal = crossover(last_short, last_long)

/////////////// Execution /////////////// 
if testPeriod()
    strategy.entry("L", strategy.long, when=long_signal)
    strategy.entry("S", strategy.short, when=short_signal)

/////////////// Plotting /////////////// 
p1 = plot(MA, color = long ? color.lime : color.red, linewidth=2)
p2 = plot(close, linewidth=2)
fill(p1, p2, color=strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=80)