System für die Übertragung gleitender Durchschnittswerte

Schriftsteller:ChaoZhang, Datum: 2024-01-03 16:22:18
Tags:

img

Übersicht

Dies ist eine Trendfolgestrategie, die auf gleitenden Durchschnitts-Kreuzungssignalen basiert. Wenn der schnelle gleitende Durchschnitt über den langsamen gleitenden Durchschnitt von unten kreuzt, wird ein Kaufsignal generiert. Wenn der schnelle gleitende Durchschnitt unter den langsamen gleitenden Durchschnitt von oben kreuzt, wird ein Verkaufssignal generiert.

Strategie Logik

Die Strategie verwendet zwei gleitende Durchschnitte, einen 20-Perioden-einfachen gleitenden Durchschnitt und einen 30-Perioden-einfachen gleitenden Durchschnitt. Wenn der 20-Perioden-MA über den 30-Perioden-MA überschreitet, wird ein Kaufsignal generiert. Wenn der 20-Perioden-MA unter den 30-Perioden-MA überschreitet, wird ein Verkaufssignal ausgelöst.

Die gleitenden Durchschnitte selbst dienen als Trendindikatoren, die die Markttrendrichtung effektiv darstellen. Das Crossover-Prinzip ermöglicht es der Strategie, Trendumkehrpunkte zeitnah zu erfassen und Handelssignale zu generieren. Die 20- und 30-Tage-Perioden werden angemessen so eingestellt, dass sie den Markttrend widerspiegeln, ohne zu empfindlich auf Lärm zu reagieren.

Analyse der Vorteile

Die wichtigsten Vorteile dieser Strategie sind:

  1. Die Logik ist einfach und klar, leicht verständlich und umsetzbar und für Anfänger geeignet.
  2. Der Trendhandel vermeidet gegentrendische Positionen und unnötige Verluste;
  3. Die gleitenden Durchschnitte haben eine Filterwirkung, um Marktlärm zu beseitigen und falsche Signale zu vermeiden.
  4. Die Parameterinstellungen sind angemessen, um keine zu hohe Empfindlichkeit zu verursachen.

Risikoanalyse

Zu den wichtigsten Risiken dieser Strategie gehören:

  1. Häufige Stop-Loss-Bestellungen können während der Marktkonsolidierung ausgelöst werden, wenn häufig ein Crossover zwischen gleitenden Durchschnitten stattfindet;
  2. Einige Gewinne fehlen aufgrund der Verzögerung der gleitenden Durchschnittswerte bei starken Trends;
  3. Unangemessene Parametereinstellungen können die Stabilität beeinträchtigen.

Lösungen:

  1. Anpassung der gleitenden Durchschnittsperioden, Verwendung von gleitenden Dreiecksdurchschnitten usw. zur Glättung der Kurven und Verringerung der Querschnittshäufigkeit;
  2. Verwenden Sie andere Indikatoren, um den Trend zu bestimmen, vermeiden Sie den Handel während der Konsolidierung;
  3. Optimieren Sie die Parameter, um die beste Kombination zu finden.

Optimierungsrichtlinien

Die wichtigsten Aspekte zur Optimierung der Strategie:

  1. Verschiedene Arten von gleitenden Durchschnitten wie gewichteter gleitender Durchschnitt, dreieckiger gleitender Durchschnitt usw. werden getestet.
  2. Hinzufügen anderer technischer Indikatoren, um Signale während der Konsolidierung zu vermeiden;
  3. Einbeziehung anderer Analysetechniken wie Elliott-Wellen, Kanaltheorie, um den Trend zu bestimmen;
  4. Einführung von Modellen für maschinelles Lernen zur dynamischen Optimierung von Parametern;
  5. Nutzen Sie Quant-Tools und wenden Sie Stop-Loss-/Profit-Taking-Techniken an, um das Geldmanagement zu verbessern.

Schlussfolgerung

