Diese Strategie ist ein anpassungsfähiges Handelssystem, das Volatilitäts- und Dynamikindikatoren kombiniert, um Markttrends durch die Koordinierung mehrerer technischer Indikatoren zu erfassen. Die Strategie verwendet den ATR-Indikator zur Überwachung der Marktvolatilität, den MACD zur Beurteilung der Trenddynamik und kombiniert Preisdynamikindikatoren zur Bestätigung von Handelssignalen mit einem flexiblen Stop-Loss- und Take-Profit-Mechanismus. Das System hat eine starke Anpassungsfähigkeit und kann die Handelsfrequenz und die Positionskontrolle automatisch entsprechend den Marktbedingungen anpassen.
Die Strategie stützt sich auf ein dreifaches Indikatorsystem als Kerntrading-Logik: Erstens wird ATR verwendet, um die Marktvolatilitätsbedingungen zu messen, um eine Volatilitätsreferenz für Handelsentscheidungen zu liefern; Zweitens werden die goldenen und Todeskreuzzeichen des MACD-Indikators verwendet, um Trendwendepunkte zu erfassen, wobei MACD-schnelle und langsame Linienkreuzungen als Haupttrading-Triggersignale verwendet werden; Drittens werden Preisdynamik-Indikatoren zur Verifizierung verwendet, wobei Preisänderungen im Vergleich zu früheren Perioden beobachtet werden, um die Trendstärke zu bestätigen. Das System enthält auch einen 50-tägigen gleitenden Durchschnitt als Trendfilter, der nur lange Positionen zulässt, wenn der Preis über dem gleitenden Durchschnitt liegt, und kurze Positionen, wenn er darunter liegt. Um Überhandelungen zu vermeiden, erzwingt die Signalstrategie minimale Handelsintervalle und optional wechselnde Ausführung.
Diese Strategie ist ein gut konzipiertes, logisch rigoroses quantitatives Handelssystem, das durch die Verwendung mehrerer technischer Indikatoren eine effektive Erfassung der Markttrends erreicht. Das System hat detaillierte Überlegungen zur Risikokontrolle und zur Handelsausführung vorgenommen und zeigt eine gute Praktikabilität. Obwohl es einige potenzielle Risiken gibt, kann durch die vorgeschlagenen Optimierungsrichtungen sowohl die Stabilität als auch die Rentabilität der Strategie weiter verbessert werden.
/*backtest start: 2019-12-23 08:00:00 end: 2024-11-25 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("[ETH] Volatility & Momentum Adaptive Strategy", shorttitle="Definitive 1 day Ethereum Signal", overlay=true, initial_capital=10000, currency=currency.USD) // === Input Parameters === // trade_size = input.float(5, title="Trade Size (ETH)") atr_length = input.int(8, minval=1, title="ATR Length") macd_fast = input.int(8, minval=1, title="MACD Fast Length") macd_slow = input.int(7, minval=1, title="MACD Slow Length") macd_signal = input.int(9, minval=1, title="MACD Signal Length") momentum_length = input.int(37, title="Momentum Length") stop_loss_percent = input.float(9.9, title="Stop Loss Percentage (%)") take_profit_percent = input.float(9.0, title="Take Profit Percentage (%)") alternate_signal = input.bool(true, title="Alternate Buy/Sell Signals") // === Indicators === // // ATR to measure volatility atr = ta.atr(atr_length) // MACD for trend momentum [macd_line, signal_line, _] = ta.macd(close, macd_fast, macd_slow, macd_signal) macd_cross_up = ta.crossover(macd_line, signal_line) macd_cross_down = ta.crossunder(macd_line, signal_line) // Momentum momentum = ta.mom(close, momentum_length) // === Signal Control Variables === // var bool last_signal_long = na var int last_trade_bar = na min_bars_between_trades = 5 // Adjust for minimal trade frequency control time_elapsed = na(last_trade_bar) or (bar_index - last_trade_bar) >= min_bars_between_trades // === Buy and Sell Conditions === // // Buy when: buy_signal = (macd_cross_up and momentum > 0 and close > ta.sma(close, 50) and time_elapsed) // Sell when: sell_signal = (macd_cross_down and momentum < 0 and close < ta.sma(close, 50) and time_elapsed) // Enforce alternate signals if selected if alternate_signal buy_signal := buy_signal and (na(last_signal_long) or not last_signal_long) sell_signal := sell_signal and (not na(last_signal_long) and last_signal_long) // === Trade Execution === // // Buy Position if (buy_signal) if strategy.position_size < 0 strategy.close("Short") strategy.entry("Long", strategy.long, qty=trade_size) last_signal_long := true last_trade_bar := bar_index // Sell Position if (sell_signal) if strategy.position_size > 0 strategy.close("Long") strategy.entry("Short", strategy.short, qty=trade_size) last_signal_long := false last_trade_bar := bar_index // === Stop Loss and Take Profit === // if strategy.position_size > 0 long_take_profit = strategy.position_avg_price * (1 + take_profit_percent / 100) long_stop_loss = strategy.position_avg_price * (1 - stop_loss_percent / 100) strategy.exit("TP/SL Long", from_entry="Long", limit=long_take_profit, stop=long_stop_loss) if strategy.position_size < 0 short_take_profit = strategy.position_avg_price * (1 - take_profit_percent / 100) short_stop_loss = strategy.position_avg_price * (1 + stop_loss_percent / 100) strategy.exit("TP/SL Short", from_entry="Short", limit=short_take_profit, stop=short_stop_loss) // === Visual Signals === // plotshape(series=buy_signal and time_elapsed, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY") plotshape(series=sell_signal and time_elapsed, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")