
La stratégie d’entrée dynamique de risque de reprise de tendance est conçue pour les traders qui souhaitent établir des positions multiples dans le revirement après un changement de tendance à court terme, tout en entrant immédiatement en position haussière lorsque les conditions du marché sont favorables à la baisse. La stratégie combine une confirmation de tendance croisée SMA, un pourcentage fixe de reprise d’entrée et des paramètres de gestion du risque ajustables pour une exécution optimale des transactions.
Le cœur de la stratégie est d’utiliser une simple moyenne mobile (SMA) croisée de 10 cycles et 25 cycles pour confirmer la direction de la tendance, et combinée à une moyenne mobile de l’indice de 150 cycles (EMA) comme condition de filtrage supplémentaire pour les transactions à vide. Les transactions à plusieurs niveaux n’entrent pas immédiatement après la croisée de la SMA, mais attendent que le prix revienne à un pourcentage spécifié pour entrer, ce qui optimise le prix d’entrée et augmente le ratio de risque-rendement.
Le principe de fonctionnement de cette stratégie peut être divisé en plusieurs parties clés:
Mécanisme de reconnaissance des tendances:
Mécanisme de retour à la compétition:
Règles d’entrée à vide:
Stratégies de gestion des risques et de sortie:
La stratégie utilise des variables persistantes pour suivre les signaux de reprise et s’assurer qu’ils entrent au bon moment. Lorsque la position est vide, le système réinitialise tous les signaux et les niveaux pour préparer le prochain signal de négociation.
Après une analyse approfondie du code, la stratégie présente les avantages suivants:
Temps d’entrée optimisé:
Une gestion complète des risques:
Filtre d’alignement des tendances:
Commentaires visuels:
Très adaptable:
Bien que cette stratégie présente de nombreux avantages, les risques suivants doivent être pris en compte:
Les risques du marché rapide:
La réaction de la bourse:
Les limites de la gestion des risques de points fixes:
Une dépendance excessive à l’égard des indicateurs techniques:
Risques liés à l’optimisation des paramètres:
Sur la base de l’analyse du code, voici les principales directions dans lesquelles cette stratégie peut être optimisée:
Gestion dynamique des risques:
stopDistance = input.float(2.0) * ta.atr(14)Le calcul deFiltrage de la force de la tendance:
Analyse de plusieurs périodes:
Reconnaissance de rétroéclairage intelligente:
Confirmation de la transaction:
Paramètres d’adaptation:
Une stratégie d’entrée dynamique est un système de négociation bien conçu qui combine la reconnaissance des tendances, l’optimisation de l’entrée et la gestion complète des risques. En attendant une reprise des prix, la stratégie obtient un meilleur rapport entre le prix d’entrée et le rendement du risque que le simple système de croisement SMA.
Le principal avantage de cette stratégie réside dans sa flexibilité et son ajustabilité, permettant aux traders d’ajuster les paramètres en fonction de leurs préférences personnelles en matière de risque et des conditions du marché. Parallèlement, la fonctionnalité intégrée de gestion des risques (incluant les points d’arrêt, d’arrêt et de couverture) offre une protection complète des fonds.
Cependant, la stratégie présente également des limites, notamment en ce qui concerne la performance sur des marchés en crise et la gestion des risques de points fixes. L’application d’optimisations recommandées, telles que la gestion des risques dynamiques, le filtrage de l’intensité de la tendance et la confirmation du volume des transactions, peut considérablement améliorer la solidité et la performance globale de la stratégie.
C’est une stratégie de base idéale pour les traders de swing, qui peut être personnalisée davantage en fonction de leur style de trading et de leurs objectifs. Avec des paramètres raisonnables et des ajustements de surveillance constants, cette stratégie a le potentiel de fournir des résultats de trading stables dans une variété d’environnements de marché.
/*backtest
start: 2024-08-01 00:00:00
end: 2025-03-25 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy("BTCUSD with adjustable sl,tp",
overlay=true,
initial_capital=10000,
default_qty_type=strategy.percent_of_equity,
default_qty_value=10,
calc_on_every_tick=true)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ USER INPUTS
// ─────────────────────────────────────────────────────────────────────────────
longSignalStyle = input.string("Label Up", title="Long Signal Style", options=["Label Up", "Arrow Up", "Cross"])
shortSignalStyle = input.string("Label Down", title="Short Signal Style", options=["Label Down", "Arrow Down", "Cross"])
// Adjustable exit parameters (in points)
tpDistance = input.int(1000, "Take Profit Distance (points)", minval=1)
slDistance = input.int(250, "Stop Loss Distance (points)", minval=1)
beTrigger = input.int(500, "Break-Even Trigger Distance (points)", minval=1)
// Adjustable retracement percentage for long pullback entry (e.g. 0.01 = 1%)
retracementPct = input.float(0.01, "Retracement Percentage (e.g. 0.01 for 1%)", step=0.001)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ INDICATORS: SMA & EMA
// ─────────────────────────────────────────────────────────────────────────────
sma10 = ta.sma(close, 10)
sma25 = ta.sma(close, 25)
ema150 = ta.ema(close, 150)
plot(sma10, color=color.blue, title="SMA 10")
plot(sma25, color=color.red, title="SMA 25")
plot(ema150, color=color.orange, title="EMA 150")
// ─────────────────────────────────────────────────────────────────────────────
// ▌ ENTRY CONDITIONS
// ─────────────────────────────────────────────────────────────────────────────
longCondition = ta.crossover(sma10, sma25)
shortCondition = ta.crossunder(sma10, sma25)
shortValid = close < ema150 // Only take shorts if price is below EMA150
// Plot immediate entry signals (for visual reference)
plotshape(longCondition and (strategy.position_size == 0), title="Long Signal",
style=(longSignalStyle == "Label Up" ? shape.labelup : (longSignalStyle == "Arrow Up" ? shape.triangleup : shape.cross)),
location=location.belowbar, color=color.green, text="Long", size=size.small)
plotshape(shortCondition and shortValid and (strategy.position_size == 0), title="Short Signal",
style=(shortSignalStyle == "Label Down" ? shape.labeldown : (shortSignalStyle == "Arrow Down" ? shape.triangledown : shape.cross)),
location=location.abovebar, color=color.red, text="Short", size=size.small)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ LONG PULLBACK ENTRY USING FIXED PERCENTAGE RETRACEMENT
// ─────────────────────────────────────────────────────────────────────────────
// We use persistent variables to track the pullback signal.
var bool longSignalActive = false
var float pullHigh = na // highest high since long signal activation
var float retraceLevel = na // level = pullHigh * (1 - retracementPct)
// Only consider new entries when no position is open.
if strategy.position_size == 0
// When a long crossover occurs, activate the signal and initialize pullHigh.
if longCondition
longSignalActive := true
pullHigh := high
// If signal active, update pullHigh and compute retracement level.
if longSignalActive
pullHigh := math.max(pullHigh, high)
retraceLevel := pullHigh * (1 - retracementPct)
// When price bounces upward and crosses above the retracement level, enter long
if ta.crossover(close, retraceLevel)
strategy.entry("Long", strategy.long)
longSignalActive := false
// Short entries: enter immediately if conditions are met
if shortCondition and shortValid
strategy.entry("Short", strategy.short)
// ─────────────────────────────────────────────────────────────────────────────
// ▌ EXIT CONDITIONS WITH ADJUSTABLE TP, SL & BE
// ─────────────────────────────────────────────────────────────────────────────
var bool beLong = false
var bool beShort = false
// LONG EXIT LOGIC
if strategy.position_size > 0 and strategy.position_avg_price > 0
longEntry = strategy.position_avg_price
// Additional exit: if SMA(10) crosses below SMA(25) while price < EMA150, exit long
if ta.crossunder(sma10, sma25) and close < ema150
label.new(bar_index, low, "SMA Exit", style=label.style_label_down, color=color.red, textcolor=color.white)
strategy.close("Long", comment="SMA Cross Exit")
// Break-even trigger if price moves in favor by beTrigger points
if close >= longEntry + beTrigger
beLong := true
effectiveLongStop = beLong ? longEntry : (longEntry - slDistance)
if close <= effectiveLongStop
label.new(bar_index, low, (beLong ? "BE Hit" : "SL Hit"), style=label.style_label_down, color=color.red, textcolor=color.white)
strategy.close("Long", comment=(beLong ? "BE Hit" : "SL Hit"))
if close >= longEntry + tpDistance
label.new(bar_index, high, "TP Hit", style=label.style_label_up, color=color.green, textcolor=color.white)
strategy.close("Long", comment="TP Hit")
// SHORT EXIT LOGIC
if strategy.position_size < 0 and strategy.position_avg_price > 0
shortEntry = strategy.position_avg_price
// Basic stop logic
if close >= shortEntry + slDistance
label.new(bar_index, high, (beShort ? "BE Hit" : "SL Hit"), style=label.style_label_up, color=color.red, textcolor=color.white)
strategy.close("Short", comment=(beShort ? "BE Hit" : "SL Hit"))
// Take profit logic
if close <= shortEntry - tpDistance
label.new(bar_index, low, "TP Hit", style=label.style_label_down, color=color.green, textcolor=color.white)
strategy.close("Short", comment="TP Hit")
// Break-even trigger
if close <= shortEntry - beTrigger
beShort := true
effectiveShortStop = beShort ? shortEntry : (shortEntry + slDistance)
if close >= effectiveShortStop
label.new(bar_index, high, (beShort ? "BE Hit" : "SL Hit"), style=label.style_label_up, color=color.red, textcolor=color.white)
strategy.close("Short", comment=(beShort ? "BE Hit" : "SL Hit"))
// Reset BE flags when no position is open
if strategy.position_size == 0
beLong := false
beShort := false
// Reset the pullback signal
if not longSignalActive
pullHigh := na
retraceLevel := na