
La stratégie de trading quantitative basée sur une rupture de la fourchette de prix basée sur une rupture de la fourchette de prix basée sur une rupture de la fourchette de prix basée sur une rupture de la fourchette de prix basée sur une rupture de la fourchette de prix basée sur une rupture de la fourchette de prix basée sur une rupture de la fourchette de prix basée sur une rupture de la fourchette de prix basée sur une rupture de la fourchette de prix basée sur une rupture de la fourchette de prix basée sur une rupture de la fourchette de prix basée sur une rupture de la fourchette de prix basée sur une rupture de la fourchette de prix basée sur une rupture de la fourchette de prix basée sur une rupture de la fourchette de prix basée sur une rupture de la fourchette de prix basée sur une rupture de la fourchette de prix basée sur une rupture de la fourchette de prix basée sur une rupture de la fourchette de prix basée
Le principe de base de la stratégie est d’utiliser des moyennes mobiles pondérées sur des périodes de temps élevées pour construire une zone d’activité des prix. Les étapes de mise en œuvre sont les suivantes:
Les stratégies utilisent des éléments visuels tels que les changements de couleur de fond, les graphiques personnalisés et les marqueurs d’entrée/sortie pour permettre aux traders d’identifier intuitivement les intervalles de négociation et l’état actuel du marché. En outre, les stratégies affichent les changements de pourcentage des positions actuelles et appliquent un facteur de multiplication (par défaut 20) pour mettre en évidence les changements de prix.
Une analyse plus approfondie du code de la stratégie montre les avantages suivants:
Filtrage de la hauteurEn utilisant des moyennes mobiles pondérées sur des périodes plus longues, la stratégie est capable de filtrer efficacement le bruit du marché à court terme, de capturer des mouvements de prix plus significatifs et de réduire les faux signaux.
Zone de négociation dynamiqueLa stratégie consiste à construire dynamiquement des zones de négociation basées sur les moyennes et les pourcentages de prix, adaptées aux différentes conditions et aux fluctuations du marché, évitant ainsi les contraintes de points de support/résistance fixes.
Des règles claires d’entrée et de sortie: la stratégie fournit des signaux d’entrée clairs ((Break Up/Break Down) et des règles d’exit ((Stop and Loss en lots), éliminant la subjectivité dans les décisions de négociation.
Intégration de la gestion des risquesLe système intégré de stop-loss et de blocage par lots aide à protéger les capitaux et à bloquer les bénéfices, et constitue un système de négociation complet.
Les commentaires visuelsLa stratégie offre une richesse d’éléments visuels, y compris les couleurs de fond des zones de négociation, les balises de changement de pourcentage et les marqueurs d’entrée/sortie, pour aider les traders à évaluer rapidement la situation du marché.
Réglages de paramètres flexibles: L’utilisateur peut ajuster plusieurs paramètres en fonction de ses préférences personnelles et des différentes conditions du marché, y compris les périodes de temps, les cycles de moyenne mobile, les pourcentages de taux, les niveaux d’arrêt/arrêt et les éléments visuels.
Coordination dans plusieurs cadres horairesLa stratégie combine une qualité de signal élevée dans le cadre du temps et une précision d’exécution dans le cadre du temps actuel, permettant une coordination multi-cadres.
Bien que cette stratégie présente de nombreux avantages, elle comporte les risques suivants:
Faux signaux détectésPour atténuer ce risque, il est possible d’envisager d’ajouter un mécanisme de confirmation, par exemple en demandant que le prix reste un certain temps après la rupture ou en le confirmant en combinaison avec d’autres indicateurs.
Ne convient pas aux marchés très volatils: Dans un marché très volatil, les prix peuvent fréquemment franchir les frontières de la zone, ce qui entraîne des transactions excessives et des pertes potentielles. Dans ce cas, il est possible d’augmenter le ratio de la zone ou de passer à une période plus élevée.
Le pourcentage fixe de stop-loss/stop-stop n’est pas suffisamment flexible: la volatilité du marché change avec le temps et un pourcentage fixe de stop/stop peut ne pas être toujours optimal. Vous pouvez envisager d’ajuster dynamiquement le niveau de stop/stop en fonction d’indicateurs de volatilité (comme l’ATR).
Paramètre SensibilitéLes performances de la stratégie peuvent être très sensibles aux paramètres tels que les cycles WMA, les intervalles et les pourcentages stop/loss. Il est nécessaire d’effectuer un retour d’historique adéquat et d’optimiser les paramètres.
Risques de sur-optimisationIl est recommandé d’effectuer des retours sur plusieurs marchés et périodes de temps, et de maintenir les paramètres relativement stables.
Adaptation aux changements de tendance du marché: la stratégie n’ajuste pas sa fourchette aux nouvelles tendances du marché après une rupture de fourchette, ce qui peut entraîner des signaux erronés dans les marchés à forte tendance. Vous pouvez envisager d’ajouter un filtre de tendance ou une fourchette de réglage dynamique.
Cette stratégie peut être optimisée dans les directions suivantes, en fonction d’une analyse approfondie du code:
Ajout d’un mécanisme de confirmation de rupturePour réduire les fausses ruptures, il est possible d’ajouter des conditions de confirmation supplémentaires, telles que la demande de prix de clôture après la rupture, la confirmation de la production ou la confirmation croisée à l’aide d’autres indicateurs techniques (tels que le RSI, le MACD).
Paramètres d’arrêt dynamique: le remplacement d’un stop-loss à pourcentage fixe par un stop-loss dynamique basé sur la volatilité du marché, par exemple en utilisant des multiples de l’ATR pour définir les niveaux de stop-loss, afin de mieux adapter la stratégie aux différentes conditions du marché.
Ajouter un filtre de tendance: Ajout de composants de reconnaissance de tendance, tels que les moyennes mobiles à long terme ou l’indicateur ADX, afin d’ajuster le comportement de négociation dans un marché en forte tendance, par exemple en faisant plus dans une tendance à la hausse et en faisant moins dans une tendance à la baisse.
Optimiser le temps d’entrée: La stratégie actuelle consiste à entrer immédiatement lorsque le prix vient de franchir la frontière de la zone, et peut envisager d’attendre un rappel ou une confirmation de forme spécifique pour améliorer la qualité de l’entrée.
Ajout d’un module de gestion de fonds: la réalisation de calculs plus complexes de la taille des positions, en ajustant dynamiquement la taille des positions en fonction de la taille du compte, de la volatilité du marché et du risque de transaction actuel, plutôt que d’utiliser des positions fixes.
Ajouter un filtre sur l’état du marché: identifier les états du marché (tels que la tendance, les fluctuations intermédiaires ou la forte volatilité) et ajuster les paramètres de la stratégie ou suspendre la négociation en fonction des différentes états du marché.
Implémentation de paramètres adaptatifs: permet aux paramètres clés tels que le ratio de portée, les cycles WMA, etc. d’être automatiquement ajustés en fonction de la volatilité historique ou d’autres caractéristiques du marché, améliorant ainsi l’adaptabilité de la stratégie.
Intégration de signaux multi-cadres temporels: Non seulement l’utilisation de WMA à haute température peut être utilisée pour construire des intervalles, mais l’analyse du comportement des prix et des indicateurs sur plusieurs périodes peut également être utilisée pour une analyse plus complète du marché et des décisions de négociation.
La stratégie de négociation de rupture de la quantité de la fourchette de temps élevée est un système de négociation bien structuré, qui est construit pour capturer les opportunités de rupture de prix en combinant les moyennes mobiles pondérées et les intervalles dynamiques de la fourchette de temps élevée. L’avantage de la stratégie réside dans sa capacité de filtrage de la fourchette de temps élevée, ses règles de négociation claires, son mécanisme de gestion des risques intégré et sa richesse de rétroaction visuelle. Cependant, elle est également confrontée à des défis tels que la rupture de faux signaux, la sensibilité des paramètres et l’adaptabilité du marché.
La stabilité et la rentabilité de la stratégie peuvent être encore renforcées par l’optimisation de la direction de mise en œuvre des recommandations, telles que l’ajout de mécanismes de confirmation de rupture, de paramètres de stop-loss dynamiques, de filtrage de tendance et d’adaptation. Surtout, le trader doit avoir une compréhension complète des principes de la stratégie et un retour sur l’histoire suffisant pour ajuster les paramètres en fonction des préférences de risque spécifiques du marché et des individus afin de tirer pleinement parti du potentiel de la stratégie.
Cette stratégie basée sur la rupture de zone est idéale pour les traders à moyen et long terme, en particulier ceux qui cherchent à capturer des ruptures de prix importantes tout en maintenant la maîtrise du risque. Avec une optimisation et une adaptation continues, cette stratégie peut devenir une arme puissante dans la boîte à outils du trader.
/*backtest
start: 2025-01-01 00:00:00
end: 2025-05-25 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy('ZONE FLOW', overlay=true)
// Input parameters
src = close
src1 = open
src2 = low
src3 = high
Min = input(60, title='Minimum Period')
len = timeframe.isintraday and timeframe.multiplier >= 1 ? Min / timeframe.multiplier * 7 : timeframe.isintraday and timeframe.multiplier < 60 ? 60 / timeframe.multiplier * 24 * 7 : 7
c1 = ta.wma(src, len)
o1 = ta.wma(src1, len)
l1 = ta.wma(src2, len)
h1 = ta.wma(src3, len)
HTF = input.timeframe('M', title='Higher Time Frame')
ti = ta.change(time(HTF)) != 0
c = fixnan(ti ? c1 : na)
o = fixnan(ti ? o1 : na)
h = fixnan(ti ? h1 : na)
l = fixnan(ti ? l1 : na)
// Calculating mid-point
m = (h + l) / 2
// Calculating ratio lines
ratio = input.float(0.1, title='% ratio', minval=0.001, maxval=10)
r1 = m * ratio
u = m + r1
d = m - r1
// Take profit settings
takeProfitPercentage1 = input.float(10.0, title='Take Profit 1 (%)', minval=0.1, maxval=100.0) / 100
takeProfitQuantity1 = input.float(50.0, title='Take Profit 1 Quantity (%)', minval=0.1, maxval=100.0) / 100
takeProfitPercentage2 = input.float(20.0, title='Take Profit 2 (%)', minval=0.1, maxval=100.0) / 100
takeProfitQuantity2 = input.float(50.0, title='Take Profit 2 Quantity (%)', minval=0.1, maxval=100.0) / 100
// Stop loss settings
stopLossPercentage = input.float(5.0, title='Stop Loss (%)', minval=0.1, maxval=100.0) / 100
// Number of bars to extend lines
extensionBars = input.int(5, title='Number of Bars to Extend Lines', minval=1)
// Number of bars to offset the percentage label
percentOffsetBars = input.int(25, title='Number of Bars to Offset Percentage Label', minval=1)
// Input for multiplying the percentage change
multiplierFactor = input.int(20, title='Multiplier for Percentage Change', minval=1)
// Input for background colors
bgColor1 = input(color.new(color.blue, 90), title='Background Color 1')
bgColor2 = input(color.new(color.orange, 90), title='Background Color 2')
// Plot high, low, and ratio lines
ppo = plot(u, color=color.new(color.blue, 0), title='Upper Line (Resistance)', style=plot.style_stepline)
ppc = plot(d, color=color.new(color.orange, 0), title='Lower Line (Support)', style=plot.style_stepline)
plot(u, color=color.new(color.blue, 0), title='Upper Line (Resistance)', style=plot.style_circles, linewidth=2)
plot(d, color=color.new(color.orange, 0), title='Lower Line (Support)', style=plot.style_circles, linewidth=2)
// Fill the background between ratio lines with two different colors
fill(ppo, ppc, color=bgColor1)
// Calculate mid-point for background color switching
midPoint = (u + d) / 2
bgColorSwitch = close >= midPoint ? bgColor1 : bgColor2
fill(ppo, ppc, color=bgColorSwitch, transp=90)
// Initialize variables for lines and labels
var line tp1Line = na
var line tp2Line = na
var line stopLossLine = na
var line entryLine = na
var label tp1Label = na
var label tp2Label = na
var label stopLossLabel = na
var label entryLabel = na
var label percentLabel = na
// Variable to store the entry bar index
var int entryBarIndexLong = na
var int entryBarIndexShort = na
// Function to delete old labels and lines
deleteOldLinesAndLabels() =>
if not na(tp1Line)
line.delete(tp1Line)
if not na(tp2Line)
line.delete(tp2Line)
if not na(stopLossLine)
line.delete(stopLossLine)
if not na(entryLine)
line.delete(entryLine)
if not na(tp1Label)
label.delete(tp1Label)
if not na(tp2Label)
label.delete(tp2Label)
if not na(stopLossLabel)
label.delete(stopLossLabel)
if not na(entryLabel)
label.delete(entryLabel)
if not na(percentLabel)
label.delete(percentLabel)
// Strategy logic
longCondition = ta.crossover(close, u)
shortCondition = ta.crossunder(close, d)
if longCondition
strategy.entry('Long', strategy.long)
entryBarIndexLong := bar_index
entryBarIndexLong
if shortCondition
strategy.entry('Short', strategy.short)
entryBarIndexShort := bar_index
entryBarIndexShort
// Calculate take profit and stop loss levels for long positions
if strategy.position_size > 0 // Check if there's an open long position
takeProfitLevelLong1 = strategy.position_avg_price * (1 + takeProfitPercentage1)
takeProfitLevelLong2 = strategy.position_avg_price * (1 + takeProfitPercentage2)
stopLossLevelLong = strategy.position_avg_price * (1 - stopLossPercentage)
entryPrice = strategy.position_avg_price
// Delete existing lines and labels if they exist
deleteOldLinesAndLabels()
// Exit a portion of the position at each take profit level
strategy.exit('TP1', 'Long', limit=takeProfitLevelLong1, qty=strategy.position_size * takeProfitQuantity1)
strategy.exit('TP2', 'Long', limit=takeProfitLevelLong2, qty=strategy.position_size * takeProfitQuantity2)
strategy.exit('Stop Loss', 'Long', stop=stopLossLevelLong)
// Display percentage change from entry price
percentChange = (close - strategy.position_avg_price) / strategy.position_avg_price * 100
percentMultiplied = percentChange * multiplierFactor
percentColor = percentChange >= 0 ? color.green : color.red
// Update label position to follow price line with larger text size
percentLabel := label.new(x=bar_index + percentOffsetBars, y=close, text=str.tostring(percentMultiplied, format.percent) + '%', color=percentColor, textcolor=color.white, size=size.large, style=label.style_label_down)
percentLabel
if strategy.position_size < 0 // Check if there's an open short position
takeProfitLevelShort1 = strategy.position_avg_price * (1 - takeProfitPercentage1)
takeProfitLevelShort2 = strategy.position_avg_price * (1 - takeProfitPercentage2)
stopLossLevelShort = strategy.position_avg_price * (1 + stopLossPercentage)
entryPrice = strategy.position_avg_price
// Delete existing lines and labels if they exist
deleteOldLinesAndLabels()
// Exit a portion of the position at each take profit level
strategy.exit('TP1', 'Short', limit=takeProfitLevelShort1, qty=strategy.position_size * takeProfitQuantity1)
strategy.exit('TP2', 'Short', limit=takeProfitLevelShort2, qty=strategy.position_size * takeProfitQuantity2)
strategy.exit('Stop Loss', 'Short', stop=stopLossLevelShort)
// Display percentage change from entry price
percentChange = (strategy.position_avg_price - close) / strategy.position_avg_price * 100
percentMultiplied = percentChange * multiplierFactor
percentColor = percentChange >= 0 ? color.green : color.red
// Update label position to follow price line with larger text size
percentLabel := label.new(x=bar_index + percentOffsetBars, y=close, text=str.tostring(percentMultiplied, format.percent) + '%', color=percentColor, textcolor=color.white, size=size.large, style=label.style_label_down)
percentLabel
// Add buy and sell signals with shapes
plotshape(series=longCondition, title='Buy Signal', location=location.belowbar, color=color.new(color.green, 0), style=shape.labelup, text='.')
plotshape(series=shortCondition, title='Sell Signal', location=location.abovebar, color=color.new(color.red, 0), style=shape.labeldown, text='.')
// Remove old labels when they go out of scope
if bar_index % 50 == 0
deleteOldLinesAndLabels()
// Define colors for candles based on background color
candleColorBull = bgColorSwitch // Use background color for bullish candles
candleColorBear = bgColorSwitch // Use background color for bearish candles
borderColorBull = color.black // Border color for bullish candles
borderColorBear = color.black // Border color for bearish candles
// Plot candles with custom colors
plotcandle(open, high, low, close, color=close >= open ? candleColorBull : candleColorBear, bordercolor=close >= open ? borderColorBull : borderColorBear, wickcolor=color.gray)