Swing-Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2023-10-11
Tags:

Übersicht

Dies ist eine Trend-Folge-Strategie, die auf einem gleitenden Durchschnitts-Crossover basiert, kombiniert mit Stop-Loss/Take-Profit-Management und Hebelwirkung, mit dem Ziel, Trends auf mehreren Märkten zu identifizieren und Gewinne zu maximieren.

Strategie Logik

Die Strategie verwendet das Überqueren von schnellen und langsamen gleitenden Durchschnitten als Handelssignale.

Um den Lärm aus kleineren Trends zu filtern, verwendet es auch einen 200-Tage-MA als Trendfilter.

Die Strategie verwendet Range Trading Stops. Nach dem Eintritt werden feste Prozentsatz-Stop Loss und Take Profit-Level festgelegt, z. B. 1% Stop Loss und 1% Take Profit. Positionen werden geschlossen, wenn der Preis den Stop Loss oder Take Profit erreicht.

Der Leverage-Effekt wird verwendet, um die Handelsgewinne zu erhöhen.

Analyse der Vorteile

  • Ein Vorteil ist, dass es Trends auf mehreren Märkten einschließlich Krypto, Aktien und Futures identifizieren kann, wodurch die Strategie weit verbreitet ist.

  • Die Verwendung eines schnellen/langsamen MA-Crossover und eines Trendfilters kann die Trendrichtung besser erkennen und eine gute Gewinnrate in Trendmärkten erzielen.

  • Die Handelsstopps helfen, Einzelhandelsverluste innerhalb eines erträglichen Bereichs zu kontrollieren und ermöglichen einen stabilen Ablauf der Strategie.

  • Der Leverage-Effekt verstärkt die Handelsgewinne und nutzt den strategischen Vorteil voll aus.

  • Die visuelle Schnittstelle mit verschiedenen Hintergrundfarben für die Bullen-Bären-Märkte bietet eine intuitive Marktsicht.

Risikoanalyse

  • Die Strategie folgt dem Trend und kann daher in unruhigen Märkten unterdurchschnittlich abschneiden.

  • Festes Stop-Loss-/Take-Profit-Prozentsatz birgt das Risiko, dass man ausgeschaltet wird.

  • Die Hebelwirkung verstärkt sowohl die Positionsgröße als auch die Risiken.

  • Die Verzögerung der gleitenden Durchschnittswerte kann zu verzögerten Handelssignalen führen.

Optimierungsrichtlinien

  • Versuche verschiedene Parameterkombinationen und wähle optimale schnelle/langsame MA-Längen aus.

  • Einbeziehung anderer Indikatoren oder Modelle als Filtersignale zur Verbesserung der Genauigkeit, z. B. ATR-Stopps, RSI usw.

  • Untersuchen Sie andere Trend-Identifikations-Tools wie ADX, um die Fähigkeit zur Erfassung von Trends weiter zu verbessern.

  • Verwenden Sie maschinelle Lernmodelle, um Strategiesignale zu optimieren und effektivere Ein-/Ausgangspunkte zu finden.

  • Für sinnvollere Stopps sollten dynamische Stop-Loss-/Take-Profit-Verfahren berücksichtigt werden, die auf Volatilität und Marktbedingungen basieren.

Zusammenfassung

Die Strategie verwendet einen systematischen Trend-Folge-Ansatz und verwendet Stops/Take Profit und Hebelwirkung, um Risiken zu kontrollieren und Gewinne zu vergrößern.


/*backtest
start: 2023-09-10 00:00:00
end: 2023-10-10 00:00:00
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

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

//@version=4
// strategy("Bozz Strategy", "", true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, margin_long=0, margin_short=0)

// ----------------------------- 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 = (strategy.equity * leverage) / close 

// Long Side
strategy.entry("Long Entry", strategy.long,  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, 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)

Mehr