In diesem Artikel wird eine quantitative Handelsstrategie eingeführt, die den Parabol-Periodenindikator und den Bollinger-Band-Indikator kombiniert, um eine bewegliche Stop-Loss-Strategie festzulegen.
Wenn der heutige Schlusskurs über die gestrige parabolische Periodenkreuzung geht, wird davon ausgegangen, dass der Markt in eine bullische Richtung umgekehrt ist und lang gehen kann; wenn der heutige Schlusskurs unter die Periodenkreuzung geht, ist der Marktprognose zufolge bearish und kann kurz gehen.
Zweitens kombiniert diese Strategie den Bollinger Band-Indikator, um eine dynamische Stop-Loss-Position zu setzen. Die obere Schiene des Bollinger Bands kann als Überkaufszone betrachtet werden, und die untere Schiene ist eine Überverkaufszone. Wenn der Preis nach dem Long-Gehen unter die untere Schiene des Bollinger Bands fällt, wird der Stop-Loss zur Schließung der Position; wenn der Preis nach dem Short-Gehen wieder über die obere Schiene steigt, wird der Stop-Loss zum Ausgang.
Durch die oben genannten Prinzipien realisiert diese Strategie die Beurteilung der Marktrichtung und setzt gleichzeitig einen dynamischen Stop-Loss-Mechanismus ein, um Gewinne zu verfolgen. Dies ermöglicht es, einige Höhen und Tiefen in wichtigen Trends zu erfassen und gleichzeitig Gewinne durch Stop-Loss zu erzielen, um Risiken zu vermeiden.
Im Vergleich zu traditionellen Stop-Loss-Strategien, bei denen nur eine feste Stop-Loss-Position festgelegt wird, verwendet diese Strategie den Bollinger-Band-Indikator als Stop-Loss-Linie, so dass sich die Stop-Loss-Linie mit Preisschwankungen bewegen kann. Dadurch kann sie in relativ großen Bewegungen mehr Gewinne erzielen. Zusätzlich fügt diese Strategie im Vergleich zur Verwendung der parabolischen Periodelinie allein den Bollinger-Band-Indikator hinzu, um überkaufte und überverkaufte Bereiche zu bestimmen, was genauer sein kann.
Das Hauptrisiko dieser Strategie besteht darin, dass der Trend des parabolischen Indikators nicht stark ist. In oszillierenden Märkten können die Preise parabolische Periodenlinien mehrmals überschreiten, was zu häufigen, aber kleinen profitablen Trades für die Strategie führt. Zu diesem Zeitpunkt können Transaktionsgebühren und Slippage-Kosten einen großen Anteil ausmachen und die Rentabilität der Strategie reduzieren.
Um mit den oben genannten Risiken fertig zu werden, können Parameter angepasst werden, um den Grad der Veränderung der parabolischen Periodelinie zu erhöhen, um die Wahrscheinlichkeit von Fehleinschätzungen zu reduzieren; oder erwägen Sie, andere Indikatoren zu kombinieren, um den Eintrittszeitpunkt zu filtern.
Diese Strategie kann in folgenden Aspekten optimiert werden:
Optimierung der Parabolindikatorparameter zur Anpassung der Indikatoränderungsrate zur Verringerung der Wahrscheinlichkeit von Fehleinschätzungen
Erhöhen Sie die Filterung anderer technischer Indikatoren, z. B. Hinzufügen von MACD, KD, um die Marktart zu bestimmen, vermeiden Sie Arbitrage auf einem schwankenden Markt
Optimieren Sie die Bollinger-Band-Parameter, um die Bandbreitenparameter anzupassen, damit Bollinger-Bands näher an den Preisänderungen bleiben
Erhöhung von Volumenindikatoren, wie Handelsvolumen, Positionen, um zu helfen, falsche Ausbrüche zu vermeiden
Kombination von Grundlagen der Aktien, um Probleme mit den Erträgen der Aktienstrategie zu vermeiden
Diese Strategie kombiniert die Beurteilung der Markttrendrichtung und -stärke mit einem parabolischen Indikator und nutzt dann die oberen und unteren Schienen der Bollinger Bands als bewegliche Stop-Loss-Position, um eine Stop-Loss-Strategie zu setzen, wodurch eine Kombination aus Trendverfolgung und Risikokontrolle erreicht wird. Im Vergleich zu traditionellen festen Stop-Loss-Strategien kann diese Strategie bei größeren Bewegungen höhere Renditen erzielen. Durch die Optimierung von Parametern und das Hinzufügen anderer Hilfsbeurteilungsindikatoren kann die Stabilität der Strategie weiter verbessert und unnötige Trades reduziert werden.
/*backtest start: 2024-01-02 00:00:00 end: 2024-02-01 00:00:00 period: 3h 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/ // © maxencetajet //@version=5 strategy("HA_RSI", overlay=true, initial_capital=1000, default_qty_type=strategy.fixed, default_qty_value=0.5, slippage=25) closeHA = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close) useDateFilter = input.bool(true, title="Filter Date Range of Backtest", group="Backtest Time Period") backtestStartDate = input(timestamp("5 June 2022"), title="Start Date", group="Backtest Time Period", tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") backtestEndDate = input(timestamp("5 July 2022"), title="End Date", group="Backtest Time Period", tooltip="This end date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") inTradeWindow = true swingHighV = input.int(10, title="Swing High", group="number of past candles") swingLowV = input.int(10, title="Swing Low", group="number of past candles") emaV = input.int(200, title="Ema Period", group="EMA") rsiV = input.int(14, title="RSI Period", group="RSI") start = input(0.02, group="Parabolic SAR") increment = input(0.02, group="Parabolic SAR") maximum = input(0.2, "Max Value", group="Parabolic SAR") ema = ta.ema(closeHA, emaV) rsi = ta.rsi(closeHA, rsiV) SAR = ta.sar(start, increment, maximum) myColor = SAR < low?color.green:color.red longcondition = closeHA > ema and rsi > 50 and closeHA[1] > SAR and closeHA[1] < SAR[1] shortcondition = closeHA < ema and rsi < 50 and closeHA[1] < SAR and closeHA[1] > SAR[1] float risk_long = na float risk_short = na float stopLoss = na float entry_price = na float takeProfit = na risk_long := risk_long[1] risk_short := risk_short[1] swingHigh = ta.highest(closeHA, swingHighV) swingLow = ta.lowest(closeHA, swingLowV) if strategy.position_size == 0 and longcondition and inTradeWindow risk_long := (close - swingLow) / close strategy.entry("long", strategy.long, comment="Buy") if strategy.position_size == 0 and shortcondition and inTradeWindow risk_short := (swingHigh - close) / close strategy.entry("short", strategy.short, comment="Sell") if strategy.position_size > 0 stopLoss := strategy.position_avg_price * (1 - risk_long) entry_price := strategy.position_avg_price strategy.exit("long exit", "long", stop = stopLoss) if strategy.position_size < 0 stopLoss := strategy.position_avg_price * (1 + risk_short) entry_price := strategy.position_avg_price strategy.exit("short exit", "short", stop = stopLoss) if closeHA[1] < SAR and close > strategy.position_avg_price strategy.close("long", comment="Exit Long") if closeHA[1] > SAR and close < strategy.position_avg_price strategy.close("short", comment="Exit Short") p_ep = plot(entry_price, color=color.new(color.white, 0), linewidth=2, style=plot.style_linebr, title='entry price') p_sl = plot(stopLoss, color=color.new(color.red, 0), linewidth=2, style=plot.style_linebr, title='stopLoss') fill(p_sl, p_ep, color.new(color.red, transp=85)) plot(SAR, "ParabolicSAR", style=plot.style_circles, color=myColor, linewidth=1) plot(ema, color=color.white, linewidth=2, title="EMA")