In diesem Artikel wird eine quantitative Handelsstrategie beschrieben, bei der der Parobel-Zyklus-Indikator mit dem Brin-Band-Indikator kombiniert wird, um eine mobile Stop-Loss-Strategie einzurichten. Diese Strategie berechnet die Parobel-Zykluslinie, um die Richtung des Markttrends zu bestimmen, und verwendet die Brin-Band-Dynamik, um die Stop-Loss-Position zu setzen, um so einen mobilen Stop-Loss zu erzielen, um Gewinne zu sperren.
Die Strategie nutzt zunächst den Parobel-Indikator, um den aktuellen Markttrend zu ermitteln. Wenn der heutige Schlusskurs die Parobel-Zykluslinie von gestern überschreitet, kann man davon ausgehen, dass der Kurs sich zu einem Biss verändert.
Zweitens ist die Strategie in Kombination mit dem Bollinger Bands-Indikator, der eine dynamische Stop-Loss-Position festlegt. Die obere Spur in der Bollinger Band kann als Überkaufzone und die untere Spur als Überverkaufzone angesehen werden. Nach dem Überschreiten wird die Brechposition gestoppt, wenn der Preis wieder unter die Bollinger Bands-Unterbahn fällt.
Durch die oben genannten Prinzipien ermöglicht die Strategie, die Marktrichtung zu bestimmen und gleichzeitig einen dynamischen Stop-Loss-Mechanismus einzurichten, um die Gewinne zu verfolgen. Dies ermöglicht es, einen Teil der Anstiege und Abwärtstrends in großen Trends zu erfassen und gleichzeitig die Gewinne durch Stop-Loss zu sperren und Risiken zu vermeiden.
Im Gegensatz zu einer traditionellen Stop-Loss-Strategie, die nur einen festen Stop-Loss-Punkt festlegt, nutzt die Strategie die Brin-Band-Anzeige als Stop-Loss-Linie, so dass die Stop-Line mit den Preisbewegungen bewegt werden kann. Dies ermöglicht es, mehr Gewinne in vergleichsweise großen Geschäften zu sperren. Außerdem kann die Strategie die Brin-Band-Anzeige hinzufügen, um die Überkauf-Überverkaufszonen zu beurteilen, was viel genauer ist als die Verwendung einer Parobel-Zyklus-Linie.
Das Hauptrisiko dieser Strategie besteht darin, dass die Parobel-Indikatoren keine starke Tendenz beurteilen. In einem bewegten Umfeld können die Preise mehrmals die Parobel-Zykluslinie überschreiten, so dass die Strategie häufige, aber winzige Transaktionen erzeugt. In diesem Fall können die Transaktionsgebühren und Schlupfkosten einen großen Anteil ausmachen und die Profitabilität der Strategie beeinträchtigen.
Um diese Risiken zu vermeiden, können Sie Parameter anpassen, um die Parobel-Periodenzähler zu vergrößern und die Wahrscheinlichkeit von Fehleinschätzungen zu verringern, oder Sie können andere Indikatoren kombinieren, um die Eintrittszeiten zu filtern. Sie können beispielsweise einen Schwingungsindikator hinzufügen, um zu entscheiden, ob die Situation trendiert oder schwingt, um unnötige Geschäfte zu reduzieren.
Diese Strategie kann in folgenden Bereichen optimiert werden:
Optimierung der Parobel-Indikatorparameter, Anpassung der Parameter-Indikatoränderungsgeschwindigkeit und Verringerung der Wahrscheinlichkeit von Fehlentscheidungen
Hinzufügen von Filtern für andere technische Indikatoren, wie z. B. die Aufnahme von MACD, KD und anderen, um die Art des Handels zu beurteilen, um einen arbitragen Schwingungsmarkt zu vermeiden
Optimierung der Brin-Band-Parameter, Anpassung der Bandbreiten-Parameter, um die Brin-Band-Parameter näher an Preisänderungen anzupassen
Erhöhung von Quantitätsindikatoren, wie beispielsweise Handelsvolumen, Haltungsvolumen usw., um falsche Durchbrüche zu vermeiden
In Verbindung mit den Grundlagen der Aktien, um Probleme zu vermeiden, die die Ergebnisse der strategischen Lagerhaltung beeinflussen
Die Strategie kombiniert Trendverfolgung und Risikokontrolle, um die Richtung und Stärke der Markttrends anhand von Parobel-Indikatoren zu bestimmen. Die Strategie kann im Vergleich zu herkömmlichen festen Stop-Strategien in größeren Situationen höhere Erträge erzielen. Durch die Optimierung der Parameter und die Hinzufügung anderer unterstützender Beurteilungsindikatoren kann die Strategie weiter verbessert 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")