
La stratégie de triangle de retrait supérieur avec confirmation de volume est une méthode de négociation quantitative combinant l’identification de la forme technique, la confirmation du volume des transactions et la gestion dynamique du risque. La stratégie est optimisée pour les graphiques d’une heure et offre deux paramètres d’entrée indépendants, basés sur les principes de triangle de retrait et de confirmation du prix. L’idée centrale de la stratégie est de capturer des opportunités de percée à haute probabilité, tout en gérant efficacement les risques en suivant dynamiquement les arrêts de perte.
La stratégie fonctionne sur la base de deux paramètres d’entrée clés et d’un mécanisme d’exit bien conçu:
Réglage d’entrée 1 - Déclenchement du triangle d’or:
Paramètre d’entrée 2 - Confirmation des prix et des volumes:
Stratégie de sortie - suivi dynamique des arrêts de perte:
Dans la mise en œuvre du code, la stratégie utilise un pivot simplifié pour identifier la forme du triangle et confirmer le mouvement des prix en comparant le prix actuel avec le SMA. Pour la confirmation du volume des transactions, la stratégie vérifie si le volume des transactions est supérieur à sa moyenne mobile et au volume des transactions des cycles précédents. Le stop loss de suivi dynamique est réalisé en mettant en continu à jour le prix le plus élevé atteint dans les transactions et en calculant le niveau de stop loss correspondant.
Mécanisme de double entréePar exemple: en fournissant deux réglages d’entrée indépendants, la stratégie peut s’adapter à différents environnements de marché, augmentant la possibilité de saisir des opportunités de trading favorables. Lorsque le marché est dans une période d’intégration évidente, le réglage 1 peut capturer des percées; le réglage 2 peut jouer un rôle lorsque les modèles de marché sont moins évidents mais présentent de forts signes de cumulation.
Intégration de la gestion des risques: Le mécanisme de suivi dynamique des arrêts de perte intégré s’adapte automatiquement aux fluctuations du marché, permettant une croissance des bénéfices tout en protégeant le capital. En particulier, la fonction de resserrement automatique des arrêts de perte lorsque les bénéfices atteignent une limite prédéfinie, équilibre efficacement la contradiction entre le blocage des bénéfices et la fuite des bénéfices.
Filtrage de fausse percée: La stratégie réduit le risque de fausse rupture en combinant le filtrage SMA et la confirmation de volume de transaction. Les prix doivent non seulement franchir la forme, mais doivent également rester au-dessus du SMA, et un support de volume de transaction significatif est également nécessaire pour la configuration 2, ce qui améliore considérablement la qualité du signal.
Aides visuellesLes stratégies offrent une multitude d’indicateurs visuels, y compris des couleurs de fond pendant le trading, des tableaux de bord en temps réel et divers éléments graphiques, permettant aux traders de surveiller facilement l’état et les signaux de la stratégie.
Optimisation des délais flexibles: Bien que la stratégie soit optimisée pour le graphique horaire, ses paramètres peuvent être ajustés pour s’adapter à différentes périodes, ce qui augmente la portée de la stratégie.
La dépendance aux conditions du marché: Cette stratégie fonctionne au mieux dans les marchés horizontaux à bullish et peut être moins efficace dans les marchés à forte baisse ou à forte volatilité. Dans un environnement de baisse, le risque de fausse rupture augmente et peut entraîner des pertes continues.
Points de glissement et risques d’exécution: Dans les transactions réelles, en particulier dans les marchés à faible liquidité, les points d’entrée et d’arrêt peuvent connaître des points de glissement, affectant la performance globale de la stratégie. Pour atténuer ce risque, il est possible d’envisager d’utiliser des listes de prix limites plutôt que des listes de prix du marché.
Défi d’optimisation des paramètres: la stratégie dépend de plusieurs paramètres (longueur SMA, pourcentage de stop loss, etc.) qui doivent être optimisés en fonction du marché et de la période. Une mauvaise configuration des paramètres peut entraîner une suradaptation ou une mauvaise performance.
Risques liés à la survente: Dans certaines conditions de marché, les stratégies peuvent générer trop de signaux, ce qui entraîne une survente des transactions et une augmentation des coûts de transaction. La mise en œuvre de filtres ou de périodes de refroidissement supplémentaires peut aider à réduire ce risque.
Mise à l’échelle de l’optimisation des pertesBien que le mécanisme de stop-loss dynamique soit un avantage de cette stratégie, un stop-loss trop serré peut entraîner une sortie anticipée d’une transaction rentable, tandis qu’un stop-loss trop large peut entraîner un retournement de bénéfices. Il est nécessaire d’ajuster soigneusement les paramètres de stop-loss en fonction de la volatilité d’un marché particulier.
Ajouter un filtre de tendanceL’intégration d’indicateurs de tendance plus larges (comme les moyennes mobiles à plus long terme ou l’ADX) peut aider la stratégie à négocier uniquement dans la direction favorable du marché. Par exemple, des conditions peuvent être ajoutées, permettant l’entrée de bulls-eye uniquement lorsque le SMA à long terme (comme le cycle 200) est incliné vers le haut.
Optimisation de la logique de confirmation du volume: La confirmation du volume de transactions en cours nécessite un volume de transactions supérieur à celui des 4 cycles précédents, ce qui peut être trop ou pas assez strict, selon les conditions du marché. La réalisation d’une dévaluation du volume de transactions adaptative, qui peut améliorer l’efficacité du paramètre 2 en fonction de la dynamique volatile du marché.
Filtre intégréCertains moments de la journée peuvent être plus appropriés que d’autres. L’ajout d’un filtre temporel pour éviter de négocier pendant les périodes défavorables (comme les périodes de forte volatilité avant l’ouverture ou la fermeture du marché) peut améliorer la performance globale.
La réalisation d’un verrouillage partiel des bénéficesLes stratégies d’exit actuelles sont binaires: détenir tout ou sortir entièrement. Le système d’exit par lots permet de réduire progressivement la taille de la position au fur et à mesure que les bénéfices augmentent et de bloquer une partie des bénéfices tout en conservant un certain potentiel de hausse.
Ajouter une confirmation d’actif: dans certains marchés, la confirmation des actifs concernés peut améliorer la qualité du signal. Par exemple, dans le trading d’actions, la force du secteur ou de l’industrie peut servir de filtre supplémentaire; dans le forex, le comportement des paires de devises concernées peut fournir une confirmation supplémentaire.
Adaptation intégrée à la volatilité du marchéAjuster dynamiquement le niveau de stop en fonction de la volatilité du marché (comme l’ATR ou la volatilité historique) peut permettre à la stratégie de mieux s’adapter aux différentes conditions du marché. Utiliser un stop plus serré dans un environnement à faible volatilité et un stop plus large dans un environnement à forte volatilité.
La stratégie de triangle de retrait de haut niveau offre une approche globale de la négociation combinant l’identification des formes techniques, les principes de dynamique et l’analyse des volumes. En fournissant deux paramètres d’entrée complémentaires, la stratégie conserve sa flexibilité dans différentes conditions de marché, tandis que son mécanisme de suivi dynamique des stop-loss offre une gestion de risque optimisée.
Les principaux avantages de la stratégie résident dans ses critères d’entrée multiples et sa gestion intégrée des risques, ce qui la rend adaptée à de nombreux styles de négociation allant de la bande passante intraday à la bande passante à court terme. Cependant, la dépendance aux conditions du marché et les défis d’optimisation des paramètres sont les principaux risques à surveiller.
En ajoutant des filtres de tendance, en optimisant la logique de confirmation du volume des transactions ou en permettant un ajustement de la volatilité, les traders peuvent améliorer encore la performance de la stratégie. En fin de compte, la stratégie fournit un cadre solide qui peut être personnalisé en fonction des préférences de risque personnelles et des caractéristiques du marché, ce qui en fait un outil précieux pour les traders qui recherchent une approche de trading axée sur la technologie et contrôlée par le risque.
/*backtest
start: 2024-06-03 00:00:00
end: 2025-06-02 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
// This Pine Script® code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © eemani123
//@version=5
strategy("Golden Triangle Strategy (1H, Setup 1 & 2)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// === Inputs ===
smaLength = input.int(34, title="SMA Length (1H Optimized)", minval=1)
volumeSmaLength = input.int(34, title="Volume SMA Length", minval=1)
trailingStopPct = input.float(6.0, title="Initial Trailing Stop Loss (%)", minval=0.1)
tightenPct = input.float(5.0, title="Tightened TSL (%)", minval=0.1)
profitTrigger = input.float(10.0, title="Tighten TSL After Profit (%)", minval=1)
maxLookback = input.int(10, title="Max Lookback Bars for Setup 2", minval=1)
pivotStrength = input.int(2, title="Pivot Strength (Shorter for 1H)", minval=1)
// === SMA Calculations ===
smaPrice = ta.sma(close, smaLength)
smaVolume = ta.sma(volume, volumeSmaLength)
// === Setup 1: Golden Triangle (simplified with pivots) ===
pivotHigh = ta.pivothigh(high, pivotStrength, pivotStrength)
pivotLow = ta.pivotlow(low, pivotStrength, pivotStrength)
var float triangleTop = na
var float triangleBottom = na
if not na(pivotHigh)
triangleTop := pivotHigh
if not na(pivotLow)
triangleBottom := pivotLow
triangleBreakout = ta.crossover(close, triangleTop) and close > smaPrice
enterSetup1 = triangleBreakout
// === Setup 2: Price & Volume Confirmation ===
priceBelowSMA = ta.barssince(close < smaPrice) <= maxLookback
priceConfirm = close > smaPrice and close > close[1]
volumeConfirm = volume > smaVolume and volume > volume[1] and volume > volume[2] and volume > volume[3] and volume > volume[4]
enterSetup2 = priceConfirm and priceBelowSMA and volumeConfirm
// === Entry & TSL Tracking ===
var bool inTradeSetup1 = false
var bool inTradeSetup2 = false
var float entryPrice1 = na
var float entryPrice2 = na
var float highestSinceEntry1 = na
var float highestSinceEntry2 = na
var float trailingStop1 = na
var float trailingStop2 = na
// === Entry Conditions ===
if enterSetup1 and not inTradeSetup1
strategy.entry("Buy Setup 1", strategy.long)
entryPrice1 := close
highestSinceEntry1 := close
inTradeSetup1 := true
if enterSetup2 and not inTradeSetup2
strategy.entry("Buy Setup 2", strategy.long)
entryPrice2 := close
highestSinceEntry2 := close
inTradeSetup2 := true
// === Update Trailing Stops with Tightening ===
if inTradeSetup1
highestSinceEntry1 := math.max(highestSinceEntry1, high)
profit1 = (highestSinceEntry1 - entryPrice1) / entryPrice1 * 100
activePct1 = profit1 >= profitTrigger ? tightenPct : trailingStopPct
trailingStop1 := highestSinceEntry1 * (1 - activePct1 / 100)
if inTradeSetup2
highestSinceEntry2 := math.max(highestSinceEntry2, high)
profit2 = (highestSinceEntry2 - entryPrice2) / entryPrice2 * 100
activePct2 = profit2 >= profitTrigger ? tightenPct : trailingStopPct
trailingStop2 := highestSinceEntry2 * (1 - activePct2 / 100)
// === Exit Conditions ===
if inTradeSetup1 and close < trailingStop1
strategy.close("Buy Setup 1", comment="TSL Hit - Setup 1")
inTradeSetup1 := false
entryPrice1 := na
highestSinceEntry1 := na
trailingStop1 := na
if inTradeSetup2 and close < trailingStop2
strategy.close("Buy Setup 2", comment="TSL Hit - Setup 2")
inTradeSetup2 := false
entryPrice2 := na
highestSinceEntry2 := na
trailingStop2 := na
// === Plotting ===
plot(smaPrice, color=color.orange, title="SMA")
//plot(triangleTop, title="Triangle Top", color=color.red, style=plot.style_linebr, linewidth=2)
//plot(triangleBottom, title="Triangle Bottom", color=color.green, style=plot.style_linebr, linewidth=2)
plot(inTradeSetup1 ? trailingStop1 : na, color=color.red, title="Trailing Stop - Setup 1", linewidth=2,style=plot.style_linebr)
plot(inTradeSetup2 ? trailingStop2 : na, color=color.blue, title="Trailing Stop - Setup 2", linewidth=2,style=plot.style_linebr)
plotshape(enterSetup1, title="Triangle Breakout Entry", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(enterSetup2, title="Volume Confirmed Entry", location=location.belowbar, color=color.blue, style=shape.circle, size=size.small)
// === Alerts ===
alertcondition(enterSetup1, title="Setup 1 Buy", message="Golden Triangle Breakout (Setup 1) - BUY")
alertcondition(enterSetup2, title="Setup 2 Buy", message="Volume + Price Confirmation (Setup 2) - BUY")
// === Background highlight during trades ===
bgcolor(inTradeSetup1 or inTradeSetup2 ? color.new(color.green, 85) : na, title="In-Trade Highlight")
// === Weekly Fibonacci Pivot Levels (R3 / S3) ===
weeklyHigh = request.security(syminfo.tickerid, "W", high)
weeklyLow = request.security(syminfo.tickerid, "W", low)
weeklyClose = request.security(syminfo.tickerid, "W", close)
weeklyPivot = (weeklyHigh + weeklyLow + weeklyClose) / 3
weeklyRange = weeklyHigh - weeklyLow
fibR3 = weeklyPivot + 1.000 * weeklyRange
fibS3 = weeklyPivot - 1.000 * weeklyRange
// === Plot R3 and S3 ===
plot(fibR3, title="Weekly Fib R3", color=color.fuchsia, linewidth=2, style=plot.style_circles)
plot(fibS3, title="Weekly Fib S3", color=color.teal, linewidth=2, style=plot.style_circles)
// === Weekly Fibonacci Pivot Levels (R3 / S3) ===