Pivot Point SuperTrend-Strategie

Schriftsteller:ChaoZhang, Datum: 2024-02-26 10:57:20
Tags:

img

Übersicht

Die Pivot Point SuperTrend Strategie ist eine innovative Trendfolging-Strategie, die zwei beliebte Indikatoren Pivot Points und SuperTrend kombiniert und gleichzeitig einen zusätzlichen Trendfilter für eine verbesserte Präzision einführt.

Strategie Logik

Die Grundlage der Strategie liegt in der Fusion von Pivot Points und SuperTrend-Indikatoren sowie dem Hinzufügen eines robusten Trendfilters. Sie beginnt mit der Berechnung von Pivot-Hoch- und Tiefpunkten über einen bestimmten Zeitraum, die als entscheidende Bezugspunkte für die Trendanalyse dienen.

Als nächstes werden auf der Grundlage der Mittellinie und der Durchschnittlichen Wahren Bandbreite (ATR) mit einem vom Benutzer definierten Faktor obere und untere Bands generiert. Diese Bands passen sich der Marktvolatilität an und verleihen der Strategie Flexibilität.

Der zusätzliche Trendfilter, der in die Strategie eingeführt wurde, verbessert ihre Fähigkeiten weiter. Dieser Filter basiert auf einem gleitenden Durchschnitt und bietet eine dynamische Bewertung der Stärke und Richtung des Trends. Durch die Kombination dieses Trendfilters mit den ursprünglichen Pivot Point SuperTrend-Signalen zielt die Strategie darauf ab, fundierte und zuverlässigere Handelsentscheidungen zu treffen.

Analyse der Vorteile

  1. Verbesserte Präzision: Die Einführung eines Trendfilters verbessert die Genauigkeit der Strategie, indem die allgemeine Trendrichtung vor der Erzeugung von Signalen bestätigt wird.

  2. Trendfortsetzung: Die Integration von Pivot Points und SuperTrend sowie der Trendfilter zielt darauf ab, Trades während starker Markttrends zu verlängern und damit möglicherweise Gewinnchancen zu maximieren.

  3. Verringerte Whipsaws: Die Gewichtungsdurchschnittsberechnung der Strategie in Verbindung mit dem Trendfilter hilft, falsche Signale zu minimieren und Whipsaws bei unsicheren oder seitlichen Marktbedingungen zu reduzieren.

  4. Unterstützung und Widerstandsinsichten: Die Strategie bietet weiterhin zusätzliche Unterstützungs- und Widerstandsniveaus basierend auf den Pivot Points und bietet den Händlern wertvolle kontextbezogene Informationen.

Risikoanalyse

  1. Parameter-Abhängigkeit: Die Strategie ist empfindlich gegenüber Parametern wie ATR-Periode und Multiplikator.

  2. Trendumkehrungen: In der Nähe von Trendumkehrpunkten kann die Strategie falsche Signale erzeugen, die zu unnötigen Verlusten führen.

  3. Überoptimierung: Die Parameter können für optimale Ergebnisse optimiert werden, haben jedoch keine Zukunftsfähigkeit.

  4. Gap-Risiko: Wenn sich die Preise außerhalb der Bands bewegen, tritt die Strategie in eine flache Position ein. Dies könnte Chancen verpassen, wenn Trends nach einer Lücke wieder aufnehmen.

Optimierungsrichtlinien

  1. Zusätzliche Filter: Um die Robustheit der Strategie zu erhöhen, könnten Volumen-, Volatilitäts- usw. Filter hinzugefügt werden.

  2. Dynamische Parameter: Methoden zur automatischen Optimierung oder anpassungsfähigen Anpassung von Parametern auf der Grundlage veränderter Marktbedingungen könnten die Strategie vielseitiger machen.

  3. Stop-Losses: Untersuchen Sie Möglichkeiten, Stop-Loss-Mechanismen zu entwickeln und gleichzeitig die Strategie-Logik beibehalten, um den Abwärtstrend effektiv zu kontrollieren.

  4. Cross-Asset-Optimierung: Bewertung von Strategieparametern für verschiedene Märkte und Instrumente.

Zusammenfassung

Die Pivot Point SuperTrend-Strategie demonstriert einzigartige Stärken in Dimensionen wie Einfachheit und Trendverfolgungsfähigkeit. Gleichzeitig bieten Aspekte wie Parameter, Stop-Losses, Cross-Asset-Optimierung Raum für Verbesserungen zu einem noch universelleren und zuverlässigeren Tool. Insgesamt ermöglicht sie Händlern ein effizientes Mittel, um Markttrends zu erfassen.


