La stratégie Pivot Point SuperTrend est une stratégie innovante de suivi des tendances qui combine deux indicateurs populaires
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.
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.
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.
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.
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.
Dépendance par paramètre: la stratégie est sensible à des paramètres tels que la période ATR et le multiplicateur.
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.
Optimisation excessive: les paramètres peuvent être optimisés pour obtenir les meilleurs résultats, mais ils manquent de viabilité à l'avenir.
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.
Filtres supplémentaires: des filtres de volume, de volatilité, etc. pourraient être ajoutés pour renforcer la robustesse de la stratégie.
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.
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.
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.
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)