La stratégie de trading Supertrend est une stratégie de suivi de tendance basée sur la moyenne réelle (ATR) et la moyenne mobile (MA). Elle intègre les avantages du suivi de tendance et du trading de rupture pour identifier la direction de tendance intermédiaire et générer des signaux de trading basés sur les changements de tendance.
L'idée principale derrière cette stratégie est d'aller long ou court lorsque le prix traverse le canal Supertrend, indiquant un renversement de tendance.
Le calcul de la Supertrend comporte plusieurs étapes:
L'avantage de cette stratégie est qu'elle combine à la fois des techniques de suivi de tendance et d'inversion de tendance. Elle identifie la tendance majeure tout en étant également capable de saisir les opportunités d'inversion en temps opportun. En outre, le mécanisme stop loss / take profit aide à contrôler les risques.
La stratégie Supertrend présente les points forts suivants:
1. Suivre la tendance intermédiaire
Le canal Supertrend est calculé sur la base de l'ATR, qui reflète efficacement la fourchette intermédiaire de fluctuation des prix.
2. Capturez les retours en arrière en temps opportun
Les écarts de prix du canal génèrent rapidement des signaux de négociation afin que les principaux retours de tendance puissent être capturés à temps.
3. Faites un stop-loss et profitez
La stratégie fixe des niveaux de stop loss prédéfinis et de profit pour une sortie automatique avec contrôle des risques.
4. Facile à mettre en œuvre
La stratégie utilise principalement des indicateurs de base tels que MA et ATR. Cela le rend assez simple à comprendre et à mettre en œuvre pour le trading en direct.
**5. Efficacité élevée du capital **
En suivant les tendances intermédiaires et en contrôlant les glissements individuels, la stratégie Supertrend offre une efficacité globale élevée du capital.
La stratégie Supertrend présente également des faiblesses potentielles:
1. Des performances inférieures sur le marché de la variation
La stratégie se concentre sur le trading de tendance à moyen et long terme.
2. sensible à l'optimisation des paramètres
Les valeurs choisies pour la période ATR et le multiplicateur ont des incidences relativement importantes sur la performance de la stratégie.
3. Il peut y avoir des problèmes de retard
Il peut y avoir des problèmes de retard avec le calcul du canal Supertrend, provoquant une génération de signal prématurée.
4. Gestion stricte des stops de perte requise
Dans des conditions de marché extrêmes, une allocation de stop loss trop élevée ou une gestion insuffisante des risques pourraient entraîner de lourdes pertes.
Il y a encore une marge d'optimisation de cette stratégie Supertrend:
1. Combiner plusieurs périodes ATR
La combinaison des relevés ATR sur différentes périodes comme les 10 jours et les 20 jours constitue un indicateur composite, ce qui contribue à améliorer la sensibilité et les problèmes de retard.
2. Ajouter des modules de stop loss
L'ajout de mécanismes de stop loss plus sophistiqués tels que le triple stop loss, le stop loss de volatilité et le stop loss séquentiel pourrait renforcer la maîtrise des risques et la réduction des retraits.
Optimisation des paramètres
L'optimisation des valeurs pour la période ATR, le multiplicateur et d'autres entrées par des méthodes quantitatives améliorerait encore les performances de la stratégie.
4. Intégrer des modèles d'apprentissage automatique
Enfin, l'intégration de modèles d'apprentissage automatique peut permettre de réaliser une reconnaissance automatisée des tendances et une génération de signaux, réduisant ainsi la dépendance aux décisions subjectives et améliorant la stabilité du système.
La stratégie de trading Supertrend identifie la direction de la tendance intermédiaire en utilisant les indicateurs MA et ATR, et génère des signaux d'entrée et de sortie des transactions autour des inversions de tendance avec une mise en œuvre automatisée de stop loss/take profit. Tout en respectant les principales tendances, elle capte également certaines opportunités d'inversion.
Cependant, certaines lacunes existent également en ce qui concerne la capture de marché insuffisante et les problèmes de retard. D'autres optimisations peuvent être explorées dans plusieurs dimensions, notamment l'utilisation d'ATR composite, le renforcement des modules de stop loss, les paramètres de réglage et l'intégration de modèles d'apprentissage automatique. Ces améliorations amélioreront probablement la stabilité et l'efficacité de la stratégie Supertrend.
/*backtest start: 2022-11-30 00:00:00 end: 2023-11-30 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 strategy("Supertrend V1.0 - Buy or Sell Signal",overlay=true) Factor=input(3, minval=1,maxval = 100) Pd=input(7, minval=1,maxval = 100) //Calculating ATR atrLength = input(title="ATR Length:", defval=14, minval=1) Stop_Loss_Factor = input(1.5, minval=0,step=0.01) factor_profit = input(1.0, minval=0,step=0.01) // === INPUT BACKTEST RANGE === FromMonth = input(defval = 4, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 10, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2016, title = "From Year", minval = 2009) ToMonth = input(defval = 4, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 10, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 2039, title = "To Year", minval = 2017) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => time >= start and time <= finish ? true : false // create function "within window of time" // Calculate ATR atrValue=atr(atrLength) decimals = abs(log(syminfo.mintick) / log(10)) Atr = atrValue if(decimals == 5) Atr := atrValue * 10000 if(decimals == 4) Atr := atrValue * 1000 if(decimals == 3) Atr := atrValue * 100 if(decimals == 2) Atr := atrValue * 10 //VJ2 Supertrend Up=hl2-(Factor*atr(Pd)) Dn=hl2+(Factor*atr(Pd)) TrendUp = 0.0 TrendUp:=close[1]>TrendUp[1]? max(Up,TrendUp[1]) : Up TrendDown = 0.0 TrendDown:=close[1]<TrendDown[1]? min(Dn,TrendDown[1]) : Dn Trend = 0.0 Trend := close > TrendDown[1] ? 1: close< TrendUp[1]? -1: nz(Trend[1],1) Tsl = 0.0 Tsl := Trend==1? TrendUp: TrendDown linecolor = Trend == 1 ? green : red plot(Tsl, color = linecolor , style = line , linewidth = 2,title = "SuperTrend") plotshape(cross(close,Tsl) and close>Tsl , "Up Arrow", shape.triangleup,location.belowbar,green,0,0) plotshape(cross(Tsl,close) and close<Tsl , "Down Arrow", shape.triangledown , location.abovebar, red,0,0) //plot(Trend==1 and Trend[1]==-1,color = linecolor, style = circles, linewidth = 3,title="Trend") plotarrow(Trend == 1 and Trend[1] == -1 ? Trend : na, title="Up Entry Arrow", colorup=lime, maxheight=60, minheight=50, transp=0) plotarrow(Trend == -1 and Trend[1] == 1 ? Trend : na, title="Down Entry Arrow", colordown=red, maxheight=60, minheight=50, transp=0) //Strategy Trend_buy = Trend == 1 Trend_buy_prev = Trend[1] == -1 algo_buy_pre = Trend_buy and Trend_buy_prev algo_buy = algo_buy_pre == 1 ? 1 : na Trend_sell= Trend == -1 Trend_sell_prev = Trend[1] == 1 algo_sell_pre = Trend_sell and Trend_sell_prev algo_sell = algo_sell_pre == 1 ? 1:na strategy.entry("Long1", strategy.long, when= window() and algo_buy==1) strategy.entry("Short1", strategy.short, when=window() and algo_sell==1) bought = strategy.position_size > strategy.position_size sold = strategy.position_size < strategy.position_size longStop = Stop_Loss_Factor * valuewhen(bought, Atr, 0) shortStop = Stop_Loss_Factor * valuewhen(sold, Atr, 0) longProfit = factor_profit * longStop shortProfit = factor_profit * shortStop if(decimals == 5) longStop := longStop *100000 longProfit := longProfit *100000 if(decimals == 4) longStop := longStop * 10000 longProfit := longProfit * 10000 if(decimals == 3) longStop := longStop * 1000 longProfit := longProfit * 1000 if(decimals == 2) longStop := longStop * 100 longProfit := longProfit *100 if(decimals == 5) shortStop := shortStop * 100000 shortProfit := shortProfit * 100000 if(decimals == 4) shortStop := shortStop * 10000 shortProfit := shortProfit * 10000 if(decimals == 3) shortStop := shortStop * 1000 shortProfit := shortProfit * 1000 if(decimals == 2) shortStop := shortStop * 100 shortProfit := shortProfit * 100 strategy.exit("Exit Long", from_entry = "Long1", loss =longStop, profit = longProfit) strategy.exit("Exit Short", from_entry = "Short1", loss =shortStop, profit = shortProfit)