Quantitative Strategie zur Pivot-Umkehrung auf Basis von Pivot-Punkten

Schriftsteller:ChaoZhang, Datum: 2024-02-20 14:22:13
Tags:

img

Übersicht

Die Kernidee dieser Strategie besteht darin, Drehpunkte für den quantitativen Handel zu verwenden.

Strategie Logik

Die Strategie definiert zunächst die Funktionen pivotHighSig() und pivotLowSig() zur Suche nach qualifizierten Pivotpunkten auf der linken und rechten Seite.

Speziell für Swing-Hochs sucht es nach mehreren höheren Höhen auf der linken Seite und mehreren niedrigeren Höhen auf der rechten Seite.

Nach der Lokalisierung der Swing-Hoch- und Tiefststände wählt die Strategie aus diesen Pivotpunkten weiter Pivotpunkte aus, d.h. wichtige Punkte aus den Pivotpunkten. Dies wird erreicht, indem mehrere historische Variablen für die Swing-Hoch- und Tiefststände definiert werden, z.B. ph1, ph2 usw.

Schließlich werden Umkehrgeschäfte getätigt, wenn die Preise die Drehpunkte der Drehpunkte durchbrechen.

Vorteile

Diese auf Pivotpoints basierende quantitative Strategie hat folgende Vorteile:

  1. Es nutzt die Vorteile von Unterstützungs- und Widerstandsniveaus auf dem Markt, auf dem häufig Wendezeiten stattfinden.
  2. Es identifiziert sowohl wichtige Hoch- als auch Tiefpunkte für den bilateralen Handel
  3. Pivot-Punkte sind herausragende Extremum-Punkte und durchbrechen sie gibt starke Signale
  4. Die Verwendung von Drehpunkten von Drehpunkten macht das Signal noch zuverlässiger

Risiken und Lösungen

Diese Strategie birgt auch einige Risiken:

  1. Eine falsche Beurteilung der Drehpunkte führt zu falschen Signalen. Die Lösung besteht darin, die Parameter des linken/rechten Bereichs anzupassen, um Drehpunkte genauer zu identifizieren.
  2. Die Lösung besteht darin, Signale zu filtern, die andere Faktoren wie Lautstärke, Impuls etc. kombinieren.

Verbesserungsbereiche

Diese Strategie kann in folgenden Bereichen verbessert werden:

  1. Hinzufügen von Stop-Loss-Mechanismen, um die Strategie stabiler zu machen
  2. Mehr technische Indikatoren für die Signalfilterung einbeziehen
  3. Entwicklung von PRED-Umkehrmodellen mit Hilfe von maschinellem Lernen zur weiteren Verbesserung der Pivotpoint-Vorhersage
  4. Einbautechnik mit Adaptivparametern

Schlussfolgerung

Diese Strategie funktioniert insgesamt gut. Die Kernidee besteht darin, wichtige Drehpunkte zu erkennen und ihre Ausbrüche zu handeln. Weitere Verbesserungen können solidere und zuverlässigere Signale für höhere und konsistentere Gewinne generieren.


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

//@version=4
strategy("Pivot of Pivot Reversal Strategy [QuantNomad]", shorttitle = "PoP Reversal Strategy [QN]", overlay=true)

// Inputs 
leftBars   = input(4,   title = 'PP Left Bars')
rightBars  = input(2,   title = 'PP Right Bars')
atr_length = input(14,  title = 'ATR Length')
atr_mult   = input(0.1, title = 'ATR Mult')

// Pivot High Significant Function
pivotHighSig(left, right) =>
    pp_ok = true
    atr   = atr(atr_length)
    
    for i = 1 to left
        if (high[right] < high[right+i] + atr * atr_mult)
            pp_ok := false
    for i = 0 to right-1
        if (high[right] < high[i] + atr * atr_mult)
            pp_ok := false
    
    pp_ok ? high[right] : na

// Pivot Low Significant Function
pivotLowSig(left, right) =>
    pp_ok = true
    atr   = atr(atr_length)
    
    for i = 1 to left
        if (low[right] > low[right+i] - atr * atr_mult)
            pp_ok := false
    for i = 0 to right-1
        if (low[right] > low[i] - atr * atr_mult)
            pp_ok := false
    
    pp_ok ? low[right] : na


swh = pivotHighSig(leftBars, rightBars)
swl = pivotLowSig (leftBars, rightBars)

swh_cond = not na(swh)

hprice = 0.0
hprice := swh_cond ? swh : hprice[1]

le = false
le := swh_cond ? true : (le[1] and high > hprice ? false : le[1])

swl_cond = not na(swl)

lprice = 0.0
lprice := swl_cond ? swl : lprice[1]

se = false
se := swl_cond ? true : (se[1] and low < lprice ? false : se[1])

// Pivots of pivots
ph1 = 0.0
ph2 = 0.0
ph3 = 0.0

pl1 = 0.0
pl2 = 0.0
pl3 = 0.0

pphprice = 0.0
pplprice = 0.0

ph3 := swh_cond ? nz(ph2[1]) : nz(ph3[1])
ph2 := swh_cond ? nz(ph1[1]) : nz(ph2[1])
ph1 := swh_cond ? hprice     : nz(ph1[1])

pl3 := swl_cond ? nz(pl2[1]) : nz(pl3[1])
pl2 := swl_cond ? nz(pl1[1]) : nz(pl2[1])
pl1 := swl_cond ? lprice     : nz(pl1[1])

pphprice := swh_cond and ph2 > ph1 and ph2 > ph3 ? ph2 : nz(pphprice[1])
pplprice := swl_cond and pl2 < pl1 and pl2 < pl3 ? pl2 : nz(pplprice[1])


if (le)
    strategy.entry("PP_RevLE", strategy.long, comment="PP_RevLE", stop=pphprice + syminfo.mintick)

if (se)
    strategy.entry("PP_RevSE", strategy.short, comment="PP_RevSE", stop=pplprice - syminfo.mintick)
    
// Plotting 
plot(lprice, color = color.red,   transp = 55)
plot(hprice, color = color.green, transp = 55)

plot(pplprice, color = color.red,   transp = 0, linewidth = 2)
plot(pphprice, color = color.green, transp = 0, linewidth = 2)

Mehr