Swing-Trend-Strategie für gleitenden Durchschnitt

Schriftsteller:ChaoZhang, Datum: 2024-02-04 15:44:54
Tags:

img

Übersicht

Die Swing Trend Moving Average Strategie ist ein Trendfolgensystem, das einen langfristigen gleitenden Durchschnitt verwendet, um die Trendrichtung zu identifizieren, kombiniert mit dem Durchschnittlichen Wahren Bereich, um Fakeouts auszufiltern und die Gesamtrückgänge zu begrenzen.

Strategie Logik

Die Strategie basiert auf folgenden Grundsätzen:

  1. Verwenden Sie einen exponentiellen gleitenden Durchschnitt, um die allgemeine Trendrichtung zu bestimmen.
  2. Berechnen Sie den wahren Durchschnittsbereich der letzten 10 Baren.
  3. Wenn der Schlusskurs über dem Geschwindigkeitsdurchschnitt + Durchschnittswahrheitsbereich liegt, wird er als Aufwärtstrend ermittelt.
  4. Wenn der Schlusskurs unter dem Moving Average - Average True Range liegt, wird er als Abwärtstrend ermittelt.
  5. Gehen Sie bei einem Aufwärtstrend lang und bei einem Abwärtstrend kurz.
  6. Standardmäßig wird der gleitende Durchschnitt als Stop-Loss-Linie verwendet. Es kann auch gewählt werden, Moving Average ± Average True Range als Stop-Loss-Linie zu verwenden.

Analyse der Vorteile

Die Strategie weist folgende Vorteile auf:

  1. Die Verwendung eines gleitenden Durchschnitts zur Bestimmung des Haupttrends kann kurzfristige Marktlärm effektiv filtern.
  2. Durch das Hinzufügen von Average True Range als Filterbedingung wird vermieden, dass Handelssignale in den unterschiedlichen Märkten generiert werden, wodurch unnötige Verluste verringert werden.
  3. Die Stop-Loss-Linie ist nahe am gleitenden Durchschnitt oder seinem umgekehrten Bereich und ermöglicht schnelle Stop-Losses, um den maximalen Drawdown zu reduzieren.
  4. Einfache Parameter-Einstellungen machen es leicht zu verstehen und zu optimieren.

Risikoanalyse

Die Strategie birgt auch einige potenzielle Risiken:

  1. Eine Trendumkehr führt in einem gleitenden Durchschnittssystem in der Regel zu einem gewissen Rückgang.
  2. Die Parameter-Einstellungen des gleitenden Durchschnitts und des Durchschnittswahren Bereichs können einen großen Einfluss auf die Strategieleistung haben.
  3. Die Strategie selbst berücksichtigt nicht die Beziehung zwischen Preis und Volumen.

Optimierungsrichtlinien

Die Strategie kann in folgenden Aspekten optimiert werden:

  1. Verschiedene Arten von gleitenden Durchschnitten testen, um den für bestimmte Bestände oder Produkte am besten geeigneten zu finden.
  2. Optimierung des gleitenden Durchschnittsperiodenparameters, damit er besser für die Merkmale der gehandelten Bestände oder Produkte geeignet ist.
  3. Optimieren Sie den Parameter Durchschnittliche Wahre Bandbreite, um die beste Kombination zu finden, um Bandbreitenmärkte zu filtern, ohne Trends zu verpassen.
  4. Fügen Sie Volumenregeln hinzu, um ungültige Ausfälle zu vermeiden.
  5. Versuche und vergleiche verschiedene Stop-Loss-Methoden, um die optimale Lösung zu ermitteln.

Schlussfolgerung

Insgesamt ist die Swing Trend Moving Average Strategie eine sehr einfache und praktische Trendfolgestrategie. Sie hat auch eine gute Risikokontrolle. Obwohl die Strategie nicht viele Faktoren berücksichtigt, sind noch detaillierte Tests und Optimierungen von Parametern und Stop-Loss-Methoden erforderlich.


/*backtest
start: 2023-01-28 00:00:00
end: 2024-02-03 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Inkedlau

//@version=5
strategy('Swing Trend Strategy', overlay=true, pyramiding=1, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital=1000, commission_value=0.1)

use_short = input.bool(false, 'Open Short Positions?')
exit_type = input.bool(true, 'Exit trade on Moving Average Cross?')
src = input.source(close, 'Source')
len = input.int(200, 'Trend Length')
ma_type = input.string('ema', 'Moving Average Type', options=['sma', 'ema', 'rma', 'wma', 'vwma'], tooltip='Select the type of Moving Average to use to calculate the Trend')
atr_multiplier = input.float(1., 'ATR Threshold', step=0.5, tooltip='Filter the ranging market using the Average True Range')

// ----------------------- DESCRIPTION -----------------------
// THIS SCRIPT IS A TREND FOLLOWING SYSTEM THAT USES A COMBINATION OF MOVING AVERAGE AND AVERAGE TRUE RANGE
// TO SPOT THE TRENDS AND ENTER THE MARKET ACCODINGLY.
// THE MARKET IS CONSIDERED IN AN UPTREND WHEN THE PRICE CLOSES ABOVE THE MOVING AVERAGE + THE AVERAGE TRUE RANGE OF THE LAST 10 PERIODS
// THE MARKET IS CONSIDERED IN AN DOWNTREND WHEN THE PRICE CLOSES BLOW THE MOVING AVERAGE - THE AVERAGE TRUE RANGE OF THE LAST 10 PERIODS
// BY DEFAULT, THE STRATEGY WILL ENTER LONG WHEN AN UPTREND IS SPOTTED, THEN CLOSES WHEN THE PRICE CLOSES BELOW THE MOVING AVERAGE
// THE STRATEGY WILL ENTER SHORT WHEN A DOWNTREND IS SPOTTED, THEN CLOSES WHEN THE PRICE CLOSES ABOVE THE MOVING AVERAGE

// ------------------ INDICATORS CALCULATION------------------
my_ma()=>
    ma = close
    if ma_type == 'sma'
        ma := ta.sma(src, len)
    if ma_type == 'ema'
        ma := ta.ema(src, len)
    if ma_type == 'rma'
        ma := ta.rma(src, len)
    if ma_type == 'wma'
        ma := ta.wma(src, len)
    if ma_type == 'vwma'
        ma := ta.vwma(src, len)
    ma

trend = my_ma()
atr = ta.atr(10)
uptrend = trend + atr * atr_multiplier
downtrend = trend - atr * atr_multiplier

// ---------------- ENTRY AND EXIT CONDITIONS ----------------

open_long = strategy.position_size == 0 and src > uptrend
close_long = exit_type ? strategy.position_size > 0 and src < trend : strategy.position_size > 0 and src < downtrend

open_short = use_short and strategy.position_size == 0 and src < downtrend
close_short = exit_type ? strategy.position_size < 0 and src > trend : strategy.position_size < 0 and src > uptrend

strategy.entry('long', strategy.long, when=open_long)
strategy.close('long', when=close_long)

strategy.entry('short', strategy.short, when=open_short)
strategy.close('short', when=close_short)


// ------------------ PLOTTING AND COLORING ------------------
tcolor = src > uptrend ? color.green : src < downtrend ? color.red : na

ptrend = plot(trend, color=color.blue, linewidth=1)
puptrend = plot(uptrend, color=color.green, linewidth=1)
pdowntrend = plot(downtrend, color=color.red, linewidth=1)
pclose = plot(close, color=na)

fill(puptrend, pclose, color=close > uptrend ? color.green : na, transp = 90)
fill(pdowntrend, pclose, color=close < downtrend ? color.red : na, transp = 90)



Mehr