Stratégie quantitative basée sur des points pivots

Auteur:ChaoZhang est là., Date: 2024-02-20 14h22
Les étiquettes:

img

Résumé

L'idée de base de cette stratégie est d'utiliser des points pivots pour le trading quantitatif.

La logique de la stratégie

La stratégie définit d'abord les fonctions pivotHighSig() et pivotLowSig() pour localiser les points hauts et bas.

En particulier, pour les hauts de swing, il recherche plusieurs hauts plus élevés à gauche et plusieurs hauts inférieurs à droite.

Après avoir localisé les hauts et les bas du swing, la stratégie sélectionne ensuite des points pivots parmi ces points pivots, c'est-à-dire des points importants parmi les pivots.

Enfin, les transactions d'inversion sont effectuées lorsque les prix franchissent les points pivots des pivots.

Les avantages

Cette stratégie quantitative basée sur des points pivots présente les avantages suivants:

  1. Il profite des niveaux de soutien et de résistance sur le marché où les retours se produisent souvent
  2. Il identifie à la fois des points forts et des points faibles importants pour le commerce bilatéral
  3. Les points pivots sont des points extrêmes exceptionnels et les briser donne de forts signaux
  4. L'utilisation de points pivots de pivots rend le signal encore plus fiable

Risques et solutions

Cette stratégie comporte également certains risques:

  1. La solution consiste à régler les paramètres de la plage gauche/droite pour identifier plus précisément les points de pivot.
  2. La solution consiste à filtrer les signaux combinant d'autres facteurs comme le volume, l'élan, etc.

Les domaines d'amélioration

Cette stratégie peut être améliorée dans les domaines suivants:

  1. Ajouter des mécanismes de stop loss pour rendre la stratégie plus stable
  2. Incorporer davantage d'indicateurs techniques pour le filtrage des signaux
  3. Développer des modèles d'inversion PRED en utilisant l'apprentissage automatique pour améliorer encore la prédiction des points pivots
  4. Intégrer des paramètres adaptatifs

Conclusion

Dans l'ensemble, cette stratégie fonctionne bien. L'idée principale est de détecter les points pivots importants et de négocier leurs ruptures. Des améliorations supplémentaires peuvent générer des signaux plus solides et fiables pour des bénéfices plus élevés et plus constants.


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

Plus de