La stratégie Trend Following Stop Loss est une stratégie de trading de suivi de tendance basée sur l'indicateur TrendAlert. Elle détermine la direction de la tendance à travers l'indicateur TrendAlert pour mettre en œuvre l'entrée de suivi de tendance.
La stratégie se compose principalement des éléments suivants:
L'indicateur TrendAlert juge la direction de la tendance. Lorsque TrendAlert est supérieur à 0, c'est un signal haussier. Lorsque celui-ci est inférieur à 0, c'est un signal baissier.
L'indicateur ATR calcule la fourchette de fluctuation des prix récemment.
Le paramètre de structure contrôle si elle est activée.
Entrez des positions longues ou courtes selon la direction du signal de tendance.
Fermer les positions lorsque le prix déclenche un stop loss ou un profit.
La stratégie filtre les faux signaux par le jugement de tendance, contrôle les risques par le suivi du stop loss, assure la rentabilité par le biais de la prise de profit et améliore la stabilité du système de négociation.
Les principaux avantages de cette stratégie sont les suivants:
La double garantie de filtrage des tendances et de suivi des stop loss évite de courir après le bruit du marché et garantit des risques de négociation contrôlables.
Le réglage d'arrêt de perte adaptatif ATR empêche une optimisation excessive et convient à divers environnements de marché.
Prendre profit assure la rentabilité et empêche de manger les profits.
La logique de la stratégie est claire et concise, facile à comprendre et à modifier, adaptée aux traders quantitatifs
Écrit en langage Pine Script, il peut être utilisé directement sur la plateforme TradingView sans compétences en programmation.
Cette stratégie comporte également certains risques:
Un jugement de tendance incorrect peut entraîner une entrée inutile et déclencher un stop loss.
Lorsque le marché fluctue violemment, l'ATR peut sous-estimer l'amplitude réelle.
L'objectif de prise de profit peut limiter l'espace de profit de la stratégie. Ajustez le paramètre limitMultiplier selon le marché.
La logique de l'existence basée uniquement sur le prix devrait être combinée à la gestion du temps.
La stratégie peut être optimisée dans les aspects suivants:
Optimiser les paramètres ATR longueur atrLength et stop loss multiplier atrStopMultiplier pour ajuster la sensibilité de l'algorithme de stop loss.
Essayez différents indicateurs de tendance pour trouver de meilleures opportunités d'entrée.
Sélectionner ou ajuster le paramètre cible de prise de profit en fonction des caractéristiques des variétés de négociation spécifiques.
Augmenter le mécanisme d'arrêt des pertes pour éviter les risques du jour au lendemain.
Filtrer les fausses ruptures en combinant des indicateurs de volume de négociation pour améliorer la stabilité de la stratégie.
En général, il s'agit d'une stratégie de suivi des tendances très pratique. Elle utilise des indicateurs pour déterminer la direction de la tendance afin d'atteindre le suivi des tendances, tout en définissant des arrêts adaptatifs pour assurer le contrôle des risques. La logique de la stratégie est claire et facile à utiliser, ce qui la rend idéale pour les débutants.
/*backtest start: 2023-01-29 00:00:00 end: 2024-02-04 00:00:00 period: 1d basePeriod: 1h 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/ // © jaque_verdatre //@version=5 strategy("TrendAlert Based", overlay = true) // Get inputs TrendAlert = input.source(close, "TrendAlert") atrLength = input.int(title="ATR Length", defval=15, minval=1) useStructure = input.bool(title="Use Structure?", defval=true) lookback = input.int(title="How Far To Look Back For High/Lows", defval=8, minval=1) atrStopMultiplier = input.float(title="ATR Multiplier", defval=0.2, minval=0.1) LimitMultiplier = input.float(title = "Limit Multiplier", defval = 0.5, minval = 0.1) PineConnectorID = input.int(title = "Pine Connector ID",defval = 0) CurrencyToSend = input.string(title = "personilized currency", defval = "ETHUSD") Risk = input.int(title = "risk in % to send", defval = 10, minval = 1) // Calculate data atr = ta.atr(atrLength) lowestLow = ta.lowest(low, lookback) highestHigh = ta.highest(high, lookback) longStop = (useStructure ? lowestLow : close) - atr * atrStopMultiplier shortStop = (useStructure ? highestHigh : close) + atr * atrStopMultiplier // Draw data to chart plot(atr, color=color.rgb(33, 149, 243), title="ATR", display = display.none) plot(longStop, color=color.green, title="Long Trailing Stop") plot(shortStop, color=color.red, title="Short Trailing Stop") var float LimitL = na var float LimitS = na var float LPosPrice = na var float SPosPrice = na var float LPosLongStop = na var float SPosShortStop = na KnowLimit (PosPrice, PosStop) => (PosPrice-PosStop)*LimitMultiplier+PosPrice NotInTrade = strategy.position_size == 0 InLongTrade = strategy.position_size > 0 InShortTrade = strategy.position_size < 0 longCondition = TrendAlert > 0 and NotInTrade if (longCondition) LPosPrice := close LPosLongStop := longStop LimitL := KnowLimit(LPosPrice, LPosLongStop) strategy.entry("long", strategy.long) LTPPip = LimitL-LPosPrice LSLPip = LPosPrice-longStop alert(str.tostring(PineConnectorID)+',buy,'+str.tostring(CurrencyToSend)+',risk='+str.tostring(Risk)+',sl='+str.tostring(LSLPip)+'tp='+str.tostring(LTPPip), alert.freq_once_per_bar_close) strategy.exit("exit", "long", stop = longStop, limit = LimitL) shortCondition = TrendAlert < 0 and NotInTrade if (shortCondition) SPosPrice := close SPosShortStop := shortStop LimitS := KnowLimit(SPosPrice, SPosShortStop) strategy.entry("short", strategy.short) STPPip = SPosPrice-LimitS SSLPip = shortStop - SPosPrice alert(str.tostring(PineConnectorID)+',sell,ETHUSD,risk=10,sl='+str.tostring(SSLPip)+'tp='+str.tostring(STPPip), alert.freq_once_per_bar_close) strategy.exit("exit", "short", stop = shortStop, limit = LimitS) plotshape(longCondition, color = color.green, style = shape.labelup, location = location.belowbar, size = size.normal, title = "Long Condition") plotshape(shortCondition, color = color.red, style = shape.labeldown, location = location.abovebar, size = size.normal, title = "Short Condition") if (InShortTrade) LimitL := close LPosLongStop := close LPosPrice := close PlotLongTakeProfit = plot(LimitL, color = InLongTrade ? color.rgb(0, 255, 64) : color.rgb(120, 123, 134, 100), title = "Long Take Profit") PlotLongStopLoss = plot(LPosLongStop, color = InLongTrade ? color.rgb(255, 0, 0) : color.rgb(120, 123, 134, 100), title = "Long Stop Loss") PlotLongPosPrice = plot(LPosPrice, color = InLongTrade ? color.gray : color.rgb(120, 123, 134, 100), title = "Long Position Price") if (InLongTrade) LimitS := close SPosShortStop := close SPosPrice := close PlotShortTakeProfit = plot(LimitS, color = InShortTrade ? color.rgb(0, 255, 64) : color.rgb(120, 123, 134, 100), title = "Short Take Profit") PlotShortStopLoss = plot(SPosShortStop, color = InShortTrade ? color.rgb(255, 0, 0) : color.rgb(120, 123, 134, 100), title = "Short Stop Loss") PlotShortPosPrice = plot(SPosPrice, color = InShortTrade ? color.gray : color.rgb(120, 123, 134, 100), title = "Short Position Price") fill(PlotLongPosPrice, PlotLongTakeProfit, color = InLongTrade ? color.rgb(0, 255, 0, 95) : color.rgb(0, 255, 0, 100)) fill(PlotShortPosPrice, PlotShortTakeProfit, color = InShortTrade ? color.rgb(0, 255, 0, 95) : color.rgb(0, 255, 0, 100)) fill(PlotLongPosPrice, PlotLongStopLoss, color = InLongTrade ? color.rgb(255, 0, 0, 95) : color.rgb(255, 0, 0, 100)) fill(PlotShortPosPrice, PlotShortStopLoss, color = InShortTrade ? color.rgb(255, 0, 0, 95) : color.rgb(255, 0, 0, 100))