Stratégie de super-tendance du point pivot

Auteur:ChaoZhang est là., Date: le 26 février 2024 à 10 h 57.20
Les étiquettes:

img

Résumé

La stratégie Pivot Point SuperTrend est une stratégie innovante de suivi des tendances qui combine deux indicateurs populaires Pivot Points et SuperTrend, tout en introduisant un filtre de tendance supplémentaire pour une précision accrue.

La logique de la stratégie

La base de la stratégie réside dans la fusion des indicateurs Pivot Points et SuperTrend, plus l'ajout d'un filtre de tendance robuste. Elle commence par calculer les Pivot Highs et Lows sur une période spécifiée, servant de points de référence cruciaux pour l'analyse de tendance.

Ensuite, en fonction de la ligne centrale et de la plage moyenne vraie (ATR) avec un facteur défini par l'utilisateur, des bandes supérieures et inférieures sont générées. Ces bandes s'adaptent à la volatilité du marché, ajoutant de la flexibilité à la stratégie.

Le filtre de tendance supplémentaire introduit dans la stratégie améliore encore ses capacités. Ce filtre est basé sur une moyenne mobile, fournissant une évaluation dynamique de la force et de la direction de la tendance. En combinant ce filtre de tendance avec les signaux Pivot Point SuperTrend originaux, la stratégie vise à prendre des décisions de trading plus éclairées et fiables.

Analyse des avantages

  1. Amélioration de la précision: l'incorporation d'un filtre de tendance améliore la précision de la stratégie en confirmant la direction générale de la tendance avant de générer des signaux.

  2. Continuation de la tendance: L'intégration des points pivots et de la SuperTrend, ainsi que le filtre de tendance, vise à prolonger les transactions pendant les fortes tendances du marché, maximisant potentiellement les opportunités de profit.

  3. Réduction des écarts: le calcul de la moyenne pondérée de la stratégie, associé au filtre de tendance, aide à minimiser les faux signaux et réduit les écarts lors de conditions de marché incertaines ou latérales.

  4. Perspectives de support et de résistance: la stratégie continue de fournir des niveaux de support et de résistance supplémentaires basés sur les points pivots, offrant des informations contextuelles précieuses aux traders.

Analyse des risques

  1. Dépendance par paramètre: la stratégie est sensible à des paramètres tels que la période ATR et le multiplicateur.

  2. Réversions de tendance: à proximité des points d'inversion de tendance, la stratégie peut générer de faux signaux entraînant des pertes inutiles.

  3. Optimisation excessive: les paramètres peuvent être optimisés pour obtenir les meilleurs résultats, mais ils manquent de viabilité à l'avenir.

  4. Risque d'écart: lorsque les prix s'éloignent des bandes, la stratégie entre dans une position plate. Cela pourrait manquer des opportunités lorsque les tendances reprennent après un écart.

Directions d'optimisation

  1. Filtres supplémentaires: des filtres de volume, de volatilité, etc. pourraient être ajoutés pour renforcer la robustesse de la stratégie.

  2. Paramètres dynamiques: des méthodes d'optimisation automatique ou d'ajustement adaptatif des paramètres en fonction des conditions changeantes du marché pourraient rendre la stratégie plus polyvalente.

  3. Stop Losses: Rechercher des moyens de concevoir des mécanismes de stop loss tout en maintenant une logique stratégique pour contrôler efficacement la baisse.

  4. Optimisation des actifs: évaluer les paramètres de stratégie sur différents marchés et instruments. Optimiser les paramètres en fonction des spécificités de chacun.

Résumé

La stratégie Pivot Point SuperTrend démontre des atouts uniques à travers des dimensions telles que la simplicité et la capacité de suivi des tendances. Dans le même temps, des aspects tels que les paramètres, les stop-loss, l'optimisation des actifs offrent la possibilité de l'améliorer pour en faire un outil encore plus universel et fiable.


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

Plus de