Quantifizierungsstrategien basierend auf der Pivotal-Inversion

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

基于枢轴点逆转的量化策略

Übersicht

Der Kerngedanke dieser Strategie ist es, mit den zentralen Punkten zu handeln. Sie sucht nach wichtigen zentralen Höhen und Tiefen und handelt umgekehrt, wenn der Preis diese wichtigen Punkte durchbricht.

Die Strategie

Die Strategie definiert zunächst die Funktionen pivotHighSig und pivotLowSig, die nach den Höhen und Tiefen der Achse suchen.

Insbesondere bei den Hubhöhen sucht es nach mehreren aufeinanderfolgenden höheren Höhen auf der linken Seite und nach mehreren aufeinanderfolgenden niedrigeren Höhen auf der rechten Seite.

Nachdem die Höhe und Tiefe der Achse gefunden wurden, wählt die Strategie die Höhe und Tiefe der Achse weiter aus, d.h. die wichtigen Punkte in der Achse. Dies wird durch die Definition mehrerer historischer Variablen wie ph1, ph2 usw. der Höhe und Tiefe der Achse erreicht.

Schließlich wird ein Umkehrhandel durchgeführt, wenn der Preis den Kernpunkt der Phasenachse durchbricht.

Strategische Vorteile

Die Quantifizierungsstrategie basiert auf den zentralen Achsen und bietet folgende Vorteile:

  1. Sie nutzen Unterstützung und Widerstandsbereiche des Marktes, die häufig als Chancenpunkte für eine Preiswende dienen.
  2. Es gibt viele Möglichkeiten, bilaterale Transaktionen zu realisieren, indem wir wichtige Höhen und Tiefen finden.
  3. Die Mitte ist der extremum Punkt, der stärker signalisiert wird, wenn er durchbricht.
  4. Nutzen Sie die Kernpunkte der Achse, um das Signal zu verlässlichen

Risiken und Lösungen

Die Strategie birgt auch einige Risiken:

  1. Fehlbeurteilung der Kernpunkte, was zu falschen Signalen führt. Die Lösung besteht darin, die Parameter für den linken und rechten Bereich anzupassen, um eine genauere Kernpunkte-Identifizierung zu gewährleisten.
  2. Durchbrüche und falsche Durchbrüche. Die Lösung besteht darin, mehrere Faktoren zu filtern, um die Signale zu filtern, wie z.B. Kapazität, Transaktionsvolumen usw.

Optimierung

Diese Strategie kann auch in folgenden Bereichen optimiert werden:

  1. Die Strategie wird stabiler, wenn die Stop-Loss-Strategie erhöht wird.
  2. Sie werden mit mehr Indikatoren gefiltert.
  3. Entwicklung einer umgekehrten PRED-Strategie zur weiteren Optimierung der Pivotal-Prognosen mit ML
  4. Ergänzung der Parameteradaptivität

Zusammenfassung

Die Strategie hat sich insgesamt gut entwickelt, wobei die Kernidee darin besteht, wichtige Kernen zu finden und bei ihrem Durchbruch umzukehren. Durch weitere Optimierung kann die Strategie zu stabileren und zuverlässigeren Signalen führen, was zu guten Erträgen führt.


/*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)

Weitere Informationen