Die Trend Filter Moving Average Crossover Quantitative Strategy ist eine mittelfristige bis langfristige quantitative Handelsstrategie. Sie bestimmt die Trendrichtung des Marktes durch das Crossover von schnellen und langsamen gleitenden Durchschnitten und tritt unter der Prämisse der Identifizierung eines effektiven Trends in den Markt. Gleichzeitig setzt diese Strategie auch einen längeren Zyklus gleitenden Durchschnitt als Trendfilter, so dass gültige Handelssignale nur erzeugt werden können, wenn die Preise durch diesen gleitenden Durchschnitt brechen.
Diese Strategie basiert hauptsächlich auf dem Prinzip des gleitenden Durchschnitts-Crossovers. Insbesondere werden zwei gleitende Durchschnitte mit unterschiedlichen Perioden berechnet, die typischerweise auf 20-Tage- und 50-Tage-Linien festgelegt werden. Ein Kaufsignal wird erzeugt, wenn die 20-Tage-Linie von unten nach oben über die 50-Tage-Linie bricht, und ein Verkaufssignal wird erzeugt, wenn die 20-Tage-Linie von oben nach unten die 50-Tage-Linie bricht. Diese einfachen Crossover-Signale gelten als Breakouts im mittleren bis langen Zeitraum zu erfassen.
Darüber hinaus setzt die Strategie auch einen gleitenden 200-Tage-Durchschnitt als Gesamttrend-Benchmark. Nur wenn der Preis die 200-Tage-Linie durchbricht, gelten die oben genannten einfachen Crossover-Signale als gültig. Dies stellt einen Trendfiltermechanismus dar, um zu vermeiden, dass in einem Bereichsmarkt viele ungültige Signale generiert werden.
Durch eine mittelfristige bis langfristige Handelsfrequenz wird ein übermäßiger Handel vermieden, wodurch die Handelskosten und das Risikos für Schwankungen verringert werden.
Die Bestimmung des gleitenden Durchschnitts ist klar und leicht zu verstehen und umzusetzen.
Der Trendfiltermechanismus kann die meisten ungültigen Signale filtern und die Gewinnrate verbessern.
Bei unterschiedlichen Sorten und Zeitzyklen ist eine flexible Anpassung der gleitenden Durchschnittsparameter anwendbar.
Stop-Loss und Take-Profit können so eingestellt werden, dass einzelne Gewinne und Verluste kontrolliert werden.
Wenn der Preis um die gleitenden Durchschnitte schwingt, können mehrere ungültige Signale erzeugt werden, die zu einem Überhandel führen.
Langzyklus gleitende Durchschnitte können dem Markt hinterherlaufen und somit Trendumkehrpunkte verpassen.
Um gleitende Durchschnittswerte zu ermitteln, sind relativ lange historische Daten erforderlich, so dass neue Sorten oder kurze Zyklen nicht anwendbar sind.
Strategieparameter müssen wiederholt getestet und optimiert werden, unsachgemäße Einstellungen können zum Strategieversagen führen.
Risikominderung:
Es sollten längere Zyklus gleitende Durchschnitte angenommen oder die Bedingungen für die Trendfilterung erhöht werden.
Einbeziehung anderer Indikatoren zur Bestimmung des Haupttrends, wie Energieindikatoren, Volatilitätsindikatoren usw.
Verbesserung der Anpassungsfähigkeit der gleitenden Durchschnittszyklusparameter.
Steigerung der Parameteroptimierung und Rückkopplungsmechanismen zur dynamischen Anpassung der Strategieparameter.
Versuchen Sie verschiedene Arten von gleitenden Durchschnitten, wie z. B. einen linearen gewichteten gleitenden Durchschnitt.
Erhöhen Sie die Funktionalität des adaptiven gleitenden Durchschnittzyklus.
Einbeziehung von Volatilitätsindikatoren zur Bestimmung von Trendstadien, um die Gültigkeit von gleitenden Durchschnittsüberschreitungen zu verbessern.
Einführung von Algorithmen für maschinelles Lernen zur automatischen Optimierung von Strategieparametern.
Erforschen Sie Multi-Asset-Kombinationsstrategien durch Nutzung von Korrelationen zwischen Vermögenswerten für den Gewinn.
Die Trend Filter Moving Average Crossover Strategie ist insgesamt eine einfache und praktische mittelfristige bis langfristige quantitative Strategie. Sie bestimmt den mittelfristigen bis langfristigen Trend durch das Moving Average Crossover und nutzt dann die Trendfilterung, um ungültige Signale zu reduzieren. Diese Strategie hat den Vorteil, dass sie leicht zu verstehen und umzusetzen ist und für Anfänger des quantitativen Handels geeignet ist. Potenzielle Verbesserungsbereiche liegen in der Optimierung der gleitenden Durchschnitte sowie in der Integration mit anderen Indikatoren und maschinellen Lernalgorithmen.
/*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)