Machine de capture de tendances multidimensionnelles


Date de création: 2026-03-17 11:43:45 Dernière modification: 2026-03-17 11:43:45
Copier: 13 Nombre de clics: 179
2
Suivre
451
Abonnés

Machine de capture de tendances multidimensionnelles Machine de capture de tendances multidimensionnelles

EMA, ATR, MOMENTUM, EFFICIENCY, BREAKOUT

Ce n’est pas une stratégie à trois niveaux, c’est une machine à capter les tendances multidimensionnelles.

Ne vous laissez pas tromper par la superficielle configuration de la ligne de moyenne triangulaire 18/50/120. Au cœur de cette stratégie se trouve un système de vérification de tendance à 8 dimensions indépendantes, chacune avec une norme numérique bien définie.

Le problème avec les stratégies de ligne moyenne traditionnelles est qu’il y a trop de faux signaux. Ce système augmente le taux de réussite de l’entrée à un niveau supérieur en filtrant plusieurs fois l’efficacité du chemin (<33%), la continuité de la puissance (<57% de plus en plus de la ligne K) et l’état d’oscillation (<95% de plus en plus de l’ATR).

Détection de la qualité: 0,15 fois ATR pour une véritable percée

90% des ruptures sur le marché sont des fausses ruptures. Cette stratégie impose que l’intensité de la rupture doit atteindre 0,15 fois l’ATR, ce qui signifie qu’une rupture doit dépasser 15% des fluctuations moyennes récentes pour être considérée comme un signal valide.

Le mécanisme de reprise de retournement est plus subtil: il exige une reprise profonde d’au moins 0,9 fois l’ATR à partir de la ligne rapide, puis une reprise de la ligne moyenne avec une intensité de 0,15 fois l’ATR. Cette conception filtre efficacement les fausses percées en surface et ne capture que les démarrages de tendances qui sont réellement financées.

2 fois le levier + 2.8 fois l’ATR logique de contrôle du risque de suivi des pertes

La mise en place d’un 2x levier semble radicale, mais avec un 2% de stop-loss dur et un suivi dynamique de 2,8x ATR, le risque réel est contrôlable. Plus important encore, un mécanisme de blocage des bénéfices de 20,8x ATR, qui augmente automatiquement le stop-loss lorsque le flot atteint ce niveau, assure que les bénéfices de la grande tendance ne seront pas retournés.

La conception d’une ligne K complète obligatoire empêche l’entrée et la sortie de fréquences élevées, et la période de refroidissement de cinq lignes K évite les transactions continuelles émotionnelles. Ce contrôle du rythme est plus important que les indicateurs purement techniques.

Les trois modes d’entrée couvrent différents états du marché

Entrée en continuation de tendance: s’applique à une tendance forte déjà établie, exigeant une percée + une inclinaison + une efficacité + une dynamique pour atteindre tous les objectifs. Réajustement de la reprise: réajustement de la tendance en bonne santé, exigeant une profondeur suffisante et une reprise de la force. Entrée en tendance précoce: capture de la période de fenêtre de la ligne 14 K d’or qui transforme la tendance.

L’avantage de cette conception multi-modes est de ne pas manquer d’occasions de tendance de n’importe quel type, et chaque mode a des normes de qualité strictes.

Les indicateurs d’efficacité sont les critères de qualité les plus sous-estimés

L’efficacité de la trajectoire est calculée en fonction du rapport entre le décalage net et le décalage cumulé sur 18 cycles, sans que la tendance inférieure à 33% ne se heurte. Cet indicateur permet d’identifier efficacement les fausses tendances dans les conditions de choc et d’éviter les pertes répétées dans les marchés horizontaux.

La continuité de la dynamique nécessite une courbe de K de plus de 57% et doit être positive avec une dynamique de 12 cycles. Cette double vérification assure la force intrinsèque de la tendance et non seulement la rupture superficielle du prix.

L’analyse d’aptitude: pas une stratégie universelle, mais excellente dans les marchés tendances

Cette stratégie est clairement orientée vers les marchés tendanciels et déclenche souvent des signaux d’exit en cas de choc. La conception de l’obligation d’exit lorsque l’état d’ATR est inférieur à 80% et l’efficacité est inférieure à 25% indique que la stratégie a des exigences claires pour l’environnement du marché.

Le plus grand risque réside dans le retard de la période de conversion de la tendance, bien qu’il y ait des avertissements précoces tels que des croisements rapides d’EMA, il est toujours possible de faire face à un retrait plus important lors d’une inversion rapide. Il est recommandé de l’utiliser sur des actions de croissance ou des marchés de crypto-monnaies à haut taux de volatilité et d’éviter de l’utiliser sur des variétés à faible volatilité telles que les blue-chip à grande échelle.

