
La stratégie de trading quantifiée par le renversement de la dynamique transversale est un système de suivi de la tendance basé sur des règles dont la logique centrale s’articule autour d’une moyenne mobile à 21 cycles ((21 EMA)). La stratégie surveille la relation entre les prix et les 21 EMA, en faisant des gains lorsque les prix se croisent au-dessus de l’équilibre, des pertes lorsque les prix se croisent au-dessous de l’équilibre, et des positions de plafonnement et d’ouverture inversées lorsque les prix se croisent à nouveau. La stratégie comprend également des mécanismes de contrôle des risques tels que des paramètres personnalisés pour le passage des périodes de négociation, des arrêts et des arrêts de perte, des limites de nombre maximal de transactions par jour et le verrouillage automatique des transactions après le premier profit, dans le but de fournir un système de trading discipliné et logiquement clair.
Le principe central de cette stratégie est de capturer la dynamique des prix autour de la 21 EMA, pour réaliser le suivi de tendance et le trading inverse.
La stratégie intègre également le prix moyen pondéré du volume de transactions (VWAP) comme indicateur de référence auxiliaire, fournissant des informations supplémentaires sur le contexte du marché.
Ces orientations d’optimisation visent à améliorer la robustesse et l’adaptabilité des stratégies, à réduire les faux signaux et à améliorer la rentabilité.
La stratégie de négociation quantifiée de renversement de la dynamique de la courbe de croisement est un système de suivi de la tendance basé sur la courbe de 21 EMA, caractérisé par une logique claire et des règles strictes. En surveillant la relation entre les prix et la courbe de la courbe, combinée à un mécanisme rigoureux de gestion des risques, la stratégie permet de capturer efficacement les points de tournage de la tendance du marché tout en contrôlant les risques.
Le principal avantage de la stratégie réside dans sa logique de négociation simple et intuitive et son mécanisme d’exécution discipliné, en particulier la conception de la transaction de verrouillage après la première prise de bénéfices, qui empêche efficacement les transactions excessives et le retournement des bénéfices. Cependant, la stratégie présente également des risques potentiels tels que le retard linéaire et l’excès de dépendance à un seul indicateur.
Les orientations d’optimisation futures devraient être axées sur la dynamique des paramètres, la confirmation de signaux multifonctionnels, l’amélioration de la gestion des risques et la classification des états du marché, afin d’améliorer la capacité d’adaptation de la stratégie dans différents environnements de marché. Grâce à ces optimisations, la stratégie est susceptible de devenir un système de trading quantitatif plus robuste et plus fiable.
Dans le cadre de la méthode DSPLN, cette stratégie incarne la philosophie de trading “Do So Patiently Listening Now”, mettant l’accent sur la discipline et la systématisation, offrant aux traders un cadre de trading qui surmonte les perturbations émotionnelles et se concentre sur l’application des règles.
/*backtest
start: 2025-06-15 00:00:00
end: 2025-06-21 08:00:00
period: 3m
basePeriod: 3m
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/
// © EnvisionTrades
//@version=5
strategy("DSPLN EMA Flip Strategy v6", overlay=true)
// 🔹 Inputs
startHour = input.int(8, "Start Hour")
startMinute = input.int(30, "Start Minute")
endHour = input.int(10, "End Hour")
endMinute = input.int(30, "End Minute")
useTPSL = input.bool(true, "Use TP/SL?")
tpPoints = input.int(40, "Take Profit (points)")
slPoints = input.int(20, "Stop Loss (points)")
// 🔹 Time Filter
isWithinTradingHours = (hour > startHour or (hour == startHour and minute >= startMinute)) and
(hour < endHour or (hour == endHour and minute < endMinute))
// 🔹 Indicators
ema21 = ta.ema(close, 21)
vwap = ta.vwap
plot(ema21, title="21 EMA", color=color.orange)
plot(vwap, title="VWAP", color=color.blue)
// 🔹 State Variables
var int tradesToday = 0
var bool lastTradeWon = false
var float entryPrice = na
var label winLabel = na
var int prevTradeCount = 0
// 🔹 Entry Conditions
longEntry = isWithinTradingHours and close > ema21 and close[1] <= ema21[1]
shortEntry = isWithinTradingHours and close < ema21 and close[1] >= ema21[1]
// 🔹 Exit Conditions
longExit = strategy.position_size > 0 and close < ema21
shortExit = strategy.position_size < 0 and close > ema21
// 🔹 Trade Control
canTrade = tradesToday < 5 and not lastTradeWon
// 🔹 Entry Logic
if canTrade and strategy.position_size == 0 and longEntry
strategy.entry("Long", strategy.long)
entryPrice := close
if useTPSL
strategy.exit("TP Long", from_entry="Long", stop=close - slPoints * syminfo.mintick, limit=close + tpPoints * syminfo.mintick)
if canTrade and strategy.position_size == 0 and shortEntry
strategy.entry("Short", strategy.short)
entryPrice := close
if useTPSL
strategy.exit("TP Short", from_entry="Short", stop=close + slPoints * syminfo.mintick, limit=close - tpPoints * syminfo.mintick)
// 🔹 EMA Manual Exit Logic
if longExit
strategy.close("Long")
tradesToday += 1
lastTradeWon := close > entryPrice
if lastTradeWon
winLabel := label.new(bar_index, high, "✅ WIN - No More Trades", style=label.style_label_down, color=color.green)
if shortExit
strategy.close("Short")
tradesToday += 1
lastTradeWon := close < entryPrice
if lastTradeWon
winLabel := label.new(bar_index, low, "✅ WIN - No More Trades", style=label.style_label_up, color=color.green)
// 🔹 Detect Closed Trades (TP/SL exits)
tradeCount = strategy.closedtrades
if tradeCount > prevTradeCount
closedProfit = strategy.netprofit - strategy.netprofit[1]
tradesToday += 1
lastTradeWon := closedProfit > 0
if lastTradeWon
winLabel := label.new(bar_index, high, "✅ TP WIN - No More Trades", style=label.style_label_down, color=color.green)
prevTradeCount := tradeCount
// 🔹 Reset Daily
if (hour == endHour and minute == endMinute)
tradesToday := 0
lastTradeWon := false
entryPrice := na
prevTradeCount := 0
if not na(winLabel)
label.delete(winLabel)