
La stratégie est un système de trading intelligent basé sur plusieurs ruptures de lignes de tendance. Il identifie de manière dynamique les points de résistance de soutien essentiels, calcule la pente de la ligne de tendance en combinaison avec de multiples indicateurs techniques et effectue des transactions lorsque le prix franchit la ligne de tendance. La stratégie est capable non seulement de capturer les points de basculement des tendances du marché, mais également d’adapter les paramètres à différents environnements de marché.
La logique centrale de la stratégie comprend trois parties principales: d’abord, identifier les hauts et les bas critiques à travers la période de rétrocession, formant un niveau de résistance de soutien initial; ensuite, calculer dynamiquement la pente de la ligne de tendance en fonction de la méthode de calcul choisie (ATR, standard deviation ou régression linéaire), permettant ainsi à la ligne de tendance de mieux s’adapter aux fluctuations du marché; enfin, déclencher un signal de négociation en cas de rupture en surveillant la relation entre les prix et la ligne de tendance. Le système contient également un mécanisme pour empêcher la rétroaction d’être surmodélisée, simulant le véritable environnement de négociation par des paramètres de backpainting.
La stratégie utilise l’intégration de plusieurs méthodes d’analyse technique pour construire un système de trading fiable pour briser les lignes de tendance. Son avantage réside dans sa capacité à s’adapter dynamiquement aux changements du marché tout en fournissant des signaux de trading clairs. Bien qu’il existe des risques inhérents, la stabilité et la rentabilité de la stratégie peuvent être considérablement améliorées grâce à un réglage de paramètres raisonnable et à une optimisation continue.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-18 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Alexgoldhunter
//@version=5
strategy("Trendlines with Breaks Strategy [AlexGoldHunter]", overlay=true)
// Input parameters
length = input.int(14, title="Swing Detection Lookback")
mult = input.float(1.0, title="Slope", minval=0, step=0.1)
calcMethod = input.string('Atr', title="Slope Calculation Method", options=['Atr','Stdev','Linreg'])
backpaint = input(true, tooltip='Backpainting offset displayed elements in the past. Disable backpainting to see real-time information returned by the indicator.')
// Style settings
upCss = input.color(color.teal, title="Up Trendline Color", group="Style")
dnCss = input.color(color.red, title="Down Trendline Color", group="Style")
showExt = input(true, title="Show Extended Lines")
// Calculations
var upper = 0.0
var lower = 0.0
var slope_ph = 0.0
var slope_pl = 0.0
var offset = backpaint ? length : 0
n = bar_index
src = close
ph = ta.pivothigh(length, length)
pl = ta.pivotlow(length, length)
// Slope Calculation Method
slope = switch calcMethod
'Atr' => ta.atr(length) / length * mult
'Stdev' => ta.stdev(src, length) / length * mult
'Linreg' => math.abs(ta.sma(src * n, length) - ta.sma(src, length) * ta.sma(n, length)) / ta.variance(n, length) / 2 * mult
// Get slopes and calculate trendlines
slope_ph := ph ? slope : slope_ph
slope_pl := pl ? slope : slope_pl
upper := ph ? ph : upper - slope_ph
lower := pl ? pl : lower + slope_pl
var upos = 0
var dnos = 0
upos := ph ? 0 : close > upper - slope_ph * length ? 1 : upos
dnos := pl ? 0 : close < lower + slope_pl * length ? 1 : dnos
// Extended Lines
// var uptl = line.new(na, na, na, na, color=upCss, style=line.style_dashed, extend=extend.right)
// var dntl = line.new(na, na, na, na, color=dnCss, style=line.style_dashed, extend=extend.right)
// if ph and showExt
// uptl.set_xy1(n - offset, backpaint ? ph : upper - slope_ph * length)
// uptl.set_xy2(n - offset + 1, backpaint ? ph - slope : upper - slope_ph * (length + 1))
// if pl and showExt
// dntl.set_xy1(n - offset, backpaint ? pl : lower + slope_pl * length)
// dntl.set_xy2(n - offset + 1, backpaint ? pl + slope : lower + slope_pl * (length + 1))
// Plots
plot(backpaint ? upper : upper - slope_ph * length, title="Upper", color=ph ? na : upCss, offset=-offset)
plot(backpaint ? lower : lower + slope_pl * length, title="Lower", color=pl ? na : dnCss, offset=-offset)
// Breakouts
plotshape(upos > upos[1] ? low : na, title="Upper Break",
style=shape.labelup, location=location.absolute, color=upCss, text="alex_buy_now", textcolor=color.white, size=size.tiny)
plotshape(dnos > dnos[1] ? high : na, title="Lower Break",
style=shape.labeldown, location=location.absolute, color=dnCss, text="alex_sell_now", textcolor=color.white, size=size.tiny)
// Strategy: Buy and Sell conditions
if (upos > upos[1])
strategy.entry("Buy", strategy.long)
if (dnos > dnos[1])
strategy.entry("Sell", strategy.short)
// Alerts
alertcondition(upos > upos[1], title="Upward Breakout", message="Price broke the down-trendline upward")
alertcondition(dnos > dnos[1], title="Downward Breakout", message="Price broke the up-trendline downward")