Dreifache Überlappung der Supertrend-Strategie

Schriftsteller:ChaoZhang, Datum: 2024-02-26 10:04:18
Tags:

img

Übersicht

Dies ist eine Strategie, die Handelsentscheidungen auf der Grundlage von drei sich überschneidenden SuperTrend-Indikatoren trifft.

Strategie Logik

Die Strategie verwendet die Funktion ta.supertrend(), um drei SuperTrend-Indikatoren mit unterschiedlichen Parameter-Einstellungen zu berechnen, nämlich SuperTrend1 mit 10 Tagen und einem Multiplikator von 3, SuperTrend2 mit 14 Tagen und einem Multiplikator von 2 und SuperTrend3 mit 20 Tagen und einem Multiplikator von 2.5. Ein Kaufsignal wird generiert, wenn der Preis über alle drei SuperTrend-Linien kreuzt. Ein Verkaufssignal wird generiert, wenn der Preis unter alle drei SuperTrend-Linien kreuzt.

Der SuperTrend-Indikator beinhaltet den ATR-Indikator, um Kurstrendveränderungen effektiv zu verfolgen.

Vorteile

  1. Dreifachfiltermechanismus verhindert falsche Signale und verbessert die Signalqualität
  2. Der SuperTrend selbst hat eine gute Geräuschminderung
  3. Mehrere Kombinationen von Hyperparametern können für mehr Marktumgebungen konfiguriert werden
  4. Gute historische Performance mit hoher Rendite-Risiko-Ratio

Risiken

  1. Mehrfache Filtersignale können einige Chancen verpassen
  2. Nicht gut auf verschiedenen Märkten
  3. Erfordert eine Optimierung von Kombinationen von drei Hyperparametersätzen
  4. Konzentrierte Handelszeiten sind anfällig für plötzliche Ereignisse

Zur Verringerung der Risiken können folgende Maßnahmen in Betracht gezogen werden:

  1. Die Filterbedingungen anpassen, ein oder zwei SuperTrends behalten
  2. Hinzufügen einer Stop-Loss-Strategie
  3. Optimieren Sie Hyperparameter, um die Gewinnrate zu verbessern

Optimierungsrichtlinien

  1. Testen Sie mehr Parameterkombinationen, um optimale Hyperparameter zu finden
  2. Hinzufügen von Algorithmen für maschinelles Lernen zur Optimierung von Parametern in Echtzeit
  3. Hinzufügen von Stop-Loss-Strategien zur Kontrolle einzelner Verluste
  4. Einbeziehung anderer Indikatoren zur Ermittlung von Trends und Intervallen
  5. Verlängerung der Handelszeit, um Risiken zu einem einzigen Zeitpunkt zu vermeiden

Schlussfolgerung

Diese Strategie trifft Entscheidungen basierend auf drei sich überschneidenden SuperTrends, die die Trendrichtung effektiv identifizieren können. Sie hat Vorteile wie hohe Signalqualität und konfigurierbare Parameter. Gleichzeitig bestehen auch gewisse Risiken. Parameter und Ausstiegszeiten müssen angepasst werden, um sich an verschiedene Marktumgebungen anzupassen. Insgesamt funktioniert die Strategie außergewöhnlich gut und lohnt sich für weitere Forschung und Anwendung.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy('Combined Supertrend Strategy - Ajit Prasad', overlay=true)

// Function to calculate Supertrend
supertrendFunc(atrLength, factor) =>
    [supertrend, direction] = ta.supertrend(factor, atrLength)
    [supertrend, direction]

// Input parameters for the first Supertrend
atrPeriod1 = input(10, 'ATR Length 1')
factor1 = input(3, 'Factor 1')

// Calculate the first Supertrend
[supertrend1, direction1] = supertrendFunc(atrPeriod1, factor1)

// Input parameters for the second Supertrend
atrPeriod2 = input(14, 'ATR Length 2') // Change values as needed
factor2 = input(2, 'Factor 2') // Change values as needed

// Calculate the second Supertrend
[supertrend2, direction2] = supertrendFunc(atrPeriod2, factor2)

// Input parameters for the third Supertrend
atrPeriod3 = input(20, 'ATR Length 3') // Change values as needed
factor3 = input(2.5, 'Factor 3') // Change values as needed

// Calculate the third Supertrend
[supertrend3, direction3] = supertrendFunc(atrPeriod3, factor3)

// Define market opening and closing times
marketOpenHour = 9
marketOpenMinute = 15
marketCloseHour = 15
marketCloseMinute = 30
exitTimeHour = 15
exitTimeMinute = 10

// Fetch historical close values using security function
histClose = request.security(syminfo.tickerid, "D", close)

// Buy condition
buyCondition = close > supertrend1 and close > supertrend2 and close > supertrend3 and close[1] <= supertrend1[1]

// Sell condition
sellCondition = close < supertrend1 and close < supertrend2 and close < supertrend3 and close[1] >= supertrend1[1]

// Exit conditions
buyExitCondition = close < supertrend1[1] or close < supertrend2[1] or close < supertrend3[1]
sellExitCondition = close > supertrend1[1] or close > supertrend2[1] or close > supertrend3[1]

// Execute orders with market timing
if true
    // Buy condition without 'and not'
    strategy.entry('Buy', strategy.long, when = buyCondition)

    // Sell condition without 'and not'
    strategy.entry('Sell', strategy.short, when = sellCondition)

    // Close conditions
    strategy.close('Buy', when = buyExitCondition )
    strategy.close('Sell', when = sellExitCondition)

// Close all trades at 3:10 pm IST
if true
    strategy.close_all()

// Plot Supertrends
plot(supertrend1, 'Supertrend 1', color=color.new(color.green, 0), style=plot.style_linebr)
plot(supertrend2, 'Supertrend 2', color=color.new(color.red, 0), style=plot.style_linebr)
plot(supertrend3, 'Supertrend 3', color=color.new(color.blue, 0), style=plot.style_linebr)

// Plot labels
plotshape(buyCondition, style=shape.labelup, location=location.belowbar, color=color.new(color.green, 0), size=size.large, text='Buy Signal', textcolor=color.new(color.white, 0))
plotshape(sellCondition, style=shape.labeldown, location=location.abovebar, color=color.new(color.red, 0), size=size.large, text='Sell Signal', textcolor=color.new(color.white, 0))

Mehr