Das gleitende Durchschnitts-Crossover-System ist ein einfaches und effektives Trendfolgestrategie. Die Logik ist klar und leicht zu verstehen, sehr geeignet für Anfänger zu lernen. Es erzeugt Handelssignale basierend auf gleitenden Durchschnitts-Crossovers und Gewinne aus dem Handel entlang des Trends. Die Strategie kann auf viele Arten optimiert werden, um stabiler und effizienter zu werden.


/*backtest
start: 2023-12-03 00:00:00
end: 2024-01-02 00:00:00
period: 1h
basePeriod: 15m
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/
// © gliese581d

//@version=4
strategy(title="Moving Averages Testing", overlay=true, precision=2, calc_on_every_tick=false, max_bars_back=5000, pyramiding=2,  
 default_qty_type=strategy.percent_of_equity, default_qty_value=50, commission_type=strategy.commission.percent, initial_capital=10000)


//SETTINGS

longs_on = input(title="Long Trades enabled", defval=true)
shorts_on = input(title="Short Trades enabled", defval=true)

long_cond = input(title="Buy/Long Crossover Condition", defval="price x MA1", options=["price x MA1", "price x MA2", "MA1 x MA2"])
short_cond = input(title="Sell/Short Crossunder Condition", defval="price x MA2", options=["price x MA1", "price x MA2", "MA1 x MA2"])

ma1_type = input(title="Moving Average 1 Type", defval="SMA", options=["SMA", "EMA"])
ma1_len = input(defval=20, title="Moving Average 1 Len", type=input.integer, minval=1, maxval=1000, step=1)
ma2_type = input(title="Moving Average 2 Type", defval="SMA", options=["SMA", "EMA"])
ma2_len = input(defval=30, title="Moving Average 2 Len", type=input.integer, minval=1, maxval=1000, step=1)


//MOVING AVERAGES

ma_1 = ma1_type == "EMA" ? ema(close, ma1_len) : sma(close, ma1_len)
ma_2 = ma2_type == "EMA" ? ema(close, ma2_len) : sma(close, ma2_len)


//STRATEGY

//trade entries
long_entry = long_cond == "price x MA1" ? crossover(close, ma_1) : long_cond == "price x MA2" ? crossover(close, ma_2) : long_cond == "MA1 x MA2" ? crossover(ma_1, ma_2) : false
short_entry = short_cond == "price x MA1" ? crossunder(close, ma_1) : short_cond == "price x MA2" ? crossunder(close, ma_2) : short_cond == "MA1 x MA2" ? crossunder(ma_1, ma_2) : false

start_month = input(defval=4, title="Strategy Start Month", type=input.integer, minval=1, maxval=12, step=1)
start_year = input(defval=2018, title="Strategy Start Year", type=input.integer, minval=2000, maxval=2025, step=1)
end_month = input(defval=12, title="Strategy End Month", type=input.integer, minval=1, maxval=12, step=1)
end_year = input(defval=2020, title="Strategy End Year", type=input.integer, minval=2000, maxval=2025, step=1)

in_time =true

strategy.entry("Long", strategy.long, when=longs_on and in_time and long_entry)
strategy.close("Long", when=longs_on and not shorts_on and short_entry)

strategy.entry("Short", strategy.short, when=shorts_on and in_time and short_entry)
strategy.close("Short", when=shorts_on and not longs_on and long_entry)


//PLOTTING

//color background
last_entry_was_long = nz(barssince(long_entry)[1], 5000) < nz(barssince(short_entry)[1], 5000)
bgcol = (longs_on and last_entry_was_long) ? color.green : (shorts_on and not last_entry_was_long) ? color.red : na
bgcolor(color=bgcol, transp=90)

plot((long_cond == "price x MA1" or long_cond == "MA1 x MA2") or (short_cond == "price x MA1" or short_cond == "MA1 x MA2") ? ma_1 : na, color=color.blue)
plot((long_cond == "price x MA2" or long_cond == "MA1 x MA2") or (short_cond == "price x MA2" or short_cond == "MA1 x MA2") ? ma_2 : na, color=color.black)
plotshape(long_entry, style=shape.triangleup, location=location.belowbar, color=color.green)
plotshape(short_entry, style=shape.triangledown, location=location.abovebar, color=color.red)

Mehr