Trendgefilterte gleitende Durchschnitts-Crossover-Quantitative Strategie


Erstellungsdatum: 2023-12-01 14:25:08 zuletzt geändert: 2023-12-01 14:25:08
Kopie: 0 Klicks: 619
1
konzentrieren Sie sich auf
1619
Anhänger

Trendgefilterte gleitende Durchschnitts-Crossover-Quantitative Strategie

Überblick

Eine Trendfilter-Strategie ist eine Strategie, bei der der Trend durch eine Kreuzung von schnellen und langsamen Moving Averages bestimmt wird. Die Strategie setzt außerdem eine länger andauernde Moving Average als Trendfilter ein, um ein effektives Handelssignal zu erzeugen, wenn der Preis diese Moving Average durchbricht.

Strategieprinzip

Die Strategie basiert hauptsächlich auf dem Kreuzungsprinzip der Moving Average. Konkret werden jeweils zwei Moving Averages mit unterschiedlichen Perioden berechnet, typischerweise auf der 20-Tage- und der 50-Tage-Linie. Ein Kaufsignal wird erzeugt, wenn die 20-Tage-Linie die 50-Tage-Linie von unten nach oben durchbricht; ein Verkaufsignal wird erzeugt, wenn die 20-Tage-Linie die 50-Tage-Linie von oben nach unten durchbricht.

Darüber hinaus setzt die Strategie einen 200-Tage-Moving-Even-Wert als Indikator für den Gesamttrend ein. Die oben genannten einfachen Kreuzsignale werden nur dann als wirksam angesehen, wenn der Preis die 200-Tage-Linie überschreitet. Dies bildet einen Trendfiltermechanismus, der eine große Anzahl von ungültigen Signalen in einem konsolidierten Markt verhindert.

Strategische Stärkenanalyse

  1. Es ist wichtig, dass die Zahlungsströme in der Mitte und in der Länge der Linie gesteuert werden, um zu häufige Transaktionen zu vermeiden und die Transaktionskosten und das Risiko von Ausrutschen zu verringern.

  2. Die mobile lineare Kreuzung ist klar und leicht zu verstehen.

  3. Die Trendfiltermechanismen filtern die meisten unwirksamen Signale ab und erhöhen die Gewinnrate.

  4. Die Moving Average Parameter sind flexibel anpassbar für verschiedene Sorten und Zeiträume.

  5. Ein Stop-Loss-Stopp kann eingestellt werden, um einzelne Gewinne zu kontrollieren.

Strategische Risikoanalyse

  1. Wenn die Preise in der Nähe der Durchschnittlinie schwanken, können mehrere ungültige Signale erzeugt werden, die zu Überhandel führen.

  2. Die langfristige Durchschnittslinie könnte den Markt hinterherlaufen und die Trendwende verpassen.

  3. Es sind längere historische Daten erforderlich, um einen Moving Average zu erstellen. Neue Sorten oder kurze Perioden sind nicht anwendbar.

  4. Strategieparameter müssen wiederholt getestet und optimiert werden. Fehlende Einstellungen können dazu führen, dass die Strategie ausfällt.

Die Risiken können mit folgenden Lösungen begegnet werden:

  1. Ein längerer periodischer Mittelwert oder ein zusätzlicher Trendfilter.

  2. In Kombination mit anderen Indikatoren, wie z. B. Energie-Indikatoren, Volatilitätsindikatoren usw.

  3. Erhöhung der Anpassungsfähigkeit der beweglichen Durchschnittsperioden.

  4. Hinzufügen von Optimierungs- und Feedbackmechanismen für Parameter und dynamische Anpassung der Strategieparameter.

Richtung der Strategieoptimierung

  1. Versuchen Sie mit verschiedenen Arten von Moving Averages, z. B. linear gewichteten Moving Averages.

  2. Hinzugefügt wurde die Adaptive Mobile Mean Line Cycle-Funktion.

  3. In Kombination mit den Indikatoren der Schwankungsrate wird die Effektivität der Moving Average Crossover verbessert.

  4. Die automatische Optimierung von Strategieparametern durch die Zugabe von Machine Learning-Algorithmen.

  5. Erforschung von Strategien für die Kombination verschiedener Arten, um die Beziehungen zwischen den Arten zu nutzen.