/*backtest
start: 2023-02-19 00:00:00
end: 2024-02-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// © Julien_Eche
// Strategy based on "Pivot Point Supertrend" Indicator by LonesomeTheBlue

//@version=4

strategy("PPS", overlay=true, initial_capital=500000, currency=currency.USD, default_qty_type=strategy.cash, default_qty_value=50000)

prd = input(defval = 2, title="Pivot Point Period", minval = 1, maxval = 50)
Factor=input(defval = 3, title = "ATR Factor", minval = 1, step = 0.1)
Pd=input(defval = 10, title = "ATR Period", minval=1)
showpivot = input(defval = false, title="Show Pivot Points")
showlabel = input(defval = true, title="Show Buy/Sell Labels")
showcl = input(defval = false, title="Show PP Center Line")
showsr = input(defval = false, title="Show Support/Resistance")

// get Pivot High/Low
float ph = pivothigh(prd, prd)
float pl = pivotlow(prd, prd)

// drawl Pivot Points if "showpivot" is enabled
plotshape(ph and showpivot, text="H",  style=shape.labeldown, color=na, textcolor=color.red, location=location.abovebar, transp=0, offset = -prd)
plotshape(pl and showpivot, text="L",  style=shape.labeldown, color=na, textcolor=color.lime, location=location.belowbar, transp=0, offset = -prd)

// calculate the Center line using pivot points
var float center = na
float lastpp = ph ? ph : pl ? pl : na
if lastpp
    if na(center)
        center := lastpp
    else
        //weighted calculation
        center := (center * 2 + lastpp) / 3

// upper/lower bands calculation
Up = center - (Factor * atr(Pd))
Dn = center + (Factor * atr(Pd))

// get the trend
float TUp = na
float TDown = na
Trend = 0
TUp := close[1] > TUp[1] ? max(Up, TUp[1]) : Up
TDown := close[1] < TDown[1] ? min(Dn, TDown[1]) : Dn
Trend := close > TDown[1] ? 1: close < TUp[1]? -1: nz(Trend[1], 1)
Trailingsl = Trend == 1 ? TUp : TDown

// plot the trend
linecolor = Trend == 1 and nz(Trend[1]) == 1 ? color.lime : Trend == -1 and nz(Trend[1]) == -1 ? color.red : na
plot(Trailingsl, color = linecolor ,  linewidth = 2, title = "PP SuperTrend")
 
plot(showcl ? center : na, color = showcl ? center < hl2 ? color.blue : color.red : na)

// check and plot the signals
bsignal = Trend == 1 and Trend[1] == -1
ssignal = Trend == -1 and Trend[1] == 1
plotshape(bsignal and showlabel ? Trailingsl : na, title="Buy", text="Buy", location = location.absolute, style = shape.labelup, size = size.tiny, color = color.lime, textcolor = color.black, transp = 0)
plotshape(ssignal and showlabel ? Trailingsl : na, title="Sell", text="Sell", location = location.absolute, style = shape.labeldown, size = size.tiny, color = color.red, textcolor = color.white, transp = 0)

//get S/R levels using Pivot Points
float resistance = na
float support = na
support := pl ? pl : support[1]
resistance := ph ? ph : resistance[1]

// if enabled then show S/R levels
plot(showsr and support ? support : na, color = showsr and support ? color.lime : na, style = plot.style_circles, offset = -prd)
plot(showsr and resistance ? resistance : na, color = showsr and resistance ? color.red : na, style = plot.style_circles, offset = -prd)

// Trend Filter from SuperTrend Long Strategy
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR = input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)

// Combine the SuperTrend calculations
atr2 = sma(tr, Periods)
atr = changeATR ? atr(Periods) : atr2

up = src - (Multiplier * atr)
up1 = nz(up[1], up)
up := close[1] > up1 ? max(up, up1) : up

dn = src + (Multiplier * atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn

trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend

// Moving Average as Trend Filter
periodes_ma = input(title="Moving Average Period", type=input.integer, defval=20)
src_ma = input(title="Moving Average Source", type=input.source, defval=close)
ma = sma(src_ma, periodes_ma)

// Strategy Entry Conditions
FromMonth = input(defval = 9, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 999)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 999)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)       

window()  => time >= start and time <= finish ? true : false

// Combined entry conditions
longCondition = (trend == 1 and trend[1] == -1 and close > ma) or (bsignal and window())
shortCondition = (trend == -1 and trend[1] == 1 and close < ma) or (ssignal and window())

if (longCondition)
    strategy.entry("BUY", strategy.long)

if (shortCondition)
    strategy.close("BUY")
    strategy.entry("SELL", strategy.short)

buy1 = barssince((trend == 1 and trend[1] == -1 and close > ma) or (bsignal and window()))
sell1 = barssince((trend == -1 and trend[1] == 1 and close < ma) or (ssignal and window()))
color1 = buy1[1] < sell1[1] ? color.green : buy1[1] > sell1[1] ? color.red : na
barcolor(color1)

Mehr