Stratégie de négociation de supertrend basée sur la combinaison ATR et MA

Auteur:ChaoZhang est là., Date: 12-01-2023 à 16h40
Les étiquettes:

img

Résumé

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.

Comment fonctionne cette stratégie

Le calcul de la Supertrend comporte plusieurs étapes:

  1. Calculer l'ATR. L'ATR reflète la volatilité moyenne sur une période de temps.
  2. Calculer la ligne médiane sur la base du plus haut plus haut et le plus bas plus bas.
  3. Calculer le canal supérieur et inférieur en fonction de l'ATR et du multiplicateur ATR définis par le trader. Le canal supérieur est calculé comme: Midline + (ATR × Multiplier). Le canal inférieur est calculé comme: Midline - (ATR × Multiplier).
  4. Comparez le prix de clôture avec le canal supérieur/inférieur pour déterminer la direction de la tendance. Si la clôture est au-dessus du canal supérieur, la tendance est à la hausse. Si la clôture est au-dessous du canal inférieur, la tendance est à la baisse.
  5. Une rupture au-dessus ou en dessous du canal génère des signaux de trading inversés.

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.

Points forts

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.

Analyse des risques

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.

Les domaines d'amélioration

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.

Conclusion

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) 


Plus de