Zusammenfassen

Die Trendfilter-Strategie ist eine einfache und praktische Mittel-Lang-Linie-Quantifizierungsstrategie insgesamt. Sie beurteilt die mittlere Lang-Linie-Trendlinie durch Mittel-Lang-Linie-Kreuzung und reduziert dann die ungültigen Signale in Kombination mit der Trendfilterung. Die Strategie ist leicht zu verstehen und zu implementieren und ist für Anfänger geeignet, die mit dem Quantifizieren des Handels beginnen.

Strategiequellcode
/*backtest
start: 2023-11-23 00:00:00
end: 2023-11-30 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

////////////////////////////////////////////////////////////////////////////////
// Booz Strategy
// Developed for Godstime
// Version 1.1
// 11/28/2021
////////////////////////////////////////////////////////////////////////////////

//@version=4
strategy("Booz Strategy", "", true)

// ----------------------------- Inputs ------------------------------------- //
source_ma_type = input("EMA", "Source MA Type", options=["SMA", "EMA"])
source_ma_length = input(50, "Source MA Length")
fast_ma_length = input(20, "Fast MA Length")
slow_ma_length = input(50, "Slow MA Length")        
use_trend_filter = input(true, "Trend Filter")
trend_filter_ma_type = input("EMA", "Trend Filter MA Type", options=["SMA", "EMA"])
trend_filter_ma_length = input(200, "Trend Filter MA Period")
show_mas = input(true, "Show MAs")
swing_trading_mode = input(false, "Swing Trading")

// -------------------------- Calculations ---------------------------------- //
fast_ma = ema(close, fast_ma_length)
slow_ma = ema(close, slow_ma_length)
source_ma = source_ma_type == "EMA"? ema(close, source_ma_length): 
                                     sma(close, source_ma_length)
trend_filter_ma = trend_filter_ma_type == "EMA"? ema(close, trend_filter_ma_length): 
                                                 sma(close, trend_filter_ma_length)

// --------------------------- Conditions ----------------------------------- //
uptrend = not use_trend_filter or close > trend_filter_ma
buy_cond = crossover(fast_ma, slow_ma) and uptrend

downtrend = not use_trend_filter or close < trend_filter_ma
sell_cond = crossunder(fast_ma, slow_ma) and downtrend

// ---------------------------- Plotting ------------------------------------ //
bgcolor(use_trend_filter and downtrend? color.red: use_trend_filter? color.green: na)
plot(show_mas? fast_ma: na, "Fast MA", color.green)
plot(show_mas? slow_ma: na, "Slow MA", color.red)
plot(show_mas? source_ma: na, "Source MA", color.purple)
plot(show_mas? trend_filter_ma: na, "Trend Filter MA", color.blue)


// ---------------------------- Trading  ------------------------------------ //
// Inputs
sl_perc = input(1.0, "Stop Loss (in %)", group="Backtest Control")/100
tp_perc = input(1.0, "Take Profit (in %)", group="Backtest Control")/100
leverage = input(10, "Leverage", maxval=100, group="Backtest Control")
bt_start_time = input(timestamp("2021 01 01"), "Backtest Start Time", input.time, group="Backtest Control")
bt_end_time = input(timestamp("2021 12 31"), "Backtest End Time", input.time, group="Backtest Control")

// Trading Window
in_trading_window = true
trade_qty = 1

// Long Side
strategy.entry("Long Entry", strategy.long, trade_qty, when=buy_cond and in_trading_window)
long_tp = strategy.position_avg_price * (1 + tp_perc)
long_sl = strategy.position_avg_price * (1 - sl_perc)
if not swing_trading_mode
    strategy.exit("Long Exit", "Long Entry", limit=long_tp, stop=long_sl)

// Short Side
strategy.entry("Short Entry", strategy.short, trade_qty, when=sell_cond and in_trading_window)
short_tp = strategy.position_avg_price * (1 - tp_perc)
short_sl = strategy.position_avg_price * (1 + sl_perc)
if not swing_trading_mode
    strategy.exit("Short Exit", "Short Entry", limit=short_tp, stop=short_sl)

// End of trading window close
strategy.close_all(when=not in_trading_window)