Stratégies quantitatives basées sur les inversions de points pivots


Date de création: 2024-02-20 14:22:13 Dernière modification: 2024-02-20 14:22:13
Copier: 0 Nombre de clics: 654
1
Suivre
1617
Abonnés

Stratégies quantitatives basées sur les inversions de points pivots

Aperçu

L’idée centrale de cette stratégie est d’utiliser les pivots pour effectuer des transactions quantitatives. Elle recherche les hauts et les bas pivots importants et effectue des transactions inversées lorsque les prix franchissent ces points critiques.

Principe de stratégie

La stratégie définit d’abord les fonctions pivotHighSig() et pivotLowSig() pour trouver les hauts et les bas de l’axe. Ces deux fonctions recherchent les hauts et les bas de l’axe correspondants à gauche et à droite.

Concernant les hauts de l’axe, il cherche des hauts plus élevés sur la gauche et des hauts plus bas sur la droite. Ainsi, le haut de l’axe se trouve dans une position relativement plus élevée.

Après avoir trouvé le haut et le bas de l’axe, la stratégie sélectionne un autre point central de l’axe, c’est-à-dire un point important dans l’axe. Cela est réalisé en définissant plusieurs variables historiques de haut et bas de l’axe, telles que ph1, ph2 et autres.

Finalement, un renversement est effectué lorsque le prix dépasse le pivot de l’axe central.

Avantages stratégiques

Cette stratégie quantitative axée sur les pôles présente les avantages suivants:

  1. Utilisation des zones de résistance de soutien du marché, qui sont souvent des points d’opportunité pour un renversement des prix
  2. Il est important de trouver des hauts et des bas et de réaliser des échanges bilatéraux multi-zones.
  3. Le point pivot est le point extrême le plus important, le signal est plus fort à ce point.
  4. Utilisation des axes de l’axe pour rendre le signal plus fiable

Les risques et les solutions

Cette stratégie comporte aussi des risques:

  1. La solution est d’ajuster les paramètres d’intervalle gauche et droit pour assurer une identification plus précise des axes.
  2. La solution consiste à combiner plusieurs facteurs pour filtrer le signal, tels que la quantité de puissance, la quantité de trafic, etc.

Direction d’optimisation

Cette stratégie peut également être optimisée dans les directions suivantes:

  1. Augmentation de la stratégie de stop loss pour la rendre plus stable
  2. Filtrage des signaux avec plus d’indicateurs
  3. Développer des stratégies de retour en arrière PRED pour optimiser davantage les prévisions axiales en utilisant le ML
  4. Ajout d’une fonction d’adaptation des paramètres

Résumer

Cette stratégie a globalement bien fonctionné, l’idée centrale étant de trouver des pivots importants et de faire des transactions inverses lors de leur percée. En l’optimisant davantage, cette stratégie peut obtenir des signaux plus stables et plus fiables, ce qui permet de générer de bons revenus.

Code source de la stratégie
/*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)