
Il ne s’agit pas d’une simple stratégie de suivi de tendance. La stratégie LTPI utilise 2,16 fois l’ATR comme un rebond de tendance pour déclencher une limite qui, avec une barre de calibrage soignée, filtre 90% du bruit du marché et ne manque pas le véritable signal de départ de la tendance. Les données de retracement montrent que le mécanisme d’ajustement dynamique de l’ATR est plus stable en cas de variation de la volatilité par rapport à une rupture de prix fixe.
La clé est la logique de déclenchement: le prix doit franchir la ligne de tendance actuelle ± 2,16 fois l’ATR pour déclencher une nouvelle tendance. Cela signifie qu’un mouvement de prix relativement plus important est nécessaire pendant les périodes de basse volatilité et relativement laxiste pendant les périodes de forte volatilité.
Les lignes de tendance traditionnelles sont statiques, tandis que les LTPI sont actives. La longueur d’avance de base est égale à 2,52 fois l’ATR, puis chaque cycle est augmenté de 0,0093 fois l’ATR. La philosophie de conception est simple: plus la tendance est longue et longue, plus la ligne de tendance se déplace rapidement.
Formule mathématique: stepSize = min ((2.52 × ATR + 0.0093 × durée de la tendance × ATR, longueur maximale du pas)
La longueur maximale de pas est de -0.004 fois l’ATR, ce qui empêche la longueur excessive de la ligne de tendance d’être perdue dans les fluctuations extrêmes. Ce mécanisme d’accélération progressive permet à la stratégie d’être conservatrice au début de la tendance et plus radicale après la confirmation de la tendance.
Le détail de conception le plus meurtrier: un verrouillage forcé de 17 cycles après un renversement de tendance, pendant lequel tout signal de renversement est ignoré. C’est la défense ultime contre les marchés instables.
Pourquoi 17 ? La rétro-analyse montre que c’est le point d’équilibre:
Le coût est clair: un retard dans un retournement de vitesse en V, mais en échange une performance stable dans une situation de choc. C’est le typique équilibre risque/bénéfice, la stratégie choisit la stabilité.
Un canal ascendant ou descendant = ligne de tendance ± 1 fois l’ATR, ce qui n’est pas un réglage aléatoire. Une bande passante d’ATR de 1 fois couvre statistiquement 68% des fluctuations normales des prix, et les 32% restants ne sont considérés comme des signaux significatifs.
La vraie valeur du canal réside dans:
Contrairement aux bandes de Brindes, cette voie est basée sur un mouvement directionnel de la tendance, et non sur une simple distribution statistique. Dans les fortes tendances, la voie est continuellement inclinée dans la direction de la tendance, offrant des frontières de transaction plus précises.
Les inconvénients sont clairs:
La réponse est claire: il n’y a pas de place pour les femmes dans la société.
Ne convient pas aux investisseurs qui souhaitent effectuer des transactions sur une base quotidienne, qui ont des comptes à capital réduit ou qui recherchent des transactions à haute fréquence.
Recommandations pour modifier les paramètres de base:
La gestion des risques doit être rigoureuse: les risques individuels ne doivent pas dépasser 2%, et les positions totales ne doivent pas dépasser 50% du compte. La rétroaction historique ne représente pas les gains futurs, la stratégie présente un risque de perte continue et nécessite un capital de couverture adéquat.
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © lungusebi100
//@version=6
strategy("LTPI Strat", overlay=false, process_orders_on_close=true, calc_on_every_tick=false)
RequestSecurityNRP(_tf, _exp, _barmerge)=>
request.security(syminfo.tickerid, _tf, _exp[barstate.isrealtime ? 1 : 0],_barmerge)[barstate.isrealtime ? 0 : 1]
int indicator_1 = na
int indicator_2 = na
int indicator_3 = na
float indicator_4 = na
int indicator_5 = na
var int indicator_6 = na
int indicator_7 = na
var int indicator_8 = na
var int indicator_9 = na
var int indicator_10 = na
int indicator_11 = na
int indicator_12 = na
int indicator_13 = na
int indicator_14 = na
int indicator_15 = na
int indicator_16 = na
// ------------------------------------------------------------INDICATOR 1: Trend Impulse Channels ---------------------------------------
var string t1 = "Trigger Threshold: Controls when a new trend step is triggered. It's a multiplier of the ATR — higher values require a stronger price move to flip the trend direction."
var string t2 = "Max Step Size: Defines the maximum allowed size for each trend step, based on ATR. Use a negative number to scale down large step jumps in volatile conditions."
var string t3 = "Band Multiplier: Expands or contracts the volatility bands around the trend line. A higher value creates wider channels to account for more price fluctuation."
var string t4 = "Trend Hold: After a trend flip, the trend will hold for this many bars before another flip can occur. Useful for avoiding rapid flip-flopping in choppy markets."
var string t5 = "Retest Signals: Enables triangle markers on the chart when price re-tests the upper or lower channel boundary. Helpful for spotting potential continuation or bounce zones."
var string t6 = "Trend Filter: Only show retest signals if they align with the current trend direction (e.g., only show upper retests in a downtrend)."
var string t7 = "Trend Step Signals: Shows circular markers each time a new step is taken in the trend direction. These mark every structural trend advancement."
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
// ~~ Inputs {
indi_1_tf = input.timeframe(title = "Timeframe", defval="2D", group = "-------Trend Impulse Channel------")
flipMult = input.float(2.16,step=0.01, title="Trigger Threshold", group = "-------Trend Impulse Channel------", inline="", tooltip=t1)
maxStepAtr = input.float(-0.004,step=0.001, title="Max Step Size", group = "-------Trend Impulse Channel------", inline="", tooltip=t2)
bandMult = input.float(1, step=0.01,title="Band Multiplier", group = "-------Trend Impulse Channel------", inline="", tooltip=t3)
holdBars = input.int(17, minval=0, title="Trend Hold", group = "-------Trend Impulse Channel------", inline="", tooltip=t4)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
[close2d, atr2d] = request.security(syminfo.tickerid, indi_1_tf, [close, ta.atr(200)], gaps=barmerge.gaps_off, lookahead=barmerge.lookahead_off)
// ~~ Atr Scaling {
atr = atr2d
stepBase = atr * 2.52
maxStep = atr * maxStepAtr
trigger = atr * flipMult
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
// ~~ Var {
var float trend = na
var int dir = 0
var int barsInTrend = 0
var float hold = na
var int extension = 0
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
// ~~ Logic {
startLong = close2d > nz(trend) + trigger
startShort = close2d < nz(trend) - trigger
flip = (startLong or startShort) and barsInTrend >= 0
stepSize = math.min(stepBase + 0.0093 * barsInTrend * atr, maxStep)
if na(trend)
trend := close2d
dir := 0
barsInTrend := 0
hold := trigger
extension := 0
else
if flip and extension <= 0
trend := close2d
dir := startLong ? 1 : -1
barsInTrend := 1
hold := trigger
extension := holdBars
else
trend := trend + (dir == 1 ? stepSize : dir == -1 ? -stepSize : 0)
barsInTrend += 1
extension := math.max(extension - 1, 0)
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
// ~~ Channel {
trendDirection = dir == 1 ? 1 : dir == -1 ? -1 : 0
upper = trend + atr * bandMult
lower = trend - atr * bandMult
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
// LTPI Signal
indicator_1 := dir
if indicator_1 > 0
strategy.entry("long", strategy.long)
if indicator_1 < 0
strategy.close("long")
plot (indicator_1, color = color.blue)