Astuce de risque: les retours historiques ne sont pas représentatifs des gains futurs, la stratégie présente un risque de perte continue, la gestion des risques doit être strictement appliquée et la performance varie considérablement selon les conditions du marché.

Code source de la stratégie
/*backtest
start: 2026-01-07 15:30:00
end: 2026-03-15 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"XAG_USDT","balance":500000}]
*/

//@version=5
strategy("Quant Trend Engine Long Only v2 - Manual Leverage Fixed", overlay=true)

// === Core lengths ===
fastLen = input.int(18, "Fast EMA")
midLen = input.int(50, "Mid EMA")
slowLen = input.int(120, "Slow EMA")
smoothLen = input.int(3, "EMA Smoothing")
pullbackLen = input.int(8, "Pullback Lookback")
breakoutLen = input.int(20, "Breakout Length")
effLen = input.int(18, "Efficiency Length")
persistLen = input.int(7, "Persistence Length")
momLen = input.int(12, "Momentum Length")
slopeLen = input.int(10, "Slope Length")
atrLen = input.int(14, "ATR Length")
atrBaseLen = input.int(40, "ATR Baseline Length")

// === Thresholds ===
minScore = input.float(5.0, "Minimum Entry Score", step=0.25)
exitScore = input.float(2.5, "Weak Trend Exit Score", step=0.25)
minSepPerc = input.float(0.30, "Min EMA Separation %", step=0.05)
minSlowSlopePerc = input.float(0.03, "Min Slow Slope %", step=0.01)
minEff = input.float(0.33, "Min Efficiency", step=0.01)
minAtrRegime = input.float(0.95, "Min ATR Regime", step=0.05)
minBreakoutAtr = input.float(0.15, "Min Breakout ATR Strength", step=0.05)
pullbackAtrMult = input.float(0.90, "Pullback Distance ATR", step=0.05)
reclaimAtrMult = input.float(0.15, "Reclaim Distance ATR", step=0.05)
cooldownBars = input.int(5, "Cooldown Bars After Exit")

// === Risk ===
leverage = input.float(2.0, "Leverage", step=0.1, minval=0.1)
hardStopPerc = input.float(2.0, "Hard Stop %", step=0.1)
trailAtrMult = input.float(2.8, "ATR Trail Mult", step=0.1)
profitLockAtrMult = input.float(20.8, "Profit Lock ATR Mult", step=0.1)

// === Smoothed EMAs ===
fast = ta.ema(ta.ema(close, fastLen), smoothLen)
mid = ta.ema(ta.ema(close, midLen), smoothLen)
slow = ta.ema(ta.ema(close, slowLen), smoothLen)

// === Regime structure ===
bullStack = fast > mid and mid > slow
sepPerc = slow != 0 ? math.abs(fast - slow) / slow * 100 : 0.0
sepOk = sepPerc >= minSepPerc

fastSlope = fast[slopeLen] != 0 ? (fast - fast[slopeLen]) / fast[slopeLen] * 100 : 0.0
midSlope = mid[slopeLen] != 0 ? (mid - mid[slopeLen]) / mid[slopeLen] * 100 : 0.0
slowSlope = slow[slopeLen] != 0 ? (slow - slow[slopeLen]) / slow[slopeLen] * 100 : 0.0
slopeOk = slowSlope >= minSlowSlopePerc and midSlope > 0 and fastSlope > 0

// === Path efficiency ===
netMove = math.abs(close - close[effLen])
stepMove = 0.0
for i = 1 to effLen
    stepMove += math.abs(close[i - 1] - close[i])
efficiency = stepMove != 0 ? netMove / stepMove : 0.0
effOk = efficiency >= minEff

// === Momentum persistence ===
upBars = 0.0
for i = 0 to persistLen - 1
    upBars += close[i] > close[i + 1] ? 1 : 0
persistRatio = persistLen > 0 ? upBars / persistLen : 0.0
momRaw = close[momLen] != 0 ? (close - close[momLen]) / close[momLen] * 100 : 0.0
momOk = momRaw > 0 and persistRatio >= 0.57

// === Volatility regime ===
atr = ta.atr(atrLen)
atrBase = ta.sma(atr, atrBaseLen)
atrRegime = atrBase != 0 ? atr / atrBase : 0.0
atrOk = atrRegime >= minAtrRegime

// === Breakout quality ===
hh = ta.highest(high, breakoutLen)[1]
breakoutDist = close - hh
breakoutStrength = atr != 0 ? breakoutDist / atr : 0.0
breakoutOk = close > hh and breakoutStrength >= minBreakoutAtr

// === Pullback / reclaim logic ===
pullbackLow = ta.lowest(low, pullbackLen)
distFromFastAtr = atr != 0 ? (fast - pullbackLow) / atr : 0.0
deepEnoughPullback = distFromFastAtr >= pullbackAtrMult
reclaimFast = close > fast and close[1] <= fast[1]
reclaimMid = close > mid and close[1] <= mid[1]
reclaimStrength = atr != 0 ? (close - fast) / atr : 0.0
reclaimOk = (reclaimFast or reclaimMid) and reclaimStrength >= reclaimAtrMult

