Diese Strategie baut doppelgeschichtete Supertrend-Kanäle auf und erzeugt Handelssignale, wenn der Preis durch die Kanäle bricht.
Berechnen Sie die Preisstandardabweichung und Volatilität ATR, verwenden Sie die Volatilität, um die Kanalbreite anzupassen.
Erstellen Sie doppelgeschichtete Supertrend-Kanäle, wobei die innere Schicht empfindlicher und die äußere Schicht stabiler ist.
Erzeugen Sie Kauf-/Verkaufssignale, wenn der Preis den inneren oder äußeren Kanal durchbricht.
Die Doppelkanalstruktur hilft, einige falsche Ausbrüche zu filtern.
Die ATR-Volatilität passt sich der Kanalbreite an und wird bei steigender Volatilität breiter.
Supertrend-Kanäle sind einfach und effektiv, um Trends zu verfolgen.
Der Doppelkanal filtert falsche Ausbrüche und verbessert die Signalqualität.
Durch die an die Volatilität angepasste Anpassung passen die Kanäle unterschiedlichen Marktumgebungen an.
Einfach zu implementieren mit einfachen Parameter-Tuning.
Visualisierte Kanäle und Breakouts bilden intuitive Handelssignale.
Ausbruchssignale können falsche Signale erzeugen, die zu unnötigen Verlusten führen.
Es kann nicht die Trendrichtung bestimmen, die Risiken des gegentrendischen Handels.
Die Anpassung kann zu empfindlich sein, mit Überanpassungen.
Eine unsachgemäße Optimierung der Parameter führt zu Überanpassung.
Als Trend-Nachfolge-Strategie kämpft es in den Märkten mit Bandbreiten.
Prüfparameter
Um die wichtigsten Trends zu ermitteln, wird MA einbezogen.
Optimieren Sie die Ausbruchbestätigung, um falsche Ausbrüche zu vermeiden.
Hinzufügen von Stop-Loss zu Limit-Loss pro Trade.
Beurteilen Sie die Kanal-Tuning auf die Handelsfrequenz.
Verwenden Sie maschinelles Lernen, um Parameter dynamisch zu optimieren.
Diese Strategie verwendet adaptive doppelte Supertrend-Kanäle, um Preistrends zu erfassen. Es ist einfach und intuitiv bei der Verfolgung von Trends. Zu den Risiken gehören jedoch falsche Ausbrüche und falsche Trendrichtung. Weitere Parameter-Tuning und ergänzende Mechanismen können die Strategieleistung verbessern und es zu einem robusten Trendfolgensystem machen.
/*backtest start: 2023-08-20 00:00:00 end: 2023-09-19 00:00:00 period: 4h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("SuperTrend Cloud Strategy", shorttitle="SuperTrend Cloud Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, initial_capital = 1000) //Inputs multi = input(title="Multiplier", type=input.float, step=0.1, defval=3, minval=1) period = input(title="Period", type=input.integer, step=1, defval=10, minval=1) SelfAdjust = input(title="Self-Adjusting", type=input.bool, defval = false) //////////////////////////////////////////////////////////////////////////////// // BACKTESTING RANGE // From Date Inputs fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) fromYear = input(defval = 2019, title = "From Year", minval = 1970) // To Date Inputs toDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) toMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) toYear = input(defval = 2020, title = "To Year", minval = 1970) // Calculate start/end date and time condition startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00) finishDate = timestamp(toYear, toMonth, toDay, 00, 00) time_cond = true //////////////////////////////////////////////////////////////////////////////// dev = stdev(close, period) stdDev = (dev / close) * 100 + 1 MultDev = SelfAdjust ? multi * stdDev : multi up_lev1 = hl2 - MultDev * atr(period) dn_lev1 = hl2 + MultDev * atr(period) up_lev2 = hl2 - (MultDev * 2 * atr(period)) dn_lev2 = hl2 + (MultDev * 2 * atr(period)) up_trend1 = 0.0 up_trend1 := close[1] > up_trend1[1] ? max(up_lev1, up_trend1[1]) : up_lev1 up_trend2 = 0.0 up_trend2 := close[1] > up_trend2[1] ? max(up_lev2, up_trend2[1]) : up_lev2 down_trend1 = 0.0 down_trend1 := close[1] < down_trend1[1] ? min(dn_lev1, down_trend1[1]) : dn_lev1 down_trend2 = 0.0 down_trend2 := close[1] < down_trend2[1] ? min(dn_lev2, down_trend2[1]) : dn_lev2 trend1 = 0 trend1 := close > down_trend1[1] ? 1: close < up_trend1[1] ? -1 : nz(trend1[1], 1) trend2 = 0 trend2 := close > down_trend2[1] ? 1: close < up_trend2[1] ? -1 : nz(trend2[1], 1) st_line1 = trend1 == 1 ? up_trend1 : down_trend1 st_line2 = trend2 == 1 ? up_trend2 : down_trend2 // Plotting plot1 = plot(st_line1, color = trend1 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 1") plot2 = plot(st_line2, color = trend2 == 1 ? color.green : color.red , style = plot.style_line, linewidth = 1, title = "SuperTrend 2") fill(plot1, plot2, color = color.aqua, title = "Cloud") buy = crossover(close, st_line1) and close > st_line2 or crossover(close, st_line2) and close > st_line1 sell = crossunder(close, st_line1) and close < st_line2 or crossunder(close, st_line2) and close < st_line1 if(buy and time_cond) strategy.entry("long", long = true , comment="long") if (close < st_line1 and time_cond or close < st_line2 and time_cond) strategy.close("long") if (not time_cond) strategy.close_all()