
La stratégie est basée sur un système de négociation adaptatif basé sur le support et la résistance, qui capture les opportunités de profit potentielles liées aux ruptures de prix en identifiant de manière dynamique les points de support et de résistance clés du marché. Le cœur de la stratégie consiste à construire un canal dynamique capable de s’adapter automatiquement aux conditions du marché, de suivre en temps réel les mouvements de prix et d’émettre des signaux de négociation lors de ruptures dans les zones clés.
La stratégie fournit une richesse de paramètres personnalisables, y compris le cycle de point de basculement, le choix de la source de données, la limite de la largeur du canal, les exigences minimales d’intensité du point de basculement et le nombre d’affichages de zones de soutien / résistance, etc., permettant aux traders de s’adapter de manière flexible en fonction des différentes conditions du marché et des préférences personnelles. En outre, la stratégie prend en charge l’intégration des moyennes mobiles, offrant une perspective d’analyse technique supplémentaire pour les décisions de négociation.
Sur la logique de trading, le système déclenche un signal d’achat lorsque le prix monte au-dessus de la zone de résistance; le système déclenche un signal de vente lorsque le prix baisse au-dessus de la zone de support. Afin de se rapprocher de l’environnement de trading réel, la stratégie intègre également un coût de commission de 0,1% pour le calcul.
Le principe de base de la stratégie de la voie maîtresse de la percée dynamique est basé sur l’identification et la percée des points de support et de résistance dans la structure du marché. Sa mise en œuvre technique comprend principalement les étapes clés suivantes:
Identifier les points de basculementUne stratégie utilisant le script Pine:pivothighetpivotlowLa fonction détecte les hauts et les bas du graphique des prix, qui sont considérés comme des points de soutien et de résistance potentiels. L’utilisateur peut choisir d’utiliser une source de données “High/Low” ou “Close/Open” pour déterminer ces points de basculement.
Calcul des canaux dynamiques: le système construit un canal de résistance de support dynamique en fonction des points de basculement identifiés.my_channelFonction, stratégie de calcul de la zone autour de chaque point de virage et de déterminer le plafond et le plancher de la passerelle en fonction de son intensité. La largeur de la passerelle est affectée parmymaxwidthLimite des paramètres, calculée sur la base de la fourchette de prix des 300 derniers graphiques.
Évaluation de l’intensité régionale: la stratégie prend en compte non seulement les points de basculement eux-mêmes, mais évalue également la force de chaque zone de support/résistance. Le score de force est basé sur deux facteurs: le nombre de points de basculement dans la zone (une intensité initiale de 20 points pour chaque point de basculement) et la fréquence à laquelle le prix agit dans la zone (une valeur de 1 point est ajoutée à chaque fois qu’il touche).
Sélection et tri des régions: le filtrage du système a dépassé le seuil fixé par l’utilisateurmystrength * 20Les zones de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zone de la zonemymaxzonesLa zone de résistance de soutien de la résistance de la résistance de la résistance de la résistance.
Détection de ruptureLa stratégie consiste à détecter une rupture en comparant le prix de clôture actuel à la position de la clôture précédente par rapport à la variation de la zone de support/résistance. Le système identifie une rupture comme efficace lorsque le prix se déplace de l’intérieur de la zone à l’extérieur de la zone et traverse la limite supérieure de la zone (la rupture de la résistance) ou la limite inférieure (la rupture du support).
Signal de transaction généré: déclencher un signal de rupture de résistance (“ResBreak”) et un signal de rupture de support (“SupBreak”)
Une grande capacité d’adaptationLe plus grand avantage d’une stratégie dynamique de rupture de la voie maîtresse réside dans son adaptabilité. En identifiant et en mettant à jour dynamiquement les zones de résistance de soutien, la stratégie peut s’adapter à différents environnements de marché et modèles de fluctuation des prix, évitant ainsi les problèmes de retard que peuvent présenter les lignes de résistance de soutien statiques.
Évaluation de l’intensité multidimensionnelleStratégie: évaluation multidimensionnelle de l’intensité des zones de résistance de soutien en tenant compte du nombre de points de basculement et de la fréquence des mouvements de prix. Cette méthode permet d’identifier plus précisément les zones critiques qui sont vraiment importantes sur le marché et de réduire la possibilité de fausses percées.
Une grande flexibilité de personnalisation: La stratégie offre de nombreuses options de paramètres, y compris le cycle de point de basculement, la limite d’intensité, la largeur de la voie, etc., permettant aux traders de s’adapter en fonction des différentes variétés de transactions, des périodes de temps et des préférences de risque personnelles.
Une bonne visualisation: La stratégie affiche les zones de résistance et de rupture de support de manière intuitive sur le graphique, différentes couleurs représentant différents types de zones ((résistance, support ou zones intermédiaires)) pour aider les traders à mieux comprendre la structure du marché et les opportunités de trading potentielles.
Moyenne mobile intégrée: la stratégie permet d’ajouter des moyennes mobiles de deux paramètres différents (SMA ou EMA en option), offrant une perspective d’analyse de tendance supplémentaire pour les décisions de négociation, particulièrement adaptée aux utilisateurs habitués à négocier en combinaison avec plusieurs indicateurs techniques.
Le coût de la transactionLa stratégie implique le calcul de la commission de négociation (0,1%), ce qui rend les résultats des retours plus proches de l’environnement de négociation réel et aide les traders à gérer leurs attentes de manière plus réaliste.
Comment faire ?Il est possible de déclencher un signal de transaction en ajoutant un mécanisme de confirmation, par exemple en demandant que le prix reste un certain temps ou une certaine quantité après la rupture, ou en combinant des indicateurs de volume de transaction pour la confirmation de rupture.
Comment faire ?Il est recommandé d’optimiser et de retester les paramètres de manière adéquate avant de négocier en direct, afin de trouver la combinaison optimale de paramètres pour une variété de transactions et une période de temps spécifiques.
Comment faire ?: Un mécanisme d’identification de l’environnement du marché peut être ajouté pour ajuster automatiquement les paramètres de la stratégie ou suspendre les transactions dans différentes conditions de marché.
Comment faire ?Il est recommandé d’ajouter des stratégies de stop-loss, telles que la mise en place d’une position de stop-loss basée sur une zone de résistance au support, ou la protection par un mécanisme de stop-loss mobile.
Comment faire ?Considérer l’adaptation dynamique de la portée des données historiques ou l’ajout d’autres mécanismes de détection des changements de structure du marché pour améliorer l’adaptabilité.
Analyse intégrée du traficLa stratégie actuelle consiste à prendre des décisions uniquement sur la base des données de prix et à proposer l’intégration de l’analyse de la transaction pour renforcer la fiabilité des signaux de rupture. Le volume de transactions augmente généralement de manière significative lors d’une véritable rupture, une caractéristique qui peut aider à filtrer de nombreux faux signaux de rupture. La mise en œuvre concrète peut être réalisée en ajoutant des conditions de dépréciation de la transaction, qui déclenchent un signal de transaction uniquement lorsque la rupture est accompagnée d’une quantité suffisante de transactions.
Mise en place d’un mécanisme d’arrêt dynamique: Ajouter un système de stop intelligent à la stratégie, par exemple en définissant une distance de stop basée sur l’ATR ou en utilisant des zones de résistance de support adjacentes comme point de référence de stop. Cela permet non seulement de contrôler le risque d’une seule transaction, mais également d’ajuster automatiquement l’ouverture du risque en fonction de la volatilité du marché.
Ajouter un filtre de tendance: Introduction d’un mécanisme de reconnaissance de tendances permettant des transactions de rupture dans le sens d’une tendance forte, tout en étant plus prudent avec les signaux de rupture dans le sens inverse. Cela peut être réalisé en analysant la pente de la moyenne mobile à long terme ou en utilisant des indicateurs de force de tendance tels que l’ADX (indice de direction moyenne).
Ajouter un filtre temporel: Les percées sur certaines périodes (par exemple, avant l’ouverture ou la fermeture du marché) peuvent être plus peu fiables. L’ajout d’une fonction de filtrage temporel, permettant d’éviter les transactions sur des périodes statistiquement défavorables, peut améliorer le taux de victoire global.
Algorithme d’optimisation de la résistance régionale: Les algorithmes actuels d’évaluation de la force peuvent être optimisés davantage, par exemple en tenant compte de l’âge des points de basculement (les points de basculement plus récents peuvent être plus pertinents) ou en introduisant des facteurs tels que le nombre de répétitions de test de zone (les zones testées plusieurs fois mais non percées peuvent être plus fortes).
Adhésion à la logique de gestion de positionModifier dynamiquement la taille de la position en fonction de l’intensité régionale, de la volatilité du marché ou d’autres facteurs de risque, augmenter la position en cas de confiance élevée et réduire la marge en cas de risque élevé.
Implémentation de paramètres adaptatifs: la conception de paramètres clés (comme le cycle des points de basculement, la largeur des canaux, etc.) pour qu’ils s’adaptent et s’adaptent automatiquement en fonction de la volatilité du marché ou d’autres conditions, réduisant ainsi la subjectivité du choix des paramètres par l’homme.
La stratégie Dynamic Breakthrough Master Channel est un système de négociation technologiquement avancé et hautement flexible, dont le principal avantage réside dans la capacité d’identifier et d’évaluer dynamiquement les zones de résistance de soutien clés du marché, et de capturer les opportunités de négociation potentielles lors de la rupture de ces zones. Grâce à un algorithme de reconnaissance de point de basculement soigneusement conçu et à un mécanisme d’évaluation de la force de la zone, la stratégie est capable de s’adapter à différents environnements de marché et de fournir un signal d’entrée relativement fiable.
La personnalisabilité de la stratégie est une autre caractéristique importante, avec de nombreuses options de paramètres qui permettent aux traders de s’adapter en fonction de leurs préférences personnelles et des caractéristiques de la variété de transactions. De plus, la représentation visuelle de la stratégie est très intuitive, et un marquage clair des zones de résistance et des points de rupture aide les traders à mieux comprendre la structure du marché et la logique des transactions.
Cependant, la stratégie présente également des limites, telles que le risque de fausse percée et le manque de mécanisme de stop-loss intégré. Pour améliorer encore la performance de la stratégie, il est recommandé d’envisager des améliorations telles que l’intégration de l’analyse du trafic, l’ajout d’un système de stop-loss intelligent, l’introduction de filtres de tendance et l’optimisation des algorithmes d’intensité régionale.
Dans la pratique, le trader doit se familiariser avec les paramètres de la stratégie et les optimiser, en combinant sa capacité à supporter le risque et son expérience du marché, en effectuant un retour d’expérience adéquat et en simulant les transactions, afin d’éviter de suivre aveuglément les signaux de trading. En même temps, la stratégie peut être utilisée comme une partie intégrante du système de trading, combinée à d’autres outils d’analyse et règles de gestion des risques.
/*backtest
start: 2024-09-19 00:00:00
end: 2025-03-01 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/
// © tradingbauhaus
//@version=6
strategy("Dynamic Breakout Master by tradingbauhaus ", overlay=true, max_bars_back=501, commission_type=strategy.commission.percent, commission_value=0.1)
// My Custom Inputs
myperiod = input.int(10, "Pivot Period", minval=4, maxval=30, group="Settings", tooltip="Bars on each side for pivots")
mysource = input.string("High/Low", "Data Source", options=["High/Low", "Close/Open"], group="Settings", tooltip="Where I grab pivots from")
mychannelwidth = input.int(5, "Max Channel Width %", minval=1, maxval=8, group="Settings", tooltip="Percentage based on 300 bars")
mystrength = input.int(1, "Min Strength", minval=1, group="Settings", tooltip="Min pivots per channel")
mymaxzones = input.int(6, "Max S/R Zones", minval=1, maxval=10, group="Settings", tooltip="Max S/R zones to show") - 1
mylookback = input.int(290, "Lookback Period", minval=100, maxval=400, group="Settings", tooltip="Bars back to check pivots")
myrescolor = input.color(color.new(color.red, 75), "Resistance Tone", group="Colors")
mysupcolor = input.color(color.new(color.blue, 75), "Support Tone", group="Colors")
myincolor = input.color(color.new(color.gray, 75), "In-Channel Tone", group="Colors")
myshowpivots = input.bool(false, "Show Pivots", group="Extras")
myshowbreaks = input.bool(false, "Show Breaks", group="Extras")
myma1_on = input.bool(false, "MA1 On", group="Extras")
myma1_len = input.int(50, "MA1 Length", minval=1, group="Extras")
myma1_type = input.string("SMA", "MA1 Type", options=["SMA", "EMA"], group="Extras")
myma2_on = input.bool(false, "MA2 On", group="Extras")
myma2_len = input.int(200, "MA2 Length", minval=1, group="Extras")
myma2_type = input.string("SMA", "MA2 Type", options=["SMA", "EMA"], group="Extras")
// Define commission as a constant (for display purposes, since strategy() already uses it)
mycommission = 0.1 // Matches commission_value in strategy(); adjust here if needed
// Calculate my moving averages
myma1 = myma1_on ? myma1_type == "SMA" ? ta.sma(close, myma1_len) : ta.ema(close, myma1_len) : na
myma2 = myma2_on ? myma2_type == "SMA" ? ta.sma(close, myma2_len) : ta.ema(close, myma2_len) : na
plot(myma1, color=not na(myma1) ? color.blue : na)
plot(myma2, color=not na(myma2) ? color.red : na)
// My custom data sources
float myhigh = mysource == "High/Low" ? high : math.max(close, open)
float mylow = mysource == "High/Low" ? low : math.min(close, open)
float mypeak = ta.pivothigh(myhigh, myperiod, myperiod)
float myvalley = ta.pivotlow(mylow, myperiod, myperiod)
// Draw pivots if I want
plotshape(not na(mypeak) and myshowpivots, text="P", style=shape.labeldown, color=na, textcolor=color.new(color.red, 0), location=location.abovebar, offset=-myperiod)
plotshape(not na(myvalley) and myshowpivots, text="V", style=shape.labelup, color=na, textcolor=color.new(color.blue, 0), location=location.belowbar, offset=-myperiod)
// Calculate max channel width
mytop = ta.highest(300)
mybottom = ta.lowest(300)
mymaxwidth = (mytop - mybottom) * mychannelwidth / 100
// Store my pivots with flair
var float[] myvalues = array.new_float(0)
var float[] mypositions = array.new_float(0)
if not na(mypeak) or not na(myvalley)
array.unshift(myvalues, not na(mypeak) ? mypeak : myvalley)
array.unshift(mypositions, bar_index)
for x = array.size(myvalues) - 1 to 0
if bar_index - array.get(mypositions, x) > mylookback
array.pop(myvalues)
array.pop(mypositions)
continue
break
// My channel-making function
my_channel(ind) =>
float base = array.get(myvalues, ind)
float ceiling = base
float floor = base
int strength = 0
for y = 0 to array.size(myvalues) - 1
float level = array.get(myvalues, y)
float gap = level <= ceiling ? ceiling - level : level - floor
if gap <= mymaxwidth
if level <= ceiling
floor := math.min(floor, level)
else
ceiling := math.max(ceiling, level)
strength += 20
[ceiling, floor, strength]
// My S/R zones and swap function
var float[] sr_zones = array.new_float(20, 0)
myswap(x, y) =>
temp = array.get(sr_zones, y * 2)
array.set(sr_zones, y * 2, array.get(sr_zones, x * 2))
array.set(sr_zones, x * 2, temp)
temp := array.get(sr_zones, y * 2 + 1)
array.set(sr_zones, y * 2 + 1, array.get(sr_zones, x * 2 + 1))
array.set(sr_zones, x * 2 + 1, temp)
// Main logic with my twist
if not na(mypeak) or not na(myvalley)
float[] levels = array.new_float(0)
float[] power = array.new_float(10, 0)
for x = 0 to array.size(myvalues) - 1
[c, f, s] = my_channel(x)
array.push(levels, s)
array.push(levels, c)
array.push(levels, f)
for x = 0 to array.size(myvalues) - 1
highlvl = array.get(levels, x * 3 + 1)
lowlvl = array.get(levels, x * 3 + 2)
boost = 0
for y = 0 to mylookback
if high[y] <= highlvl and high[y] >= lowlvl or low[y] <= highlvl and low[y] >= lowlvl
boost += 1
array.set(levels, x * 3, array.get(levels, x * 3) + boost)
array.fill(sr_zones, 0)
counter = 0
for x = 0 to array.size(myvalues) - 1
maxpower = -1.
maxspot = -1
for y = 0 to array.size(myvalues) - 1
if array.get(levels, y * 3) > maxpower and array.get(levels, y * 3) >= mystrength * 20
maxpower := array.get(levels, y * 3)
maxspot := y
if maxspot >= 0
top = array.get(levels, maxspot * 3 + 1)
bottom = array.get(levels, maxspot * 3 + 2)
array.set(sr_zones, counter * 2, top)
array.set(sr_zones, counter * 2 + 1, bottom)
array.set(power, counter, array.get(levels, maxspot * 3))
for y = 0 to array.size(myvalues) - 1
if array.get(levels, y * 3 + 1) <= top and array.get(levels, y * 3 + 1) >= bottom or array.get(levels, y * 3 + 2) <= top and array.get(levels, y * 3 + 2) >= bottom
array.set(levels, y * 3, -1)
counter += 1
if counter >= 10
break
for x = 0 to 8
for y = x + 1 to 9
if array.get(power, y) > array.get(power, x)
temp = array.get(power, y)
array.set(power, y, array.get(power, x))
myswap(x, y)
// My level and color functions
mylevel(ind) =>
float result = na
if ind < array.size(sr_zones) and array.get(sr_zones, ind) != 0
result := array.get(sr_zones, ind)
result
mycolor(ind) =>
color shade = na
if ind < array.size(sr_zones) and array.get(sr_zones, ind) != 0
shade := array.get(sr_zones, ind) > close and array.get(sr_zones, ind + 1) > close ? myrescolor : array.get(sr_zones, ind) < close and array.get(sr_zones, ind + 1) < close ? mysupcolor : myincolor
shade
// Detect breaks
resistancebroken = false
supportbroken = false
outofzone = true
for x = 0 to math.min(9, mymaxzones)
if close <= array.get(sr_zones, x * 2) and close >= array.get(sr_zones, x * 2 + 1)
outofzone := false
if outofzone
for x = 0 to math.min(9, mymaxzones)
if close[1] <= array.get(sr_zones, x * 2) and close > array.get(sr_zones, x * 2)
resistancebroken := true
if close[1] >= array.get(sr_zones, x * 2 + 1) and close < array.get(sr_zones, x * 2 + 1)
supportbroken := true
// Alerts and shapes
alertcondition(resistancebroken, title="ResBreak", message="Resistance shattered!")
alertcondition(supportbroken, title="SupBreak", message="Support cracked!")
plotshape(myshowbreaks and resistancebroken, style=shape.triangleup, location=location.belowbar, color=color.new(color.blue, 0), size=size.tiny)
plotshape(myshowbreaks and supportbroken, style=shape.triangledown, location=location.abovebar, color=color.new(color.red, 0), size=size.tiny)
// Strategy with commissions factored in
if resistancebroken
strategy.entry("ResBreak", strategy.long)
if supportbroken
strategy.entry("SupBreak", strategy.short)