// === Transition memory ===
bullCross = ta.crossover(fast, mid) or ta.crossover(fast, slow) or ta.crossover(mid, slow)
barsSinceBullCross = ta.barssince(bullCross)
recentTrendBirth = barsSinceBullCross >= 0 and barsSinceBullCross <= 14

// === Weighted score ===
trendScore = 0.0
trendScore += bullStack ? 1.50 : 0.0
trendScore += sepOk ? 0.90 : 0.0
trendScore += slopeOk ? 1.10 : 0.0
trendScore += effOk ? 1.00 : 0.0
trendScore += atrOk ? 0.80 : 0.0
trendScore += momOk ? 1.00 : 0.0
trendScore += breakoutOk ? 1.25 : 0.0
trendScore += reclaimOk ? 1.10 : 0.0

// === Entry models ===
trendContinuationEntry = bullStack and breakoutOk and slopeOk and effOk and momOk
pullbackReentry = bullStack and sepOk and slopeOk and deepEnoughPullback and reclaimOk and effOk
earlyTrendEntry = recentTrendBirth and bullStack and sepOk and slopeOk and atrOk and momOk

// === Cooldown ===
var int lastExitBar = na
cooldownOk = na(lastExitBar) or bar_index - lastExitBar > cooldownBars

// === Final entry ===
enterLong = strategy.position_size == 0 and cooldownOk and trendScore >= minScore and close > slow and (trendContinuationEntry or pullbackReentry or earlyTrendEntry)

// === Manual leveraged sizing only ===
equity = math.max(strategy.equity, 0)
positionValue = equity * leverage
qty = positionValue > 0 ? positionValue / (close * syminfo.pointvalue) : 0.0

// === Entry tracking / mandatory 1 full candle hold ===
var int entryBarIndex = na
justOpened = strategy.position_size > 0 and strategy.position_size[1] == 0
if justOpened
    entryBarIndex := bar_index

canExitNow = strategy.position_size > 0 and not na(entryBarIndex) and bar_index > entryBarIndex

// === Entry order ===
if enterLong and qty > 0
    strategy.entry("Long", strategy.long, qty=qty)

// === Risk logic ===
hardStopPrice = strategy.position_size > 0 ? strategy.position_avg_price * (1 - hardStopPerc / 100) : na

var float trailStop = na
var float highSinceEntry = na
highSinceEntry := strategy.position_size > 0 ? (na(highSinceEntry) ? high : math.max(highSinceEntry, high)) : na

rawTrail = strategy.position_size > 0 ? close - atr * trailAtrMult : na
profitLock = strategy.position_size > 0 ? highSinceEntry - atr * profitLockAtrMult : na
combinedTrail = strategy.position_size > 0 ? math.max(rawTrail, profitLock) : na
trailStop := strategy.position_size > 0 ? (na(trailStop) ? combinedTrail : math.max(trailStop, combinedTrail)) : na

// === Exit logic ===
bearCross = ta.crossunder(fast, mid) or ta.crossunder(fast, slow)
structureBreak = close < mid and fast < mid
scoreWeak = trendScore <= exitScore
momentumFailure = persistRatio < 0.40 and momRaw < 0
regimeFailure = atrRegime < 0.80 and efficiency < 0.25

exitLong = strategy.position_size > 0 and canExitNow and (bearCross or structureBreak or scoreWeak or momentumFailure or regimeFailure)

// Only allow stop/trailing exits after 1 full candle has passed
if strategy.position_size > 0 and canExitNow
    strategy.exit("Risk Exit", from_entry="Long", stop=math.max(hardStopPrice, trailStop))

justClosed = strategy.position_size[1] > 0 and strategy.position_size == 0
if justClosed
    lastExitBar := bar_index
    trailStop := na
    highSinceEntry := na
    entryBarIndex := na

if exitLong
    strategy.close("Long")

// === Plots ===
plot(fast, color=color.green, linewidth=2, title="Fast EMA")
plot(mid, color=color.orange, linewidth=2, title="Mid EMA")
plot(slow, color=color.red, linewidth=2, title="Slow EMA")
plot(strategy.position_size > 0 ? trailStop : na, color=color.blue, linewidth=2, title="Adaptive Trail")
plot(trendScore, title="Trend Score", color=color.aqua)
plot(efficiency, title="Efficiency", color=color.fuchsia)
plot(atrRegime, title="ATR Regime", color=color.yellow)
plot(breakoutStrength, title="Breakout Strength", color=color.lime)
plot(persistRatio, title="Persistence Ratio", color=color.white)