
La stratégie est un système de trading quantitatif basé sur l’analyse de plusieurs périodes. Elle utilise principalement l’indicateur MACD, l’indicateur RSI, la moyenne VWAP et le filtre ATR pour les fluctuations pour effectuer des transactions sur des périodes de 30 minutes et 1 heure.
Le principe central de la stratégie est de filtrer les signaux de mauvaise qualité par confirmation conditionnelle multiple, et comprend principalement les composants clés suivants:
Signaux croisés MACD à plusieurs périodes:
Le RSI est en train de surbouder et de survendre:
Confirmation de la position du prix VWAP double:
Filtre de fluctuation:
Mécanisme de sortie à plusieurs niveaux:
Grâce à ce filtrage et à cette confirmation de conditions à plusieurs niveaux, la stratégie vise à capturer les fluctuations à court et à moyen terme qui ont une direction claire, tout en filtrant les signaux de mauvaise qualité et en améliorant les taux de réussite et de perte.
Confirmation de plusieurs périodes: En combinant des signaux sur des périodes de 30 minutes et 1 heure, la stratégie permet de mieux identifier les vraies tendances et de réduire l’impact des fausses. En particulier, la fonctionnalité de confirmation de tendance MACD sur 1 heure aide à éviter les transactions contre la grande tendance.
Adaptation à la volatilitéLe filtre ATR sur la volatilité garantit que la stratégie n’entre que lorsque le marché est suffisamment dynamique et évite de négocier dans des zones de faible volatilité, ce qui réduit efficacement le risque de secousses dans les zones mortes.
Un mécanisme de retrait soupleLa stratégie comprend non seulement des stop-loss fixes, mais aussi un mécanisme d’exit dynamique basé sur un renversement de l’indicateur, ce qui permet de se retirer en temps opportun et de protéger les bénéfices lorsque le prix n’a pas atteint le stop-loss mais que le marché a commencé à se retourner.
Confirmation de la double position de prix: demandez que le prix soit simultanément au-dessus de deux périodes de VWAP (de faire plus) ou en dessous (de faire moins), ce qui confirme davantage la dynamique et la direction du prix et réduit les fausses ruptures.
Gestion intégrée des risquesLa stratégie intègre un mécanisme d’arrêt des pertes et une gestion des positions (par défaut, un intérêt de compte de 5% est utilisé pour chaque transaction), ce qui aide à contrôler l’ouverture de risque de chaque transaction et à protéger le capital.
Le défi du faible taux de réussite: Comme indiqué dans les notes du code, la stratégie peut être confrontée à un problème de faible taux de réussite. Cela est dû au fait que le filtrage multiconditionnel, bien qu’il améliore la qualité du signal, réduit considérablement la fréquence des transactions, ce qui entraîne une taille d’échantillon plus petite et une signification statistique limitée.
Paramètre Sensibilité: La stratégie utilise plusieurs paramètres réglables, y compris la longueur du MACD, les seuils RSI, les paramètres du filtre ATR, etc. Des modifications mineures de ces paramètres peuvent avoir un impact significatif sur la performance de la stratégie, avec un risque de sur-optimisation.
Limitation du pourcentage fixe de stop loss: Utiliser le même ratio de stop ((1,5%) et stop ((0,5%) pour tous les environnements de marché, peut ne pas s’adapter à différents environnements de taux de volatilité. Dans les marchés à forte volatilité, le stop peut être trop serré; dans les marchés à faible volatilité, le stop peut être trop long.
Rarité des cadres temporels multiplesLes signaux utilisant des délais plus longs (par exemple 1 heure) comme confirmation peuvent introduire des retards, entraînant des opportunités d’entrée manquées ou des départs retardés.
Manque de capacité d’adaptation aux conditions du marché: la stratégie ne contient pas de mécanisme permettant de distinguer les différents environnements de marché (trends/chocs) et pourrait être moins performante dans certaines conditions de marché.
La solution est simple:
Optimisation des arrêts de perte dynamiques: Modifier le stop loss à un pourcentage fixe en une valeur dynamique basée sur l’ATR, par exemple en utilisant 1,5×ATR comme stop, 3×ATR comme stop. Cela permet à la stratégie de mieux s’adapter aux différents environnements de volatilité du marché, en fournissant un stop loss plus souple pendant les périodes de forte volatilité et en resserrant les objectifs de stop pendant les périodes de faible volatilité.
Catégorisation des environnements de marché: Introduction d’un mécanisme d’identification des environnements de marché, permettant de distinguer les marchés tendance et les marchés oscillants. L’ADX, la bande passante de Brin ou la relation des prix aux moyennes mobiles à long terme peuvent être utilisées pour identifier l’état du marché et ajuster les paramètres de la stratégie en conséquence ou même changer complètement la logique de négociation.
Optimisation du temps d’entréeLa stratégie actuelle: les entrées de ligne K actuelles qui se produisent dans les croisements MACD peuvent faire face à des points de glissement ou à des retards d’exécution. Considérez l’entrée lors de l’ouverture de la ligne K suivante après la confirmation de la croix, ou définissez des entrées de prix limites dans une zone de prix spécifique pour obtenir de meilleurs prix d’exécution.
Filtreur de temps: Ajouter des filtres de temps de transaction pour éviter les périodes de transaction particulièrement inefficaces. Par exemple, il est possible d’éviter de négocier à des périodes où la liquidité peut être faible ou irrégulière, comme à la fin de la période d’horloge asiatique ou à la jonction de l’Europe et des États-Unis.
Les paramètres de l’indicateur s’adaptent: les paramètres du MACD, du RSI et de l’ATR sont conçus pour s’adapter, en fonction de la volatilité récente du marché ou d’un ajustement automatique périodique. Par exemple, des paramètres plus courts du MACD peuvent être utilisés dans les marchés à forte volatilité et des paramètres plus longs dans les marchés à faible volatilité.
Classification de l’intensité du signal: Créer un système de notation de la force pour les signaux entrants, en fonction de plusieurs facteurs (taille de la colonne MACD, déviation du RSI, distance VWAP, etc.) pour marquer les signaux, effectuer des transactions uniquement lorsque la force dépasse un seuil spécifique, ou ajuster la taille de la position en fonction de la dynamique de la force du signal.
Le renforcement de l’apprentissage automatiqueL’introduction de modèles d’apprentissage automatique pour prédire quels signaux sont plus susceptibles de générer des transactions rentables et l’identification des combinaisons de modèles les plus précieuses basées sur des modèles de formation de données historiques. Cela peut améliorer l’adaptabilité et le taux de réussite de la stratégie.
Ces orientations d’optimisation visent à améliorer la robustesse, l’adaptabilité et la performance à long terme de la stratégie, tout en conservant sa logique centrale. Grâce à ces améliorations, la stratégie peut mieux répondre aux changements de différents environnements et conditions du marché.
La stratégie de négociation de surchauffe des taux de fluctuation croisée MACD-RSI est un système de négociation complet conçu pour identifier des opportunités de négociation de haute qualité en combinant plusieurs indicateurs techniques et des signaux sur plusieurs périodes. Le principal avantage de la stratégie réside dans son mécanisme de confirmation de signaux à plusieurs niveaux et ses fonctions de gestion des risques intégrées, qui lui permettent de contrôler les risques tout en capturant les fluctuations des prix.
Malgré les défis liés au faible taux de victoire, la stratégie maintient ses attentes positives en améliorant les rendements des transactions rentables moyennes. Les performances de la stratégie devraient être encore améliorées par la mise en œuvre des mesures d’optimisation recommandées, en particulier le stop loss dynamique, la classification des environnements de marché et la hiérarchisation de l’intensité du signal.
La stratégie convient aux traders à court et moyen terme, en particulier ceux qui recherchent une méthode de négociation systématisée basée sur l’analyse technique et qui accordent de l’importance à la gestion des risques. Le mécanisme de confirmation conditionnelle de la stratégie, bien que réduisant la fréquence des transactions, améliore la qualité de chaque transaction, ce qui est conforme à la philosophie de négociation “moins c’est plus”, mettant l’accent sur la qualité plutôt que sur la quantité.
Dans la pratique, il est recommandé aux traders de tester la stratégie dans un environnement simulé, en particulier l’efficacité des mesures d’optimisation, puis de l’appliquer avec prudence aux transactions sur le marché. En même temps, la surveillance continue des conditions de marché changeantes et l’ajustement des paramètres de la stratégie en temps opportun contribueront à maintenir une performance stable à long terme.
/*backtest
start: 2025-01-01 00:00:00
end: 2025-06-08 00:00:00
period: 1h
basePeriod: 1h
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/
// © GentlemanOfTrading
//@version=6
strategy(title = "ETH Day Trader", overlay = true, margin_long = 100, margin_short = 100, default_qty_type = strategy.percent_of_equity, default_qty_value = 5)
// ==== 1) USER INPUTS ====
// MACD/RSI lengths
fastLen = input.int(12, title="MACD Fast EMA Length", minval=1)
slowLen = input.int(26, title="MACD Slow EMA Length", minval=1)
signalLen = input.int(9, title="MACD Signal EMA Length", minval=1)
rsiLen = input.int(14, title="RSI Length", minval=1)
// RSI thresholds
rsiThreshLong30 = input.int(55, title="RSI30m > (Long)", minval=1, maxval=100)
rsiThreshShort30= input.int(45, title="RSI30m < (Short)", minval=1, maxval=100)
rsiThresh1h = input.int(50, title="RSI1h Threshold", minval=1, maxval=100)
// ATR filter (30m)
atrLen = input.int(14, title="ATR Length (30m)", minval=1)
atrMaLen = input.int(20, title="ATR MA Length (30m)", minval=1)
// Take Profit / Stop Loss (percent)
tpPerc = input.float(1.5, title="Take Profit (%)", minval=0.1) / 100
slPerc = input.float(0.5, title="Stop Loss (%)", minval=0.1) / 100
// Toggle whether to use 1h trend confirmation
use1hTrend = input.bool(true, title="Use 1h MACD Trend Confirmation?")
// ==== 2) FETCH INDICATORS ON 30m ====
// We assume this script is applied on a chart ≤ 30m (e.g. 15m or 5m),
// but if you apply it on a 30m chart it still works: security() with "30" just returns the same bar.
[macd30m, macdSig30m, _] = ta.macd(close, fastLen, slowLen, signalLen)
rsi30m = ta.rsi(close, rsiLen)
atr30m = ta.atr(atrLen)
// ==== 3) FETCH INDICATORS ON 1h & VWAPs via request.security() ====
// --- 1h MACD & RSI ---
[macd1h, macdSig1h, _] = request.security(syminfo.tickerid, "60", ta.macd(close, fastLen, slowLen, signalLen), lookahead=barmerge.lookahead_off)
rsi1h = request.security(syminfo.tickerid, "60", ta.rsi(close, rsiLen), lookahead=barmerge.lookahead_off)
// --- 30m VWAP & 1h VWAP (session VWAP) ---
vwap30m = request.security(syminfo.tickerid, "30", ta.vwap(close), lookahead=barmerge.lookahead_off)
vwap1h = request.security(syminfo.tickerid, "60", ta.vwap(close), lookahead=barmerge.lookahead_off)
// ==== 4) BUILD VOLATILITY FILTER (30m ATR vs ATR MA) ====
atr30m_ma = ta.sma(atr30m, atrMaLen)
volatilityOK = atr30m >= atr30m_ma
// ==== 5) MULTI-TIMEFRAME CROSS CONDITIONS ====
// 30m MACD cross signals
longCross30m = ta.crossover(macd30m, macdSig30m)
shortCross30m = ta.crossunder(macd30m, macdSig30m)
// 1h MACD trend confirmation
macdTrendUp1h = macd1h > macdSig1h
macdTrendDown1h = macd1h < macdSig1h
// ==== 6) ENTRY & EXIT CONDITIONS ====
// LONG ENTRY:
// • 30m MACD crossover
// • 30m RSI > rsiThreshLong30
// • (optionally) 1h MACD line > 1h MACD signal
// • Price > 30m VWAP AND Price > 1h VWAP
// • 30m ATR ≥ 30m ATR MA (volatility filter)
longEntryCond =
longCross30m
and (rsi30m > rsiThreshLong30)
and (close > vwap30m)
and (close > vwap1h)
and volatilityOK
and (use1hTrend ? macdTrendUp1h : true)
// LONG EXIT:
// • fixed TP/SL
// OR • 30m MACD crossunder
// OR • 1h MACD falls below signal (trend flipped)
var float entryPriceLong = na
longExitCond = false
if (strategy.position_size > 0)
// Price-based TP / SL checks
entryPriceLong := nz(entryPriceLong[1], strategy.position_avg_price)
longTPprice = entryPriceLong * (1 + tpPerc)
longSLprice = entryPriceLong * (1 - slPerc)
// check TP/SL first
longExitTP = high >= longTPprice
longExitSL = low <= longSLprice
// fallback: MACD crossunder on 30m OR 1h trend flips
macdTrendFlip1h = macdTrendUp1h and (macd1h < macdSig1h)
macdCross30m = shortCross30m
longExitCond := longExitTP or longExitSL or macdCross30m or macdTrendFlip1h
else
entryPriceLong := na // reset when no position
// SHORT ENTRY:
// • 30m MACD crossunder
// • 30m RSI < rsiThreshShort30
// • (optionally) 1h MACD line < 1h MACD signal
// • Price < 30m VWAP AND Price < 1h VWAP
// • 30m ATR ≥ 30m ATR MA (volatility filter)
shortEntryCond =
shortCross30m
and (rsi30m < rsiThreshShort30)
and (close < vwap30m)
and (close < vwap1h)
and volatilityOK
and (use1hTrend ? macdTrendDown1h : true)
// SHORT EXIT:
// • fixed TP/SL
// OR • 30m MACD crossover
// OR • 1h MACD flips up
var float entryPriceShort = na
shortExitCond = false
if (strategy.position_size < 0)
entryPriceShort := nz(entryPriceShort[1], strategy.position_avg_price)
shortTPprice = entryPriceShort * (1 - tpPerc)
shortSLprice = entryPriceShort * (1 + slPerc)
// check TP/SL first
shortExitTP = low <= shortTPprice
shortExitSL = high >= shortSLprice
macdTrendFlipUp1h = macdTrendDown1h and (macd1h > macdSig1h)
macdCrossUp30m = longCross30m
shortExitCond := shortExitTP or shortExitSL or macdCrossUp30m or macdTrendFlipUp1h
else
entryPriceShort := na // reset when no position
// ==== 7) EXECUTE STRATEGY ORDERS WITH LABELS & ALERTS ====
// — Long Entry —
if (longEntryCond and strategy.position_size == 0)
strategy.entry("Long", strategy.long)
label.new(bar_index, low, text="Buy (LT)", style=label.style_label_up, color=color.new(color.green, 0), textcolor=color.white, yloc=yloc.belowbar)
alert("Buy (LT)", alert.freq_once_per_bar_close)
// — Long Exit —
if (strategy.position_size > 0 and longExitCond)
strategy.close("Long")
label.new(bar_index, high, text="Sell (LT)", style=label.style_label_down, color=color.new(color.red, 0), textcolor=color.white, yloc=yloc.abovebar)
alert("Sell (LT)", alert.freq_once_per_bar_close)
// — Short Entry —
if (shortEntryCond and strategy.position_size == 0)
strategy.entry("Short", strategy.short)
label.new(bar_index, high, text="Sell (ST)", style=label.style_label_down, color=color.new(color.red, 0), textcolor=color.white, yloc=yloc.abovebar)
alert("Sell (ST)", alert.freq_once_per_bar_close)
// — Short Exit —
if (strategy.position_size < 0 and shortExitCond)
strategy.close("Short")
label.new(bar_index, low, text="Buy (ST)", style=label.style_label_up, color=color.new(color.green, 0), textcolor=color.white, yloc=yloc.belowbar)
alert("Buy (ST)", alert.freq_once_per_bar_close)
// ==== 8) OPTIONAL PLOTTING (for debugging) ====
// We’ve removed any `transp`/`opacity` arguments. Instead, we use `color.new(baseColor, α)`
// for transparency, where α = 0 is fully opaque and α = 255 is fully transparent.
// 30m VWAP
plot(vwap30m, title = "VWAP 30m", color = color.new(color.teal, 80)) // ~31% transparentlinewidth= 1
// 1h VWAP
plot(vwap1h, title = "VWAP 1h", color = color.new(color.fuchsia, 80), linewidth= 1) // ~31% transparent
// 30m ATR vs ATR_MA
plot(atr30m, title = "ATR 30m", color = color.new(color.orange, 80))
plot(atr30m_ma, title = "ATR30m MA", color = color.new(color.yellow, 80))
// 30m MACD Histogram (bars)
plot(macd30m - macdSig30m, title = "MACD Histogram (30m)", style = plot.style_columns, color = (macd30m - macdSig30m >= 0 ? color.new(color.green, 80) : color.new(color.red, 80)))
// 1h MACD Histogram (area)
h1 = request.security(syminfo.tickerid, "60", macd1h - macdSig1h, lookahead=barmerge.lookahead_off)
plot(1, title = "MACD Hist (1h)", style = plot.style_area, color = (h1 >= 0 ? color.new(color.green, 80) : color.new(color.red, 80)))